Содержание
Сервопривод (servo) — устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень простое и требует минимум деталей. Сервомоторы применяются в огромном количестве областей, наиболее частая сфера применения это робототехника и автоматика.
Если разобрать сервопривод, то там по сути нет ничего интересного — моторчик, шестеренки потенциометр и плата контроллера. На плату контроллера поступает управляющий сигнал определенной формы и питание, а он в свою очередь управляет моторчиком сервопривода. Потенциометр находится на выходном валу и отслеживает текущее положение угла поворота.
Принцип действия сервопривода
Для управления сервоприводом нужен только один проводо по которому на управляющую плату поступает сигнал. Управляющий сигнал представляет собой прямоугольные импульсы на подобии ШИМ. Цикл сигланал занимает 20 мск. а большую часть времени сигнал находится в низком состоянии. Перед основым циклом сигнал находится в высоком состоянии на интервал от 1 до 2 мсек.
При 1 мсек. угол поворота равен 0 градусов, а при 2 миллисекундах — 180 градусов, а в промежутке значение от 0 до 180.
Подключение сервопривода к Arduino
Для того чтобы управлять сервориводом нужно минимальное количество комплектующих.
- плата Arduino, подойдет абсолютно любая
- сервопривод, тут тоже особо не разницы какой.
- перемычки.
Схема подключение сервопривода к Arduino
Тут представлена простейшая схема подключения одного сервопривода, питание на него поступает с самой платы Arduino.
Тут по схеме особо комментировать нечего, понятнее некуда. Кидаем от Arduino к сервоприводу и подключаем управляющий сигнал к выводу 9 на Arduino и запоминаем его, он нам понадобится когда будет писать управляющий скетч.
Распиновка выводов сервопривода
Скетч для сервопривода
Для работы с сервоприводами на понадобиться servo библиотека, скачать ее можно по ссылке в конце статьи. Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на плате Arduino Mega.
Скаченную библиотеку нужно скопировать папку arduino-xxxx/hardware/liraries.
Стандартные методы серво-библиотеки
- attach(int) — соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке
- detach() — отсоединение пина от сервопривода
- write(int) — установка угла сервопривода в градусах, от 0 до 180
- read() — возвращает значение, установленное write(int)
- attached() — возвращает 1, если серво в настоящее время подключен
Скетч сервопривода 1
Этот скетч заставит сервопривод повернутся в позицию 0 градусов, выждать интервал в 1 секунду, далее повернуться на 90 градусов, выждать еще одну секунду, после повернуться на 180 градусов и перейти в изначально положение.
#include <Servo.h>
// Пин для сервопривода int servoPin = 3;
// Создаем объект Servo Servo1;
void setup() {
// Нам нужно подключить сервопривод к используемому номеру пина
Servo1.attach(servoPin); }
void loop(){
// 0 градусов
Servo1.write(0);
delay(1000);
// 90 градусов
Servo1.write(90);
delay(1000);
// 180 градусов
Servo1.write(180);
delay(1000);
}
Сервопривод можно повесить и на другой вывод, для этого нужно просто указать нужный servoPin в программе
Скетч для сервопривода объявляет объект и затем инициализирует сервопривод при помощи функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.
Скетч сервопривода 2
Управление сервоприводом с помощью потенциометра. Сервопривод подключается к пину 2, потенциометр к пину 0
#include <SoftwareServo.h>
SoftwareServo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(2); // attaches the servo on pin 2 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
SoftwareServo::refresh();
}
Скетч сервопривода 3
Этот пример это поворот на выводе A0 с переменной скоростью.
#include <SoftwareServo.h>
SoftwareServo myservo; // create servo object to control a servo
#define pinServo A0
int speed = 1;
int limits[2] = {30,150}; // set limitations (min/max: 0->180)
boolean refresh = false; // toggle refresh on/off
void setup()
{
Serial.begin(9600);
// attaches the servo on pin to the servo object
myservo.attach(pinServo);
// init angle of servo inbetween two limitations
myservo.write((limits[1]-limits[0])/2);
}
void loop()
{
// refresh angle
int angle = myservo.read();
// change direction when limits
if (angle >= limits[1] || angle <= limits[0]) speed = -speed;
myservo.write(angle + speed);
// set refresh one time / 2
refresh = refresh ? false : true;
if (refresh) SoftwareServo::refresh();
Serial.print("Angle: ");
Serial.println(angle);
}
Дополнительные возможности
Arduino имеет встроенную функцию servo.write(градус), которая упрощает процесс управления сервомотором Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.
Но для более точного позиционирования лучше использовать функцию servo.writeMicroseconds(микросекунды), в которую нужно переделать количество микросекунд.
Подключение нескольких сервоприводов
Чтобы использовать более одного сервопривода в Ardiono нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:
// Создаем объекты Servo Servo1, Servo2, Servo3;
Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:
Servo1.attach(servoPin1) Servo2.attach(servoPin2) Servo3.attach(servoPin3)
Servo1.write(0); // Задать для Servo 1 позицию в 0 градусов Servo2.write(90); // Задать для Servo 2 позицию в 90 градусов
Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.
Скачать исходники
Похожие записи
На Arduino можно довольно интересный проект начального уровня - цифровые игральные кости. При помощи которых можно генерировать случайное число от 1 до 6. ...
Системы заземления, используемые для выполнения заземления. Среди критериев, способствующих обеспечению защиты от такого процесса, как поражение электричеством, особого внимания...
В Европе для маркировки кабеля используются свои стандарты и нормативные документы. Чтобы расшифровать маркировку импортного кабеля, необходимо знать, что обозначает конкретная...
Сервопривод (servo) - устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень...
Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...
Функция setup() вызывается первой когда запускается скетч. Эта функция необходима для инициализации переменных, настройки режимов работы портов (выводов), для старта каких либо функций...