logo-site-sefid
Search
Close this search box.
Servo motor control with Arduino

کنترل سروو موتور با آردوینو

کنترل سروو موتور با آردوینو

در این مقاله قصد داریم نحوه ی کنترل سروو موتور با آردوینو نانو (به وسیله ی شلید آردوینو نانو) را به شما آموزش دهیم. سر فصل های این مقاله به صورت زیر است:

  • آشنایی با سروو موتور
  • قطعات مورد نیاز
  • نحوه ی اتصالات ، دیاگرام و نحوه ی عملکرد آنها
  • کدنویسی

کنترل سروو موتور با آردوینو

 گفتیم که در این آموزش ما قرار است کنترل سروو موتور با آردوینو را آموزش دهیم. سروو موتور ها زمانی استفاده می شوند که نیاز به حرکت و یا موقعیت دقیق محور می باشد. این موتور ها برای کاربرد های سرعت بالا مطرح نمی شوند. این موتور ها برای کاربرد هایی که گشتاور متوسط، سرعت کم و موقعیت دقیق دارند مطرح می شوند. این موتور ها در ماشین های بازوی رباتیکی، کنترل کننده های پرواز و سیستم های کنترلی استفاده می شوند.

سروو موتور ها در ابعاد و اشکال مختلفی موجود می باشند. یک سروو موتور معمولا سه سیم اصلی دارد، یکی برای ولتاژ مثبت، یکی برای گره زمین و آخری برای تنظیم موقعیت. سیم قرمز به برق وصل شده، سیم مشکی به زمین متصل شده و سیم زرد به پورت سیگنال کنترلی اتصال داده می شود.

سروو موتور ساده
سروو موتور ساده

یک سروو موتور ترکیبی از یک موتور DC، سیستم کنترل موقعیت و دنده ها می باشد. موقعیت میله محور (از اینجا به بعد به آن شفت – shaft – می گوییم) موتور DC توسط قطعات الکترونیکی کنترلی در داخل سروو، بر اساس نرخ فعال بودن چرخه عملکرد (نرخ 1 بودن به 0 بودن در دیوتی سایکل) سیگنال PWM در پایه SIGNAL از سروو موتور تنظیم می شود.

اگر به طور ساده بخواهیم بیان کنیم، قطعات الکترونیکی کنترلی موقعیت شفت را توسط کنترل کردن موتور DC تنظیم می کنند. این داده که مربوط به موقعیت شفت می باشد از طریق پایه SIGNAL ارسال می شود. داده موقعیتی سروو موتور می بایست در قالب سیگنال PWM از طریق پایه سیگنال سروو موتور برای قطعات کنترلی ارسال شود.

فرکانس سیگنال PWM (پهنای باند ماژوله شده) می تواند بر اساس نوع سروو موتور متغیر باشد. چیزی که اینجا برای ما دارای اهمیت است، نرخ چرخه عملکرد سیگنال  PWM است. بر اساس این نرخ چرخه عملکرد قطعات الکترونیکی کنترلی شفت را تنظیم می کنند.

همان طور که در شکل زیر نشان داده شده است، برای اینکه شفت به موقعیت ساعت 9 حرکت کند، نرخ چرخه عملکرد می بایست 1/18 تنظیم شود، این به معنی این است که 1 میلی ثانیه زمان روشن بودن و 17 میلی ثانیه زمان خاموش بودن در یک سیگنال به طول پریود 18 میلی ثانیه داشته باشیم. ما در پروژه های آموزش رباتیک خود از سروو موتور بسیار استفاده خواهیم کرد.

پالس های PWM مربوط به Servo
پالس های PWM مربوط به Servo

برای این شفت به موقعیت ساعت 12 منتقل شود، زمان روشن بودن سیگنال می بایست 1.5 میلی ثانیه و زمان خاموش بودن آن می بایست 16.5 میلی ثانیه تنظیم شود. این نسبت چرخه عملکرد توسط سیستم کنترلی در داخل سروو رمزگشایی شده و سروو موقعیت را بر اساس آن تنظیم می کند. سیگنال PWM که اینجا داریم توسط آردوینو nano تولید شده است.

قطعات مورد نیاز برای کنترل سروو موتور با آردوینو (شیلد) :

سخت افزار های مورد نیاز برای پروژه کنترل سروو موتور با آردوینو:

آردوینو نانو Nano، شیلد آردوینو نانو ، منبع تغذیه 5 ولت، سروو موتور (که نیاز به تست شدن دارد).

نرم افزار های مورد نیاز:

IDE آردوینو 

ما در ویدیوی تهیه شده از نرم افزار fritzing استفاده کرده ایم ، که استفاده از آن کاملا اختیاری میباشد.

دیاگرام و نحوه عملکرد مدار _ کنترل سروو موتور با آردوینو :

کنترل سروو موتور با آردوینو

 

 

در حالت های عادی ما نیاز است به رجیستر های میکروکنترلر خود برای تنظیم فرکانس و دریافت نرخ چرخه عملکرد مورد نیاز خود برای کنترل دقیق موقعیت سروو موتور خود مراجعه کنیم، اما برای کنترل سروو موتور با آردوینو نیازی به انجام این کار ها نداریم.

در آردوینو ما کتابخانه های از پیش تعریف شده ای داریم که فرکانس ها و نسبت چرخه عملکرد را بر این اساس زمانی که هدر فایل ما فرا خوانده شود و یا در کد ما آورده شود، تنظیم خواهند کرد. در آردوینو، به بیان ساده ما می بایست موقعیت سروو را در جایی که نیاز است ارائه کنیم و سیگنال PWM به صورت خودکار توسط برد nano تنظیم خواهد شد.

کار هایی که برای داشتن موقعیت دقیق سروو می بایست انجام دهیم به شرح زیر هستند:

  1. #include <Servo.h>
  2. 1_Servo servo;
  3. attach(servo_signal_pin_attached_to);
  4. write(needed_position_ angle);

در مرحله اول می بایست فرکانس سیگنال PWM را تنظیم کنیم و برای این کار می بایست هدر فایل “#include <Servo.h>” را فراخوانی کنیم، وقتی در حال اضافه کردن این هدر فایل هستیم، فرکانس به صورت خودکار تنظیم شده و ما می توانیم از یک سری شرایط خاص استفاده کنیم، که به کاربر این امکان را می دهد تا موقعیت سروو را بدون دردسری به صورت مستقیم وارد کند.

حال ما نیاز است که یک نام برای سروو تعریف کنیم “1_Servo servo”، در اینجا ‘1_ servo’ نام است که انتخاب شده، پس در زمان نوشتن کد برای موقعیت سروو ما از این نام استفاده خواهیم کرد، این قابلیت وقتی ما چندین سروو برای کنترل کردن داشته باشیم کارآمد خواهد بود، به طوری که می توانیم تا 8 سروو موتور را از این طریق کنترل کنیم.

حال ما به برد nano خواهیم گفت که پین سیگنال سروو در کجا وصل شده و در کجا نیاز است که سیگنال PWM را تولید کند. برای انجام این کار ما “servo_1.attach(3);” را داریم، در اینجا ما داریم به برد نانو می گوییم که پایه سیگنال سروو را به پایه شماره 3 آردوینو متصل کرده ایم. 

تنها چیزی که باقی مانده است این است که موقعیت را تنظیم کنیم، ما می توانیم موقعیت سروو را با استفاده از “servo_1(30);” تنظیم کنیم، به وسیله این دستور بازوی سروو 30 درجه حرکت می کند، بنابراین کار ما تمام است. پس از آن هر موقع نیاز داشتیم که موقعیت سروو را تغییر دهیم نیاز داریم که دستور ”servo_1.write(needed_position_ angle);” را فراخوانی کنیم. در این مدار ما دو دکمه داریم که یکی زاویه موقعیت سروو را افزایش داده و دیگری برای کاهش دادن این زاویه استفاده می گردد.

 

آموزش کنترل سروو موتور با آردوینو به صورت مرحله به مرحله در کد C زیر توضیح داده شده است.

ابتدا با وارد کردن include<servo.h> کتابخانه ی سروو موتور را در قسمت پیش پردازنده ها لحاظ میکنیم. و سپس روبروی عبارت Servo نام سروو موتوری که میخواهیم از آن استفاده کنیم را مشخص میکنیم در اینجا ما نام اختیاری  servo1_pin5 را برای اینکه در کدنویسی های طولانی دچار سردرگمی نشویم و یا افرادی ک کد ما را میخوانند دچار اشتباه نشوند به این دلیل انتخاب کرده ایم که بدانیم که سروو موتور شماره ی 1 ما به پین شماره ی 5 متصل شده است.

#include <Servo.h> Servo Servo1_PIN5;


//سپس در قسمت ()void setup پینی را که میخواهیم سروو موتور را به آن متصل کنیم با دستور

_(شماره ی پین)attach.(نام تعریف شده برای سروو موتور)

تعریف میکنیم که در اینجا نام سروو موتور را servo1_pin5 و پین آن را
5قرارداده ایم:



void setup() { Servo1_PIN5.attach(5); }

 

سپس در قسمت ()void loop  دستورات تکرار شونده ی خود را وارد میکنیم برای این منظور از دستور write(زاویه ی سروو موتور) میکنیم ما میتوانیم با کدهای متفاوت خروجی های متفاوتی بگیریم اما برای این آموزش از کد زیر استفاده کرده ایم که مقدار زاویه و مقدار مکث برای انجام دستور بعدی برای آن به ترتیب زیر نوشته شده است.

void loop()

{ Servo1_PIN5.write( 0 );

delay( 2000 );

Servo1_PIN5.write( 180 );

delay( 2000 );

Servo1_PIN5.write( 0 );

delay( 2000 );

Servo1_PIN5.write( 180 );

delay( 1000 ); }

 

در قسمت زیر کدهای مقاله ی کنترل سروو موتور با آردوینو را به صورت کلی برای شما قرار داده ایم.

 

#include <Servo.h>

Servo Servo1_PIN5;

void setup()

{ Servo1_PIN5.attach(5);

}

void loop()

{ Servo1_PIN5.write( 0 );

delay( 2000 );

Servo1_PIN5.write( 180 );

delay( 2000 );

Servo1_PIN5.write( 0 );

delay( 2000 );

Servo1_PIN5.write( 180 );

delay( 1000 );

}

 

* بعد از مطالعه ی این مقاله( کنترل سروو موتور با آردوینو )سعی کنید از ترکیب ال سی دی کاراکتری و سروو موتور یک پروژه با خلاقیت خود بسازید. همچنین برای انجام این کار میتوانید به مقاله ی راه اندازی ال سی دی کاراکتری با آردوینو نیز مراجعه کنید.

 

رضا قنبری
متخصص آموزش رباتیک

رضا قنبری هستم متخصص آموزش رباتیک با بیش از 10 سال سابقه فعالیت در ایران

این مطلب را به اشتراک بگذارید

دسته بندی نشده

ماژول سنسور مجاورت نوری

ماژول سنسور مجاورت نوری قبل از خواندن این مقاله بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته اند

ماژول کاهنده

ماژول كاهنده قبل از خواندن مقاله ماژول كاهنده بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته اند از

دیدگاه‌ خود را بنویسید

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