Elektronik malzemelerimi karıştırırken HC-SR04 ultrasonik sensöre rast geldim. Bu sensörü geçen yıl almıştım, o zamanlar su deposunda su seviyesini hassas olarak nasıl ölçebilirim diye arayış içindeydim. Fakat nedense bu sensör ile ilgili hiç çalışma yapmamışım. Bu nedenle basit bir mesafe ölçüm uygulaması yapmaya karar verdim. Bunu da breadbord üzerinde devreyi kurup python script kullanarak yapabilirim diye düşündüm. Yalnız dikkat edilmesi gereken bir nokta var o da Raspberry i/o pinleri 3,3V ile çalışmakta, Sensör ise 5V ile çalışmakta. Dolayısıyla sensörden Raspberry'e giren pine gerilim bölücü dirençler eklememiz gerekmektedir.
| HC SR04 Ultranic mesafe sensörü |
Vcc: +5V
Trig: Tetikleme pinidir. Bu pinden 10 us (mikro saniye) lojik 1 seviyesinde tutulması gerekmektedir.
Echo: Mesafe bilgisi alınan pin.
Gnd: 0V
Modülün çalışması;
Modüle Vcc ve Gnd pinlerinin irtibatı yapıldığında çalışma için hazır hale gelmektedir. Modül üzerinde görüldüğü üzere bir adet ultrasonic ses yayıcı (solda) bir adette ses alıcı (sağda) hoparlör-mikrofon bulunmaktadır. Modül ile ölçüm yapabilmek için Trig pinini 10 us boyunca lojik 1 seviyesinde tutmak ardından lojik 0 seviyesine çekmek gerekmektedir. Lojik 0 seviyesine çekilince modül ortama 40 kHz frekansında 8 adet ses dalgası yaymaktadır. Gönderilen ses dalgaları herhangi bir engele çarpıp geri döndüğünde modül bu ses dalgalarının havada kalma süresini hesaplayıp Echo pininden bize bildirir.
Ses dalgalarının havada kalma süresi ne kadar ise o kadar sürede Echo pini lojik 1 durumunda kalır ardından tekrar lojik 0 konumuna döner.
Burada dikkat edilmesi gereken konu gönderilen ses dalgalarının geriye döndüğünde 2 kat yol katettiğidir. Dolayısıyla hesaplanacak mesafe değerinin yarısının alınması gerektiğidir.
Havada ses dalgaları 343,2m/sn hızla yolalır.
Sensör ölçüm aralığı 2cm ile 4mt arasındadır.
Sonar.py adında dosya oluşturup kodları yazmaya başlıyoruz.
- import RPi.GPIO as GPIO
- import time
- GPIO.setmode(GPIO.BCM)
- TRIG = 23
- ECHO = 24
- GPIO.setup(TRIG,GPIO.OUT)
- GPIO.setup(ECHO,GPIO.IN)
- GPIO.output(TRIG, False)
GPIO.output(TRIG, 0) şeklinde de yazılabilir.
- time.sleep(2)
- GPIO.output(TRIG, True)
- time.sleep(0.00001)
- GPIO.output(TRIG, False)
- while GPIO.input(ECHO)==0:
- start_palsi = time.time()
- while GPIO.input(ECHO)==1:
- stop_palsi= time.time()
- zaman = stop_palsi - start_palsi
Şimdi biraz matematik çalışalım. Hız = Uzunluk(m) / zaman(sn) yani bir cismin, nesnenin hızını bulabilmek için birim zamanda katettiği mesafeyi bilmemiz yeterli. Fakat ses dalgaları engele gidip geri geliyordu bu nedenle zaman değerini 2'ye bölmek gerekiyor.
Ses dalgaları havada 343,2m/s hızda yol alıyordu.Bu da 34320 cm yapıyor. Bunu da
mesafe=17160 x zaman şeklinde yazabiliriz. Zaman bilgisini de ölçümden alıyoruz. Geriye sadece hesaplamak kalıyor.
- mesafe = zaman * 17160
- mesafe = round(mesafe, 2)
- print "Olculen Mesafe:",mesafe,"cm"
- GPIO.cleanup()
| Gerilim Bölücü devre |
![]() |
| Sonar.py dosyasını python ile çalıştırıyoruz. |
![]() |
| HC-SR04 Görüntüsü |
![]() |
| Devreyi Bread-Board üzerine kurdum. |
![]() |
| Sensör önüne karton kutu koyup teste başlıyoruz. |
![]() |
| Mesafeyi 12,3 cm olarak ölçüyoruz. |
![]() |
| Karton kutuyu biraz uzaklaştıyoruz. |
![]() |
| Mesafenin 30,6 cm olduğunu görüyoruz. |







