آموزش آردوینوپروژه های آردوینو

ساخت چشم متحرک ربات با آردوینو (حرکت چشم و پلک)

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

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

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

اتصالات مدل سه بعدی چشم

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

اعضای چشم انسان هوشمند ربات

همانطور که در تصویر زیر مشاهده میکنید 5 سروو موتور به Servo_Block متصل میشوند.

اتصال سروو موتور ها به بدنه چشم

سپس Servo_Block را به Main_Base متصل می کنیم که نتیجه آن چیزی شبیه به تصویر زیر است. همچنین برای ساخت پایه دستگاه از چهار پیچ M3 با ضخامت 12 میلی متری استفاده کرده ایم.

ساخت چشم ربات انسان با آردوینو

در مرحله بعد، ما Eye-Adaptor را به Fork برای هر دو چشم متصل می کنیم. پس از انجام این کار، Eye-Holder را با Eye-Adaptor و Three-point_Connector را به Fork وصل می کنیم. پس از انجام تمام این فرآیند، نتیجه چیزی شبیه به تصویر زیر خواهد بود.

پرینت سه بعدی مکانیزم چشم متحرک

پس از انجام این کار، ششمین و آخرین سروو را به Sub_Base وصل می کنیم و سپس Sub_Base را با پیچ به Main_Base متصل می کنیم. همچنین X-Arm و Y-Arm را با پیچ وصل کرده ایم.

مدل سه بعدی چشم رباتی

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

ساخت چشم و پلک برای ربات

اگر همه کارها را به درستی انجام داده باشید، نتیجه چیزی شبیه به تصویر بالا می شود که در آن مشاهده می کنید که ما پلک ها را به کانکتور پلک وصل کرده ایم و آنها را نیز به بازوهای سروو موتور پیچ کرده ایم. پس از انجام این کار، می توانیم به فرآیند کدگذاری برویم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

شماتیک مدار چشم متحرک ربات با آردوینو

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

شماتیک مدار چشم متحرک ربات با آردوینو

همانطور که قبلاً گفتیم، اتصالات سخت افزاری بسیار ساده است. ما از شش پین آردوینو برای کنترل شش موتور سروو استفاده می کنیم. اگر نگاهی اجمالی به مشخصات آردوینو بیندازیم، می‌بینیم که آردوینو دارای شش پایه PWM است و ما از تمام آن پایه‌ها برای کنترل هر شش موتور سروو خود استفاده می‌کنیم.

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

کد آردوینو برای کنترل چشم ربات

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

#include <Servo.h>
Servo top_left_eyelid;
Servo bottom_left_eyelid;
Servo top_right_eyelid;
Servo bottom_right_eyelid;
Servo Yarm;
Servo Xarm;

سپس تابع setup() را داریم. در تابع setup اعلام کرده ایم که کدام قسمت چشم به کدام پایه آردوینو متصل است. این کار بسیار مفید است زیرا می‌توانیم تمام کانکتورها را از برق جدا کرده و آن را دقیقاً همانطور که بود وصل کنیم.

  top_left_eyelid.attach(10);
  bottom_left_eyelid.attach(11);
  top_right_eyelid.attach(5);
  bottom_right_eyelid.attach(6);
  Yarm.attach(9);
  Xarm.attach(3);

در مرحله بعد سریال مانیتور را برای اشکال زدایی مقداردهی اولیه می کنیم و برای اینکه چشم باز و در مرکز بماند چند تابع را فراخوانی می کنیم و مقداری تاخیر را نیز اضافه می کنیم.

  Serial.begin(9600);
  open_eye();
  eye_ball_centert();
  delay(2000);

در مرحله بعد ما تابع loop() را داریم، اما قبل از توضیح تابع loo[، چند توابع مهم تری را که برای درک محتوای داخل تابع loop ضروری هستند، توضیح خواهیم داد. این تابع ها مهمترین تابع ها هستند و با اینها می خواهیم کره چشم را به حرکت در آوریم. ابتدا تابع open_eye() را داریم. اگر به سخت افزار نگاه کنید، باید یک سروو را در جهت عقربه های ساعت و دیگری را در خلاف جهت عقربه های ساعت حرکت دهید، ما این کار را برای پلک راست و چپ انجام می دهیم.

void open_eye() {
  top_left_eyelid.write(55);
  bottom_left_eyelid.write(36);
  top_right_eyelid.write(2);
  bottom_right_eyelid.write(160);
}

سپس تابع ()close_eye را داریم. در تابع close_eye دقیقاً همان عملکرد open_eye را انجام خواهیم داد، اما برعکس.

void close_eye() {
  top_left_eyelid.write(2);
  bottom_left_eyelid.write(120);
  top_right_eyelid.write(46);
  bottom_right_eyelid.write(55);
}

سپس تابع look_up() و look_down() را داریم. اگر به سخت افزار نگاه کنید، حرکت بازوی Y، کره چشم را بالا و پایین می کند.

void look_up() {
  Yarm.write(132);
}
void look_down() {
  Yarm.write(45);
}

در مرحله بعد تابع eye_ball_left() و eye_ball_right() را داریم که همان تابع بالا و پایین است با این تفاوت که کره چشم را در جهت افقی حرکت میدهد.

void eye_ball_left() {
  Xarm.write(50);
}
void eye_ball_right() {
  Xarm.write(130);
}

سپس تابع synchronous_close() را داریم، با فراخوانی این تابع چشم یک بار بسته و باز می شود.

void synchronous_close() {
  close_eye();
  delay(420);
  open_eye();
  delay(222);
}

سپس تابع random_close() را داریم که به طور تصادفی چشم را باز و بسته می کند. این یک اثر جالب ایجاد می کند.

void random_close() {
  close_eye();
  delay(random(220, 880));
  open_eye();
  delay(random(220, 880));
}

سپس تابع random_movement() را داریم. در این تابع از تابع random() آردوینو در داخل تابع delay استفاده کرده ایم تا چشم به صورت تصادفی حرکت کند.

void random_movement() {
  Xarm.write(60);
  delay(random(250, 340));
  Yarm.write(80);
  delay(random(250, 340));
  Xarm.write(120);
  delay(random(250, 340));
  Yarm.write(140);
  Xarm.write(60);
  delay(random(250, 340));
  Yarm.write(80);
  delay(random(250, 340));
  Xarm.write(120);
  delay(random(250, 340));
  Yarm.write(140);
  eye_ball_centert();
  delay(300);
  synchronous_close();
  random_close();
}

حالا تابع loop که تابع اصلی آردوینو است را توضیح می دهیم. در این تابع چشم را به چپ، راست و مرکز و سپس بالا و پایین حرکت می دهیم و سپس چشمک می زنیم. ما این کار را چند بار انجام می دهیم و یک حرکت تصادفی انجام می دهیم. و در نهایت دو حلقه for داریم. حلقه‌های for به عنوان نمونه‌ای از نحوه دستیابی به حرکت صاف یا حرکت دادن کره چشم وجود دارد.

void loop() {
  eye_ball_left();
  delay(680);
  eye_ball_right();
  delay(680);
  eye_ball_centert();
  delay(450);
  synchronous_close();
  eye_ball_centert();
  delay(450);
  look_up();
  delay(400);
  look_down();
  delay(400);
  eye_ball_centert();
  delay(300);
  random_close();
  delay(450);
  look_up();
  delay(400);
  look_down();
  delay(400);
  random_movement();
  delay(400);
  eye_ball_centert();
  delay(300);
  top_left_eyelid.write(2);
  bottom_left_eyelid.write(120);
  delay(200);
  top_left_eyelid.write(55);
  bottom_left_eyelid.write(36);
  delay(200);
  open_eye();
  delay(500);
  for (int i = 60; i < 120; i++)
  {
    Xarm.write(i);
    Yarm.write(i - 5);
    delay(10);
  }
  eye_ball_centert();
  delay(400);
  synchronous_close();
  for (int i = 120; i > 60; i--)  {
    Xarm.write(i);
    Yarm.write(i - 5);
    delay(10);
  }
}

این نشان دهنده پایان بخش کد است.

موارد موجود در فایل : فایل سورس کامل و فایل های سه بعدی

5 (4 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *