Merhaba arkadaşlar. Arduino derslerimizin bu bölümünde HC-SR04 ultrasonik mesafe sensörü uygulaması yapacağız. Gerekli malzemeler:

HC-SR04:

HC-SR04-Ultrasonic-Sensor

Bu sensör, robotik projelerde Arduino ile kullanılan en popüler sensörlerden birisidir. Kullanımı oldukça kolaydır ve program kısmı doğru 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.

Bu uygulamadaki gibi zamana duyarlı işlemlerde, Arduino’nun timer interrupt’larını kullanan bir koda ihtiyacımız var. Bir önceki paragrafta programın düzgün çalışmasından bahsetmiştim. Eğer biz timer interrupt gibi bir metod kullanmadan süre ölçümü yaparsak, alacağımız sonuç çok verimli olmayacaktır. Bu kısım size karışık geldiyse endişe etmenize gerek yok, Arduino ile HC-SR04 sensörü düzgün bir şekilde kullanmamızı sağlayacak bir kütüphane mevcut. https://bitbucket.org/teckel12/arduino-new-ping/downloads adresinden NewPing isimli kütüphanenin en güncel halini indirip Arduino yazılımına ekliyoruz. Devre şemamız ise şu şekilde:

hc-sr04_bb

Bağlantımızı yaptıktan sonra, Arduino programımızı açıp Dosya>Örnekler>NewPing>NewPingExample adımlarını takip ederek örnek kodu açıyoruz. Bu koddaki #define TRIGGER_PIN 12 ve #define ECHO_PIN 11 satırları, HC-SR04 sensörümüzün Trig ve Echo pinlerinin bağlanacağı Arduino pinlerini ayarlamamızı sağlıyor. #define MAX_DISTANCE 200 satırı da sensörümüzün ölçeceği maksimum mesafayi 200 cm olarak ayarlamamızı sağlıyor. loop fonksiyonundaki delay(50) komutu, her bir ultrasonik ses göndermenin arasında 50 ms bekleme yapılmasını sağlıyor. İki ölçüm arasındaki süreyi bu komutla değiştirmemiz mümkün, dikkat etmemiz gereken ise bu iki ölçüm arasındaki minimum süre 29 ms’den daha az olmaması. Aksi takdirde bir önceki ölçümden gelen yankı ile çakışma meydana gelir ve ölçümümüz doğru bir sonuç vermez.

 

58 Yorumlar

  1. 59.00 TLLİK ARDUİNO BAŞLANGIÇ SETİNDEKİ ARDUİNO KİTAPÇIĞINDA YAZAN PARK SENSÖRÜNDE ‘maximumRange’ koduna hata veriyor ne yapmalıyım

    • Buradaki örnekte 15 adet sensör kullanılmış. Yeteri kadar giriş çıkış pinine sahip bir karta sahipseniz (Arduino Mega gibi) inceleyebilirsiniz.

  2. 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.

  3. 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 ?

  4. 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.

  5. 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);
    }

  6. 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.

  7. 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

  8. 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.

  9. 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.

  10. 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.

  11. İ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ı.

  12. 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?

  13. 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.

  14. 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

  15. 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);
    }

  16. Mesafeyi sesli bi şekilde nasıl yapabilirim 3 metre kaldı 2 metre kaldı 1metre kaldı diye yardımcı olurmusunuz ne gerekiyo

  17. 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

  18. 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.

CEVAP VER

Please enter your comment!
Please enter your name here