راه انداری ماژول فاصله‌سنج SR04 توسط رزبری پای

الکترونیک و رباتیک -> ماژول ها و سنسور ها 698 2 کاربر آکادمی پارتینه

ماژول‌های فاصله‌سنج آلتراسونیک (فراصوت) ماژول‌هایی هستند که به منظور سنجش دقیق فاصله‌ی یک شی و تشخیص حرکت اجسام استفاده می‌شوند. اساس کار این نوع ماژول‌ها مشابه تشخیص ویژگی‌های هدف از طریق تحلیل بازتاب امواج رادیویی یا صوتی است. امواج ارسال شده از حسگر آلتراسونیک پس از برخورد با یک مانع به آن برگشته و توسط گیرنده حسگر دریافت می‌شوند. از این طریق و با در نظر گرفتن زمان بازگشت موج و کیفیت امواج بازتابی می‌توان به اطلاعاتی راجع به عمق، نوع و سرعت مانع به دست آورد. ماژول آلتراسونیک مجموعه حسگر و مدار الکترونیکی واسط است.

 

مواد اولیه :
# عنوان تعداد لینک
0 برد رزبری پای ۳ (Raspberry Pi 3 ) مدل +B 1 لینک خرید
1 ماژول تشخیص فاصله آلتراسونیک HC-SR04 1 لینک خرید
2 سیم جامپر 1 لینک خرید

مرحله 1 : اتصالات و دیاگرام مداری

یکی از مواردی که هنگام سیم‌بندی رزبری پای و ماژول باید در نظر گرفته شوند استفاده از مدار مقسم ولتاژ روی پین Echo ماژول به منظور کاهش سطح ولتاژ اعمالی به رزبری پای توسط ماژول است. مقادیر مقاومت‌هایی که جهت رسیدن به ولتاژ مطلوب 680 اهم و 1.5 کیلواهم است. در صورت اتصال مستقیم پایه‌ی ECHO به رزبری پای ولتاژ 5 ولت به پین GPIO وارد شده و باعث آسیب رسیدن به آن می‌شود.

 

مرحله 2 : کدنویسی و تنظیمات نرم‌افزاری

روند عملکرد برنامه به این صورت است که بعد از تریگرشدن ماژول توسط پایه‌ی Trig در یک حلقه‌ی while، منتظر high شدن پایه‌ی Echo ماژول می‌مانیم. سپس زمان فعلی سیستم را دریافت کرده و در یک متغیر ذخیره می‌کنیم. مجددا در یک حلقه‌ی while دیگر منتظر low شدن پایه‌ی Echo میمانیم و مجددا فعلی سیستم را خوانده و در یک متغیر دیگر ذخیره می‌کنیم. به این ترتیب با تفریق زمان ارسال امواج از زمان دریافت امواج می‌توان به فاصله‌ی جسمی که روبه‌روی این ماژول قرار گرفته را بدست آورد.

#Libraries
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

TRIG = 16
ECHO = 18
i=0

GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)

GPIO.output(TRIG, False)
print "Calibrating....."
time.sleep(2)

print "Place the object......"


try:
    while True:
       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+1.15, 2)
  
       if distance<=20 and distance>=5:
          print "distance:",distance,"cm"
          i=1
          
       if distance>20 and i==1:
          print "place the object...."
          i=0
       time.sleep(2)

except KeyboardInterrupt:
     GPIO.cleanup()

کد :