Bu Blogda Ara

15 Aralık 2016 Perşembe

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
  • kΩ direnç(1 adet)   
  • 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