Сервопривод — это такая конструкция с мотором, где мы можем управлять положением вала мотора.
Большое применение сервоприводов отмечается в построении роботов или прочих проектах с применением механических действий.
Для управления сервоприводом в Arduino предусмотрена библиотека Servo.h, которую следует подключать отдельно. Вызывается она командой #include <Servo.h> в самом начале скетча. Данная библиотека уже есть в наличии Arduino IDE.
Для управления сервоприводом используют следующие команды:
- attach() — Подключает Servo к указанному выходу
- write() — Передает значения для управления приводом
- writeMicroseconds() — Передает значение для управления сревоприводом в микросекундах
- read() — Считывает значение текущего положения сервопривода
- attached() — Проверяет если переменная Servo подключена к выходу
- detach() — Отсоединяет переменную Servo от указанного выхода
Важно учесть, что подключать сервоприводы нужно к пинам ШИМ. И еще важное замечание — не стоит подключать питание сервопривода к выходам +5v и gnd на Arduino, под высокой нагрузкой от сервоприводов Arduino выйдет из строя. Так что используйте внешний источник питания.
Для урока понадобятся:
- Arduino
- Провода
- Сервопривод
- (макетная плата)
- (потенциометр)
Соединяем как на тут:
Загружаем простой скетч, который поворачивает вал на заданный градус.
#include <Servo.h> //используем библиотеку для работы с сервоприводом Servo servo; //объявляем переменную servo типа Servo void setup() //процедура setup { servo.attach(10); //привязываем привод к порту 10 } void loop() //процедура loop { servo.write(0); //ставим вал под 0 delay(2000); //ждем 2 секунды servo.write(180); //ставим вал под 180 delay(2000); //ждем 2 секунды }
Следующий пример позволит управлять сервоприводом при помощи потенциометра, ручка потенциометра будет задавать угол поворота сервоприводом. При помощи двух сервоприводов и двух потенциометров, некоторое время назад, делал систему управления микрокамерой над входной дверью.
#include <Servo.h> Servo servo; void setup() { servo.attach(10); } void loop() { servo.write(analogRead(A1)/4); // потенциометр передает значения для вала }