طراحی ربات دنبال کننده خط با رزبری پای (مسیریاب)
سلام. طراحی ربات دنبال کننده خط با رزبری پای را آماده کردیم.
محتویات
آموزش ساخت ربات مسیریاب با رزبری پای
اگر به رباتیک علاقه داشته باشید حتما نام ربات دنبال کننده خط را شنیده اید. این ربات با یک جفت سنسور مادون قرمز کار میکند و قادر به دنبال کردن یک خط است. این ربات میتواند یک خط سیاه یا سفید را دنبال کند. فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.
فیلم زیر نحوه عملکرد این پروژه را نشان میدهد.
همچنین بقیه پروژه های ربات مسیریاب را ببینید :
- پروژه ربات دنبال کننده خط با آردوینو (آموزش کامل ساخت مسیریاب Arduino)
- آموزش کامل ساخت ماشین دنبال کننده خط ( پروژه ربات مسیریاب PIC )
- پروژه ربات مسیریاب با AVR و اتمل استودیو (آموزش کامل ساخت ربات دنبال کننده خط)
بخش سنسور مادون قرمز
ربات مسیریاب قادر است با کمک سنسور مادون قرمز خط را ردیابی کند. این سنسور دارای فرستنده IR و گیرنده IR است. فرستنده مادون قرمز نور را منتقل می کند و گیرنده (Photodiode) منتظر است تا نور منتقل شده بازتاب شود و برگردد. تمام سطوح نور IR را منعکس نمی کنند ، فقط سطح رنگ سفید می تواند آنها را کاملاً منعکس کند و سطح رنگ سیاه همانطور که در شکل زیر نشان داده شده است ، آنها را کاملاً جذب خواهد کرد.
در این پروژه Raspberry pi از دو سنسور IR برای بررسی اینکه آیا ربات روی خط حرکت میکند یا خیر استفاده میکنیم. این موتورها به جریان بالایی احتیاج دارند. از این رو از یک ماژول درایور موتور مانند L293D استفاده می کنیم.
هر سنسور مادون قرمز در یک طرف خط قرار می گیرد. اگر هیچ یک از سنسورها خط مشکی را تشخیص ندهند ، رزبری پای دستور می دهد که هر دو موتور حرکت کنند.
اگه سنسور سمت چپ روی خط سیاه قرار بگیرد ، ربات به سمت چپ حرکت میکند. یعنی موتور سمت راست خاموش میشود و فقط موتور سمت چپ حرکت میکند.
اگه سنسور سمت راست روی خط سیاه قرار بگیرد ، ربات به سمت راست میچرخد. یعنی موتور سمت چپ خاموش میشود و فقط موتور سمت راست حرکت میکند.
اگه هر دو سنسور روی خط سیاه باشند ، ربات متوقف میشوند.
مدار ربات دنبال کننده خط با رزبری پای
شماتیک مدار پروژه در تصویر زیر نشان داده شده است.
همانطور که میبینید مدار شامل دو سنسور مادون قرمز و یک جفت موتور متصل به رزبری پای است. ما مدار را با استفاده از یک پاور بانک تغذیه کرده ایم شما میتوانید از روش دلخواه خود استفاده کنید.
همانطور که در تصویر نشان داده شده است ، پین گوشه بالا سمت چپ PI پین + 5 ولت است ، ما از این پین +5V برای تغذیه سنسورهای IR استفاده می کنیم. سپس پین های GND را با استفاده از سیم سیاه به GND سنسور IR و ماژول درایور موتور وصل می کنیم.
برای رانندگی موتورها ، به چهار پین (A ، B ، A ، B) نیاز داریم. این چهار پین به ترتیب در 14 ،4 ، 17 و 18 GPIO متصل شده اند. سیم نارنجی و سفید با هم اتصال یک موتور را تشکیل می دهند. بنابراین برای دو موتور دو جفت مشابه داریم.
همانطور که در تصویر نشان داده شده است ، موتورها به ماژول درایور موتور L293D متصل می شوند و ماژول درایور توسط یک پاوربانک تغذیه می شود. اطمینان حاصل کنید که GND پاوربانک به GND Raspberry Pi وصل شده باشد ، فقط در این صورت اتصال شما کار خواهد کرد.
قطعات مورد نیاز
- رزبری پای 3 یا هر مدل دیگر
- سنسور مادون قرمز IR – دو عدد
- موتور DC Gear – دو عدد
- درایور موتور L293D
برنامه نویسی ربات دنبال کننده خط سیاه رزبری پای
هنگامی که با مونتاژ و اتصالات پایان رسید ، روبات شما باید چیزی شبیه به این باشد.
اکنون زمان آن رسیده که ربات خود را برنامه ریزی کنیم. کد کامل پروژه در انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را توضیح میدهیم.
ما میخواهیم پرونده GPIO را از کتابخانه وارد کنیم. کد زیر باعث میشود بتوانیم پین های GPIO برد رزبری پای را برنامه ریزی کنیم. همچنین مانند قسمت قبلی آموزش، نام GPIO را به IO تغییر میدهیم. و هر بار بخواهیم به پین های GPIO مراجعه کنیم از کلمه IO استفاده میکنیم.
import RPi.GPIO as IO
بعضی اوقات، پین های GPIO که سعی در استفاده از آنها داریم، ممکن است عملکردهای دیگری را انجام دهند. در این حالت، هنگام اجرای برنامه، هشدارهایی دریافت خواهیم کرد. دستور زیر به PI می گوید هشدارها را نادیده گرفته و به برنامه ادامه دهد.
IO.setwarnings(False)
ما می توانیم پین های GPIO رزبری پای یا شماره پین آن یا شماره GPIO آن ها وارد کنیم. به طور مثال پین 35 روی برد Raspberry pi، همان پین GPIO 19 است. بنابراین ما میتوانیم آن را با 19 یا 35 معرفی کنیم.
IO.setmode (IO.BCM)
ما 6 پین را به عنوان پین های ورودی و خروجی تنظیم میکنیم. دو پین اول به عنوان پین های ورودی برای خواندن مقادیر سنسور مادون قرمز هستند. چهار مورد بعدی پین های خروجی هستند که موتور های سمت راست و جپ را کنترل میکنند.
IO.setup(2,IO.IN) #GPIO 2 -> سنسور مادون قرمز سمت چپ IO.setup(3,IO.IN) #GPIO 3 -> سنسور مادون قرمز سمت راست IO.setup(4,IO.OUT) #GPIO 4 -> ترمینال A موتور راست IO.setup(14,IO.OUT) #GPIO 14 -> ترمینال B موتور راست IO.setup(17,IO.OUT) #GPIO 17 -> ترمینال A موتور چپ IO.setup(18,IO.OUT) #GPIO 18 -> ترمینال B موتور چپ
سنسور مادون قرمز اگر سطح سفید را حس کنید مقدار True را نشان میدهد و همانطور که در بالاتر گفته شد هنگامی که هر دو سنسور true باشند و سطح سفید را شناسایی کنند ربات رو به جلو حرکت میکند.
if(IO.input(2)==True and IO.input(3)==True): #هر سنسور روی سطح سفید IO.output(4,True) #1A+ IO.output(14,False) #1B- IO.output(17,True) #2A+ IO.output(18,False) #2B-
اگر یک سنسور روی خط سیاه باشد، ربات دنبال کننده خط باید در سمت مخالف آن حرکن کند. یعنی اگر سنسور سمت راست روی خط سیاه بود، ربات به سمت چپ حرکت میکند.
elif(IO.input(2)==False and IO.input(3)==True): #چرخش به راست IO.output(4,True) #1A+ IO.output(14,True) #1B- IO.output(17,True) #2A+ IO.output(18,False) #2B-
elif(IO.input(2)==True and IO.input(3)==False): #چرخش به چپ IO.output(4,True) #1A+ IO.output(14,False) #1B- IO.output(17,True) #2A+ IO.output(18,True) #2B-
اگر هر دو سنسور روی یک خط سیاه باشند، هر دو موتور غیرفعال شده و ربات می ایستد. این حالت اغلب در پایان مسیر رخ میدهد.
else: #توفق ربات IO.output(4,True) #1A+ IO.output(14,True) #1B- IO.output(17,True) #2A+ IO.output(18,True) #2B-
کد پایتون را در برد رزبری پای خود بارگذاری کرده و اجرا کنید. تنها کاری که باید انجام دهید این است که یک مسیر با استفاده از به طور مثال چسب برق مشکی روی یک سطح سفید بسازید. نیازی نیست سطح زمینه کاملا سفید باشد اما هرچقدر با رنگ مشکی فاصله داشته باشد بهتر است.
موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل