رباتیک و هوافضا

پروژه راه اندازی ماژول حسگر آلتراسونیک HC-SR04 با استفاده از رزبری پای

به نام خدا

پروژه راه اندازی ماژول حسگر آلتراسونیک HC-SR04 با استفاده از رزبری پای

 

 

در این پروژه قصد راه اندازی ماژول حسگر آلتراسونیک HC-SR04 را با استفاده از رزبری پای برای اندازه گیری فاصله را داریم. در ادامه به توضیح این سنسور می پردازیم.

حسگر اولتراسونیک HC-SR04 :

حسگر آلتراسونیک برای اندازه گیری فاصله با دقت بالا استفاده می شود .این حسگر می تواند فاصله ۲ تا ۴۰۰ سانتی متر( ۱ اینچ تا ۱۳ فوت ) را اندازه گیری نماید.این حسگر موج فراصوت در فرکانس ۴۰ کیلوهرتز منتشر می کند و اگر مانعی سر راه ببیند به آن برخورد کرده و به سمت حسگر باز می گردد.با محاسبه زمان رفت و برگشت موج می توان فاصله را محاسبه کرد.

 

 

 

ما میتوانیم با محاسبه زمان رفت و برگشت موج فراصوت فاصله را محاسبه کنیم.با داشتن زمان و سرعت صوت و استفاده از فرمول زیر می توان فاصله را تعیین کرد.
۲/زمان * سرعت صوت در هوا(۳۴۳ m/s) = فاصله

قطعات مورد نیاز پروژه راه اندازی ماژول حسگر آلتراسونیک HC-SR04 با استفاده از رزبری پای:

در اینجا از رزبری پای ۲ مدل B و سیستم عامل رزبین جسی استفاده کرده ایم.تمامی نرم افزارها و سخت افزارها پیش از این بحث شده اند.
رسپبری پای به همراه سیستم عامل از پیش نصب شده
حسگر آلتراسونیک HC-SR04
منبع تغذیه ۵ ولتی
۳ عدد مقاومت ۱k
خازن ۱۰۰میکروفاراد
ال سی دی ۲*۱۶

بیشتر بخوانید...  پروژه ی ساخت ایستگاه هواشناسی کوچک با استفاده از آردوینو

 

 

تشریح مدار و شماتیک پروژه راه اندازی ماژول حسگر آلتراسونیک HC-SR04 با استفاده از رزبری پای :

اتصالات میان رزبری پای و ال سی دی در جدول ذیل آمده است. همینطو در ادامه می توانید شماتیک مدار را مشاهده کنید.

 

 

 

LCD connection

Raspberry Pi connection

GND

GND

VCC

+۵V

VEE

GND

RS

GPIO17

R/W

GND

EN

GPIO27

D0

GPIO24

D1

GPIO23

D2

GPIO18

D3

GPIO26

D4

GPIO5

D5

GPIO6

D6

GPIO13

D7

GPIO19

 

 

 

دانلود کد برنامه ی پروژه راه اندازی ماژول حسگر اولتراسونیک HC-SR04 با استفاده از رزبری پای :

دانلود فایل
import time
import RPi.GPIO as IO    #calling for header file which helps in using GPIOs of PI
string_of_characters = 0 
IO.setwarnings(False)    #do not show any warnings
IO.setmode (IO.BCM)      #programming the GPIO by BCM pin numbers. (like PIN29 as GPIO5)
IO.setup(17,IO.OUT)      #initialize GPIO17,27,24,23,18,26,5,6,13,19,21 as an output
IO.setup(27,IO.OUT)
IO.setup(24,IO.OUT)
IO.setup(23,IO.OUT)
IO.setup(18,IO.OUT)
IO.setup(26,IO.OUT)
IO.setup(5,IO.OUT)
IO.setup(6,IO.OUT)
IO.setup(13,IO.OUT)
IO.setup(19,IO.OUT)
IO.setup(21,IO.OUT)
IO.setup(16,IO.IN)      #initialize GPIO16 as an input
def send_a_command (command):  #steps for sending a command to 16x2 LCD
    pin=command
    PORT(pin);
    IO.output(17,0)
    #PORTD&= ~(1<<RS);
    IO.output(27,1)
    #PORTD|= (1<<E);
    time.sleep(0.001)
    #_delay_ms(50);
    IO.output(27,0)
    #PORTD&= ~(1<<E);
    pin=0
    PORT(pin); 
def send_a_character (character):  #steps for sending a character to 16x2 LCD
    pin=character
    PORT(pin);
    IO.output(17,1)
    #PORTD|= (1<<RS);
    IO.output(27,1)
    #PORTD|= (1<<E);
    time.sleep(0.001)
    #_delay_ms(50);
    IO.output(27,0)
    #PORTD&= ~(1<<E);
    pin=0
    PORT(pin);
def PORT(pin):                    #assigning level for PI GPIO for sending data to LCD through D0-D7
    if(pin&0x01 == 0x01):
        IO.output(24,1)
    else:
        IO.output(24,0)
    if(pin&0x02 == 0x02):
        IO.output(23,1)
    else:
        IO.output(23,0)
    if(pin&0x04 == 0x04):
        IO.output(18,1)
    else:
        IO.output(18,0)
    if(pin&0x08 == 0x08):
        IO.output(26,1)
    else:
        IO.output(26,0)    
    if(pin&0x10 == 0x10):
        IO.output(5,1)
    else:
        IO.output(5,0)
    if(pin&0x20 == 0x20):
        IO.output(6,1)
    else:
        IO.output(6,0)
    if(pin&0x40 == 0x40):
        IO.output(13,1)
    else:
        IO.output(13,0)
    if(pin&0x80 == 0x80):
        IO.output(19,1)
    else:
        IO.output(19,0)
def send_a_string(string_of_characters):
  string_of_characters = string_of_characters.ljust(16," ")
  for i in range(16):
    send_a_character(ord(string_of_characters[i]))  #send characters one by one through data port
    
while 1:
    send_a_command(0x38);  #16x2 line LCD
    send_a_command(0x0E);  #screen and cursor ON
    send_a_command(0x01);  #clear screen
    time.sleep(0.1)                #sleep for 100msec
    
    IO.setup(21,1)
    time.sleep(0.00001)
    IO.setup(21,0)           #sending trigger pulse for sensor to measure the distance
        
    while (IO.input(16)==0):
        start = time.time()  #store the start time of pulse output         
            
    while (IO.input(16)==1):
        stop = time.time()   #store the stop time 
      
            
    distance = ((stop - start)*17150)  #calculate distance from time
    distance = round(distance,2)       #round up the decimal values
    if(distance<400):                  #if distance is less than 400 cm, display the result on LCD 
        send_a_command(0x80 + 0);
        send_a_string ("Dist=%s cm"% (distance));
        time.sleep(0.15)
        
    if(distance>400):                  #If distance is more than 400cm, just print 400+ on LCD
        send_a_command(0x80 + 0);
        send_a_string ("Dist= 400+ cm");
        time.sleep(0.15)

 

بیشتر بخوانید...  آموزش کامل ساخت شارژر خورشیدی همراه با تصویر

دیدگاه‌ها (0)

*
*