Merhaba, bugün sizlere Raspberry pi mesafe sensörü kullanımı hc-sr04 nasıl kullanılır. 16×2 LCD ekran da mesafe değerleri nasıl yazdırılır bunlara değineceğiz.
Çok basit bir güvenlik sistemi yapacağız eğer belirttiğimiz mesafe değerini aşarsak yeşil led yakacağız.
Oluşturduğumuz if sorgusu ile ister alarm çaldırın , röle ile ışık yakın , güvenlik mail’i attırın , kamerayı aktif edin akla gelebilecek bir sürü projeyi yapabilirsiniz.
Ben basit olması açısından led yaktım.
Raspberry Pi HC-SR04 Ultrasonik Mesafe Sensörü
Raspberry pi ultrasonik mesafe sensörü nedir nasıl çalışır kısaca bundan bahsedeyim.
Bu sensör belirli bir frekansta ses dalgasını alıp nesne ile uzaklığını ölçer buna sonar (Sound Navigation and Ranging) sistemi denir.
Bizim kullanacağımız sensör 2cm – 400cm arası mesafe ölçer daha geniş aralıklar ile ölçüm yapabilen sensör bulmanız mümkün.
Araç / Gereç
- Raspberry Pi
- 16×2 LCD Ekran
- HC-SR04
- Breadboard
- Herhangi bir renk LED
- Jumper Kablo
HC-SR04 Pin Bilgileri
- VCC – +5V | (Pi 2)
- TRIG – Sensörü tetikleme pini | (GPIO27)
- ECHO – Sensörün alıcı pini | (GPIO22)
- GND – Toprak Hattı | (Pi 6)
İlk öncelikle LCD ekranımızı bağlayarak işe başlayalım bunu daha önceki bir makalemde anlatmıştım buraya tıklayarak bakabilirsiniz.
LCD ekranımızı bağladıktan sonra hc-sr04 mesafe sensörü devresine geçebiliriz.
Yukarıdaki devre şemasını takip ederek devreyi kurabilirsiniz her şeyi açık bir şekilde göstermeye çalıştım.
Devreyi kurduktan sonra terminal ekranında mesafe-olcer.py adında bir python dosyası oluşturun ve aşağıdaki kodu oraya yapıştırın. Yada buraya tıklayarak python dosyasını indirebilirsiniz.
The wiring for the LCD is as follows: # 1 : GND # 2 : 5V # 3 : Contrast (0-5V)* # 4 : RS (Register Select) # 5 : R/W (Read Write) - GROUND THIS PIN # 6 : Enable or Strobe # 7 : Data Bit 0 - NOT USED # 8 : Data Bit 1 - NOT USED # 9 : Data Bit 2 - NOT USED # 10: Data Bit 3 - NOT USED # 11: Data Bit 4 # 12: Data Bit 5 # 13: Data Bit 6 # 14: Data Bit 7 # 15: LCD Backlight +5V** # 16: LCD Backlight GND #import import RPi.GPIO as GPIO import os import socket import fcntl import struct import time from time import gmtime, strftime GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(4,GPIO.OUT)#pinlerin durmunu cikis yaptik TRIG = 27 #13 gpio number pin ECHO = 22 #15 gpio number pin def getCPUtemperature(): res = os.popen("vcgencmd measure_temp").readline() return(res.replace("temp=","").replace("'C\n","")) def printDateTime(): textDate = strftime("%d %A %Y", gmtime()) textTime = strftime(" %H:%M:%S", gmtime()) lcd_string(textDate,LCD_LINE_1) lcd_string(textTime,LCD_LINE_2) return def getInterfaceAddress(ifname): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) except: return '' def getIP(): ipWlan = getInterfaceAddress('wlan0') if ipWlan: return ipWlan ipEth = getInterfaceAddress('eth0') if ipEth: return ipEth # Define GPIO to LCD mapping LCD_RS = 7 LCD_E = 8 LCD_D4 = 25 LCD_D5 = 27 LCD_D6 = 22 LCD_D7 = 18 # Define some device constants LCD_WIDTH = 16 # Maximum characters per line LCD_CHR = True LCD_CMD = False LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line # Timing constants E_PULSE = 0.0005 E_DELAY = 0.0005 GPIO.setup(TRIG,GPIO.OUT) GPIO.setup(ECHO,GPIO.IN) def main(): # Main program block GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers GPIO.setup(LCD_E, GPIO.OUT) # E GPIO.setup(LCD_RS, GPIO.OUT) # RS GPIO.setup(LCD_D4, GPIO.OUT) # DB4 GPIO.setup(LCD_D5, GPIO.OUT) # DB5 GPIO.setup(LCD_D6, GPIO.OUT) # DB6 GPIO.setup(LCD_D7, GPIO.OUT) # DB7 # Initialise display lcd_init() while True: lcd_string(" Mesafe Olcer",LCD_LINE_1) GPIO.output(TRIG, False) print "Olculuyor..." time.sleep(0.4) 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) if distance > 20 and distance < 400: h1 = distance - 0.5 lcd_string(h1,LCD_LINE_2) GPIO.output(4,False) else: h2 = "Menzil asildi" lcd_string(h2,LCD_LINE_2) GPIO.output(4,True)# 12 nolu pini +5v cikis verdik def lcd_init(): # Initialise display lcd_byte(0x33,LCD_CMD) # 110011 Initialise lcd_byte(0x32,LCD_CMD) # 110010 Initialise lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size lcd_byte(0x01,LCD_CMD) # 000001 Clear display time.sleep(E_DELAY) def lcd_byte(bits, mode): # Send byte to data pins # bits = data # mode = True for character # False for command GPIO.output(LCD_RS, mode) # RS # High bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x10==0x10: GPIO.output(LCD_D4, True) if bits&0x20==0x20: GPIO.output(LCD_D5, True) if bits&0x40==0x40: GPIO.output(LCD_D6, True) if bits&0x80==0x80: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin lcd_toggle_enable() # Low bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x01==0x01: GPIO.output(LCD_D4, True) if bits&0x02==0x02: GPIO.output(LCD_D5, True) if bits&0x04==0x04: GPIO.output(LCD_D6, True) if bits&0x08==0x08: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin lcd_toggle_enable() def lcd_toggle_enable(): # Toggle enable time.sleep(E_DELAY) GPIO.output(LCD_E, True) time.sleep(E_PULSE) GPIO.output(LCD_E, False) time.sleep(E_DELAY) def lcd_string(message,line): # Cast to string message = str(message) # Send string to display message = message.ljust(LCD_WIDTH," ") lcd_byte(line, LCD_CMD) for i in range(LCD_WIDTH): lcd_byte(ord(message[i]),LCD_CHR) if __name__ == '__main__': try: main() except KeyboardInterrupt: pass finally: lcd_byte(0x01, LCD_CMD) lcd_string("Gule Gule!",LCD_LINE_1) GPIO.cleanup()
Raspberry Pi Mesafe Sensörü Kullanımı HC-SR04
Diger Raspberry Pi Dersleri için tıklayın.
The wiring for the LCD is as follows: # 1 : GND # 2 : 5V # 3 : Contrast (0-5V)* # 4 : RS (Register Select) # 5 : R/W (Read Write) – GROUND THIS PIN # 6 : Enable or Strobe # 7 : Data Bit 0 – NOT USED # 8 : Data Bit 1 – NOT USED # 9 : Data Bit 2 – NOT USED # 10: Data Bit 3 – NOT USED # 11: Data Bit 4 # 12: Data Bit 5 # 13: Data Bit 6 # 14: Data Bit 7 # 15: LCD Backlight +5V** # 16: LCD Backlight GND #import import RPi.GPIO as GPIO import os import socket import fcntl import struct import time from time import gmtime, strftime GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(4,GPIO.OUT)#pinlerin durmunu cikis yaptik TRIG = 27 #13 gpio number pin ECHO = 22 #15 gpio number pin