سروو موتور ها ، موتور هایی با قابلیت کنترل چرخش می باشند . در این موتور ها از یک سیستم بازخورد استفاده شده است که امکان کنترل دقیق موتور را فراهم می سازد . به طور معمول از سروو موتور ها در مکان هایی که نیاز به حرکت محدود ولی کنترل شده دارند استفاده می شود . مدل های مختلفی از سروو موتور ها وجود دارد که با در نظر نگرفتن ابعاد و گشتاور و… ، تفاوت آن ها تنها در میزان چرخش می باشد . این موتور ها در مدل های 90 درجه تا 360 درجه وجود دارند . در یک سرو موتور 90 درجه ، شفت موتور تنها امکان حرکت در یک محدوده 90 درجه ای را دارد . برای کنترل سروو وتور ها از سیگنال های PWM استفاده می شود که بر اساس عرض پالس می توان موقعیت شفت موتور را تعیین کرد . هر پالس باید در بازه زمانی در حدود 20 میلی ثانیه یک بار تکرار شود .
برای راه اندازی سروو با آردوینو از کنابخانه Servo.h استفاده می شود . این کتابخانه امکان اتصال تا 12 موتور به یک آردوینو UNO را فراهم می سازد . در این کتابخانه از واحد تایمر 1 برای ایجاد سیگنال های PWM استفاده می کند .
توابع Servo.h :
در ابتدای برنامه باید کتابخانه Servo.h را به برنامه اضافه کنید :
#include <Servo.h>
برای اجرای متد های سروو باید یک شی از جنس Servo بسازید :
Servo opj;
سپس در تابع ()setup با استفاده از متد ()attach می توانید پینی که سروو به آن متصل است را تعیین کنید :
obj.attach(pin_number);
با استفاده از تابع ()detach نیز می توانید پین انتخاب شده در دستور قبل را آزاد کنید در این حالت سروو خاموش خواهد شد :
obj.detash(pin_number);
برای به حرکت در آوردن سروو از متد ()write استفاده می شود . این تابع یک مقدار بین 0 تا 180 درجه رو میگره و موتور را در زاویه تعیین شده قرار می دهد :
obj.write(angle);
با استفاده از تابع ()read نیز می توان زاویه فعلی موتور را به دست آورد . این تابع یک مقدار uint8_t را بر می گرداند :
uint8_t angle=obj.raed();
مثال راه اندازی سروو موتور با آردوینو :
#include <Servo.h>
// Create a new servo object:
Servo myservo;
// Define the servo pin:
#define servoPin 9
// Create a variable to store the servo position:
int angle = 0;
void setup() {
// Attach the Servo variable to a pin:
myservo.attach(servoPin);
}
void loop() {
// Tell the servo to go to a particular angle:
myservo.write(90);
delay(1000);
myservo.write(180);
delay(1000);
myservo.write(0);
delay(1000);
// Sweep from 0 to 180 degrees:
for (angle = 0; angle <= 180; angle += 1) {
myservo.write(angle);
delay(15);
}
// And back from 180 to 0 degrees:
for (angle = 180; angle >= 0; angle -= 1) {
myservo.write(angle);
delay(30);
}
delay(1000);
}



بسیار عالی و سودمند