27 Mart 2014 Perşembe

Arduino - HC-SR04 Ultrasonik Sensör ile Mesafe Ölçer Uygulaması

Merhaba. Bu yazımda HC-SR04 ultrasonic sensörünü tanıyıp cisim algılama ve de mesafe ölçümü yapacağız. Ses dalgaları sınıflandırılmasında 20 KHz-1 GHz arasındaki ses sinyalleri ultrasonic ses olarak tanımlanmıştır.Bizim sensörümüz ve bir çok ultrasonic sensör 40Khz frekansında ultrasonic ses üretmektedir. Burada önemli olan sesin yüksekliğinde belirleyici olan etken frekanstır.Ses yüksekse frekansta yüksektir.Ultrasonic ses sinyallerini insan kulağı algılayamaz.


Aslında HC-SR04 tüm haliyle bir transdüserdir. Transdüser ile sensör arasındaki fark ise sensör herhangi fiziksel bir değişimi algılayan bir eleman iken, transdüser bu değişimi algılayıp elektrik,ısı vs. bir çok enerji formuna dönüştürebilen bir elektronik devredir.

HC-SR04'te 2 adet araba farını andıran bir tanesi ses iletici diğeri de ses alıcı olan transdüser bulunmakta. Sol taraftan 40 KHz'de üretilen ses sinyal darbesi engele çarpıp sağ tarafa gelir ve biz bu gidiş-geliş arasındaki zamanı, cm'ye çevirerek uzaklığı ölçeceğiz.


T=0 zamanında darbe iletilir(ultrasonic ses sinyali), cisimden yansır, transdüser tarafından algılanır ve tekrar
gönderilir.



Sonraki darbe ilk darbenin ultrasonik enerjisinin hepsi absorbe edildiğinde iletilmelidir.Bu yüzden sensöre bir pals gönderilir sensör okunur ve sensörün datasheetinde yazan süre kadar sensöre tekrar pals gönderilmez.Eğer bekleme yapmaksak sensör saçma değerler döndürür.Çünkü ilk yolladıgımız sinyal bir yerden yansıyarak sensöre geri dönmeye devam eder.


Sensör üzerinde 4 adet pin mevcut.Bunlar;vcc,gnd,trig,echo pinleri.Sensör kendi içerisinde 40khz frekansında bir sinyal üretip  8 pals verici transdüsere gönderiyor.Bu ses dalgası  
havada, deniz seviyesinde ve 15 °C sıcaklıkta 340 m/s bir hızla yol alır.Bir cisme çarpar ve geri sensöre yansır.Cismin sensörden uzaklıgı ile doğru orantılı olarak echo pini bir süre lojik 1 seviyesinde kalır ve tekrar lojik 0 olur.Bizim bu mesafeyi ölçmekiçin tek yapmamız gereken echo pininin ne kadar lojik1 oldugunun süresini bulmaktır.Bu yapı yukarıdaki resimden daha iyi görülebilir.

Echo pininin lojik 1de kalma süresini mikrodenetleyici timerı ile ölçelim. Klasik yol=hız*zaman dan ve sesin 340m/sn lik hızınıda 34000cm/1000000us (340000/1000000=1/29) olarak düzenlersek  formül x=t/29 olarak bulunur.Fakat burada önemli bir nokta sensörün bize döndürdüğü süre, ses sinyalinin gönderilmesi ile alınması arasındaki oluşan süre. Yani yol=zaman/29 ile aradaki mesafeyi iki ile çarpmış oluyoruz.Çünkü ses hem gitti hem geldi.Bu yüzden x=t/58 formulüyle aradaki mesafeyi ölçmüş olacağız . Bazı yerlerde 58 yerine 58.2 veya 59 yazanı da gördüm artık sizin kararınıza kalmış birşey.

Buna ek olarak da 13.pine led bağladım ve mesafe 15 cm altına düştüğünde led yansın istedim.Siz isterseniz bir buzzer koyabilirsiniz. Buyrun kodlar ;

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int trigPin=2; //define trigPin 2
int echoPin=3; //define echoPin 3
int led=13;
void setup() {
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led,OUTPUT); 
 lcd.begin(16,2);
}

void loop() {
  int sure, uzaklik;
  lcd.clear(); 
  lcd.setCursor(0,0);
  
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  sure = pulseIn(echoPin, HIGH);
  uzaklik = (sure/58);
  
  if (uzaklik<15)
  {digitalWrite(led,HIGH);}
  else {digitalWrite(led,LOW);} 
  
  lcd.print("Uzaklik = ");
  lcd.print(uzaklik);
  lcd.print(" cm"); 
   delay(400);   
}








Video ;




Not: Resimlerin birçoğu www.mcu-turkey.com adresinden alınmıştır. Aynı programı PIC için yapmak isteyenler aşağıdaki adresi ziyaret edebilirler.


http://www.mcu-turkey.com/hc-sr04-ultrasonic-sensor-ile-cisim-algilama-ve-mesafe-olcumu/








28 yorum:

  1. bu proje ile benzer olan ultrasonik dalga yoğunluk ölçer için yardımcı olabilir misiniz?

    YanıtlaSil
  2. anlattığınız proje çalışmıyor yada hatalı anlatım yapılmış

    YanıtlaSil
    Yanıtlar
    1. haklısınız, kodları yazarken hata yapmışım şimdi düzelttim bir kez daha dener misiniz ?

      Sil
  3. malzeme listesini paylaşabilirmisiniz

    YanıtlaSil
  4. hocam ben tam 4m algıladıgı zaman cisimi led yansın istiyorum 3.80cm olabilir bunun zamanını nasıl ayarlayabiliriz yardımcı olurmusunuz bana

    YanıtlaSil
  5. if (uzaklik<380)
    {digitalWrite(led,HIGH);}
    else {digitalWrite(led,LOW);}

    gibi bir komutla yapabilirsiniz bunu ki yazımdaki uygulamada 15 cm'nin altına inince led yansın şeklinde yazmıştım.

    YanıtlaSil
  6. hocam projeyi yaptım ama lcd ekranda 0cm yazıyor. acaba sensorummu bozuk çalışıp calışmadığını nasıl anlarım

    YanıtlaSil
    Yanıtlar
    1. Kodları mail adresime ya da buraya gönderir misiniz ? Kendim de deneyeyim ona göre karar verelim.

      Sil
  7. böyle bir hata alıyorum hocam

    collect2.exe: error: ld returned 5 exit status

    Derleme sırasında hata oluştu.

    YanıtlaSil
  8. hocam ben 15 cm altında iken led yerine buzzer olmasını istiyorum bağlantıda ve kodlarda ne gibi değişiklik yapılması gerekyor yardımcı olabilirmisin?

    YanıtlaSil
    Yanıtlar
    1. Kodlarda değişiklik yapmanıza gerek yok. Led yerine buzzer takmanız yeterli...

      Sil
  9. hocam
    bizde proje dersinde arduinoyla yapmayı düşünüyoz
    ancak hocamız bizden 30 cm de alarım olsun istedi
    arduino nun hazr kodları var bizde
    nasıl ekleme yapabiliriz
    yardımcı olabilir misinz

    YanıtlaSil
  10. Merhaba hocam bu sensorlerle maksimum kac mt ölcebiliyorz

    YanıtlaSil
  11. Merhaba hocam bu sensorlerle maksimum kac mt ölcebiliyorz

    YanıtlaSil
  12. Elimdeki sensör çok yakın (~10cm) yada uzak (~220cm) durumunda hata pozisyonuna geçiyor. TRY-Catch ile de önüne geçemiyorum. Devreyi kapatıp açmam gerekiyor.
    #1 Bu sizde de oluyor mu?
    #2 Neden oluyor olabilir?
    #3 (Sizce) Nasıl engelleyebilirim?
    #4 Sormak istemediğim bir soru : Sensörüm bozuk olabilir mi? (Yerli ve bilinen bir internet firmasından satın aldım)

    YanıtlaSil
    Yanıtlar
    1. Sensörünüz hc-sr04 mü yoksa başka bir sensör mü ? Ölçüm yapabildiği aralıklar olabilir , başka bir sensör ile denemenizde fayda var .

      Sil
    2. Merhaba, başka bir sensör almaya karar verdiğimi peşinen yazayım. Sensörümü yerli ve bilinen bir internet firmasından HS-SR04 olarak online siparişini verdim ve aldım. Yalnız önceki akşam sorunun nedenlerini araştırırken dikkatimi çeken bir detay oldu; internette gördüğüm resimlerin neredeyse hepsinde trig ve echo componentleri arasında üstte bulunan metalik componentin (sanırım kristal) üzerinde 4000 yazıyor. Benim elimdeki SR04'ün üzerinde bu yok. Eski yad merdiven altı bir versiyonu sebebiyle sorun yaşıyor olmam muhtemel. Alırken bu tip orjinalliklere dikkat etmek gerekiyor.
      (Başka arkadaşlara da kaynak olması için detaylı yazıyorum)

      Sil
  13. Merhaba hocam mesafe sensörüm bazen 0 da kalıyor reset atınca düzeliyor sebebi ne olabilir acaba sensörmü arızalıdır ? teşekkürler

    YanıtlaSil
    Yanıtlar
    1. Yorum yapabilirim sadece, 0'da kalıyorsa gönderici transdüser çalışmıyor/düzgün çalışmıyor olabilir. Bir de Echo/Trigger pinlerinin doğru bağlandığından emin olun.
      En garanti yol ise başka bir sensör denemeniz.

      Sil
  14. 16f877 ve hc-sr04 ile yapılmış proton kodu ile çalışan bir devreniz varmıdır

    YanıtlaSil
  15. Hocam merhabalar,ben hc-sr04 elemanıyla bir proje gerceklestirdim,engel oldugunda kırmızı led yanıp buzzer oten ,olmadıgında yesıl led yanan,benden arduıno olmadan bunu gerçekleştirmem isteniyor boyle bır sey olabılır mı,ve bu microseconds ve delay arasındakı fark nedir,bu konu hakkında detaylı bilgi verır mısınız ?

    YanıtlaSil
    Yanıtlar
    1. Arduino olmadan derken ? PIC ya da başka mikrodenetleyici kullanarak mı yapılmanız isteniyor ?
      delay(1000) 1000 milisaniye gecikme verirken, delayMicroseconds(1000) 1000 mikrosaniye gecikme verir.

      Sil
  16. siteye girmeye çalıştım kullanıcı adı ve şifre istedi ? yardımcı olurmusunuz ?

    YanıtlaSil
    Yanıtlar
    1. Site dışa kapanmış dostum ne yazık ki :(
      Ben de şimdi fark ettim.

      Sil
  17. hocam HC-SR04 sensörü ve servo motor ile servo motoru 180 derce sağ ve sola dönmesi isteniyor 30 cm deki cismi algılayıp o açıda durması ıstenıyor bir yardımcı olurmusunuz lütfen

    YanıtlaSil
  18. servo motor ile ultrasonik sonik ve LiquidCrystal ile 3 bir arda soru örnegi yapa bilirmisin hocam

    YanıtlaSil