آموزش آردوینو جلسه چهارم
بصورت پروژه محور با ربات NK-100
در جلسه قبل با اتصال ماژول SRF05 قدرت فاصله سنجی و عدم برخورد به مانع را به ربات بخشیدیم. در این جلسه تصمیم داریم با راهاندازی سروو موتور SG90 متصل به گریپر یا پنجه ربات قابلیت گرفتن و رها کردن اجسام را به روبات بدهیم. شایان ذکر است که اکثر Servo motor ها با این کد سازگار میباشند و تنها نکته مهم اینست که در سروو موتوهای پرقدرت باید تغذیه موتور از بخش دیجیتال جدا باشد تا نویزهای القایی موتور سبب اختلال در کارکرد آردوینو نشود و البته قطب منفی در تمام تغذیهها به یکدیگر متصل باشد. در این روبات آزمایشی با توجه به کوچک بودن SG90 و جریان مصرفی پایین از تغذیه مشترک و ٥ ولت آردوینو برای سروو موتورِ دست روبات استفاده کردهایم.
سخت افزار:
در این جلسه از یک گریپر یا گیره آماده برای پنجه ربات NK-100 استفاده کردهایم. برای باز و بسته کردن گریپر از سروو موتور استفاده میشود. سروو موتورها نوعی موتور مخصوص با درایور داخلی بوده و میتوان محور موتور را به اندازه زاویه مشخصی حرکت داد. از سروو موتورها معمولا برای حرکت دادن اجزای مکانیکی مثل دست و پای روباتها، باز و بسته کردن دریچهها، ساخت سیستمهای غذادهی برای جانداران و … استفاده میشود. انواع گریپرها با سروو موتورهای مختلف در بازار موجود میباشد و اساس کار همه آنها تقریبا یکسان است.
کدنویسی:
قبل از شروع کدنویسی دقت داشته باشید که سروو موتورها معمولا ١٨٠ درجه بوده و زاویه آنها بین ٠ تا ١٨٠ در جه قابل تغییر است. البته انواع ٣٦٠ درجه و … نیز وجود دارد. اما نکته مهم اینجاست که اعداد حداقل و حداکثر زاویه سروو موتورها دقیقا ٠ و ١٨٠ نیست و معمولا نقطه شروع کمی بیشتر از صفر (مثلا ١٥) و نقطه انتهایی کمتر از ١٨٠ خواهد بود و باید با سعی و خطا این مقادیر را بدست بیاورید. به عنوان یک نکته مهم همیشه سعی کنید اعداد ابتدایی و انتهایی را به میزانی قرار دهید که موتور، مقداری آزادی داشته باشد و تحت فشار ابتدا و انتها قرار نگیرد تا چرخدندههای آن دچار آسیب نشود.
کدهای زیر را داخل کامپایلر Arduino وارد نمایید:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { myservo.write(70); // open delay(2000); myservo.write(10); // close delay(2000); } |
همانطوریکه در این برنامه مشاهده مینمایید در ابتدای برنامه کتابخانه Servo.h را اضافه کردهایم. این کتابخانه شامل کلاس Servo بوده که داری توابعی برای کنترل سروو موتور میباشد.
بعد از افزودن کتابخانه یک شی به نام myservo از نوع Servo ساختهایم که برای کنترل سروو موتور SG90 متصل به گریپر ربات NK-100 به کار میرود. توجه داشته باشید که میتوانید به تعداد مورد نیاز شی مختلف برای اتصال به سرووهای متعدد ایجاد کنید.
در تابع setup با فراخوانی تابع myservo.attachو قرار دادن عدد ٩ در آرگومان این تابع پایه شماره ٩ آردوینو را برای اتصال به سروو تخصیص دادهایم.
در تابع loop که به طور مکرر اجرا میشود با فراخوانی تابع عضو myservo.write و قرار دادن اعداد ٧٠ و ١٠ سروو را در زاویه های معین قرار میدهیم که باعث باز و بسته شدن گریپر میشود. توجه داشته باشید که این اعداد تجربی است و بسته به نوع سروو میتوانید اعداد مختلفی را در تابع write قرار دهید و زاویه بدست آمده را بررسی نمایید.
به عنوان نکته آخر همیشه بعد از دستور write یک تاخیر مشخصی قرار دهید تا موتور فرصت جابجایی به نقطه مورد نظر را داشته باشد، مخصوصا زمانی که اختلاف اعداد زیاد است این مقدار تاخیر باید نسبتا بالا باشد ولی برای زاویههای کوچک مثلا تغییر از ٧٠ به ٧١ ممکن است تاخیر لازم نباشد.
برای گردش نرمتر و آرامتر میتوانید در یک حلقه به آرامی اعداد را از کم به زیاد و از زیاد به کم تغییر دهید و بین هر Write یه تاخیر قرار دهید تا حرکت به آهستگی انجام شود.
ویدیوی خروجی جلسه سوم آموزش آردوینو روی ربات NK-100:
در این جلسه با سروو موتور و نحوه راه اندازی سرووی نمونهی SG90 و گریپر برای ربات NK-100 آشنا شدیم. در جلسات بعد انشاءالله به مباحث تخصصی تری در زمینه آردوینو خواهیم پرداخت.
دانلود سورس آردوینو و PDF این مقاله
==============================
آپدیت 1401/01/01: یک کتابخانه قدرتمند دیگر در آدرس زیر وجود دارد که با نصب آفلاین آن و اجرای مثال هایش میتوانید سرعت سروو را تغییر دهید و نیز توابعی ارائه میدهد که میتوانید مادامی که سروو در حال حرکت است در یک دستور Wait منتظر بمانید و پس از اتمام حرکت ادامه برنامه را از سر بگبرید و یا کد را به صورت non Blocking اجرا کنید:
https://github.com/netlabtoolkit/VarSpeedServo
بازدیدها: 164