Серводвигатель
Серводвигатель - устройство с электрическим мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время. Он является важным элементом при конструировании различных роботов и механизмов. Это точный исполнитель, который имеет обратную связь, позволяющую точно управлять движениями механизмов. Другими словами, получая на входе значение управляющего сигнала, серводвигатель стремится поддерживать это значение на выходе своего исполнительного элемента. Обычно у них есть выходной вал, который может поворачиваться на 180 градусов. Используя Arduino мы можем задать сервомотору определенное положение в которое он перейдет.
Устройство серводвигателя.
Сервоприводы Arduino - это умные устройства. Используя только один входной пин, они получают значения для позиционирования от микроконтроллера и переходят в это положение. Как можно увидеть на рисунке в самом начале статьи внутри они имеют двигатель и цепь обратной связи, которая гарантирует, что вал/рычаг сервопривода достигнет желаемого положения.
Но какой сигнал сервомоторы получают на входе? Это прямоугольная волна, подобная PWM (англ. - pulse-width modulation, широтно-импульсная модуляция). Каждый цикл в сигнале длится 20 миллисекунд, и большая часть времени в значении LOW. В начале каждого цикла значение сигнала становится HIGH на время от 1 до 2 миллисекунд.
При 1 миллисекунде она составляет 0 градусов, а при 2 миллисекундах - 180 градусов, а в промежутке значение от 0 до 180. Это очень хороший и надежный метод. График упрощает понимание.
Подключение сервопривода к Ардуино
Схема подключения ниже:
Сервомотор имеет много встроенных деталей: двигатель, цепь обратной связи и, самое главное, драйвер мотора. Ему просто нужно дополнительно питание, земля и один контрольный пин. Ниже шаги для подключения сервопривода к Arduino, но вы можете всегда свериться с изображением выше.
Подключите Землю к GND Arduino.Сервомотор имеет гнездовой разъем с тремя контактами. Самый темный или даже черный - это обычно земля.
Подключите кабель питания, который по всем стандартам должен быть красным к 5В на Ардуино.
Подключите оставшийся контакт разъема сервопривода к цифровому выходу на Arduino.
Скетч для сервопривода Ардуино
Скетч ниже заставит сервопривод переместиться в позицию 0 градусов, подождать 1 секунду, затем повернуться на 90 градусов, подождать еще одну секунду, после повернуться на 180 градусов и перейти в первоначальное положение.
Также дополнительно мы используем библиотеку servo — подключить ее можно так:
Скетч
// Подклоючаем библиотеку Servo
#include
// Пин для сервопривода
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 автоматически отключает функцию PWM для PWM-контактов 9 и 10 на Arduino UNO и аналогичных платах.
Наш код просто объявляет объект и затем инициализирует сервопривод с помощью функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.
Стандартные методы серво-библиотеки
attach(int) - Соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке.
Detach() - Отсоединение пина от сервопривода.
write(int) - Установка угла сервопривода в градусах, от 0 до 180.
read() - Возвращает значение, установленное write(int).
Attached() - Возвращает 1, если серво в настоящее время подключен.
Шаговый двигатель
Шаговый двигатель — преобразует электрическую энергию в механическую. В отличие от двигателя постоянного тока в которых происходит вращение вала, вал шаговых двигателей совершает дискретные перемещения, то есть вращается не постоянно, а шагами. Каждый шаг вала (ротора) представляет собой часть полного оборота.
Шаговый двигатель состоит из двух основных частей: ротора и статора.
Ротор является частью двигателя, который фактически вращается и обеспечивает работу. Статор представляет собой неподвижную часть двигателя, в котором размещается ротор. В шаговом двигателе ротор представляет собой постоянный магнит. Статор состоит из нескольких катушек, которые действуют как электромагниты, когда через них проходит электрический ток. Электромагнитная катушка заставит ротор выровняться вместе с ним при зарядке. Ротор приводится в движение путем чередования тока на катушках, протекающий через них.
Шаговые двигатели имеют ряд преимуществ. Они дешевы и просты в использовании. Когда ток не поступает в двигатель, ничего не происходит. Шаговые двигатели также могут вращаться без ограничений и изменять направление в зависимости от установленной полярности.
В зависимости от конструкции, сегодня применяются три вида шаговых двигателей: с постоянным магнитом, с переменным магнитным сопротивлением и гибридные двигатели. У двигателей с постоянным магнитом число шагов на один оборот вала доходит до 48, то есть один шаг соответствует повороту вала на 7,5°. Гибридные двигатели обеспечивают не меньше 400 шагов на один оборот (угол шага 0,9°).
Управление шаговым двигателем на Ардуино
Рассмотрим управление шаговым мотором при помощи стандартной библиотеки stepper.h и с помощью более удобной и популярной библиотеки accelstepper.h, где реализовано намного больше дополнительных команд и функций. Схема подключения мотора при этом остается неизменной. Чуть дальше мы перечислили возможные команды, которые можно использовать в программе с этими библиотеками.
Скетч для шагового двигателя на Ардуино (Stepper.h)
Подключаем библиотеку:
То, что на самом деле делает библиотека Stepper - чередует сигналы HIGH и LOW для каждой катушки, как показано в анимации выше.
#include Stepper.h // библиотека для шагового двигателя
// количество шагов на 1 оборот, измените значение для вашего мотора
const int stepsPerRevolution = 200;
// устанавливаем порты для подключения драйвера
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
myStepper.setSpeed(60); // устанавливаем скорость 60 об/мин
}
void loop() {
// поворачиваем ротор по часовой стрелке
myStepper.step(stepsPerRevolution);
delay(500);
// поворачиваем ротор против часовой стрелки
myStepper.step(-stepsPerRevolution);
delay(500);
}
Пояснения к коду:
вместо портов 8,9,10,11 можно использовать любые цифровые порты;
библиотека Stepper.h имеет маленький функционал, поэтому подходит только для тестирования шагового двигателя и проверки подключения драйвера.