
چگونه یک سروو موتور را با آردینو راه اندازی کنیم؟
موتورهای سروو و آردوینو – راهنمای کامل
کنترل سروو موتور با آردوینو
سروو موتور ها گزینهای بسیار مناسب برای پروژههایی هستند که به حرکت دقیق اجزا نیاز دارند. معمولاً این موتورها دارای یک بازوی سروو هستند که میتواند تا ۱۸۰ درجه یا ۳۶۰ درجه بچرخد. این موتورها برای تعیین موقعیت بازوی خود به یک سیگنال کنترلی نیاز دارند.
موتورهای سروو بهطور گسترده در رباتیک استفاده میشوند؛ از جمله برای کنترل جهت و موقعیت بازوی رباتیک، کنترل فرمان خودروهای کنترل از راه دور (RC)، و تنظیم زاویه ایلرون در هواپیماهای RC.
در این آموزش، یاد میگیرید چگونه یک موتور سروو را با استفاده از آردوینو کنترل کنید. ابتدا نشان میدهم چگونه سروو را بهصورت خودکار به جلو و عقب حرکت دهید (Sweep) و سپس یک پتانسیومتر اضافه میکنم تا بتوانید موقعیت سروو را بهصورت دستی کنترل کنید.
برای انتخاب سروو موتور مناسب از دسته سروو موتور فروشگاه ECA بازدید کنید.
نحوه عملکرد موتورهای سروو
یک موتور سرووی استاندارد از چهار بخش اصلی تشکیل شده است: یک موتور الکتریکی، یک گیربکس، یک پتانسیومتر و یک مدار کنترلی.
بهطور کلی، موتور الکتریکی دارای سرعت بالا و گشتاور پایین است؛ بنابراین از گیربکس برای کاهش سرعت و افزایش گشتاور موتور استفاده میشود. یک پتانسیومتر در پشت شفت خروجی متصل شده است تا بتواند موقعیت شفت خروجی را پایش کند. موتورهای سروو برای تعیین موقعیت بازوی خود به یک سیگنال ورودی نیاز دارند. مدار کنترلی این سیگنال ورودی را تفسیر کرده و مشخص میکند چه مقدار حرکت لازم است.
پینآوت موتور سروو

بیشتر موتورهای سروو دارای ۳ سیم هستند: VCC، زمین (Ground) و سیگنال (Signal).
- VCC – جریان الکتریکی مورد نیاز موتور را تأمین میکند و معمولاً به رنگ قرمز است.
- Ground – مدار الکتریکی را کامل میکند و معمولاً به رنگ قهوهای یا مشکی است.
- Signal – سیگنال کنترلی را منتقل میکند و معمولاً به رنگ نارنجی یا زرد است.
پینآوت موتور سروو
توجه به این نکته مهم است که کد رنگی ذکرشده در بالا مربوط به موتور مدل SG90 و MG90S است. کد رنگی میتواند در مدلهای مختلف متفاوت باشد. اگر درباره سرووی خاص خود مطمئن نیستید، برای دریافت اطلاعات دقیق به دیتاشیت سازنده مراجعه کنید. مدار دارای یک سیستم کنترل حلقهبسته است که از مقدار خواندهشده پتانسیومتر بهعنوان بازخورد موقعیت استفاده میکند. موقعیت نهایی بر اساس این بازخورد موقعیت تعیین میشود.
سیستم حلقهبسته موتور سروو

سیگنال کنترلی موتور سروو
موتورهای سروو برای تنظیم موقعیت بازوی سروو به یک سیگنال PWM نیاز دارند. برای راهاندازی یک موتور سروو، یک چرخه پالسی ۲۰ میلیثانیهای لازم است. عرض پالس، موقعیت بازوی سروو را تعیین میکند.
در برخی دیتاشیتها ذکر شده است که عرض پالس کاری از ۱ میلیثانیه تا ۲ میلیثانیه است، در حالی که در برخی دیگر این مقدار بین ۵۰۰ تا ۲۴۰۰ میکروثانیه ذکر شده است.

پس از انجام چند آزمایش، مشخص شد که بازه ۶۰۰ تا ۲۴۰۰ میکروثانیه برای سرووی ( SG90) بهترین عملکرد را دارد. به این معنی که مدتزمان پالس ۶۰۰ میکروثانیه، سروو را در موقعیت ۰ درجه قرار میدهد و ۲۴۰۰ میکروثانیه آن را در موقعیت ۱۸۰ درجه تنظیم میکند.
موتورهای سروو بسته به اندازه و میزان باری که تجربه میکنند، نیازهای توان متفاوتی دارند. یک موتور سرووی رایج مانند Feetech Mini Servo Motor در حالت بیبار (Idle) به ولتاژی در بازه ۴٫۸ تا ۶ ولت و جریانی در حدود ۵ تا ۶ میلیآمپر نیاز دارد. برای ثابت ماندن در یک موقعیت، انرژی زیادی مصرف نمیشود.
اما بهمحض اینکه موتور شروع به حرکت میکند، مصرف انرژی افزایش مییابد و این انرژی را با کشیدن جریان بیشتر از منبع تغذیه تأمین میکند.
اگر موتور با بارهای سنگینتری مواجه شود، مانند اضافه شدن وزن یا وجود یک مانع در مسیر حرکت، بهطور طبیعی برای غلبه بر این مانع به انرژی بیشتری نیاز دارد و در نتیجه مصرف جریان افزایش پیدا میکند. مصرف جریان موتور میتواند تا ۸۰۰ میلیآمپر نیز برسد.
این میزان جریانکشی بالا معمولاً برای تأمین مستقیم از برد آردوینو ایمن نیست. برای جلوگیری از آسیب دیدن برد، لازم است موتور سروو را از طریق یک منبع تغذیه خارجی تغذیه کنیم. انتخاب منبع تغذیه مناسب به نوع موتور سروویی که استفاده میکنید بستگی دارد، بنابراین همیشه مشخصات فنی آن را بررسی کنید. بهویژه به موارد زیر دقت کنید:
محدوده ولتاژ کاری
-
جریان حالت بیحرکت (Idle Current) – مصرف جریان زمانی که موتور حرکت نمیکند.
-
جریان در حال کار (Running Current) – مصرف جریان هنگام حرکت آزاد
-
جریان استال (Stall Current) – مصرف جریان در حداکثر بار یا هنگام مسدود شدن حرکت
برای تغذیه یک سرووی ۴٫۸ تا ۶ ولت میتوانید از یک آداپتور AC با خروجی ۵ ولت و ۱ آمپر استفاده کنید، کابل آن را قطع کرده و سیمها را مثلاً با استفاده از یک بردبورد به موتور سروو متصل کنید.
توجه داشته باشید که شارژرهای دیواری USB معمولاً به ۵۰۰ میلیآمپر (USB 2.0) یا ۹۰۰ میلیآمپر (USB 3.0) محدود هستند.
اگر پروژه شما نیاز دارد بهصورت مستقل و بدون اتصال به پریز برق حرکت کند، میتوانید از باتریها برای تغذیه سروو استفاده کنید. اگر دقیقاً به ۵ ولت نیاز دارید، میتوانید از دو باتری لیتیومیون 18650 به همراه یک مبدل کاهنده ولتاژ (Step-Down Converter) استفاده کنید.
استفاده از مبدل کاهنده ولتاژ ضروری است، زیرا باتریهای لیتیومیون 18650 ولتاژی در حدود ۷٫۴ ولت تولید میکنند. حداکثر جریان خروجی به نوع باتری بستگی دارد، اما بیشتر این باتریها برای خروجی بیش از ۱ آمپر طراحی شدهاند که برای تغذیه یک سرووی کوچک کافی است.
اگر از سرووهای بزرگتر یا تعداد بیشتری سروو استفاده میکنید، حتماً نیازهای توان خود را متناسب با آن بررسی کنید.
استفاده از خازنها برای تغذیه موتورهای سروو توصیه میشود. خازنها به پایدارسازی منبع تغذیه، کاهش افت ولتاژ و کمکردن نویز الکتریکی کمک میکنند. مقدار دقیق خازن ممکن است بسته به نیازهای موتور سروو متفاوت باشد، اما استفاده از آنها بهطور کلی یک روش خوب برای بهبود عملکرد و افزایش قابلیت اطمینان مدار است.
برای استفاده با Servo Motor، توصیه میشود از یک خازن ۱۰۰ میکروفاراد (100 µF) استفاده شود.
از آنجا که برخی خازنها قطبدار هستند (یعنی جهت اتصال دارند)، باید در نحوه اتصال آنها به مدار دقت کنید. حتماً با بررسی علائمی مانند نوار سفید، علامت «+» یا پایه بلندتر، خازن را بهدرستی متصل کنید. اگر خازن شما چنین نشانههایی دارد، آنها را با علائم مدار (+ و -) مطابقت دهید و مراقب باشید که از حد مجاز ولتاژ خازن تجاوز نکنید. رعایت این نکات به جلوگیری از بروز مشکلاتی مانند نشتی یا آسیب دیدن خازن کمک میکند که میتواند به مدار شما صدمه بزند.
چگونه یک سروو موتور را با آردینو راه اندازی کنیم؟
زمان کل: 20 دقیقه
شماتیک راه اندازی سروو موتور با پتانسیومتر

موتورهای سروو دارای سه سیم هستند: تغذیه، زمین و سیگنال. سیم تغذیه معمولاً به رنگ قرمز است و باید به قطب مثبت (+) منبع تغذیه متصل شود. سیم زمین معمولاً مشکی یا قهوهای است و باید به قطب منفی (−) منبع تغذیه وصل شود.
پین سیگنال معمولاً به رنگ زرد یا نارنجی است و باید به یکی از پینهای PWM برد متصل شود. در این مثالها، از پین شماره ۹ استفاده شده است.
مدار Knob (کنترل با پتانسیومتر)
برای مثال Knob، پتانسیومتر را بهگونهای سیمکشی کنید که دو پایه کناری آن به تغذیه (+5V) و زمین متصل شوند و پایه وسط آن به پین A0 روی برد وصل شود. سپس موتور سروو را مطابق مدار زیر متصل کنید.
برنامه راه اندازی سروو موتور با پتانسیومتر
در این مثال، یک پتانسیومتر ۱۰ کیلواهم (مقاومت متغیر) به مدار اضافه میکنم تا بتوانیم موقعیت سروو را بهصورت دستی تنظیم کنیم. میتوانید از این آموزش در پروژههایی مانند بازوهای رباتیک، بیل مکانیکی آردوینو و موارد مشابه استفاده کنید.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
شماتیک راه اندازی سروو موتور مدار Sweep

برای مثال Sweep، موتور سروو را مطابق مدار زیر متصل کنید.
برنامه راه اندازی سروو موتور مدار Sweep
برنامه زیر سادهترین روش برای تنظیم موقعیت یک موتور سروو را به شما نشان میدهد. همچنین میتوانید از این برنامه برای بهراحتی پیدا کردن مدتزمان پالس مناسب که با موتور سرووی خاص شما سازگار است، استفاده کنید.
#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
}
}
این کد برای کنترل یک سرووموتور با استفاده از آردوینو و کتابخانهی استاندارد Servo نوشته شده است. ابتدا با اضافه کردن کتابخانه، یک شیء از نوع Servo ساخته میشود که رابط ارتباطی بین آردوینو و سرووموتور است. سپس در تابع setup، سروو به پین دیجیتال ۹ متصل میشود؛ پینی که سیگنال PWM لازم برای تعیین زاویهی سروو را ارسال میکند. متغیر pos نیز برای نگهداری مقدار زاویهی فعلی سروو در بازهی ۰ تا ۱۸۰ درجه به کار میرود.
در تابع loop، دو حلقهی for وظیفهی ایجاد حرکت رفت و برگشتی را بر عهده دارند. حلقهی اول زاویهی سروو را بهصورت تدریجی از ۰ تا ۱۸۰ درجه افزایش میدهد و حلقهی دوم همین مسیر را به شکل معکوس طی میکند. دستور myservo.write(pos) زاویهی جدید را به سروو ارسال میکند و delay(15) مکث کوتاهی ایجاد میکند تا حرکت سروو نرم و قابل مشاهده باشد. نتیجهی این فرآیند، چرخش پیوستهی سرووموتور بین دو انتهای دامنهی حرکتی آن است.
ابزارها:
- برد آردوینو
- موتور سروو
- پتانسیومتر ۱۰ کیلواهم
- سیمهای اتصال (Hook-up wires)
- خازنها
- منبع تغذیه



