ربات تعقیب خط یک ربات بسیار جذاب و البته ساده برای علاقه مندان به رباتیک است. در این مقاله، ابتدا به طرز کار این نوع ربات و سپس به ساخت آن با میکروکنترلر PIC16F877A پرداخته میشود. PIC16F877A یک میکروکنترلر 40 پایه تولید شرکت Microchip است که در این پروژه استفاده شده است.
اگر شما به رباتیک علاقهمند باشید حتما با “ربات تعقیب خط” آشنا هستید. این ربات میتواند یک مسیر مشخص را با استفاده از یک جفت سنسور و موتور دنبال کند. یک مثال خوب از این ربات، رباتهای انبار شرکت آمازون به اسم Kiva است. بنابراین، میتوان گفت که ربات تعقیب خط بسیار قابل توسعه و پرکاربرد است.
قطعات مورد نیاز
- میکروکنترلر PIC16F877A
- دو عدد سنسور مادون قرمز (IR)
- دو عدد موتورگیربکس DC
- درایور موتور L293D
- شاسی (بدنه) ربات
- باتری، پاوربانک یا هر نوع منبع تغذیه در دسترس
طرز کار ربات تعقیب خط
ربات تعقیب خط به کمک سنسورهای مادون قرمز یک مسیر را دنبال میکند. این سنسور دارای یک فرستنده و یک گیرنده مادون قرمز است. نور توسط فرستنده IR یا LED مادون قرمز ارسال میشود و به سطح برخورد میکند و سپس توسط گیرنده IR دریافت میشود. نور IR تنها به شرطی به سمت گیرنده حرکت میکند که توسط یک سطح بازتاب شود. در واقع، تمام سطوح نور IR را بازتاب نمیکنند. همانطور که در شکلهای زیر نشان داده شده است، سطح سفید رنگ میتواند نور را به طور کامل بازتاب کند و سطح مشکی رنگ نور را به طور کامل جذب میکند.
در این ربات، برای بررسی اینکه ربات در مسیر درست حرکت کند از دو سنسور IR و برای نگه داشتن ربات در مسیر درست از دو موتور استفاده شده است. موتورها جریان زیادی برای راهاندازی نیاز دارند و همچنین باید حرکت آنها را به صورت جداگانه کنترل کرد، بنابراین به یک درایور موتور مثل ماژول L293D نیاز است. علاوه بر این، در این ربات از یک میکروکنترلر PIC برای کنترل موتورها بر اساس خروجی سنسورهای مادون قرمز استفاده میشود. بلوک دیاگرام ساده ربات در شکل زیر نشان داده شده است.
دو سنسور IR در دو طرف خط قرار میگیرند و اگر هیچ کدام از آنها خط مشکی را تشخیص ندادند، میکروکنترلر PIC به موتورها فرمان میدهد که رو به جلو به مسیر خود ادامه دهند.
اگر سنسور سمت چپ روی خط مشکی قرار بگیرد، میکروکنترلر با چرخاندن تنها چرخ سمت راست، ربات را به سمت چپ میچرخاند تا در مسیر درست قرار بگیرد.
اگر سنسور سمت راست روی خط مشکی قرار بگیرد، میکروکنترلر با چرخاندن تنها چرخ سمت چپ، ربات را به سمت راست میچرخاند تا در مسیر درست قرار بگیرد.
اگر هر دو سنسور خط مشکی را تشخیص دهند، ربات توقف میکند.
تا اینجا درباره چگونگی حرکت ربات بدون خارج شدن از مسیر، توضیح داده شد. حالا به مدار و کدنویسی آن پرداخته میشود.
شماتیک مدار و توضیحات آن
شماتیک مدار ربات تعقیب خط بر پایه میکروکنترلر PIC در تصویر زیر نمایش داده شده است:
این مدار از دو سنسور IR و یک جفت موتورگیربکس DC به همراه یک ماژول L293D تشکیل شده است. به دلیل اینکه جریان خروجی میکروکنترلر PIC نمیتواند جریان موردنیاز برای راهاندازی موتورها را تامین کند، از درایور موتور در این ربات استفاده شده است. همانطور که در شماتیک هم مشخص است، تغذیه ماژول L293D به طور مستقیم از منبع پنج ولت تامین میشود. این ماژول از طریق چهار پایه (دو پایه برای هر موتور) برای کنترل حرکت موتورها به PIC متصل میشوند. از طرفی، خروجی سنسورهای IR به عنوان ورودی به میکروکنترلر PIC داده میشود تا حرکت موتورها بر اساس آن انجام شود. در صورتی که در مسیر سنسورها سطح سفید قرار بگیرد، خروجی آنها high یا 1 است و با تشخیص سطح مشکی خروجی آن ها low یا صفر میشود.
در مداری که به طور واقعی ساختهایم، از پورت USB 5 ولت یک پاوربانک برای تغذیه PIC، سنسورها و موتورها استفاده شده است. در واقع رگولاتور 7805 که در شماتیک مدار نشان داده شده است را در نمونه واقعی آن حذف کردیم. البته شما میتوانید مانند شماتیک عمل کنید و از باتری 12 یا 9 ولت و رگولاتور 7805 برای ساخت ولتاژ 5 ولت استفاده کنید.
برنامه نویسی میکروکنترلر PIC
حالا که سختافزار ربات آماده شده است، نوبت به کدنویسی آن میرسد. ابتدا نکات اصلی کد توضیح داده میشود و در انتهای مقاله برنامه کامل این ربات قابل مشاهده است.
با دستورات زیر، ورودی یا خروجی بودن پورتهای میکروکنترلر تعیین میشود. پورتهای دو سنسور مادون قرمز به صورت ورودی و پورتهای موتور به صورت خروجی تعریف میشوند.
TRISD2 = 1; TRISD3 = 1; //Bath the IR sensor pins are declared as input
TRISC4 = 0; TRISC5 = 0; //Motor 1 pins declared as output
TRISC6 = 0; TRISC7 = 0; //Motor 2 pins declared as output
حالا باید خروجی سنسورها خوانده و مطابق با آن به موتور فرمان داده شود. برای مثال، اگر خروجی دو سنسور high باشد به این معنا است که هیچ خط مشکی تشخیص داده نشده است و موتورها باید به حرکت خود ادامه دهند. در خطوط زیر دستورات این حالت آمده است:
if (RD2==1 && RD3==1) //Both sensor not over balck line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=0; //Motor 2 forward
}
اگر سنسور سمت چپ روی خط مشکی قرار بگیرد، ربات باید به سمت راست چرخش پیدا کند که این کار با ثابت نگه داشتن موتور 1 و حرکت دادن موتور 2 انجام میشود. به این نوع از چرخش، چرخش تفاضلی گفته میشود.
else if (RD2==0 && RD3==1) //Left sensor is over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=0; //Motor 2 forward
}
به طور مشابه، اگر سنسور سمت راست خط مشکی را تشخیص دهد، با ثابت نگه داشتن موتور 2 و حرکت دادن موتور 1، ربات به سمت چپ میچرخد.
else if (RD2==1 && RD3==0) //Right sensor is over black line
{
RC4=0; RC5=1; //Motor 1 forward
RC6=1; RC7=1; //Motor 2 stop
}
در نهایت، اگر هر دو سنسور خط مشکی را تشخیص دهند، ربات توقف میکند که این کار با high کردن تمام پایههای هر دو موتور انجام میشود. با کد زیر، این حالت به ربات اضافه میشود.
else //Both Sensor over black line
{
RC4=1; RC5=1; //Motor 1 stop
RC6=1; RC7=1; //Motor 2 stop
}
برنامه آماده است و میتوان میکروکنترلر PIC را با هر نوع پروگرامر مانند Pickit پروگرام کرد.
پیادهسازی ربات تعقیب خط
حالا که کد و سختافزار ربات آماده است، وقت آن است که ربات در عمل پیادهسازی شود. همانطور که قبلا هم گفته شد، در اینجا از پاوربانک برای تغذیه ربات استفاده شده است. بنابراین، با اتصال پاوربانک به بخشهای مختلف ربات و آپلود کد روی میکروکنترلر ربات آماده است. میتوانید ربات را روی یک مسیر مشکی بگذارید و ربات باید خط را دنبال کند!
در مراحل ساخت این ربات ممکن است با مشکلاتی روبهرو شوید. برای مثال اگر چرخهای ربات برعکس چرخید به راحتی با تعویض پلاریته موتور آن چرخ، میتوانید این مشکل را حل کنید. اگر ربات از خط منحرف شد، با جابهجا کردن سنسورها این مشکل قابل حل است.
امیدواریم که این مقاله برایتان مفید باشد و از ساخت یک ربات تعقیب خط لذت ببرید. در صورت داشتن هر سوال یا مشکل در پیادهسازی این مقاله، آن را حتما در قسمت نظرات با ما مطرح کنید.