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

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

به نام خدا

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

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

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

سنسور اآلتراسونیک برای اندازه گیری فاصله با دقت و ثبت بالا استفاده می شود . این سنسور می تواند فاصله ی از ۲ تا ۴۰۰ سانتی متر را اندازه گیری کند.

این سنسور یک  موج فراصوت را در فرکانس ۴۰KHz در هوا منتشر می کند و اگر  در مسیر این موج یک شی قرار بگیرد ، موج به سنسور منعکس می شود .

با استفاده از زمانی که طول می کشد تا موج به  شی  برخورد کند و به سنسور برگردد، می توانیم فاصله را محاسبه کنیم .

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

سنسور آلتراسونیک از یک تکنیک به نام ECHO استفاده می کند. “ECHO” به معنی یک موج صوتی منعکس شده است. هنگامی که صوت پس از رسیدن به یک جسم بازتاب میشود، شما ECHO خواهید داشت.

ماژول HCSR04 موجب ارتعاش صدا در محدوده فراصوت می شود، زمانی که پین ​​”Trigger” را برای ۱۰us یک  کنیم باعث میشود که سنسور  ۸ موج  آلتراسونیک را با سرعت ارسال  کند و پس از برخورد با شی، توسط پین Echo دریافت میشود .

بسته به زمانی که  ارتعاش صدا برای بازگشت می گیرد ، در خروجی پالس مناسب  فراهم می شود. اگر جسم دور باشد، زمان بیشتری برای ECHO محاسبه می شود و عرض پالس خروجی بزرگ خواهد بود. و اگر مانع نزدیک باشد، ECHO سریعتر شنیده خواهد شد و پهنای پالس خروجی کوچکتر خواهد بود.

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

ما می توانیم فاصله جسم را بر اساس زمان صرف شده توسط موج آلتراسونیک برای بازگشت به سنسور محاسبه کنیم. از آنجا که زمان و سرعت صوت شناخته شده است، می توانیم فاصله را با فرمول زیر محاسبه کنیم.
فاصله = (زمان x سرعت صدا در هوا)\۲         سرعت صوت در هوا = ۳۴۳ متر بر ثانیه
این مقدار برای این بر ۲ تقسیم شده است که موج زمانی را برای رسیدن به جسم و همان مقدار زمان را برای برگشت به سنسور صرف  می کند پس زمان تا رسیدن صوت به سنسور نصف کل زمانی است که صرف این فرآیند می شود.

قطعات مورد نیاز اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04 :

در اینجا ما از  رزبری پای مدل B با Raspbian Jessie OS استفاده می کنیم.

رزبری پای با سیستم عامل از پیش نصب شده روی آن

بیشتر بخوانید...  ساخت ربات مسیریاب با آردوینو

سنسور آلتراسونیک HC-SR04

منبع تغذیه ۵ ولت

۳ قطعه مقاومت ۱KΩ

خازن ۱۰۰۰uf

ال سی دی کاراکتری ۱۶*۲

توضیحات مدار :

اتصالات بین رسپبری پای و LCD در جدول زیر آورده شده است:

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

در این مدار ما از ارتباط ۸ بیتی (D0-D7) برای اتصال LCD به رسپبری پای استفاده می کنیم . اگرچه این نوع ارتباط اجباری نیست و ما همچنان می توانیم از ارتباط ۴ بیتی استفاده کنیم (D4-D7) ، اما برنامه نویسی ارتباط ۴ بیتی برای تازه کاران کمی پیچیده خواهد شد بنابراین ما از ارتباط ۸ بیتی استفاده  می کنیم. در این قسمت ما ۱۰ پین از LCD را به رزبری پای متصل کرده ایم که ۸ پین از آنها مربوط به انتقال دیتا و ۲ پین دیگر برای کنترل هستند .

در پایین دیاگرام مداری برای اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04 آورده شده است:

اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

همانطور که در تصویر مشخص است سنسور آلترا سونیک HCSR04 چهار پایه دارد :

۱ -VCC : تغذیه ۵ ولت

۲-  TRIGGER : به این پایه باید یک پالس با سطح ۱ منطقی به مدت ۱۰us داده شود تا سنسور مسافت را بسنجد.

۳- ECHO : پالس خروجی را که مقدار فاصله را می توان از روی آن تشخیص داد،  پس از عمل TRIGGER فراهم می کند.

۴- GROUND

 

خروجی پین ECHO مقدار ۵ ولت را دارد که نمی تواند مستقیما به رزبری پای متصل شود . بنابراین ما از یک مدار تقسیم ولتاژ  (که از دو مقاومت R1 و R2  ساخته شده است) برای گرفتن ۳٫۳ ولت به جای ۵ ولت منطقی  استفاده می کنیم.

توضیح عملکرد :

مراحل کار اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

۱-تحریک کردن سنسور با یک کردن پین متصل به  trigger  سنسور به مدت ۱۰us

بیشتر بخوانید...  چگونگی عملکرد ای سی های تطبیق پذیر LM317/338/396 بعنوان تنظیم کننده ولتاژ

۲-صوت توسط سنسور ارسال می شود. پس از دریافت ECHO، ماژول سنسور خروجی متناسب با فاصله را فراهم می کند.

۳-ما زمانی که پالس خروجی از حالت صفر به یک منطقی می رود و زمانی که دوباره از یک به صفر منطقی بر می گردد را ثبت می کنیم.

۴- فاصله در صفحه LCD 16×2 نمایش داده می شود

دانلود کد های برنامه اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04 :

دانلود فایل
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)

*
*