Raspberry Pi Mesafe Sensörü Kullanımı HC-SR04

Raspberry Pi Mesafe Sensörü Kullanımı HC-SR04

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ü

hc-sr04 mesafe sensörü kullanımı

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.

Raspberry Pi Mesafe Sensörü Devresi
Raspberry Pi Mesafe Sensörü Devresi

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

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar