Raspberry Pi ve HC-SR04 Ultrasonik Sensör Yardımıyla Mesafe Ölçme ve Blueetooth Üzerinden Android Haberleşme
Merhaba Arkadaşlar,
Bugün Raspberry Pi 3 ve HC-SR04 ultrasonik sensör yardımıyla bir cismin ne kadar uzaklıkta olduğunu ölçeceğiz. Daha sonra ölçtüğümüz bu değerleri bluetooth yardımıyla android cihazımızla haberleşmeyi sağlayıp,android cihazımızdan da görütüleyeceğiz.
Ultrasonik sensörlerin çalışması hakkında geniş bilgiye buradan ulaşabilirsiniz. Hızlıca uygulamamıza geçelim. Uygulama için gerekli araçlar:
- Raspberry pi 3
- HC-SR04 Ultrasonik sensör
- 1 kΩ direnç(1 adet)
- 2 kΩ direnç(1 adet)
- Jumper Teller
Ultrasonic sensör hakkında
İngilizce 'ultra' ve 'sonic' kelimelerinin birleşimi olan ultrasonik kelimesi 'daha yüksek ses' anlamına gelmektedir. Bu ultrasonik ses dalgaları, insan kulağının duyamayacağı 20 kHz – 500 kHz frekans bandına sahiptir. Ultrasonik ses dalgalarını kullanan sensörler ile nesnelerle herhangi bir temas halinde olmadan mesafe ölçümleri yapılabilmektedir. Ultrasonik sensörler, klasik hareket problemlerinde olduğu gibi
X = V * t (yol = hız * zaman) eşitliğine göre çalışır. Ultrasonik ses dalgalarının belirli atmosferik koşullardaki hızının biliniyor olmasından faydalanarak ses dalgasının gidip gelme süresinin yarısıyla hızının çarpımı mesafe bilgisi elde edilir. Asıl sorun ise farklı frekanslarda sensörün ölçebileceği menzilin değişmesidir.▪Mesafe ölçümü için ve robot projelerinde kullanılabilir.
HC-SR04 Ultrasonik sensör:
- Mesafe ölçümü için ve robot projelerinde kullanılabilir.
- Arduino & Raspberry pi devreleri ile kullanılabilir.
- 2 cm ile 400 cm arasında mesafe ölçümü yapabilir.
- Ölçüm hassasiyeti 3 mm dir.
HC-SR04 ultrasonik sensör:
Çalışma Voltajı | DC 5V |
Çektiği Akım | 15 mA |
Çalışma Frekansı | 40 Hz |
Maksimum Görme Menzili | 4m |
Minimum Görme Menzili | 2cm |
Görme Açısı | 15° |
Tetik Bacağı Giriş Sinyali | 10 us TTL Darbesi |
Echo Çıkış Sinyali | Giriş TTL sinyali ve Mesafe Oranı |
Boyutları | 45mm x 20mm x 15mm |
Ultrasonik Sensör Çalışma prensibi
Ultrasonik ses dalgaları 20 kHz ile 500 kHz arasında frekanslara sahip ses dalgalarıdır. Bizim duyabildiğimiz 300 Hz-14000 Hz bandının üzerindedirler. Ultrasonik sensörler ultrasonik ses dalgaları yayan ve bunların engellere çarpıp geri dönmesine kadar geçen süreyi hesaplayarak aradaki uzaklığı belirleyebilen sensörlerdir. Bu sensörlerde bu kadar yüksek frekanslarda ses dalgalarının yayılmasının nedeni ; bu frekanslardaki dalgaların düzgün doğrusal şekilde ilerlemeleri , enerjilerinin yüksek olması ve sert yüzeylerden kolayca yansımasıdır.
Ultrasonik sensörlerin algılama menzili uygun koşullarda 30 metreye varabilir. Ultrasonik sensörlerde iki adet transducer bulunur. Bunlardan biri ultrasonik speaker diğeri de ultrasonik mikrofondur. Elektronik devre ile ultrasonik speaker'dan ses dalgasının yayılma anı ile bu ses dalgasının engele çarpıp yansıyarak ultrasonik mikrofon tarafından algılanması arasındaki zaman ölçülür ve bu zamanın ikiye bölünüp ses hızı ile çarpılması sonucunda da engel ile ultrasonik sensör arasındaki mesafe hesaplanır. Robotlarda genellikle 40 kHz'lik ultrasonik sensörler kullanılmaktadır.
Kurulum:
Öncelikle sd card a raspberry pi işletim sistemini indirip kuruyoruz. Kurulumun detaylı anlatımı içşn tıklayınız.
Rasperry pi Ethernet kablosu ve PuTTY aracılığıyla bağlanacaksanız SSH ve diğer ayarlamaların detaylı anlatımı için tıklayınız.
Projenin Devre Şeması
Uygulamamızın kodlama kısmına geçelim. Öncelikle kodumuzu yüklemeden önce bluetooth haberleşmesi için bir kaç paket yüklememiz gerekli. Adımlar sırasıyla aşağıdaki gibidir.
- Bluez paketini indir
sudo apt-get install python-bluez
-
/etc/systemd/system/dbus-org.bluez.service
kısmındaki
ExecStart
parametresini aşağıdaki gibi değiştir. ExecStart=/usr/lib/bluetooth/bluetoothd -C
- seri port profili yükleyin:
sudo sdptool add SP
- Raspberry Pi cihazını yeniden başlatın:
sudo reboot
- Raspberry Pi yi telefonunuzla eşleştirin. Telefonunuzun bluetooth'unu açın. Raspberry Pi üzerinde aşağıdaki komutları yazın:
bluetoothctl
power on
discoverable on
scan on
- Telefonunuz mevcut cihazlar listesinde görünecektir. Telefonunuzun mac adresini not al ve aşağıdaki belirtilen yere yazarak kodları çalıştır
trust <mac adresi>
pair <mac adresi>
- Çıkmak için
quit
Şimdi Python ile yazdığımız kodu çalıştıralım
önce bulunduğumuz dizinde herhangi bir isimde .py uzantılı bir dosya oluşturuyoruz.
nano blueusonic.py
yazıp dosyanın içine giriyoruz. kodumuzu buraya yazarak Ctrl+X tuşuna basarak kaydedip çıkıyoruz.
kodumuzu çalıştırmak için ise aşağıdaki komutu yazıp çalıştırıyoruz.
sudo python blueusonic.py
Uygulamanın python kodu aşağıdaki gibidir:
import os
from bluetooth import *
from wifi import Cell, Scheme
import subprocess
import RPi.GPIO as GPIO
import time
import datetime
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
TRIG=20
ECHO=26
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG,False)
def handle_client(client_sock) :
# get ssid
while True:
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO)==0:
pulse_start=time.time()
while GPIO.input(ECHO)==1:
pulse_end=time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration*17150
distance = round(distance, 2)
#client_sock.send("Selam")
client_sock.send(str(distance)+"!")
print distance
time.sleep(2)
#client_sock.send(ssid_discovered())
#client_sock.send("ip-addres:" + ip_address + "!")
return
try:
while True:
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "815425a5-bfac-47bf-9321-c5ff980b5e11"
advertise_service( server_sock, "RPi Wifi config",
service_id = uuid,
service_classes = [ uuid, SERIAL_PORT_CLASS ],
profiles = [ SERIAL_PORT_PROFILE ])
print "Bluetooth baglantisi bekleniyor RFCOMM kanali %d" % port
client_sock, client_info = server_sock.accept()
print "Baglanti saglandi: ", client_info
handle_client(client_sock)
client_sock.close()
server_sock.close()
# finished config
print 'Program sonu...\n'
except (KeyboardInterrupt, SystemExit):
print '\nCikis yapiliyor...\n'
GPIO.cleanup()
>>>>>>>>>>>proje için gerekli olan android uygulamayı indirmek için tıklayın.
Uygulama çalıştırıldığındaki ekran resimleri
Android uygulama ekran resimleri
Ctrl+C tuşuna basarak programı sonlandırabilirsiniz.
Böylece uygulamamızı tamamlamış olduk, umarım sizler için iş görür, öğretici bir uygulama olmuştur. Herkese iyi çalışmalar