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

 

Tags:
About Author: USER_4