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

محتویات
در این پروژه قصد داریم یک چشم هوشمند با آردوینو بسازیم. این پروژه ساده است و به چند سروو موتور نیاز دارد. قسمت پیچیده ماجرا ساخت اجزای چشم است که به لطف وجود پرینتر های سه بعدی بسیار آسان شده است. تمام فایل های سه بعدی و کد های پروژه قرار داده شده اند و شما میتوانید در صورت نیاز، تغییرات لازم را در آن اعمال کنید.
قطعات مورد نیاز
لیست قطعات مورد نیاز چشم هوشمند بسیار کوتاه است زیرا تمام کار های سخت توسط چاپگر سه بعدی انجام می شود و ما فقط به تعدادی پیچ و مهره نیاز داریم.
- 6* شش سروو موتور SG90
- پیچ و مهره M2، M3 و M4
- آردوینو UNO
اتصالات مدل سه بعدی چشم
در ابتدای این پروژه شما باید تمام مدل های سه بعدی را چاپ کنید. بعد از چاپ برخی از قسمت ها که باید روان باشند را سنباده بزنید. سپس میتوانیم مونتاژ قسمت ها را شروع کنیم. اگر فرآیند چاپ به درستی انجام شده باشد، شما باید این قطعات را مشاهده کنید:
همانطور که در تصویر زیر مشاهده میکنید 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); } }
این نشان دهنده پایان بخش کد است.
موارد موجود در فایل : فایل سورس کامل و فایل های سه بعدی
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام عرض ادب خسته نباشید ممنون بابت مطالب ارزشمند تون یک سوال داشتم من کد برنامه چشم و پلک رو همون طور که قرار دادید کپی پیست کردم و قبل از پاراگراف دوم توی توضیحات ایراد میگیره منظورم این هست الان کپی میکنم
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);
کل این دستور رو قرمز میکنه نمیدونم قبلش باید چیزی رو مینوشتم یا نه میشه شما امتحان کنید من دوره اردینو رو خریدم ولی متوجه نشدم میشه راهنماییم کنین ممنون من تلفنم هم میزارم 09379551945
سلام عزیز
متن ارور را در انجمن قرار بدهید.