سرو موتورها یکیاز کاربردیترین موتورهای موجود در زمینه رباتیک هستند. دراینپست قصدداریم به چگونگی راهاندازی سرو موتور MG90S بااستفادهاز برد آردوینو (Arduino Nano) بپردازیم.
سرو موتور چیست؟
Servo Motor یک موتورالکتریکی با سیستم کنترل فیدبک بادقت بسیار بالاست که میتوان شافت آنرا درجهت و زاویه دلخواه تنظیمکرد. سرو موتورها در صنایع رباتیک و تولیدات صنعتی کاربرد وسیعی دارند. سرو موتورها به ۲دسته کلی سرو موتورهای DC و سرو موتورهای AC تقسیم میشوند. یک سرور موتور از یک موتور DC بههمراه یک برد کنترلکننده و تعدادی چرخدنده تشکیل شدهاست که نمای کلی آنرا میتوانید درتصویرزیر مشاهدهکنید:
تفاوتهای موتور DC و سرو موتور
در موتورهای DC:
- کم یا زیادکردن سرعت موتور بااستفادهاز PWM و تعیین جهت چرخش موتور
- امکان چرخش ۳۶۰درجه
- ناممکنبودن تعیین درجه چرخش و خواندن مقدار درجه فعلی موتور
در سرو موتورها:
- ناممکن بودن دور ۳۶۰درجه برای شافت (حداکثر ۱۸۰درجه امکان چرخش وجوددارد)
- سرعتو جهت چرخش مطرح نیست
- چرخش از صفر تا ۱۸۰درجه
- امکان تعیین قرارگیری در چه درجهای
- امکان خواندن مقدار درجه فعلی موتور
مدار اتصال سرو موتور به برد آردوینو
سروها بهطورمعمول دارای سه سیم ورودی هستند: دو سیم اول (رنگهای قهوهای و قرمز) مربوطبه تغذیه و سیم سوم (رنگ نارنجی) مربوط به ورود پالس PWM است. دیتاشیت سرو موتور MG90s را میتوانید از سایت https://engineering.tamu.edu/ مشاهده کنید.
در این پروژه برد استفادهشده جهت راهاندازی Servo Motor، آردوینو نانو است. جهت ارسال سیگنال PWM به سرو موتور نیز از پایه D9 برد نانو استفادهشدهاست. باتوجهبه اینکه ولتاژ تغذیه سرو موتور MG90S بین ۴.۸ تا ۶ولت است، جهت تغذیه موتور میتوان از پایه ۵V که برروی برد قراردارد، استفادهکرد.
عکس 03
کدهای آردینو جهت راهاندازی سرو موتور
در خط ۳ متغیری ازنوع Servo با نام myservo تعریفشدهاست که جهت کنترل موتور از آن استفاده میشود. در خط ۶ متغیر pos جهت میزان درجه شافت Servo Motor تعریفشدهاست. در خط ۹ از تابع attach جهت تعیین شماره پایه برای ارسال سیگنال PWM به سرو موتور و از تابع write نیز در خطوط ۱۵ و ۱۹جهت تنظیم زاویه موتور استفاده میشود. در این پروژه شافت سرو موتور ابتدا از صفر تا ۱۸۰درجه و سپس بهصورت عکس به چرخش درمیآید که برای این منظور از دو حلقه for استفادهشدهاست. فاصله هر درجه چرخش با درجه بعدی ۱۵ میلیثانیه است.
#include <Servo.h> Servo myservo; // create servo object to control a servo // twelve servo objects can be created on most boards int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } }
منبع: سیسوگ