ساخت ربات مسیریاب با استفاده از آردوینو:
یک ربات مسیریاب همان طور که از نامش مشخص است، یک وسیله حرکتی اتوماتیک است که خطوط مشخص شده بر روی زمین را دنبال می کند. به طور معمول خطوطی که ربات مسیر یاب دنبال می کند، مشکی رنگ در پس زمینه سفید هستند، ولی این امکان هم وجود دارد که برعکس این حالت باشد، یعنی خطوط سفید در پس زمینه مشکی. برخی از ربات های مسیریاب پیشرفته به جای رنگ، از میدان مغناطیسی نامرئی به عنوان مسیرهای خود استفاده می کنند.
از جمله کاربرد های فراوان ربات های مسیریاب می توان به این موارد اشاره کرد: در صنعت به منظور کمک به خط تولید قطعات، در برنامه های نظامی، سرویس های تحویل خدمات و … .
ساخت ربات مسیریاب یکی از اولین پروژه هایی است که دانش آموزان و افراد علاقه مند به رباتیک که تازه وارد این حوزه شده اند، آن را پیاده سازی می کنند.
ما در این پروژه ساخت ربات مسیریاب با استفاده از آردوینو را همراه با توضیحات کامل از چگونگی عملکرد و رفتار ربات ارائه می دهیم.
فهرست مطالب:
- شماتیک مدار
- قطعات مورد نیاز
- بلوک دیاگرام پروژه
- ساخت ربات مسیریاب با استفاده از آردوینو
- کد برنامه
- نحوه عملکرد ربات مسیریاب
شماتیک و اتصالات مدار:
قطعات مورد نیاز برای ساخت ربات مسیریاب با استفاده از برد آردوینو:
- ۱ عدد برد آردوینو UNO
- ۲ عدد موتور گیربکس دار
- بدنه ربات
- ۲ عدد ماژول سنسور مادون قرمز
- چسب برق مشکی
- سیم های رابط
- منبع تغذیه
- کانکتور باتری
- نگه دارنده باتری
نکته: ما در این پروژه از ماژول آماده سنسور مادون قرمز که شامل یک فرستنده و یک گیرنده مادون قرمز می باشد، استفاده می کنیم. در صورتی که شما به این ماژول دسترسی ندارید، نحوه ساخت آن را به شما آموزش می دهیم.
بلوک دیاگرام پروژه:
ربات مسیریاب ساخته شده در این پروژه به چهار بخش اصلی تقسیم می شود که در تصویر زیر مشاهده می کنید:
توضیحات بلوک دیاگرام ربات مسیریاب:
سنسورها(سنسور مادون قرمز): ما در این پروژه از ماژول سنسور مادون قرمز به عنوان سنسور تشخیص خط استفاده می کنیم. این ماژول از یک گیرنده مادون قرمز، یک فرستنده مادون قرمز، یک مقایسه گر و تعدادی دیگری از قطعات تشکیل می شود.
همان طور که بیان شد، ما از ماژول آماده سنسور مادون قرمز استفاده می کنیم. در صورتی که شما به این ماژول دسترسی ندارید می توانید با کمک شماتیک مدار زیر این ماژول را بسازید.
چگونگی عملکرد سنسور مادون قرمز در این پروژه در بخش های دیگر این آموزش بیان خواهد شد.
کنترلر(برد آردوینو UNO): برد آردوینو UNO به عنوان کنترلر اصلی در این پروژه به کار رفته است. برد آردوینو داده های ورودی را از سنسور مادون قرمز دریافت می کند و دستورات لازم را به درایور موتورها برای کنترل حرکت ربات ارسال می کند.
درایور موتور(L293D): در این پروژه از آی سی درایور موتور L293D استفاده می شود. این درایور موتور دستورات حرکتی را از برد آردوینو دریافت می کند.
نکته: دقت کنید که تغذیه موتور باید توسط آی سی درایور موتور تامین گردد، بنابراین منبع تغذیه ای را انتخاب کنید که توانایی تامین توان تمامی قطعات این ربات از جمله موتورها را داشته باشد.
موتورها(موتور گیربکس دار): ما برای چرخ های ربات از دو عدد موتور گیربکس دار استفاده می کنیم. مزیت موتورهای گیربکس دار نسبت به موتورهای معمولی این است که قدرت بالاتری داشته و می توانند بار بیشتری را حمل کنند.
ما در این پروژه ساخت ربات مسیریاب با استفاده از برد آردوینو را انجام می دهیم. نحوه عملکرد این پروژه بسیار ساده است: خط سیاه را تشخیص بده و آن را دنبال کن.
همان طور که در بلوک دیاگرام پروژه بیان شد، ما به سنسورهای مادون قرمز برای تشخیص خط احتیاج داریم. فرستنده و گیرنده مادون قرمز بر روی ماژول در نزدیکی یکدیگر نصب شده اند، به گونه ای که اگر نور مادون قرمز ساطع شده توسط فرستنده به سطحی برخورد کند و بازتاب یابد، توسط گیرنده مادون قرمز به راحتی دریافت می شود.
در تصویر زیر نحوه عملکرد و بازتابش نور مادون قرمز در برخورد با صفحات رنگی و صفحه مشکی رنگ نشان داده شده است. همان طور که مشخص است، میزان بازتابش نور مادون قرمز از صفحات رنگی به مراتب خیلی بیشتر از بازتابش از صفحات مشکی رنگ است، که باعث می شود گیرنده مادون قرمز این بازتابش را تشخیص دهد.
اما زمانی که نور مادون قرمز به صفحات مشکی رنگ برخورد می کنند، این نور بازتابش کمتری داشته و بیشتر جذب می شود، در نتیجه گیرنده مادون قرمز نمی تواند بازتابش مناسبی را دریافت کند.
با توجه به توضیحات بیان شده، ما ماژول سنسور مادون قرمز را بر روی بدنه ربات مسیریاب به گونه ای قرار می دهیم که وقتی ربات در مسیر مستقیم حرکت می کند، این سنسورها در دو طرف خط مشکی رنگ قرار بگیرند. نحوه قرارگیری سنسورها در زمان حرکت ربات را در تصویر زیر مشاهده می کنید:
زمانی که ربات در مسیر مستقیم حرکت می کند، هر دو سنسور منتظر برخورد با خط مشکی هستند. به طور مثال اگر سنسور شماره ۱ طبق تصویر زیر خط سیاه را تشخیص دهد، بدین معناست که خط مشکی به سمت راست پیچیده است.
در این وضعیت برد آردوینو سیگنال را دریافت کرده و دستورات لازم را به درایور موتورها ارسال می کند تا چرخش به سمت راست اتفاق بیافتد. در این شرایط سرعت موتور سمت راست کاهش یافته و سرعت موتور سمت چپ تغییری نمی کند.
به طور مشابه وقتی سنسور شماره ۲ خط مشکی را تشخیص دهد، به این معناست که پیچش به سمت چپ وجود دارد و ربات مسیریاب باید به سمت چپ چرخش کند. به این منظور سرعت موتور سمت چپ کاهش یافته و سرعت موتور سمت راست تغییر نمی کند، در نتیجه چرخش به سمت چپ اتفاق می افتد.
برد آردوینو UNO به صورت پیوسته داده های دریافتی از سنسورها را بررسی کرده و موتورها را کنترل می کند.
کد برنامه:
int mot1=9;
int mot2=6;
int mot3=5;
int mot4=3;
int left=13;
int right=12;
int Left=0;
int Right=0;
void LEFT (void);
void RIGHT (void);
void STOP (void);
void setup()
{
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(mot3,OUTPUT);
pinMode(mot4,OUTPUT);
pinMode(left,INPUT);
pinMode(right,INPUT);
digitalWrite(left,HIGH);
digitalWrite(right,HIGH);
}
void loop()
{
analogWrite(mot1,255);
analogWrite(mot2,0);
analogWrite(mot3,255);
analogWrite(mot4,0);
while(1)
{
Left=digitalRead(left);
Right=digitalRead(right);
if((Left==0 && Right==1)==1)
LEFT();
else if((Right==0 && Left==1)==1)
RIGHT();
}
}
void LEFT (void)
{
analogWrite(mot3,0);
analogWrite(mot4,30);
while(Left==0)
{
Left=digitalRead(left);
Right=digitalRead(right);
if(Right==0)
{
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1)
{
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot1,255);
analogWrite(mot2,0);
}
analogWrite(mot3,255);
analogWrite(mot4,0);
}
void RIGHT (void)
{
analogWrite(mot1,0);
analogWrite(mot2,30);
while(Right==0)
{
Left=digitalRead(left);
Right=digitalRead(right);
if(Left==0)
{
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1)
{
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot3,255);
analogWrite(mot4,0);
}
analogWrite(mot1,255);
analogWrite(mot2,0);
}
void STOP (void)
{
analogWrite(mot1,0);
analogWrite(mot2,0);
analogWrite(mot3,0);
analogWrite(mot4,0);
}
نکته:
- برای بهبود کیفیت و عملکرد ربات مسیریاب و تشخیص بهتر خطوط به جای اینکه از دو سنسور مادون قرمز استفاده کنید، می توانید از تعداد بالاتری از این سنسورها که در راستای خط قرار گرفته اند استفاده کنید.
- در این پروژه که ما از دو سنسور مادون قرمز استفاده کردیم، محل قرارگیری سنسورها و همچنین قطر خط مشکی بسیار مهم است.
- همچنین به جای استفاده از سنسور مادون قرمز می توانید از LED ساده به عنوان فرستنده و فتوسل به عنوان گیرنده استفاده کنید.
پک ساخت ربات مسیریاب با استفاده از برد آردوینو
در این پک قطعات مربوط به ساخت ربات مسیریاب با استفاده از برد آردوینو به صورت جداگانه ارائه می شود. این یک ربات مسیریاب دو سنسوره می باشد که از برد آردوینو و شیلد درایور موتور L293 در آن استفاده شده است.
آموزش کامل مراحل و نحوه ساخت ربات، نحوه سیم کشی، بررسی تمامی قطعات به کار رفته در ربات، برنامه ربات در برد آردوینو و همچنین نحوه پروگرام کردن برد آردوینو همراه با ربات ارائه می گردد.
در تصاویر زیر قطعات به کار رفته در این پک و نمونه ربات ساخته شده را مشاهده می کنید:
جهت خرید این محصول می توانید وارد صفحه ((پک ساخت ربات مسیریاب با استفاده از برد آردوینو)) شوید.
میانگین امتیاز ۴.۱ / ۵. تعداد رای: ۷
دیدگاهی در مورد “ساخت ربات مسیریاب با استفاده از برد آردوینو”
سلام من یه ربات مسیر یاب دارم.با ۴ تا سنسور ای ار TRT5000 و ۱ ماژول شعله و ۲ تا سنسور تشخیص رنگ TSC3200 و ۱ پمپ اب کف کش ۳ تا ۶ ولتی و درایور موتور L298 و ۴ تا موتور DC . سه تا باتری کتابی موازی کردم ولی اصلا نتونست ربات رو به حرکت در بیاره.میخواستم بدونم پیشنهادی دارین من از چه باتری و چه تعدادی استفاده کنم تا مشکلم حل بشه؟
سلام، وقتتون به خیر
شما باید از دو عدد باتری قابل شارژ لیتیومی ۱۸۶۵۰ استفاده کنید، که به صورت سری به هم متصل شده اند. ولتاژ هر کدوم از این باتری ها تقریبا ۳.۷ ولت است که وقتی با هم سری شوند، ولتاژ و از همه مهم تر جریان مورد نیاز ربات شما رو به خوبی فراهم می کنند.
البته یادتون باشه که حتما شارژر این باتری رو هم خریداری کنید.
سلام وقت بخیر
من این ربات را ساختم الان میخوام سنسور تشخیص آتش را هم بهش اضافه کنم با یه فن که آتش را خاموش کنه، سوالم اینه که آیا فن را به درایور موتور وصل کنم؟
ممکنه کدش را در اختیار ما قرار بدین؟
سپاسگزارم
سلام، وقت شما هم به خیر
در صورتی که از شیلد درایور موتور L293 استفاده کردید، بر روی این شیلد فقط پین های آنالوگ برد آردوینو در اختیار قرار دارند و مابقی پین های دیجیتال توسط این شیلد استفاده شدن. باید بررسی کنید که مکان راه اندازی سنسورهای مربوط به ربات آتش نشان توسط این شیلد وجود دارد یا نه و تغییرات لازم را در برنامه ایجاد کنید.
سلام من تازه شروع کردم و از اردوینو استفاده میکنم توی پروگرام کردنش مشکل دارم و همش این خطا رو میاره
Arduino: 1.8.19 (Windows 7), Board: “Arduino Uno”
Sketch uses 924 bytes (2%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
An error occurred while uploading the sketch
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x6e
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x6e
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
میشه کمک کنین این خطا رو رفع کنم؟
سلام، وقتتون به خیر
این موضوع میتونه دلایل مختلفی داشته باشه. لطفا تنظیمات مربوط به انتخاب نوع برد و پورتی که کابل USB به آن متصل شده را بررسی کنید که صحیح باشه. برد را باید از بخش Tools >> Board و پورت را باید از بخش Tools >> Serial Port تنظیم کنید.
اتصال صحیح کابل USB به کامپیوتر را بررسی کنید.
ممکن است مشکل از درایور سیستم شما باشه، این مورد را هم بررسی کنید.
در صورت حل نشدن مشکل حتما یک مرتبه کامپیوتر خودتان را ری استارت کنید و مجددا برد را تست کنید.
سلام
باتری ها باید چند میلی امپر باشد؟
سلام، وقتتون به خیر
فرقی نمی کنه، از هر مدلی که خواست می تونید استفاده کنید. هرچه مقدار میلی آمپر باتری بیشتر باشه، مدت زمان نگه داری شارژ باتری یبیشتر خواهد بود، چون جریان کشی موتورهای ربات ثابت است.
سلام
اگر از درایور ال ۲۹۳ استفاده کنم این کد درسته ؟
سلام وقت شما به خیر
خیر، باید مقداری برنامه رو تغییر بدید.
سلام ببخشید توی این مدار یعنی باید ۲ تا باتری باشه یکی ۱۲ ولت یکی ۵ ولت؟
سلام بر شما
نه نیازی به دوتا باتری نست. دو باتری لیتیومی ۳.۶ ولتی که با هم سری شده اند برای این ربات کافی است
لینک خریدش کجاست؟ قابلیت خرید وجود نداره!!!
سلام بر شما دوست عزیز
در حال حاضر فروش این محصول متوقف شده.