سرو موتورها یکی از کاربردیترین موتورهای موجود در زمینه رباتیک هستند. در این پست قصد داریم به چگونگی راهاندازی سرو موتور MG90S با استفاده از برد آردوینو (Arduino Nano) بپردازیم.
در این پروژه برد استفادهشده جهت راهاندازی Servo Motor، آردوینو نانو است. جهت ارسال سیگنال PWM به سرو موتور نیز از پایه D9 برد نانو استفاده شده است. با توجه به اینکه ولتاژ تغذیه سرو موتور MG90S بین 4.8 تا 6 ولت است، جهت تغذیه موتور میتوان از پایه 5V که بر روی برد قرار دارد، استفاده کرد.
در خط 3 متغیری از نوع Servo با نام myservo تعریف شده است که جهت کنترل موتور از آن استفاده میشود. در خط 6 متغیر pos جهت میزان درجه شافت Servo Motor تعریف شده است. در خط 9 از تابع attach جهت تعیین شماره پایه برای ارسال سیگنال PWM به سرو موتور و از تابع write نیز در خطوط 15 و 19 جهت تنظیم زاویه موتور استفاده میشود. در این پروژه شافت سرو موتور ابتدا از صفر تا 180 درجه و سپس بهصورت عکس به چرخش درمیآید که برای این منظور از دو حلقه for استفاده شده است. فاصله هر درجه چرخش با درجه بعدی 15 میلیثانیه است.
سرو موتور چیست؟
Servo Motor یک موتور الکتریکی با سیستم کنترل فیدبک با دقت بسیار بالاست که میتوان شافت آن را در جهت و زاویه دلخواه تنظیم کرد. سرو موتورها در صنایع رباتیک و تولیدات صنعتی کاربرد وسیعی دارند. سرو موتورها به دو دسته کلی سرو موتورهای DC و سرو موتورهای AC تقسیم میشوند. یک سرور موتور از یک موتور DC به همراه یک برد کنترلکننده و تعدادی چرخدنده تشکیل شده است که نمای کلی آن را میتوانید در تصویر زیر مشاهده کنید:تفاوتهای موتور DC و سرو موتور:
در موتورهای DC:- کم یا زیاد کردن سرعت موتور با استفاده از PWM و تعیین جهت چرخش موتور
- امکان چرخش 360 درجه
- ناممکن بودن تعیین درجه چرخش و خواندن مقدار درجه فعلی موتور
- ناممکن بودن دور 360 درجه برای شافت (حداکثر 180 درجه امکان چرخش وجود دارد)
- سرعت و جهت چرخش مطرح نیست
- چرخش از 0 تا 180 درجه
- امکان تعیین قرارگیری در چه درجهای
- امکان خواندن مقدار درجه فعلی موتور
مدار اتصال سرو موتور به برد آردوینو:
سروها بهطورمعمول دارای سه سیم ورودی هستند: دو سیم اول (رنگهای قهوهای و قرمز) مربوط به تغذیه و سیم سوم (رنگ نارنجی) مربوط به ورود پالس PWM است. دیتاشیت سرو موتور MG90s را میتوانید از سایت https://engineering.tamu.edu/ مشاهده کنید.
کدهای آردینو جهت راهاندازی سرو موتور:
در خط 3 متغیری از نوع Servo با نام myservo تعریف شده است که جهت کنترل موتور از آن استفاده میشود. در خط 6 متغیر pos جهت میزان درجه شافت Servo Motor تعریف شده است. در خط 9 از تابع attach جهت تعیین شماره پایه برای ارسال سیگنال PWM به سرو موتور و از تابع write نیز در خطوط 15 و 19 جهت تنظیم زاویه موتور استفاده میشود. در این پروژه شافت سرو موتور ابتدا از صفر تا 180 درجه و سپس بهصورت عکس به چرخش درمیآید که برای این منظور از دو حلقه for استفاده شده است. فاصله هر درجه چرخش با درجه بعدی 15 میلیثانیه است.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #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 } } |
سلام
ممنون از مطالب عالیتون
آیا این امکان هست که از سایر پایه هایی که pwm نیست برای راه اندازی سرو استفاده کرد؟این کار چگونه ممکن هست؟
ممنون از پاسخگویی شما استاد عزیز
بله امکانش هست با استفاده از متد های شبیه سازی pwm این کار رو انجام داد ولی مساله که مطرح میشه باری است که بر روی cpu میذاره و البته ممکنه زیاد دقت نداشته باشه اگر بخواید چنین کاری رو انجام بدید.