back to top

Arduino Dersleri #10: Arduino ile Ultrasonik Sensör (HC-SR04) Kullanımı – Park Sensörü Yapımı

Herkese merhabalar ! Arduino Dersleri serimizin bu yazısında sizlere ultrasonik sensörün çalışma prensibinden bahsedeceğiz. Sonrasında birlikte ultrasonik mesafe sensörü devreleri kurup, uygulamalarımızı yapacağız.

Bir önceki yazımızda NTC Sensörü kullanımından bahsetmiştik >>> Arduino ve NTC Sensörü ile Sıcaklık Ölçümü

HC-SR04 Ultrasonik Mesafe Sensörü Nedir?

Arduino gibi geliştirme kartlarında kullanılmak üzere tasarlanmış olan bu sensör, gerek ucuz olması, gerek kullanım kolaylığından dolayı çoğu robotik projelerinde yer alan bir mesafe ölçüm sensörüdür.   

Üretici firmanın mermiş oldupu bilgiye göre bu sensör 2 cm- 400 cm arasında %1 hata payıyla ölçüm yapabilmektedir.  Ama kullanıcı deneyimlerine bakarak konuşursak, en verimli ölçüm yaptığı mesafe 2 – 200 cm arasındadır.

HC-SR04 Ultrasonik Mesafe Sensörü Özellikleri Ve Pin Çıkışları

Teknik Özellikleri

Çalışma GerilimiDC 5V
Çalışma Akımı15mA
Çalışma Frekansı40KHz
Maksimum Ölçüm4m
Minimum Ölçüm2cm
Ölçüm Aralığı3mm
Ölçüm Açısı15 derece
Tetikleyici Giriş Sinyali10µS TTL
Boyut45 x 20 x 15 mm

HC-SR04 Ultrasonik Sensör Pinout

HC-SR04 Pinout
HC-SR04 Pinout

VCC Arduino’ya 5V pin bağladığımız HC-SR04 Ultrasonik mesafe sensörü için güç kaynağıdır.

Trig (Trigger) pini, ultrasonik ses sinyallerini tetiklemek için kullanılır.

Echo pini, yansıtılan sinyal alındığında bir BPM üretir. Pulse uzunluğu, iletilen sinyalin algılanması için geçen süre ile orantılıdır.

GND Arduino topraklarına bağlanmalıdır.

Mesafe Sensörünün Çalışma Prensibi

HC-SR04 sensörünün çalışma prensibi şu şekildedir ;

Sensörün Trig pininden uygulanan sinyal 40 kHz frekansında ultrasonik bir ses yayılmasını sağlar. Bu ses dalgası herhangi bir cisme çarpıp sensöre geri döndüğünde, Echo pini aktif hale gelir. Biz ise bu iki sinyal arasındaki süreyi ölçerek yani sesin yankısını algılayarak cismin sensörden uzaklığını tespit edebiliriz.

Arduino İle HC-SR04 Ultrasonik Mesafe Sensörü Kullanımı

Ultrasonik mesafe sensörünün çalışma prensibini anladığımıza göre Arduino ile örnek bir proje yapabiliriz.

HC-SR04’ü Arduino’ya bağlamak oldukça kolaydır. Sensörü breadboard’unuza yerleştirmenizi öneririm. Çünkü ufak bir temassızlık durumunda sensörünüz doğru veri sağlamayacaktır.

Gerekli Malzemeler;

Park Sensörü Devre Şeması

Arduino HC - SR04 bağlantı şeması
Arduino HC – SR04 bağlantı şeması

Yukarıdaki devre şemasında göründüğü gibi VCC pinini Arduino’daki 5V pinine, GND pinini Arduino’daki Toprak pinine bağlayın.

Trig pinini Arduino’nun 9. dijital pine, echo pinini ise arduinonun 10. dijital pine bağlayınız.

Devre bağlantısını yaptıktan sonra, gerekli kütüphaneleri kurma kısmına geçebiliriz.

HC-SR04 Ultrasonik Mesafe Sensörü Kütüphanesini Ekleme

Ultrasonik sensörü tetiklemek ve alınan sinyal darbe genişliğini manuel olarak ölçmek için bir kütüphane kullanacağız. Birden fazla kütüphane mevcut ancak en popüler ve kullanışlı olanı newping kütüphanesini ekleyeceğiz.

İndirdiğiniz kütüphaneyi Arduino ide’ye eklemek için “Taslak > Library ekle > Zip Kitaplığı Ekle…“ sekmelerini takip ederek kütüphane yöneticisini açalım ;

Arduino Ide Taslak Menüsü
Arduino Ide Taslak Menüsü

Açılan pencerede indirdiğiniz zip dosyasını bulup seçin. Zip dosyasını seçmeniz yeterli olacaktır, otomatik olarak kütüphane Arduino ide’ye eklenecektir.

Arduino Ide Kütüphane Çağırma Sayfası
Arduino Ide Kütüphane Çağırma Sayfası

Kütüphane dosyanız bu şekilde yüklendiği zaman sol alt köşede “yüklendi” yazısı çıkması gerekir.

Arduino Ide Arayüzü
Arduino Ide Arayüzü

Kütüphanenin yüklendiğinden emin olmak için manuel kontrol yapabilirsiniz.

Manüel kontrol nasıl yapılır bilmiyorsanız, Arduino ide’ye nasıl kütüphane yüklenir konulu blog yazımızı buradan okumanızı tavsiye ederim.

Kütüphane ekleme işlemi bittikten sonra alt tarafta verdiğim kodları Arduino’nuza yükleyebilirsiniz.

// This uses Serial Monitor to display Range Finder distance readings
// Include NewPing Library
#include "NewPing.h"
// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10
// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400  
// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float duration, distance;
void setup() 
{
  Serial.begin(9600);
}
void loop() 
{
  // Send ping, get distance in cm
  distance = sonar.ping_cm();
  
  // Send results to Serial Monitor
  Serial.print("Mesafe = ");
  
  if (distance >= 400 || distance <= 2) 
  {
    Serial.println("Out of range");
  }
  else 
  {
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}

Kodu yükledikten sonra, bir hata olmaz ise serial monitörde bu görüntüyü almanız lazım.

Arduino serial monitör
Arduino serial monitör

HC-SR04 Ultrasonik Mesafe Sensörü ile Örnek Projeler

Arduino ile Basit Park Sensörü Yapımı

Gerekli malzemeler: ( Not: Arduino Basit Park Sensörü Yapımı ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette! >)

Buzzer dediğimiz devre elemanını ufak bir hoparlör olarak düşünebiliriz. Hoparlörler kadar yüksek ve detaylı ses üretemeseler de, “bip” leme seslerini çıkartmada oldukça başarılıdırlar.

HC-SR04, robotik projelerde Arduino ile kullanılan en popüler sensörlerden birisidir. Kullanımı oldukça kolaydır ve program kısmı düzgün olduğu sürece 2cm – 400cm arası uzaklıkları düzgün bir şekilde ölçebilmektedir.

Çalışma prensibi ise şu şekildedir: Sensörün Trig pininden uygulanan sinyal 40 kHz frekansında ultrasonik bir ses yayılmasını sağlar. Bu ses dalgası herhangi bir cisme çarpıp sensöre geri döndüğünde, Echo pini aktif hale gelir. Biz ise bu iki sinyal arasındaki süreyi ölçerek -yani sesin yankısını algılayarak- cismin sensörden uzaklığını tespit edebiliriz.

Mesafe sensörünün Arduino ile kullanımını anlattığımız yazımıza da göz atabilirsin:

Arduino Park Sensörü Yapımı

Ultrasonik Sensör ile Nesne Algısı

Bu videomuzda HC-SR04 ultrasonik sensörünü kullanarak cisimlerin yakınlığına göre ses uyarısı vermesini öğreneceğiz. Projeye videosuna gitmek için aşağıya tıklamanız yeterlidir.

Ultrasonik Sensörü ve Aktif Buzzer

Diğer bütün sensörler hakkında bilgi almak için yazımızı inceleyin >>> Sensör Nedir? Sensör Çeşitleri Nelerdir?

Son Çıkan Yazılar

94 YORUMLAR

  1. Aurdino ile ultrasonik mesafa algilayici kullanarak engellerden kacan bi robot yapmayı dusunuyorum. Baglantilarini yapabilirim ama kod yazamam. Kod icin bana yardım edebilir misiniz? Teşekkür ederim

    • Malesef bu tipteki sensörler ile 2km gibi mesafeleri ölçmek pek mümkün olmuyor. Yüksek mesafe ölçümleri için LIDAR sensörlerini inceleyebilirsiniz.

  2. Merhaba;
    Elimde HC-SR04 Ultrasonik Mesafe Sensörü ve Hc-05 Bluetooth modül var bunların ikisini birleştirmek ve arabaya montalamak istiyorum hem bluetooth modul ile telefondan yönetilecek hem de mesafe ve engel algılayacak mümkünmüdür yardımcı olurmusunuz ?

  3. merhaba ben daha yeni başladım 59 liralık r3 klonlu set aldım ve bu proje dikkatimi çekti kodlarını yazdım compile ederken “trigPin was not declared in this scope” diyor. nasıl düzeltebilirim bilen varsa cevaplayabilir mi ? teşekkürler.

  4. 59 tl olan arduino uno r3 clon başlangıç setini aldım bu programı yazarken ‘mesafe’ was not declared in this scope hatası alıyorum ne yapmam gerekiyor kodları aynen gönderiyorum
    #include

    #define echoPin 6
    #define trigPin 7
    #define buzzerPin 8

    int maximumRange=50;
    int minimumRange=0;
    int mesafe;
    void setup() {
    // put your setup code here, to run once:
    pinMode(trigPin,OUTPUT);
    pinMode(buzzerPin, OUTPUT);
    pinMode(echoPin, INPUT);

    }

    void loop() {
    // put your main code here, to run repeatedly:
    int olcum = mesafe(maximumRange,minimumRange);
    melodi(olcum*10);
    }
    {
    int mesafe(int maxrange, int minrage);
    long duration, distance;
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin,HIGH);
    delayMicroseconds(10);
    digiralWrite(trigPin, LOW);
    duration=pulsln (echoPin,HIGH);
    distance)duration/58.2;
    delay(50);
    if(distance>=maxrange||distance <=minrange)
    return 0;
    return distance;
    }

    int melodi(int dly)
    {tone(buzzerPin, 440);
    delay(dly);
    noTone(buzzerPin);
    delay(dly);
    }

  5. Merhabalar, ben ölçtüğüm mesafe ile motorun hızını değiştirmek istiyorum. Acaba bu birimleri nasıl çeviricem ? Yardımcı olursanız sevinirim.

  6. Merhaba.
    ben bi indicatordeki verileri arduino ile seri port bağlantısından okumak istiyorum ama nasl yapacagım bulamadım
    indicatordiye gecer
    tartim göstergesi derler turkiyede
    2 3 5 pinlerini kullanir
    rx
    tx
    gnd
    ama sadece rx gnd de calisir.

    indicator deki seri port bağlantısını aruinoya bağlayıp wlan üzerindne arduinodaki verileri okumak istiyorum yardımlarınızı bekliyorum.
    Teşekkrüler

  7. eren in de söylediği gibi bu kitapçıktaki kod da hata var gidermemizde yardımcı olabilir misiniz. hata yı söylediniz fakat nasıl düzelteceğiz bunu.

  8. anladığım kadarıyla “mesafe” yi tanımlamadığımızı söylüyo hata da ancak tanımlıyorum yine veriyor alt satırdaki değişkeni değiştirdim üst satırda yine hata veriyor.

  9. Bu sistemi araca monte ettigimizde sensoru yağmurdan tozdan vs. nasıl koruycaz. Cam gibi vb malzemeden hc sr04 e koruyucu yapsam sensörün çalışmasını engeller mi?

    Saygilar..

    • Tabi ki mümkündür. Örneğin mobil robot projesinde sensörün gördüğü mesafe belirlediğiniz bir değerin altına düştüğünde motorların durmasını sağlayabilirsiniz.

  10. İyi çalışmalar. Elimde bir adet orjinal uno ve klon uno mevcut. Arduino Proje setinizdeki videolardaki uygulamayı ve anlattığınız uygulamayı yaptım. Fakat ikisinde de hcsr04 çalışmadı. Porgramı yukledikten sonra ekrana gelen mesafelerin aktığı pencere çıkmıyor. Engelden kaçan robot projesini yapmaya çalıştık orada da çalıştıramadık. Siteden başka sensörler sipariş verdik onlarda da projelerimiz çalışmadı. Gözümüzden kaçan HCSRO4 ün aktif olabilmesi için bir detay mı vardır? Yardımlarınız için teşekkürler. 1 Tane orjinal iki tane klon arduino ile denememe rağmen olmadı.

  11. Merhaba ultrasonik sensörü hareket eden bir mekanizmaya sabitleyip mesafe ölçümü yapmak istiyorum. Lineer cetvel yerine kullanacağım. Fakat sensör ile engel arasında 700mm mesafe var. Ben bu mesafeyi referans noktası (sıfır noktası) olarak alıp engele yaklaştıkça kat edilen mesafeyi lcd’ye aktarmak istiyorum. Bu konuda yardımcı olur musunuz? Kodu nasıl yazmalıyım?

  12. merhabalar ben sensöre motor bağlantısı yaptım ama sensöre elimi yaklaştırdığımda her seferinde algılamıyor bazen kendi kendine motoru hareket ettiriyor bunun sebebi ne olabilir.

  13. sürekli 0 cm gösteriyor atıyorum 5 defa 20cm gösteriyor peşine 5 tane 0cm gösteriyor önünde hiç bir şey de yok.
    if (sonar.ping_cm() !=0){
    Serial.print(sonar.ping_cm());
    Serial.println(” cm”);
    }

    şeklinde 0 cm atmasın diye kodu değiştim yine arada bir 0 cm atıyor 🙂 sensörde mi sıkıntı var çalışması böyle mi? HC-SR04 sensör

  14. pulseln was not declared diye hata veriyor
    #define echoPin 6
    #define trigPin 7
    #define buzzerPin 8

    int maximumRange=50;
    int minimumRange=0;

    void setup()
    {
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(buzzerPin,OUTPUT);
    }

    void loop() {
    int olcum = mesafe(maximumRange,minimumRange);
    melodi(olcum*10);
    }

    int mesafe(int maxrange, int minrange)
    {
    long duration,distance;
    digitalWrite(trigPin,LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin,HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin,LOW);
    duration =pulseln(echoPin,HIGH);
    distance = duration / 58.2;
    delay(50);
    if(distance >=maxrange|| distance<= minrange)
    return 0;
    return distance;
    }

    int melodi(int dly)
    {tone(buzzerPin,440);
    delay(dly);
    noTone(buzzerPin);
    delay(dly);
    }

  15. devreyi kurduğum zaman arduino nun ışıkları sönüyo ve başka devrelerde olmuyo bide sensörü çıkartdığım zaman arduino nun ışıkları geri geliyo

  16. C:\Users\Eren\Desktop\sketch_apr01b\NewPingExample.pde:5:21: fatal error: NewPing.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    Neden böyle bir hata alıyorum anlamadım da.

  17. Kerem bey iyi çalışmalar.
    Arduino derslerinizi merakla okuyorum sipariş ettiğim kartık henüz gelmedi ama IDE sini indirdim ve kartımın gelmesini heycanla bekliyorum. Çok sağolun dersleriniz çok güzel ve faydalı bir çalışma epey emek harcamışsınız.
    Bir sorum olacak ben daha önce visual basic bir miktar kullandım ve orada kodu daha yazarken tahminde bulunup öneriler veriyordu veya ufak tefek yazım hatalarını kendisi düzeltiyor uygun formata getiriyordu Visual Studio. Arduinonun idesinde dgitalwrite yazınca bunu kabul etmiyor illa digitalWrite yazmak gerekiyor veya HIGH küçük harf yazınca algılamıyor bunları otomatik tahmin edip düzeltme özelliği yokmu veya ben mi bulamadım. Eğer arduino nun orjinal İDE sinde yoksa kullanmak için bu özellikleri de olan bir editör vs. gibi bir şey tavsiye edermisiniz.

  18. mesafe sensörü kullanarak led yakmaya calısıyorum fakat bir tane mesafe sensörü ile bir led yaka biliyorum arduıno ile 3 adet mesafe sensörü ile 3 adeet led yakmam gerekiyo bı turlu basaramadım yardım edebılırısınız

  19. Abi bir sensöre en fazla kac görev ekleyebiliriz mesela ben klavye tuslarını belli uzaklıklara atadım elerimi oralara yaklastırınca uzaklıgına göre hangı tuşa bastığımızı kodlayabilirmiyiz.

  20. Kerem Abi size bir soru sormak istiyorum. Arduinomda bir kısa devre olduğu kesin ancak bu kısa devreyi nasıl düzelteceğimi bilmiyorum. Sensörüm de bozuk olabilirmiş ancak onunda nasıl çalışıp çalışmadığını kontrol edemiyorum. Ama sadece bu sensörde oluşuyor hata. Sizin dediğiniz kütüphaneti de indirdim, devre üzerinde biraz uğraştım ancak olmadı. Yardımlarınızı bekliyorum.

      • Sağolun şimdi anladım. Breadboardtan sensörü veya jumperlardan birini çıkardığımda arduinom çalışmaya devam ediyor. Bir soru daha sormak istiyorum. Buzzer’ı devre şemasında gösterildiği gibi bağlayamıyorum. Şemada + ve – uçları yanyana bağlı duruyor. Ben buzzer’ımın uçlarını kıvırarak yanyana bağlamayı denedim. Ama tam oturmadı. Buzzer’ı breadboarda nasıl bağlıyacağım konusunda yardım edermisiniz? Ve bozukluk mesafe sensöründe değil mi?

  21. Abi diyelim ki 2 sensör kullandık biri hareket halindeki seyi takip ediyo yada hedefe kitleniyo (motorlar ve robot kol yardimiyla) diger sensör ise hareket eden sey menziline girdigi anda ates ediyo.
    bu sensörler yeterli olurmu yada bir sensörlede halledebilirmiyim?
    eger farkli bir sensor onericekseniz fiyati birazda olsa uygun olabilir mi ?
    kucuk bir savunma sistemi yapmak istiyorumda..

  22. Bu sensör 400cm’e kadar ölçebiliyor galiba. Peki daha uzağı da ölçmesini istiyorsam hangi modeli kullanabilirim? Başka tür mesafe sensörleri var mıdır?

  23. öncelikle çok yanlış bir tasarım mmm metotlarda hatalarınız var eğer bu işe profosyonel yaklaşmamız gerekirse bu çalışmayı yetersiz buluyorum

  24. merhabalar acaba mesafeyi çoğaltabilir miyiz? örneğin daha fazla enerji kullanılması sonucunda daha uzak mesafeleri de algılayabilir ?mi

  25. Hocam Merhabalar sensörü bir borunun içine koysak borunun içindeki mesafeyi ölçebilir mi? Boru duvarından yansıyan ses dalgaları sensörü yanıltır mı?

  26. Merhabalar, sensörü dış ortamdaki bir proje için kullanmayı planlıyorum. Sıcaklık, nem, yağmur gibi şartlardan etkileniyor mu? Etkileniyorsa bu çevre şartlarına uygun hangi sensörü kullanabilirim?

    • Merhaba. Sensörün datasheetine bakarak çalışma ortamını öğrenebilirsiniz. Bahsettiğiniz özellikleri karşılayacak farklı bir sensöre bakmanızı önereceğim. HC-SR04’ün bunu yapabileceğini düşünmüyorum.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz