پروژه الکترونیکپروژه های رباتپروژه های رزبری پای

پروژه جلوگیری از برخورد ربات به موانع با رزبری پای پایتون و التراسونیک

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

آموزش ساخت ربات هوشمند تشخیص مانع با Raspberry Pi

در این پروژه رزبری پای ما یک ربات اتوماتیک میسازیم که به طور مستقل از کنترل کننده های خارجی مثل جوی استیک و … حرکت میکند. این ربات در مسیر خود هر بار که نزدیک یک مانع شود توقف میکند و به عقب رفته و مسیر دیگری را انتخاب میکند. در این پروژه از Raspberry Pi و موتور DC + سنسور التراسونیم استفاده شده است.

ما در مورد ربات ها پروژه های فراوانی داریم که میتوانید از قسمت موضوعات همه آن ها را ببینید.

همچنین ما این پروژه را با آردوینو و PIC هم ساخته ایم :

قطعات مورد نیاز

  1. رزبری پای
  2. ماژول سنسور التراسونیک HC-SR04
  3. شاسی ROBOT با پیچ کامل
  4. موتور DC
  5. موتور درایور L293D
  6. مقاومت 1 کیلو اهم
  7. خازن 100 نانو فاراد

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

ما باید یه اطلاعات کلی نسبت به سنسور التراسونیک داشته باشیم. ما میدانیم که ارتعاش صدا نمیتواند از طریق جامدات نفوذ کند. بنابراین وقتی یک منبع صدا باعث ایجاد ارتعاش شود ، آن ارتعاش از طریق هوا با سرعت 220 متر در هر ثانیه حرکت میکند. همانطور که گفتیم این ارتعاش ها نمیتوانند از طریق جامدات نفوذ کنند ، یعنی وقتی به یک سطح مثل دیوار برخورد کنند ، با همان سرعت برمیگردند به سمت سنسور ، این تکنیک اکو (ECHO) نامگذاری شده است.

پروژه التراسونیک آردوینو
پروژه التراسونیک آردوینو

سنسور التراسونیک HC-SR04 یک سیگنال خروجی متناسب با فاصله بر اساس اکو فراهم می کند. سنسور در اینجا یک لرزش صدا را در محدوده سنسور ایجاد می کند، و بعد از فرستادن یک ارتعاش ، برای بازگشت صدا منتظر می ماند.

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

فرستنده یک موج التراسونیک را در فرکانس 40 هرتز ساطع می کند ، این موج از طریق هوا عبور می کند و هنگامی که یک جسم را حس می کند باز میگردد. امواج برگشتی توسط گیرنده مشاهده می شود. اکنون می دانیم زمان لازم برای بازتاب و بازگشت این موج گرفته شده است و سرعت موج التراسونیک 3400 سانتی متر در ثانیه است. با استفاده از این اطلاعات و فرمول زیر میتوان فاصله را حساب کرد [ فاصله = سرعت موج * زمان ]

ربات چگونه موانع را تشخیص میدهد ؟

هنگامی که ربات روشن می شود و شروع به کار می کند ، Raspberry Pi فاصله اشیا را در جلوی آن با استفاده از ماژول سنسور اولتراسونیک اندازه گیری می کند و در یک متغیر ذخیره می کند. سپس RPi این مقدار را با مقادیر از پیش تعریف شده مقایسه می کند و بر این اساس تصمیم می گیرد برای حرکت روبات چپ ، راست ، جلو یا عقب حرکت کند.

حتما ببینید :  تشخیص پلاک خودرو با رزبری پای و پردازش تصویر OpenCV

در این پروژه ، ما میزان فاصله خطرناک را در رزبری پای، 15 سانتی متر را انتخاب کرده ایم. هرگاه ربات فاصله ای کمتر از 15 سانتی متر از هر جسم داشته باشد، Raspberry Pi ربات را متوقف کرده و به عقب حرکت می کند و سپس آن را به چپ یا راست می چرخاند. اکنون قبل از اینکه دوباره به جلو حرکت کند، Raspberry Pi دوباره بررسی می کند که آیا مانعی در محدوده 15 سانتی متری سمت راست یا چپ وجود دارد یا خیر، اگر وجود داشته باشد ربات دوباره متوقف میشود و به عقب بر میگردد و اگر وجود نداشته باشد بعد از تغییر مسیر به راه خود ادامه میدهد.

سنسور التراسونیک امواج صوتی را به طور مداوم ارسال میکند و در صورتی که بازتاب آن را در مدت زمان کمی دریافت کند، میفهمد که به مانع نزدیک شده است و باید توقف کند. رزبری پای زمان بین ارسال و دریافت موح را بررسی میکند و سپس فاصله را محاسبه میکند. سرعت صدا حدود 340 متر بر ثانیه است. بنابراین میتوان فاصله را با استفاده از فرمول زیر محاسبه کرد.

فاصله = (زمان / 2) * سرعت صدا

سرعت صدا تقریباً 340 متر در ثانیه است.

فاصله بر حسب سانتی متر با به صورت زیر محاسبه میکنیم :

  pulse_start = time.time()
  while GPIO.input(ECHO)==1:
  GPIO.output(led, False) 
  pulse_end = time.time()
  pulse_duration = pulse_end - pulse_start
  distance = pulse_duration * 17150
  distance = round(distance,2)
  avgDistance=avgDistance+distance

جایی که pulse_duration زمان بین ارسال و دریافت سیگنال اولتراسونیک است.

توضیحات مدار و شماتیک پروژه

مدار پروژه اجتناب از برخورد ربات به مانع بسیار ساده است. همانطور که در تصویر زیر میبنید یک ماژول التراسونیک به پین های GPIO 17 و 27 رزبری پای متصل میشود. موتور درایور L293D برای کنترل موتور ها استفاده میشود و پین های 2 ، 7 ، 10 و 15 آن به پین های GPIO شماره 12 ، 16 ، 20 ، 21 Raspberry Pi متصل میشود. در این پروژه ما از دو موتور DC برای هدایت ربات استفاده کرده ایم. یک موتور به پین های خروجی 6 و 3 موتور درایور و دیگری به پین های 11 و 14 موتور درایور متصل میشود.

آموزش ساخت ربات هوشمند تشخیص مانع با Raspberry Pi

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.

توضیحات برنامه نویسی ربات با پایتون

ما در اینجا از زبان پایتون برای برنامه استفاده می کنیم. کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.

قسمت برنامه نویسی این پروژه نقش بسیار مهمی در انجام کلیه عملیات ها دارد. اول از همه، ما کتابخانه های مورد نیاز را فراخوانی میکنیم. متغیرها را ایجاد می کنیم و پین ها را برای سنسور اولتراسونیک ، موتور و قطعات تعریف می کنیم.

import RPi.GPIO as GPIO // کتابخانه پین های GPIO
import time // کتابخانه تاخیر

#Import time library
GPIO.setwarnings(False) // جلوگیری از هشدار ها
GPIO.setmode(GPIO.BCM) 

TRIG = 17 // پین تریگر التراسونیک
ECHO = 27 // پین اکو التراسونیک
... .....
.... .....

سپس ما برخی از توابع را با نام های def forward(), def back(), def left(), def right() ایجاد میکنیم که برای حرکن دادن ربات استفاده میشود.

سپس در برنامه، سنسور اولتراسونیک را فعال کرده و مدت زمان بین ارسال و دریافت موج را اندازه گیری میکنیم و سپس فاصله را اندازه میگیریم.

i=0
 avgDistance=0
 for i in range(5):
  GPIO.output(TRIG, False)
  time.sleep(0.1)

  GPIO.output(TRIG, True)
  time.sleep(0.00001)
  GPIO.output(TRIG, False)

  while GPIO.input(ECHO)==0:
       GPIO.output(led, False)
  pulse_start = time.time()

  while GPIO.input(ECHO)==1:
       GPIO.output(led, False) 
  pulse_end = time.time()
  pulse_duration = pulse_end - pulse_start

  distance = pulse_duration * 17150
  distance = round(distance,2)
  avgDistance=avgDistance+distance

در آخر کدی را مینویسیم که تعیین  کند اگر ربات در فاصله کم تر از 15 سانتی متری موانع بود توقف کند و به عقب برگردد.

 if avgDistance < 15: // اگر فاصله کمتر از 15 بود
    count=count+1 // به متغیر count یک عدد اضافه میشود
    stop() // توقف
    time.sleep(1)
    back() // رو بهرعقب
    time.sleep(1.5)
    if (count%3 ==1) & (flag==0): 
     right() // رو به راست
     flag=1
    else: // اگر در سمت راست مانعی بود
     left() // رو به چپ
     flag=0
    time.sleep(1.5)
    stop() // توقف
    time.sleep(1)
 else: // اگر مانعی نبود
    forward() // رو به جلو
    flag=0

فیلم عملکرد ربات

در نهایت ما یک ربات میسازیم که میتواند آزادانه حرکت کند و هرگاه مانعی را دید مسیر خود را عوض کند.

برای دانلود فیلم عملکرد پروژه ربات عدم برخورد با مانع کلیک کنید.

موارد موجود در فایل : سورس کامل ، شماتیک کامل

برای دانلود فایل های پروژه ثبت نام کنید، تنها چند ثانیه زمان لازم است. از طریق فرم زیر اقدام کنید.

ایمیل خود را وارد کنید

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
برچسب ها

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن