پروژه, AVR, آردوینو arduino, آموزش, پروژه آردوینو, توصیه شده

راه‌اندازی سرو موتور با استفاده از برد آردوینو

sisoog_arduino_servomotor
سرو موتورها یکی از کاربردی‌ترین موتورهای موجود در زمینه رباتیک هستند. در این پست قصد داریم به چگونگی راه‌اندازی سرو موتور MG90S با استفاده از برد آردوینو (Arduino Nano) بپردازیم.

سرو موتور چیست؟

Servo Motor یک موتور الکتریکی با سیستم کنترل فیدبک با دقت بسیار بالاست که می‌توان شافت آن را در جهت و زاویه دلخواه تنظیم کرد. سرو موتورها در صنایع رباتیک و تولیدات صنعتی کاربرد وسیعی دارند. سرو موتورها به دو دسته کلی سرو موتورهای DC و سرو موتورهای AC تقسیم می‌شوند. یک سرور موتور از یک موتور DC به همراه یک برد کنترل‌کننده و تعدادی چرخ‌دنده تشکیل شده است که نمای کلی آن را می‌توانید در تصویر زیر مشاهده کنید: سرو موتور چیست

تفاوت‌های موتور DC و سرو موتور:

در موتورهای DC:
  • کم یا زیاد کردن سرعت موتور با استفاده از PWM و تعیین جهت چرخش موتور
  • امکان چرخش 360 درجه
  • ناممکن بودن تعیین درجه چرخش و خواندن مقدار درجه فعلی موتور
در سرو موتورها:
  • ناممکن بودن دور 360 درجه برای شافت (حداکثر 180 درجه امکان چرخش وجود دارد)
  • سرعت و جهت چرخش مطرح نیست
  • چرخش از 0 تا 180 درجه
  • امکان تعیین قرارگیری در چه درجه‌ای
  • امکان خواندن مقدار درجه فعلی موتور

مدار اتصال سرو موتور به برد آردوینو:

سروها به‌طورمعمول دارای سه سیم ورودی هستند: دو سیم اول (رنگ‌های قهوه‌ای و قرمز) مربوط به تغذیه و سیم سوم (رنگ نارنجی) مربوط به ورود پالس PWM است. دیتاشیت سرو موتور MG90s را می‌توانید از سایت https://engineering.tamu.edu/  مشاهده کنید.   تغذیه سرو موتور mg90s در این پروژه برد استفاده‌شده جهت راه‌اندازی 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 میلی‌ثانیه است.    
حامد عباسیان

درباره حامد عباسیان

زمینه تخصصی فعالیتم برنامه نویسی میکروکنترلر و طراحی مدارات میکروکنترلری هست.از علایقم کارکردن در زمینه اینترنت اشیاء و سیستم های ردیابی است که در این زمینه ها در حال فعالیت هستم

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

4 دیدگاه در “راه‌اندازی سرو موتور با استفاده از برد آردوینو

  1. احمد گفت:

    سلام.
    برای اولین بار هست که با سروو کار میکنم و چون آشنایی ندارم بعضی چیزهای ساده برام سوال هست. یه سروو MG996R گرفتم و با آردوینو اونو فعال کردم. اما چندتا ایراد توی کار میبینم.

    اول اینکه سروو بصورت دایم چیزی در حدود 100mA جریان می کشه. یعنی وقتی سیم مثبت و منفی سروو رو وصل میکنیم، آمپر صفر هست. اما به محض اتصال سیم (نارنجی) PWM سروو حدود 100mA جریان میکشه. فرقی هم نمیکنه که تو چه زاویه ای باشه. (این جریان غیر از جریان هنگام چرخش زاویه سروو هست).
    آیا این طبیعی هست؟
    و از اون مهمتر، اگر طبیعی هست، راهی به نظر تون میرسه که این جریان کشی بی مورد رو حذف کنم؟
    چون میخوام پروژه نهایی رو با باطری راه اندازی کنم و مدیریت جریان خیلی برام اهمیت داره.

    دوم اینکه انگار سروو تو حالت ثابت هم دایم درگیر هست. مثلا به سروو دستور میدم بره به زاویه 90 درجه. بعد از انجام دستور، انگار هنوز هم موتور سروو خیلی کم درگیر هست و صدا های ریز ریز میده. حتی گاهی سروو تکون های ریزی هم میخوره که نشون میده موتور سروو دایم داره حرکت های کمی میکنه. فرقی هم نداره سروو تو چه زاویه ای باشه.
    آیا این مورد هم طبیعی هست؟

    برد آردوینو، هم Uno هم Mega دارم. اما عملکرد سروو با هر دو یک شکل هست.
    دستوراتی که برای تست اولیه و راه اندازی موقت سروو استفاده کردم به این شرح هست:

    #include
    int servopin3 = 3; //Servo signal pin is attached to pin 3
    Servo servo3; // define a servo No 2

    void setup() {
    servo3.attach (servopin3);
    }

    void loop() {
    servo3.write(0);
    delay (10000);
    servo3.write(105);
    delay (10000);
    }

    ممنون میشم اگه راهنمایی بفرمایید.

    1. Zeus . گفت:

      سلام دوست عزیز
      در مورد جریان کشی زیاد مطمين نیستم
      اما در مورد تکان ها و صدا ها دو تا عامل میتونه داشته باشه یکی ثابت فرکانسی pwm هست که تاثیر داره
      و البته کیفیت خود سرور – همونطور که میدونید سرور از کنترل حلقه بسته استفاده میکنه و مدام موقعیت خودش رو اصلاح میکنه حالا اگر دقت adc یا پتانسومتر زاویه سنج کافی نباشه این مشکلات پیش میاد

  2. آرش گفت:

    سلام
    ممنون از مطالب عالیتون
    آیا این امکان هست که از سایر پایه هایی که pwm نیست برای راه اندازی سرو استفاده کرد؟این کار چگونه ممکن هست؟
    ممنون از پاسخگویی شما استاد عزیز

    1. Zeus . گفت:

      بله امکانش هست با استفاده از متد های شبیه سازی pwm این کار رو انجام داد ولی مساله که مطرح میشه باری است که بر روی cpu میذاره و البته ممکنه زیاد دقت نداشته باشه اگر بخواید چنین کاری رو انجام بدید.