Сервопривод MG995
Сервопривод – это устройство, которое обеспечивает преобразование сигнала в строго соответствующее этому сигналу перемещение (поворот) исполнительного устройства.
Содержание
- Обзор
- Технические характеристики
- Подключение к плате Arduino
- Пример использования
- Часто задаваемые вопросы
Обзор сервопривода MG995
Сервопривод – это устройство, которое обеспечивает преобразование сигнала в строго соответствующее этому сигналу перемещение (поворот) исполнительного устройства. Представляет собой прямоугольную коробку с мотором, схемой и редуктором внутри и выходным валом, который может поворачиваться на строго фиксированный угол, определяемый входным сигналом. Существует очень много видов сервоприводов, которые различаются габаритами, материалом шестеренок (пластмасса, металл), способом управления ( аналоговые и цифровые), скоростью вращения вала, крутящим моментом, диапазоном поворота (120°, 180°, непрерывного вращения). Сервоприводы MG995 (рис. 1) обладают хорошим крутящим моментом до 13 кг/см, металлическими шестернями и поэтому часто используются в авиамоделизме, в робототехнике (например, поворот головы или руки робота).
Рисунок 1. Сервопривод MG995.
Технические характеристики MG995
- Рабочее напряжение – 4.8-7.2 В
- Угол поворота 120 градусов
- Крутящий момент – 8,5 кг/см (при 4.8 В), 10 кг/см (при 6 В)
- Скорость – 0,20 сек/60° (при 4,8 В), 0,16 сек/60° (при 6 В)
- Материал шестерней – металл
- Вес – 55 г
- Размер – 40х20х42 мм
Подключение к плате Arduino
Для подключения сервопривода используют 3 провода:
- красный провод – питание (внешний стабилизированный источник питания 4.8-7.2 В);
- черный провод –к выводу Arduino GND;
- оранжевый – сигнальный (подключается к цифровому ШИМ выводу контроллера Arduino) (см. рис. 2).
Рисунок 2. Подключение сервопривода к плате Arduino.
Для управления сервоприводами с помощью Arduino в Arduino IDE есть стандартная библиотека Servo.h, которая включает в себя функции для установки настроек сервопривода, необходимого угла, считывания состояния.
В листинге 1 представлен скетч вращения сервопривода от 0 до 120° с шагом 1°, а затем в обратную сторону.
Листинг 1
// подключение библиотеки Servo
#include <Servo.h>
// создать объект servo
Servo servo1;
// пин для подключения сервопривода
const int pin_servo=9;
// макс значение угла поворота
const int angle_max=120;
// для хранения текущей позиции сервопривода
int angle = 0;
// для хранения направления 1 или -1
dir=1;
void setup() {
// подключить управление сервоприводом к пину pin_servo
servo1.attach(pin_servo);
}
void loop() {
for(;;) {
// команда установки положения сервопривода
servo1.write(angle);
// время на перемещение сервопривода
delay(15);
//
if(angle==0)
dir=1;
else if(angle==angle_max)
dir=-1;
angle=angle+dir;
}
}
Результат работы скетча – сервопривод медленно вращается в одну сторону, затем в другую.
Пример использования MG995
В качестве примера рассмотрим использование сервопривода для управления клешней для захвата банок 0.33 л. в качестве экрана часов.
Нам потребуются следующие компоненты:
- Плата Arduino Uno – 1 шт
- Плата прототипирования – 1 шт
- Сервопривод MG995 – 1 шт
- Робоклешня – 1 шт
- Потенциометр 10кОм
- Блок питания 5В – 1 шт
- Провода
Схема соединения элементов показана на рис. 3.
Рисунок 3. Подключение клешни с сервоприводом к плате Arduino.
Рисунок 4. Схема в сборе.
Поворотом потенциометра, и соответственно поворотом сервопривода будем захватывать и отпускать банку. Содержимое скетча представлено в листинге 2.
Листинг 2
// подключение библиотеки Servo
#include <Servo.h>
// создать объект servo
Servo servo1;
// пин для подключения сервопривода
const int pin_servo=9;
// макс значение угла поворота
const int angle_max=120;
// для хранения текущей позиции сервопривода
int angle = 0;
// направление 1 или -1
dir=1;
void setup() {
// подключить управление сервоприводом к пину pin_servo
servo1.attach(pin_servo);
}
void loop() {
// получаем значение положения потенциометра
int val=analogRead(pin_pot);
// масштабирование к максимальному размаху сервопривода
int angle_t=map(val,0,1023,0,angle_max);
// при изменении - перемещение
if(angle_t!=angle_last) {
// команда установки положения сервопривода
servo1.write(angle_t);
// время на перемещение сервопривода
delay(15);
angle_last=angle_t;
}
}
Рисунок 5. Плата в работе.
Загружаем скетч на плату и проверяем работу.
Часто задаваемые вопросы
- Проверьте правильность подключения контактов сервопривода.
- Проверьте наличие достаточного внешнего питания сервопривода.
- Проверьте правильность подачи команд на перемещение.
- Проверьте наличие достаточного внешнего питания сервопривода.