
به نام خدا
پروژه راه اندازی ماژول حسگر آلتراسونیک 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)