Управление серводвигателем с помощью Arduino
Вы можете подключить маленькие серводвигатели непосредственно к Arduino для очень точного управления положением вала.
Поскольку серводвигатели используют обратную связь для определения положения вала, вы можете управлять этим положением с высокой точностью. В результате серводвигатели используются для управления положением объектов, поворотом объектов, движением рук и ног роботов, движением датчиков и т.д. с большой точностью. Серводвигатели обладают небольшими размерами, и так как цепи, управляющие их движением, уже встроены в них, то они могут быть подключены напрямую к Arduino.
Большинство серводвигателей имеют три контакта для подключения:
- черный/коричневый провод корпуса;
- красный провод питания (около 5 вольт);
- желтый или белый провод ШИМ.
Эксперимент 1
В этом эксперименте мы подключим выводы питания и корпуса непосредственно к выводам Arduino 5V и GND. Вход ШИМ подключим к одному из цифровых выходов Arduino.
Необходимые компоненты
Схема соединений
Самое лучшее в серводвигателе – это то, что его можно подключить непосредственно к Arduino. Подключите двигатель к Arduino, как показано на рисунке ниже:
Код программы
Когда программа запустится, серводвигатель начнет медленно вращаться от положения 0 градусов к положению 180 градусов с шагом в один градус. Когда двигатель повернется на 180 градусов, он начнет поворачиваться в противоположном направлении, пока не вернется в исходное положение.
#include <Servo.h> // библиотека Servo
Servo servo_test; // инициализировать объект сервопривода
// для подключенного серводвигателя
int angle = 0;
void setup()
{
servo_test.attach(9); // прикрепить сигнальный вывод серводвигателя
// к выводу 9 Arduino
}
void loop()
{
for(angle = 0; angle < 180; angle += 1) // двигаться от 0 к 180 градусам
{
servo_test.write(angle); // повернуть сервопривод на заданный угол
delay(15);
}
delay(1000);
for(angle = 180; angle>=1; angle-=5) // двигаться от 180 к 0 градусам
{
servo_test.write(angle); // повернуть сервопривод на заданный угол
delay(5);
}
delay(1000);
}
Видео
Эксперимент 2
Данный эксперимент, по сути, является таким же, как и Эксперимент 1, за исключением того, что мы добавили потенциометр для управления положением. Arduino будет считывать напряжение на среднем выводе потенциометра и подстраивать положение вала серводвигателя.
Необходимые компоненты
- 1 x серводвигатель TowerPro SG90
- 1 x Arduino Mega2560
- 1 x потенциометр
- 1 x макетная плата
- 6 x перемычка
Схема соединений
Соедините схему, как показано на рисунке ниже:
- красный провод серводвигателя – вывод 5V Arduino;
- коричневый провод серводвигателя – вывод корпуса Arduino;
- желтый провод серводвигателя – вывод ШИМ (9) Arduino;
- вывод 1 потенциометра – вывод 5V Arduino;
- вывод 3 потенциометра – вывод корпуса Arduino;
- вывод 2 потенциометра – вывод аналогового входа (A0) Arduino.
Код программы
После запуска программы вращение потенциометра должно заставлять вращаться вал серводвигателя.
#include <Servo.h> // библиотека Servo
Servo servo_test; // инициализировать объект сервопривода
// для подключенного серводвигателя
int angle = 0;
int potentio = A0; // инициализировать аналоговый вывод A0 для потенциометра
void setup()
{
servo_test.attach(9); // прикрепить сигнальный вывод серводвигателя
// к выводу 9 Arduino
}
void loop()
{
angle = analogRead(potentio); // прочитать значение потенциометра от 0 до 1023
angle = map(angle, 0, 1023, 0, 179); // сопоставить значение потенциометра со значением
// в градусах для серводвигателя от 0 до 180
servo_test.write(angle); // повернуть сервопривод на заданный угол
delay(5);
}