Категория: Arduino - проекты | Комментарии: 0
2 февраля 2016

Сервопривод SG90 + Arduino. Подключение [180 градусов]

0274_culdtnm3qe.jpg



Для самых начинающих. Проверенный код в статье. Подключим, повернем, разберемся с питанием.
В руки прибыл сервопривод SD90 с диагнозом неправильной работы и практически с полным отказом (По словам). Надо разобраться.
Общая информация нужна, информация важна
SD-90 - практически самый дешевый сервопривод на рынке электроники.
Вес всего 15 грамм, а крутящий момент 2кг/см. Работает данный сервопривод SD90 в температурах от -30 до +60 градусов.
Рабочее напряжение от 4В до 8В.
Потребление в движении 70 мА, а в удержании 15 мА.
Угол поворота составляет всего 180 градусов.
Сервопривод SD90 идеально подходит для установки на авиамодели.

Для управления сервоприводами с помощью Ардуин есть стандартная библиотека в IDE Arduino Servo.h, которая включает в себя функции для установки настроек сервопривода, необходимого угла, считывания состояния. Некоторые методы являются перегруженными.

Обращаемся к китайским друзьям за мануалами и судя по рисунку ниже подключение сервопривода SG90 не составляет труда.

сервопривод SD90



Два провода отвечают за питание и один провод для управления. Ниже приведен код программы для ардуино который даст некоторые пояснения.

  1. /*
  2. * Специально для сайта 1injener.ru
  3. * Сервопривод SG90 + Arduino. Подключение [180 градусов]
  4. */
  5. //Библиотека для работы с сервоприводом
  6. #include ‹Servo.h›
  7. //Обьявление переменной - объекта
  8. Servo servo;
  9. void setup()
  10. {
  11. //К пину №7 подключен управляющий вывод сервопривода
  12. //Данный метод библиотеки указывает пин через который происходит управление
  13. servo.attach(7);
  14. //servo.detach(7); - этот метод отключит управление от указанного пина.
  15. }
  16. void loop()
  17. {
  18. //Установка вала в 0 градусов
  19. servo.write(0);
  20. delay(2000); //ждем 2 секунды. Необходимо как минимум 30 микросекунд для установки.
  21. servo.write(90); //ставим вал под 90 градусов
  22. delay(2000); //ждем 2 секунды.
  23. // В библиотеке есть функция для чтения текущего положения (угла) сервопривода.
  24. // Будет считано последнее установленное значение в сервоприводе.
  25. // int AngleServo=servo.read();
  26. // От 0 до 180 градусов.
  27. servo.write(180); //ставим вал под 190 градусов
  28. delay(2000); //ждем 2 секунды.
  29. //Медленно возвращаемся обратно с интервалом в 1 градус
  30. for(int p=179; p>=1; p--)
  31. {
  32. servo.write(p);
  33. delay(20);
  34. }
  35. //Угол (Установить) можно задать во времени от нуля.
  36. //Так как у сервопривода есть характеристика скорости поворота 0.12 сек/60 град
  37. //servo.writeMicroseconds(1000);
  38. //То можно установить угол расчитав время.
  39. }
Если не понятны какие либо моменты - добро пожаловать в комменты up

Скачать код можно по ссылке:
Скачать 1injener_servo_ok.ino

После включения питания Ардуины вал сервопривода установится в положение 0 градусов. Через 2 секунды в положение 90 градусов, еще через 2 секунды в положение 180 градусов. Через следующие 2 секунды сервопривод будет перемещать свой вал на 1 градус обратно к 1 градусу. Далее цикл программы обновится и все начнется с начала.

Внутренности сервопривода изображены на рисунке ниже.

сервопривод Servo SD-90



1 - Коннектор для подключения
2 - Схема управления сервоприводом, обработки сигналов
3 - Потенциометр
4 - Двигатель
5- Вал

Так вот, в самом начале я говорил что в руки попал почти не рабочий сервопривод (По словам). После разбирательств стало понятно что Ардуина имела питание от USB компьютера, а сам сервопривод от Arduino.
Если углубится в подробности то в экспериментах с сервером на Ардуино + ESP8266 было установлено то что китайская версия MEGA не вытягивает нагрузку 150 мА. Сервопривод SG90 в момент движения вала создает нагрузку 75-90 мА в зависимости от нагрузки вала. В итоге при старте Ардуины у человека который попросил разобраться в данной проблеме происходил сброс самой ардуины от повышенной нагрузки и соответственно сервопривод не подавал никаких признаков.

Решение проблемы самое простое. Необходимо усилить питание для ардуины с помощью внешнего источника (блока питания) или отдельно для сервопривода SG90.
Но ситуация была такова что в месте установки сервопривода не было возможности применить внешний источник питания. Решение нашлось ниже на рисунке.

Питание сервопривода



В итоге что бы предотвратить нагрузку на Arduino необходимо между питанием и землей установить поддерживающий конденсатор емкостью 1000мФ 10V. И керамический конденсатор любой емкости для предотвращения дребезга от сервопривода (при нагрузке) на Ардуину. Это решение нельзя использовать для постоянного использования, но в экстренных случаях этот вариант вполне подойдет.

Обратите внимание что данный вариант подойдет для сервоприводов типа "микро". Для больших сервоприводов данный метод для питания все равно даст просадку напряжения, это будет заметно по LED индикаторам ардуины, но все же предотвратит полный сброс.

Другие статьи по разделу:

anchore Датчики температуры LM335 и DHT-11. Личные доводы и ничего более [Обзор]


anchore Датчик расстояния HC-SR04 и Arduino. Готовое решение


anchore Бузер и Arduino. Звуковая пищалка [Проверенно]


anchore Сервопривод SG90 + Arduino. Подключение [180 градусов]



Новые изобретения инженеров и техников, дизайнеров и обычных людей, все то что может изменить наш мир к лучшему. Новая техника и оружие, спасателей и спецназа. Гаджеты и девайсы, устройства для отдыха и работы. Советы для экономии семейного состояния. Все гениальные изобретения в простом формате! Ведь "Все - Просто!"
Copyright © 2013–2017
Автоматизация и проектирование - 1injener.ru