در این پست از سایت اِمیک, یک پروژه بسیار جالب و آموزشی به نام پروژه آردوینو کنترل حرکت سروو موتور با جوی استیک قرار داده شده است. همانطور که از نام پروژه مشخص است, ما در این پروژه می توانیم مقدار و جهت حرکت یک سروو موتور را به وسیله یک ماژول جوی استیک کنترل کنیم. این پروژه با برد آردوینو UNO انجام شده است. در ادامه در مورد پروژه بیشتر توضیح خواهم داد.
برای آشنایی بیشتر با سروو موتور توصیه می کنم پست “راه اندازی سروو موتور با برد آردوینو” را مطالعه کنید. همچنین برای آشنایی با ماژول جوی استیک می توانید پست “راه اندازی ماژول جوی استیک با آردوینو” را مطالعه کنید. در زیر شماتیک پروژه آردوینو کنترل حرکت سروو موتور با جوی استیک را مشاهده می کنید:
همانطور که مشاهده می کنید, ما در این پروژه از برد آردوینو UNO استفاده کرده ایم. از یک ماژول جوی استیک نیز استفاده کرده ایم که پایه VRX آن به پین A0 آردوینو متصل شده است و پایه های 5V+ و GND ماژول نیز به ترتیب به مثبت و منفی تغذیه 5 ولت متصل شده اند. از یک سروو موتور نیز استفاده کرده ایم که سیم های مثبت و منفی تغذیه سروو (VCC و GND) به تغذیه متصل شده اند و سیم سیگنال کنترل نیز به پین 9 برد آردوینو متصل شده است.
عملکرد پروژه بالا به این صورت است که با حرکت اهرم جوی استیک به سمت جلو و عقب, سروو موتور نیز به همان میزان و در همان جهت حرکت می کند. به عبارت دیگر با حرکت اهرم جوی استیک به سمت جلو, محور سروو به سمت 180 درجه حرکت می کند. در صورت حرکت اهرم جوی استیک به سمت عقب نیز محور سررو به سمت 0 درجه حرکت می کند. میزان حرکت محور سروو نیز به میزان حرکت اهرم جوی استیک بستگی دارد و با رها کردن اهرم جوی استیک نیز, سروو در موقعیت خود باقی می ماند. در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید.
برنامه آردوینو :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
////////// WWW.EMIC.IR ////////// #include <Servo.h> //فراخوانی کتابخانه سروو موتور// Servo servo1; //servo1 ایجاد یک شیء جدید از جنس سروو به نام// int pos = 0; //تعریف متغیر با مقدار اولیه صفر// void setup() { analogReference(DEFAULT); //تعیین ولتاژ رفرنس برای کار با واحد انالوگ اردوینو// pinMode(A0, INPUT); //اردوینو A0 ورودی کردن پین// pinMode(9, OUTPUT); //خروجی کردن پین 9 اردوینو// servo1.attach(9, 400, 2400); //تابع روبرو دارای سه ورودی است ورودی اول پایه ای از برد اردوینو که سروو به ان متصل می شود را مشخص می کند و دو ورودی دیگر حداقل و حداکثر عرض پالس را برحسب میکرو ثانیه مشخص می کنند// servo1.write(pos); //دستور روبرو در ابتدا سروو را در موقعیت 0 درجه قرار می دهد// } void loop() { int VRx = analogRead(A0); //VRx که عددی بین 0 تا 1023 می تواند باشد و ریختن ان در متغی A0 خواندن مقدار ولتاژ انالوگ روی پین// delay(10); //ایجاد تاخیر// if (VRx <= 500) { //روبرو می شویم if کوچکتر یا مساوی 500 بود وارد شروط VRx در صورتی که// pos = pos - 1; //را یکی یکی کم می کند pos مقدار حرکت سروو را مشخص می کند که می تواند بین 0 تا 180 درجه مقدار دهی شود. دستور روبرو مقدار متغیر pos متغیر// if (pos <= 0) pos = 0; //از صفر کمتر شود pos برابر صفر یا کمتر شد ان را دوباره صفر می کند. در واقع اجازه نمی دهد که متغیر pos در صورتی که متغیر// servo1.write(pos); //سررو را حرکت می دهد pos دستور روبرو با توجه به مقدار متغیر// } if (VRx >= 550) { //روبرو می شویم if بزرگتر یا مساوی 550 بود وارد شروط VRx در صورتی که// pos = pos + 1; //را یکی یکی اضافه می کند pos دستور روبرو مقدار متغیر// if (pos >= 180) pos = 180; //از 180 بیشتر شود pos برابر با 180 یا بیشتر شد ان را دوباره 180 می کند. در واقع اجازه نمی دهد که متغیر pos در صورتی که متغیر// servo1.write(pos); //سررو را حرکت می دهد pos دستور روبرو با توجه به مقدار متغیر// } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. از انتهای مطلب نیز می توانید فایل برنامه این پروژه با نرم افزار آردوینو را دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…