سروو موتور ها ، موتور هایی با قابلیت کنترل چرخش می باشند . در این موتور ها از یک سیستم بازخورد استفاده شده است که امکان کنترل دقیق موتور را فراهم می سازد . به طور معمول از سروو موتور ها در مکان هایی که نیاز به حرکت محدود ولی کنترل شده دارند استفاده می شود . مدل های مختلفی از سروو موتور ها وجود دارد که با در نظر نگرفتن ابعاد و گشتاور و… ، تفاوت آن ها تنها در میزان چرخش می باشد . این موتور ها در مدل های 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); }
بسیار عالی و سودمند