НАЗАД

Использование сервомоторов

Сервомоторы имеют три линии подключения: питающее напряжение (обычно красный), земля (обычно черный или коричневый), управляющий сигнал (обычно желтый или белый). Сигнальный кабель обычно подключается к 9 контакту Arduino.
В случае, если используются маленькие сервоприводы и сервопривод один, то можно подключить в качестве источника питания контакты выходов Arduino: +5 В и землю (GND). В случае, если используется более мощные сервоприводы или несколько сервоприводов, то необходим внешний источник питания. При этом необходимо учесть, что земля (GND) должна быть общей.
Максимальное количество объектов класса Servo восемь, которые могут быть созданы в пределах одной программы.

Описание библиотеки Servo.h

Функция attach(). Подключает объект Servo к определенному pin. Библиотека Servo поддерживает только серводвигатели на двух pin: 9 и 10.
Синтаксис attach():

servo.attach(pin);
servo.attach(pin, min, max);
//servo – это объект класса Servo

Ниже пример программы:

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

Функция attached(). Проверяет, подключен ли объект servo к pin. Возвращает true, если подключен к pin, и false, если неподключен.
Синтаксис detach():

servo.attached();
//servo – это объект класса Servo

Функция detach(). Отделяет значение pin от серводвигателя. Если все объекты серводвигателей отключены, тогда pin 9 и 10 могут быть использованы, как выходы ШИМ для аналоговой функции analogWrite().
Синтаксис detach():

servo.detach();
//servo – это объект класса Servo

Функция write(). Записывает значение угла, на который должен повернуться выходной вал двигателя. Значение угла передается в градусах. Сервопривод осуществляет вращение от 0 до 180 градусов.
Синтаксис write():

servo.write(angle);
//servo – это объект класса Servo

Ниже пример программы:

#include
Servo myservo;
void setup()
{
myservo.attach(9);
myservo.write(90); // установка сервопривода точно по середине
}
void loop() {}

Функция read(). Читает текущее значение угла серводвигателя. При этом значение угла равно последнему вызову функции write(). Читает значение угла от 0 до 180.
Синтаксис read():

servo.read();
//servo – это объект класса Servo

Функция
(value, fromLow, fromHigh, toLow, toHigh). Переводит значение из одного диапазона в другой диапазон. Например значение из диапазона от 0 до 1023 в диапазон от 0 до 180.
Синтаксис команды
(value, fromLow, fromHigh, toLow, toHigh):

val = (value, 0, 1023, 0, 179);

Ниже пример программы:

#include
Servo myservo;
void setup() {}
void loop()
{
int val = analogRead(0);
val =
(val, 0, 1023, 0, 179);
analogWrite(9, val);
}

Функция analogRead(potentiometr). Считывание аналогового значения. Переменная potentiometer определяет номер pin (аналоговый вход/выход). Читает определенное значение с аналогового pin. Arduino содержит 10 битный аналогово-цифровой преобразователь, который позволяет работать с напряжением от 0 до 5 В и имеет разрешение от 0 до 1023. Значение контакта (pin) на чтение может принимать от 0 до 5 на Arduino UNO. Максимальная скорость чтения 10 000 раз в секунду или одно чтение аналогового входа занимает 100 микросекунд.
Синтаксис команды analogRead(pin):

analogRead(0);

Ниже приводится пример программы.

int analogPin = 3; // Потенциометр средним контактом подключен к pin 3
// Внешние питание +5V и земля для потенциометра
int val = 0; // определяем переменную для хранения значения
void setup()
{
Serial.begin(9600); // настраиваем последовательный порт для передачи
}
void loop()
{
val = analogRead(analogPin); // читаем на входе pin
Serial.println(val); // выводим данные
}

Функция analogReference(). Определяет опорное напряжение, относительно которого происходит измерение. Функция возвращает значение с разрешением 8 бит, пропорциональному входному напряжению на аналоговом входе, и в зависимости от опорного напряжения.
Настройки опорного напряжения:

Внешние напряжение рекомендуется подключать к выводу AREF через резистор 5кОм.
Синтаксис команды analogReference(type):

analogReference(DEFAULT);
//DEFAULT, INTERNAL, INTERNAL1V1, //INTERNAL2V56, EXTERNAL.

Функция analogReadResolution(). Выполняет настройку размера (в битах) значения возвращаемого функцией analogRead(). По умолчанию настроено 10 бит (возвращает значение между 0-1023). Если установить значение 12, то интервал будет увеличен от 0 до 4095.
Синтаксис команды analogReadResolution (bits):

analogReadResolution (10);

Параметр bits может быть установлен от 1 до 32. Данный параметр необходимо устанавливать точно в соответствии с спецификацией устройства (например Arduino поддерживает 10).
Пример кода:

#include
int A0=0;
void setup() {
// открыть соединение по последовательному порту
Serial.begin(9600);
}
void loop() {
// прочитать вход на А0 с разрешением (10 bits)
// и отправить данные в последовательный порт
analogReadResolution(10);
Serial.print("ADC 10-bit (default) : ");
Serial.print(analogRead(A0));
// изменение разрешения до 12 бит и чтения А0
analogReadResolution(12);
Serial.print(", 12-bit : ");
Serial.print(analogRead(A0));
// изменение разрешения до 16 бит и чтения А0
analogReadResolution(16);
Serial.print(", 16-bit : ");
Serial.print(analogRead(A0));
// изменение разрешения до 8 бит и чтения А0
analogReadResolution(8);
Serial.print(", 8-bit : ");
Serial.println(analogRead(A0));
//задержка на 100 мс
delay(100);
}

Функция writeMicroseconds(). Запись значения в микросекундах для передачи данных на сервопривод. На стандартном сервоприводе это настройка следующих значений, как пример:


Синтаксис writeMicroseconds(angle):

Servo.writeMicrseconds(uS); //uS – значение в микросекундах.

Пример программы ниже:

#include
Servo servo;
void setup()
{
servo.attach(9);
servo.writeMicroseconds(1500); // set servo to mid-point
}
void loop() {}

Схемы включения сервоприводов

На данный момент рассмотрим три схемы включения сервопривода:


На рисунке ниже показана схема включения сервопривода с электропитанием питанием от Arduino.

На рисунке ниже показана схема включения сервопривода с внешним электропитанием питанием.