Arduino библиотека Servo

Arduino библиотека Servo представляет собой набор функций для управления сервоприводами. Данная библиотека дает возможность управлять сразу двенадцатью сервоприводами с помощью большинства микроконтроллеров Ардуино. Некоторые платы Ардуино позволяют подключать меньше сервоприводов (такие платы как Arduino LilyPad) так как у их меньше цифровых вводов/выводов. Другие платы дают возможность управлять сразу 48-ю сервоприводами (Arduino Mega).

Использование библиотеки Servo накладывает некоторые ограничения. На всех платах кроме Arduino Mega, при работе с данной библиотекой, пропадает возможность использовать цифровые пины 9 и 10 в режиме ШИМ. На плате Ардуино Мега режим ШИМ становится не доступен на пинах 11 и 12, только при подключении более 12 сервоприводов.

Скачать библиотеку Servo.h

Данная библиотека автоматически устанавливается вместе с Arduino IDE. Но вы можете отдельно скачать библиотеку Servo для Ардуино. Для установки библиотеки просто распакуйте zip архив в папку «C:\Program Files (x86)\Arduino\libraries» или в то место, где у васт установлена среда разработки Arduin IDE. Если у вас запущена программа Arduino IDE, то для работы с новой библиотекой её необходимо перезапустить.

После того как вы скачали библиотеку Servo и установили ее, вы можете подключать библиотеку в свои скетчи и вам будут доступны примеры использования данной библиотеки.

Для использование библиотеки Servo необходимо подключить ее в свой скетч и создать переменную типа servo. Сделать это очень просто:

#include <Servo.h>
 
Servo myservo;
 
void setup() {
 // CODE...
}
 
void loop() {
 // CODE...
}

attach()

Указывает вывод к которому подключен сервопривод.

Синтаксис

servo.attach(pin, min, max);

Параметры

pin — Обязательный параметр. Цифровой пин к которому подключен сигнальный провод сервопривода.

min — Необязательный параметр. Ширина импульса в микросекундах, соответствующая минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544)

max — Необязательный параметр. Ширина импульса в микросекундах, соответствующая максимальному (угол 180 градусов) положению сервопривода.

Возвращаемые значения

Нет

#include <Servo.h>
 
Servo myservo;
 
void setup() {
	myservo.attach(9);
}
 
void loop() {
	// CODE...
}

write()

Поворачивает сервопривод на заданный угол. Для сервоприводов постоянного вращения устанавливает скорость и направление вращения.

Синтаксис

servo.write(angle);

Параметры

angle — Обязательный параметр. Устанавливает угол от 0 до 180 градусов. При использовании сервопривода постоянного вращения значение 90 используется для неподвижного состояния. Значение 0 для максимальной скорости кручения в одну сторону, а 180 для максимальной скорости кручения в другую сторону.

Возвращаемые значения

Нет

#include <Servo.h>
 
Servo myservo;
 
void setup() {
 myservo.attach(9);
 myservo.write(90); // Поворачивает сервопривод на среднее положение
}
 
void loop() {
 // CODE...
}

writeMicroseconds()

Поворачивает сервопривод на угол заданный в микросекундах. С сервоприводами постоянного вращения работает по таком же принципу как и функция write().

Синтаксис

servo.writeMicroseconds(ms);

Параметры

ms — Обязательный параметр. Значение в микросекундах

Возвращаемые значения

Нет

#include <Servo.h>
 
Servo myservo;
 
void setup() {
 myservo.attach(9);
 myservo.writeMicroseconds(1500); // Поворачивает сервопривод на среднее положение
}
 
void loop() {
 // CODE...
}

read()

Возвращает текущее положение сервопривода.

Синтаксис

servo.read();

Параметры

Нет

Возвращаемые значения

Int от 0 до 180.

#include <Servo.h>
 
Servo myservo;
 
void setup() {
 Serial.begin(9600); // Открываем последовательный порт
 myservo.attach(9);
 int position = myservo.read(); // Считываем положение сервопривода
 Serial.print("Текущее положение сервопривода: ");
 Serial.println(position); // Отправляем значение угла на запись в последовательный порт
}
 
void loop() {
 // CODE...
}

attached()

Проверяет, указан ли управляющий пин для экземпляра класса Servo.

Синтаксис

servo.attached();

Параметры

Нет

Возвращаемые значения

boolean true — если пин был указан и false — если нет

#include <Servo.h>
 
Servo myservo;
 
void setup() {
 Serial.begin(9600); // Открываем последовательный порт
 if(!myservo.attached()) {
  myservo.attach(9); // Указываем пин если этого не было сделано раньше
 }
}
 
void loop() {
 // CODE...
}

detach()

Отсоединяет экземпляр класса от пина. При отсоединения всех сервоприводов, заблокированные ШИМ выводу снова станут доступны.

Синтаксис

Servo.detach()

Параметры

Нет

Возвращаемые значения

Нет

#include <Servo.h>
 
Servo myservo;
 
void setup() {
 Serial.begin(9600); // Открываем последовательный порт
 myservo.attach(9); // Указываем пин если этого не было сделано раньше
 int position = myservo.read(); // Считываем положение сервопривода
 Serial.print("Текущее положение сервопривода: ");
 Serial.println(position); // Отправляем значение угла на запись в последовательный порт
 myservo.detach(); // Освобождаем пин, к которому был подключен сервопривод
}
 
void loop() {
 // CODE...
}
Ардуино