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/
bu proje ile benzer olan ultrasonik dalga yoğunluk ölçer için yardımcı olabilir misiniz?
YanıtlaSilanlattığınız proje çalışmıyor yada hatalı anlatım yapılmış
YanıtlaSilhaklısınız, kodları yazarken hata yapmışım şimdi düzelttim bir kez daha dener misiniz ?
Silmalzeme listesini paylaşabilirmisiniz
YanıtlaSilLM016 LCD, HC-SR 04 Sensör ve 5k pot.
Silhocam 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ıtlaSilif (uzaklik<380)
YanıtlaSil{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.
hocam projeyi yaptım ama lcd ekranda 0cm yazıyor. acaba sensorummu bozuk çalışıp calışmadığını nasıl anlarım
YanıtlaSilKodları mail adresime ya da buraya gönderir misiniz ? Kendim de deneyeyim ona göre karar verelim.
Silböyle bir hata alıyorum hocam
YanıtlaSilcollect2.exe: error: ld returned 5 exit status
Derleme sırasında hata oluştu.
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ıtlaSilKodlarda değişiklik yapmanıza gerek yok. Led yerine buzzer takmanız yeterli...
Sila
YanıtlaSilhocam
YanıtlaSilbizde 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
Merhaba hocam bu sensorlerle maksimum kac mt ölcebiliyorz
YanıtlaSilMerhaba hocam bu sensorlerle maksimum kac mt ölcebiliyorz
YanıtlaSil4 metre ölçebilirsiniz.
SilElimdeki 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.
YanıtlaSil#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)
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 .
SilMerhaba, 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.
Sil(Başka arkadaşlara da kaynak olması için detaylı yazıyorum)
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ıtlaSilYorum 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.
SilEn garanti yol ise başka bir sensör denemeniz.
16f877 ve hc-sr04 ile yapılmış proton kodu ile çalışan bir devreniz varmıdır
YanıtlaSilHocam 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ıtlaSilArduino olmadan derken ? PIC ya da başka mikrodenetleyici kullanarak mı yapılmanız isteniyor ?
Sildelay(1000) 1000 milisaniye gecikme verirken, delayMicroseconds(1000) 1000 mikrosaniye gecikme verir.
siteye girmeye çalıştım kullanıcı adı ve şifre istedi ? yardımcı olurmusunuz ?
YanıtlaSilSite dışa kapanmış dostum ne yazık ki :(
SilBen de şimdi fark ettim.
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ıtlaSilservo motor ile ultrasonik sonik ve LiquidCrystal ile 3 bir arda soru örnegi yapa bilirmisin hocam
YanıtlaSil