Урок 7. Сервопривод.

Управление Сервоприводом с помощью ардуино.


Подключение 1 сервопривода к ардуино.


Подключение 1 сервопривода к ардуино.


Сервопривод управляется ШИМ (широтно-импульсная модуляция) сигналом с Ардуино.  Ширина импульса (= длительность импульса) определяет положение оси мотора. Если отправить на серву сигнал с шириной импульса 1,5 милисекунды (мс), сервопривод встанет в нейтральное положение (90градусов). Минимальные и максимальные углы (0 и 180 градусов соответственно) обычно соответствуют 1мс и 2 мс.



Обратите внимание, что некоторые сервоприводы имеют отклонения от этих  значений в зависимости от производителя и типа сервы. Но центральное положение практически всегда будет иметь длительность импульса 1,5 мс. 




Код.

Програмный код для управления сервоприводом очень простой. Необходимо указать ШИМ порт на на output, а в цикле прописывать импульсы определенной длительности и частоты.


#define servoPin 9 //обозначаем 9 пин именем servoPin


void setup() {
pinMode(servoPin, OUTPUT);
}


void loop() {
digitalWrite(servoPin, HIGH); // подаем высокий сигнал на пин 9
delayMicroseconds(1450); //Длительностью 1450 микросекунд
digitalWrite(servoPin, LOW); // подаем низкий сигнал на пин 9
delayMicroseconds(18550); // 20мс - длительность импульса
// Длительность импульса: 600 - 0градусов; 1450 - 90градусов; 2300 - 180градусов
}


Удобнее пользоваться штатной библиотекой для сервопривода. Тогда код будет выглядеть следующим образом:


#include <Servo.h> //подключаем штатную библиотеку
Servo myservo; // задаем имя для сервопривода


void setup() {
myservo.attach(9); // указываем пин 
}


void loop() {
myservo.write(0); // прописываем угол поворота сервопривода
delay(1000);

myservo.write(90); 
delay(500); 

myservo.write(135); 
delay(500);

myservo.write(180); 
delay(1500); 
}