رفتن به مطلب

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


caferobot

ارسال های توصیه شده

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

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

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

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

 

blog_940503_first30_dfeb3628efdabddb674120a605bc3aac.jpg

 

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

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

برد آردوینو Uno

سروو موتور

برد بورد

تعدادی سیم

درایور موتور L293D

موتور پلاستیکی دنده ای 60 تا 100RPM

چرخ سازگار با موتور دنده ای (یک عدد)

چرخ کاستور castor (دو عدد)

سنسور فاصله آنالوگ GP2D12 و یا GP2Y0A02YK

باتری 9 ولتی PP3

باتری قلمی 1.5 ولتی (چهار عدد)

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

کانکتور باتری

صفحه ی آکریلیک

کابل USB

نوار چسب دو طرفه

هویه

طرز ساخت:

 

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

 

blog_940503_first25.jpg

 

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

 

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

 

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

 

blog_940503_first26.jpg

 

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

موفق باشید icon_wink.gif

 

modify_inline.gif

  • Like 5
لینک به دیدگاه

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

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

 

 

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

 

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

blog_940503_first27.jpg

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

 

 

اتصالات منبع تغذیه:

آردوینو از یک منبع تغذیه 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 ولتی تغذیه می شوند. اتصالات درایور موتور را می توانید از عکس مربوط به سیم بندی سیستم به طور کامل دریافت کنید.

 

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

  • Like 5
لینک به دیدگاه

با عرض سلام خدمت دوستان عزیز

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

 

 

 

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

 

اولین چیزی که برای برنامه ریزی آردوینو نیاز است دانلود نرم افزار آردوینو (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 قرار داشته و هرچه این عدد کمتر باشد فاصله ی اندازه گیری شده توسط سنسور بیشتر است.

int 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

}

اکنون برنامه ی مربوط به چرخش موتورها را می توانید از زیر کپی کنید.

 

int 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 بودن عوض کنید.

int 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);

}

 

همچنین برای راه اندازی موتور دوم می توانید کد زیر را کپی کنید.

 

int 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

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

{

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 باشد ربات باید به دنبال راستای جدیدی برای حرکت خود باشد زیرا به مانع نزدیک شده است. در ابتدا ربات متوقف شده و کمی به عقب بر می گردد، سروو کمی به سمت چپ می چرخد و سنسور فاصله ی جدید تا مانع رویروی خود را ثبت می کند، سپس سروو به سمت راست چرخیده و دوباره سنسور فاصله را از مانع مقابل خود ثبت می کند، این دو مقدار ثبت شده توسط سنسور با هم مقایسه می شوند و در آخر ربات به سمتی حرکت می کند که از مانع فاصله ی بیشتری دارد.

 

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

blog_940503_first29.jpg

 

 

blog_940503_first30.jpg

 

blog_940503_first31.jpg

  • Like 3
لینک به دیدگاه
×
×
  • اضافه کردن...