ساخت یک ربات ساده برای تازه کارها

در این بخش می توانید آموزش و مقالات رباتیک مطالعه بفرمایید

مدیران انجمن: sinaset, شوراي نظارت

ارسال پست
Novice Poster
Novice Poster
پست: 56
تاریخ عضویت: سه شنبه 3 شهریور 1394, 12:41 pm
سپاس‌های دریافتی: 89 بار

ساخت یک ربات ساده برای تازه کارها

پست توسط کافه ربات » سه شنبه 3 شهریور 1394, 12:54 pm

سلام دوستای خوبم، از امروز می خوایم آموزش های کاربردی و کاملی برای ساخت ربات رو براتون بذاریم. امیدوارم بتونیم در جهت یادگیری رباتیک بهتون کمک کنیم. قسمت اول این آموزش رو امروز براتون میذارم و قسمت های بعدیش رو هم طی چند روز آینده.
البته آموزش یکجا و کاملش برای کسانی که عجله دارن و علاقه مندن توی سایت کافه ربات موجوده.

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

ساخت یک ربات ساده برای تازه کارها(قسمت اول)

تصویر

در این قسمت می خواهیم یک آموزش گام به گام برای ساخت رباتی ساده برای تازه کارها ارایه دهیم. با انجام این مراحل می توانید اولین ربات خود را به سادگی با آردوینو بسازید. با ما همراه شوید.
قطعات مورد نیاز:
برد آردوینو Uno
سروو موتور
برد بورد
تعدادی سیم
درایور موتور L293D
موتور پلاستیکی دنده ای 60 تا 100RPM
چرخ سازگار با موتور دنده ای (یک عدد)
چرخ کاستور castor (دو عدد)
سنسور فاصله آنالوگ GP2D12 و یا GP2Y0A02YK
باتری 9 ولتی PP3
باتری قلمی 1.5 ولتی (چهار عدد)
نگه دارنده ی باتری
کانکتور باتری
صفحه ی آکریلیک
کابل USB
نوار چسب دو طرفه
هویه
طرز ساخت:

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

تصویر

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

حال باتری 9 ولت متصل به کانکتور(دارای DC plug ) و باتری های قلمی متصل به کانکتور (بدون DCPlug) را مطابق شکل بر روی بدنه ی ربات قرار دهید. از Dc plug برای اتصال باتری 9 ولتی به آردوینو استفاده می شود.

سنسور فاصله بر روی سروو قرار خواهد گرفت اما قبل از آن لازم است تا سروو در ناحیه ی مرکزی خود قرار گیرد(90 درجه).

تصویر

نحوه ی سیم بندی و اتصالات به همراه کدها و برنامه نویسی کاملش رو در قسمت بعد براتون میذاریم.
موفق باشید :wink:

Novice Poster
Novice Poster
پست: 56
تاریخ عضویت: سه شنبه 3 شهریور 1394, 12:41 pm
سپاس‌های دریافتی: 89 بار

ساخت یک ربات ساده برای تازه کارها - قسمت دوم

پست توسط کافه ربات » شنبه 7 شهریور 1394, 11:00 am

سلام دوستان خوبم. امروز می خوایم قسمت دوم آموزش ساخت ربات ساده رو براتون بذاریم. آموزش کاملش رو می تونید در سایت کافه ربات در قسمت آکادمی ببینید.

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

در قسمت قبل قطعات مورد نیاز و نحوه ی سوار کردن اجزا بر روی شاسی ربات رو با هم دیدیم. در این قسمت نجوه ی سیم بندی و اتصالات اجزا رو با هم مشاهده خواهیم کرد. با ما همراه باشید.

اتصالات و سیم بندی:

تصویر

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

اتصالات منبع تغذیه:
آردوینو از یک منبع تغذیه 9 ولتی استفاده کرده و توسط رگولاتور داخلی آن را به 5 ولت رگوله می کند. بنابراین باتری 9 ولتی را توسط dc plug به آردوینو متصل می کنیم. از باتری های قلمی که 6 ولت را تامین می کنند برای سروو و موتورها استفاده می شود. منفی باتری های قلمی یا در واقع Ground باتری 6 ولتی باید به Ground آردوینو متصل شود.

اتصالات سنسور فاصله:
این سنسور دارای دو چشم است. چشم اول نور مادون قرمز را ارسال کرده و چشم دوم بازتاب آن را پس از برخورد نور به مانع دریافت می کند و از این طریق مسافت بین ربات و مانع را محاسبه می نماید.

همانطور که گفته شد می توان از هر دو مدل سنسور GP2D12 و یا GP2Y0A02YKاستفاده نمود. تنها تفاوت این دو سنسور در محدوده ی مسافت قابل اندازه گیری آن هاست.

GP2D12 مسافت های بین10 سانتی متر تا 80 سانتی متر و GP2Y0A02YK مسافت های بین 20 سانتی متر تا 150 سانتی متر را اندازه گیری می کند.

از این سنسورها سه سیم خارج می شود.

سیم قرمز به پین +5V آردوینو

سیم قهوه ای یا سیاه به پین GND آردوینو

سیم سفید یا زرد یا نارنجی به پین ورودی آردوینو. در اینجا به پین آنالوگ (Analog pin 0)

اتصالات سروو:
پایه سیگنال سروو(سیم سفید یا قرمز) به پین دیجیتال شماره 8 آردوینو (digital pin 8)

پایه vcc سروو به سر مثبت باتری های قلمی (+6V)

پایه GND سروو (سیم سیاه یا قهوه ای) به پین GND آردوینو

اتصالات موتورها و درایور موتور L293D:
موتورها توسط پین های دیجیتال شماره ی 4، 5، 6 و 7 درایور موتور L293D درایو شده و از منبع 6 ولتی تغذیه می شوند. اتصالات درایور موتور را می توانید از عکس مربوط به سیم بندی سیستم به طور کامل دریافت کنید.

در پست بعد برنامه نویسی آردوینو رو به طور کامل براتون خواهیم گذاشت. موفق و پیروز باشید.

Novice Poster
Novice Poster
پست: 56
تاریخ عضویت: سه شنبه 3 شهریور 1394, 12:41 pm
سپاس‌های دریافتی: 89 بار

ساخت یک ربات ساده برای تازه کارها - قسمت سوم

پست توسط کافه ربات » جمعه 13 شهریور 1394, 4:47 pm

با عرض سلام خدمت دوستان عزیز
قسمت سوم آموزش ساخت ربات ساده برای تازه کارها رو امروز براتون میذاریم. امیدواریم در جهت یادگیری رباتیک بتونیم نقش موثری داشته باشیم. آموزش کامل ساخت این ربات رو می تونید در سایت کافه ربات مشاهده کنید.

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]


برنامه نویسی ربات:

اولین چیزی که برای برنامه ریزی آردوینو نیاز است دانلود نرم افزار آردوینو (IDE) و نصب آن است. نرم افزار آردوینو را می توانید از لینک زیر دانلود نموده و همچنین با استفاده از آموزش گام به گام نصب آن، این نرم افزار را نصب کنید.

دانلود نرم افزار آردوینو

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

آموزش گام به گام نصب نرم افزار آردوینو

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

یادآور می شویم که هنوز سنسور فاصله را بر روی سروو نصب نکرده ایم. در ابتدا باید برنامه ی انتقال سروو به مکان مبدا را بنویسیم و یا اصطلاحا سروو را کالیبره کنیم. پس از اینکه از اتصال هر دو منبع تغذیه در مدار اطمینان حاصل کردید نرم افزار آردوینو را باز نموده و در صفحه ی جدیدی که اسکچ (Sketch) نام دارد کد زیر را کپی کنید. این کد برای کالیبره کردن سروو به کار می رود. #include // includes the servo library
Servo myservo; // creates a servo object
voidsetup()
{
myservo.attach(8); // attaches the servo to digital pin 8
}
voidloop()
{
myservo.write(90); // moves the servo to 90 degree.
delay(700); // wait for the servo to finish its rotation

این کد را از قسمت *Sketch → Verify/Compile* کامپایل کنید. بعد از کامپایل کردن برنامه جمله ی DoneCompiling دیده می شود.
با استفاده از کابل USB آردوینو خود را به لپ تاپ متصل کنید. پس از اتصال می توانید دستگاه های متصل به لپ تاپ را از قسمت *Tools → Serial Port* مشاهده کنید. دستگاه خود را انتخاب کنید. اکنون قادر خواهید بود برنامه ی (اسکچ) خود را روی آردوینو آپلود کنید.

برای آپلود کردن برنامه به سادگی می توان دکمه upload را از قسمت toolbar فشار دهید و یا از قسمت *File → Upload* فایل خود را بر آردوینو آپلود کنید. در این هنگام چراغ های مربوط به فرستادن و گرفتن داده بر روی آردوینو شروع به چشمک زدن کرده و سپس جمله ی Done Uploading بر روی اسکچ نمایان می شود.

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

حال نوبت به خواندن مقادیر از روی سنسور فاصله می رسد. برای این منظور کد زیر را در همان صفحه کپی کرده و دوباره برنامه را کامپایل و آپلود نمایید. پس از آپلود کردن برنامه از گزینه ی *Tools → SerialMonitor*می توانید مقادیر فاصله ی اندازه گیری شده توسط سنسور و همچنین عدد برگردانده شده توسط آن را مشاهده کنید. این عدد بین 0 تا 1023 قرار داشته و هرچه این عدد کمتر باشد فاصله ی اندازه گیری شده توسط سنسور بیشتر است.  sensorpin = 0; // analog pin used to connect the sharp sensor
int val = 0; // variable to store the values from sensor(initially zero)
voidsetup()
{
Serial.begin(9600); // starts the serial monitor
}
voidloop()
{
val = analogRead(sensorpin); // reads the value of the sharp sensor
Serial.println(val); // prints the value of the sensor to the serial monitor

اکنون برنامه ی مربوط به چرخش موتورها را می توانید از زیر کپی کنید.  motor_pin1 = 4; //define the pins to which motor wires are connected
int motor_pin2 = 5;
voidsetup ()
{
pinMode(motor_pin1,OUTPUT); // set the motor pins as output
pinMode(motor_pin2,OUTPUT);
}
voidloop()
{
digitalWrite(motor_pin1,HIGH);
digitalWrite(motor_pin2,LOW);

این کد موتور را در راستای جلو و عقب می چرخاند. اگر موتور عقب گرد می چرخد می توانید کد زیر را کپی نمایید. یعنی جای پین 1 و 2 را از لحاظ LOW و HIGH بودن عوض کنید.  motor_pin1 = 4; //define the pins to which motor wires are connected
int motor_pin2 = 5;
voidsetup ()
{
pinMode(motor_pin1,OUTPUT); // set the motor pins as output
pinMode(motor_pin2,OUTPUT);
}
voidloop()
{
digitalWrite(motor_pin1,HIGH);
digitalWrite(motor_pin2,LOW);


همچنین برای راه اندازی موتور دوم می توانید کد زیر را کپی کنید.  motor_pin3 = 6; //define the pins to which motor wires are connected
int motor_pin4 = 7;
voidsetup ()
{
pinMode(motor_pin3,OUTPUT); // set the motor pins as output
pinMode(motor_pin4,OUTPUT);
}
voidloop()
{
digitalWrite(motor_pin3,HIGH);
digitalWrite(motor_pin4,LOW);

برای موتور دوم هم در صورت عقب گرد بودن همانند موتور اول باید کد را تغییر دهید.

ممکن است این سوال برای شما پیش آید که ربات چگونه می تواند به راست یا چپ بچرخد؟ پاسخ این پرسش به شرح زیر است:

برای حرکت مستقیم باید هر دو چرخ با سرعت یکسان به جلو حرکت کنند.

برای حرکت به عقب باید هر دو چرخ با سرعت یکسان به عقب حرکت کنند.

برای حرکت به سمت چپ باید چرخ سمت چپ به عقب و چرخ سمت راست به جلو حرکت کند.

برای حرکت به سمت راست باید چرخ سمت راست به عقب و چرخ سمت چپ به جلو حرکت کند.

مرحله ی آخر در برنامه ریزی ربات مربوط به جلوگیری از برخورد ربات به موانع است. کد زیر را در اسکچ کپی کرده و آن را کامپایل و آپلود کنید. #include //includes the servo library
int motor_pin1 = 4;
int motor_pin2 = 5;
int motor_pin3 = 6;
int motor_pin4 = 7;
int servopin = 8;
int sensorpin = 0;
int dist = 0;
int leftdist = 0;
int rightdist = 0;
int object = 500; //distance at which the robot should look for another route
Servo myservo;
voidsetup ()
{
pinMode(motor_pin1,OUTPUT);
pinMode(motor_pin2,OUTPUT);
pinMode(motor_pin3,OUTPUT);
pinMode(motor_pin4,OUTPUT);
myservo.attach(servopin);
myservo.write(90);
delay(700);
}
voidloop()
{
dist = analogRead(sensorpin); //reads the sensor
if(dist < object) { //if distance is less than 550
forward(); //then move forward
}
if(dist >= object) { //if distance is greater than or equal to 550
findroute();
}
}
void forward() { // use combination which works for you
digitalWrite(motor_pin1,HIGH);
digitalWrite(motor_pin2,LOW);
digitalWrite(motor_pin3,HIGH);
digitalWrite(motor_pin4,LOW);
return;
}
void findroute() {
halt(); // stop
backward(); //go backwards
lookleft(); //go to subroutine lookleft
lookright(); //go to subroutine lookright

if ( leftdist < rightdist )
{
turnleft();
}
else
{
turnright ();
}
}
void backward() {
digitalWrite(motor_pin1,LOW);
digitalWrite(motor_pin2,HIGH);
digitalWrite(motor_pin3,LOW);
digitalWrite(motor_pin4,HIGH);
delay(500);
halt();
return;
}
void halt () {
digitalWrite(motor_pin1,LOW);
digitalWrite(motor_pin2,LOW);
digitalWrite(motor_pin3,LOW);
digitalWrite(motor_pin4,LOW);
delay(500); //wait after stopping
return;
}
void lookleft() {
myservo.write(150);
delay(700); //wait for the servo to get there
leftdist = analogRead(sensorpin);
myservo.write(90);
delay(700); //wait for the servo to get there
return;
}
void lookright () {
myservo.write(30);
delay(700); //wait for the servo to get there
rightdist = analogRead(sensorpin);
myservo.write(90);
delay(700); //wait for the servo to get there
return;
}
void turnleft () {
digitalWrite(motor_pin1,HIGH); //use the combination which works for you
digitalWrite(motor_pin2,LOW); //right motor rotates forward and left motor backward
digitalWrite(motor_pin3,LOW);
digitalWrite(motor_pin4,HIGH);
delay(1000); // wait for the robot to make the turn
halt();
return;
}
void turnright () {
digitalWrite(motor_pin1,LOW); //use the combination which works for you
digitalWrite(motor_pin2,HIGH); //left motor rotates forward and right motor backward
digitalWrite(motor_pin3,HIGH);
digitalWrite(motor_pin4,LOW);
delay(1000); // wait for the robot to make the turn
halt();
return;


با توجه به این کد حرکت ربات به مسافت اندازه گیری شده توسط سنسور بستگی دارد. همانطور که قبلا گفته شد، عدد برگردانده شده توسط سنسور یک عدد بین 0 تا 1023 است. اگر این عدد کمتر از 500 باشد به این مفهوم است که مانعی در سر راه ربات وجود ندارد و ربات به حرکت مستقیم خود ادامه می دهد اما اگر این عدد بزرگتر یا مساوی با 500 باشد ربات باید به دنبال راستای جدیدی برای حرکت خود باشد زیرا به مانع نزدیک شده است. در ابتدا ربات متوقف شده و کمی به عقب بر می گردد، سروو کمی به سمت چپ می چرخد و سنسور فاصله ی جدید تا مانع رویروی خود را ثبت می کند، سپس سروو به سمت راست چرخیده و دوباره سنسور فاصله را از مانع مقابل خود ثبت می کند، این دو مقدار ثبت شده توسط سنسور با هم مقایسه می شوند و در آخر ربات به سمتی حرکت می کند که از مانع فاصله ی بیشتری دارد.

و دوباره این مراحل از ابتدا اجرا می گردد. تصویر  تصویر  تصویر 

New Member
پست: 1
تاریخ عضویت: دو شنبه 30 مرداد 1396, 4:46 pm

Re: ساخت یک ربات ساده برای تازه کارها

پست توسط plata » دو شنبه 30 مرداد 1396, 4:49 pm

ممنون از ارسال این مطلب. بسیار آموزنده بود. کتاب مناسبی برای آموزش مقدماتی رباتیک میشه معرفی کنید؟

Colonel II
Colonel II
نمایه کاربر
پست: 7159
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9217 بار
سپاس‌های دریافتی: 21328 بار
تماس:

Re: ساخت یک ربات ساده برای تازه کارها

پست توسط sinaset » دو شنبه 30 مرداد 1396, 5:20 pm

سلام بر شما
قصد دارید،چه نوع رباتی و در چه سطحی بسازید؟!
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

ارسال پست

بازگشت به “آموزش و مقالات رباتیک”