Servo

Библиотека уже встроена в среду программирования Arduino IDE.

Эта библиотека функций для Arduino контроллера предоставляет набор функций для управления сервоприводами. Стандартные сервоприводы обычно позволяют поворачивать привод на опредленный угол от 0 до 180 градусов. Некоторые сервоприводы позволяют совершать полные обороты на заданной скорости.

Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на Arduino Mega. На контроллерах отличных от Mega использование библиотеки отключает возможность использовать выходы 9 и 10 в режиме ШИМ даже если привод не подключен к этим выводам. На плате Mega могут быть использованы до 12 сервоприводов без потери функционала ШИМ. При использовании Mega для управления от 12 до 23 сервоприводов нельзя будет использовать выходы 11 и 12 для ШИМ.

Подключение

В общем случае сервопривод подключается 3-мя проводами: питание, земля и сигнальный. Обычно питание - красный провод и может быть подключен к выводу +5V на плате Arduino. Черный провод - земля, подключается к GND выводу Arduino. Желтый сигнальный провод подключается к цифровому выводу контроллера Arduino. Следует отметить, что мощные сервоприводы могут создавать большую нагрузку, в этом случает он должен быть запитан от отдельного источника питания (не через выход +5V Arduino). Аналогично для случая подключения сразу нескольких сервоприводов. Убедитесь, что привод и контроллер подключены к общей земле.

Servo.attach()

Подключает Servo к указанному выходу, с которого осуществляется управление приводом. На ранних версиях Arduino - 0016 и более ранних, библиотека Servo поддерживала управления только через порты 9 и 10.

Синтаксис

servo.attach(pin);
servo.attach(pin, min, max);

Параметры

servo: переменная типа Servo
pin: номер выхода, к которому подключаем servo и с которого осуществляется управление приводом
min (опциональный): ширина импульса в микросекундах, соответствующий минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544)
max (optional): ширина импульса в микросекундах, соответствующий максимальному (угол 180 градусов) положению сервопривода.

Пример

#include "servo.h"
Servo myservo;
void setup()
{
	myservo.attach(9);
}
void loop() {}

Servo.write()

Передает значения для управления приводом. Для стандартного сервопривода это угол поворота. Для привод постоянного вращения, функция задает скорость вращения (0 - для максимальной скорости вращения в одну сторону, 180 - для максимальной скорости в другую сторону и около 90 для неподвижного состояния).

Синтаксис

servo.write(angle)

Параметры

servo: переменная типа Servo
angle: значение записываемое в servo, от 0 до 180

Пример

#include "servo.h"

Servo myservo;

void setup()
{
	myservo.attach(9);
	myservo.write(90); // устанавливает сервопривод в среднее положение
}

void loop() {}

Servo.writeMicroseconds()

Передает значение для управления сервоприводом в микросекундах (uS), устанавливая угол поворота на это значение. Для стандартного привода значение 1000 - максимальный поворот против часовой стрелки, 2000 - максимальный поворот по часовой стрелке, 1500 - посередине.

Замечание: некоторые производители не придерживаются стандартных значений и такие приводы могут управляться значениями от 700 до 2300. Поэкспериментируйте со значениями до момента, пока привод не повернется и остановится в крайнем положении. Тем не менее следует избегать постоянного использования привода на значениях больше допустимых.

Приводы постоянного вращения реагируют на данную команду подобно реакции на функцию write().

Синтаксис

servo.writeMicroseconds(uS);

Параметры

servo: переменная типа Servo
uS: значение в микросекундах (int)

Пример

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

Servo.read()

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

Синтаксис

servo.read();

Параметры

servo: переменная типа Servo

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

Положение (угол) сервопривода от 0 до 180.

Servo.attached()

Проверяет подключена ли переменная Servo к выходу.

Синтаксис

servo.attached();

Параметры

servo: переменная типа Servo

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

true если подключена, false в противном случае.

Servo.detach()

Отсоединяет переменную Servo от указанного выхода. Если все Servo переменные отсоединены, то выходы 9 и 10 могут быть использованы в режиме ШИМ с помощью analogWrite().

Синтаксис

servo.detach();

Параметры

servo: переменная типа Servo