Джойстик и сервопривод

Состав системы
Как работает
Кнопки управления
Индикация LCD
Подключение
Что нужно для проекта
Скетч

Фото сервопривода
Версия для печати

Вернуться на главную

На этой странице представлена система управления сервоприводом SG90 посредством джойстика KY-023. С помощью нее вы сможете протестировать эти элементы прежде, чем использовать в своих проектах.

Для начала разберемся, что из себя представляет сервопривод. По сути это обычный мотор-редуктор на базе шагового двигателя, подобный тому, который был рассмотрен на страничке про шаговый двигатель 28BYJ-48. Основная разница - это наличие у сервопривода обратной связи по углу поворота - в него встроен потенциометр, который сообщает контроллеру положение вала. Соответственно, если это положение не соответствует заданному, Arduino его корректирует. И это происходит непрерывно. Есть и различие в управлении шаговым двигателем - благодаря наличию специальной микросхемы вращение мотора контролируется по одному проводу вместо четырех, как у 28BYJ-48.

Cервопривод SG90 и джойстик KY-023

Cервопривод SG90 и джойстик KY-023

Теперь про джойстик KY-023. Здесь мы имеем два самовозвратных потенциометра, сопротивление которых меняется при повороте джойстика в двух осях. Соответственно, меняется и выходное напряжение (от 0 до 5 вольт). Эти изменения считывает контроллер, превращая вольтаж в соответствующий цифровой код : 0...1023. Как говорилось выше, потенциометры самовозвратные - если отпустить джойстик, они возвращаются в нейтральную позицию. Здесь важно помнить, что это не нулевое положение, а среднее : 2,5 вольта или 512 единиц в цифре.

Кроме двух аналоговых выходов джойстик KY-023 имеет один цифровой. Это тактовая кнопка, встроенная в ручку джойстика (она срабатывает при нажатии). Но у нее есть одна особенность - она замыкает выходной контакт на землю. Поэтому цифровой пин Arduino, к которому вы его будете подсоединять, нужно подтянуть к питанию. На всех цифровых пинах Arduino UNO есть встроенные подтягивающие к питанию резисторы. Чтобы их задействовать, в секции setup скетча нужно прописать : pinMode (JoystickPin, INPUT_PULLUP). При этом кнопка будет работать в инвертирующем режиме : при нажатии - сигнал LOW, при отпускании - HIGH.

В данном проекте используется только одна ось джойстика (Х). При монтаже я расположил его так, чтобы при движении влево напряжение падало, а вправо - росло.

СОСТАВ СИСТЕМЫ

PLC Arduino UNO с шилдом Sensor Shield v 5.0 (питание 7-12 В постоянного тока), LCD-дисплей с шиной I2C, DC-DC конвертер для питания дисплея и сервопривода, сервопривод SG90 и модуль джойстика KY-023, кнопочный пост с 5-ю кнопками.

КАК РАБОТАЕТ

Данная система управления позволяет проверить работу сервопривода и джойстика. Управлять мотор-редуктором можно как джойстиком, так и кнопками. Через настройки можно задавать ограничения по углу поворота, вводить поправки, менять направление движения вала. Вся информация выводится на LCD-дисплей. Система позволяет настраивать все необходимые параметры и записывать их в память Arduino.

Cервопривод SG90 и джойстик KY-023

Cервопривод SG90 и джойстик KY-023

КНОПКИ УПРАВЛЕНИЯ

Управлять системой можно с помощью пяти кнопок : НАСТРОЙКИ, ВВЕРХ, ВНИЗ, ВЫХОД (EXIT) и РЕЖИМ (MODE), а также кнопкой на самом джойстике. Рассмотрим их функции подробно :

Кнопка НАСТРОЙКИ

Нажав ее, вы попадете в меню настроек. Продолжая нажимать эту кнопку, вы будете циклично переходить по пунктам меню. Изменение параметров осуществляется кнопками ВВЕРХ и ВНИЗ. Выход из настроек - по кнопке EXIT. На время нахождения в настройках джойстик отключается.

Пройдемся по пунктам меню Настройки.

  • Sector Limit : по умолчанию угол поворота сервопривода составляет 180º. Здесь вы можете ограничить сектор движение вала вплоть до 10º относительно нейтрального положения джойстика. Это ограничение действует во всех режимах управления (джойстик и кнопки).
  • Edge to CCW : ограничение движения вала от края при движении против часовой стрелки. Это может понадобиться, если сервопривод не очень качественный и электродвигатель продолжает работать, даже если вал дошел до упора (слышны характерные щелчки и писк). Конечно, лучше поменять такой мотор-редуктор, но если возможности нет, то можно ограничить движение вала в крайних точках. Вы можете задать до 80º от края. Это ограничение действует во всех режимах управления (джойстик и кнопки).
  • Edge to CW : ограничение движения вала от края при движении по часовой стрелки. Можно задать до 80º от края. Это ограничение действует во всех режимах управления (джойстик и кнопки).
  • Joystick Correc. поправка или смещение вала при нахождении джойстика в нейтральном положении. Задается от -45º до 45º. При этом смещается весь сектор за центральной точкой. Например, без поправок вал двигается от нейтральной точки 90º по часовой и против на 90º (в сумме 180º). Если задать смещение -20º (20º против часовой), то вал будет двигаться от 0 до 160º с остановкой в новой нейтральной точке 70º. Это ограничение действует только при управлении от джойстика.
  • Read Settings : чтение настроек из энергонезависимой памяти Arduino. При нажатии кнопки ВВЕРХ настройки из памяти PLC перейдут в оперативную.
  • Save Settings : запись настроек в энергонезависимую память Arduino. При нажатии кнопки ВВЕРХ текущие параметры запишутся в постоянную память PLC.
  • Load Default : загрузка значений по умолчанию. При нажатии кнопки ВВЕРХ параметры, определенные в начале скетча, загрузятся в оперативную память PLC (в текущие настройки). Эта функция может быть полезна, когда вы запутались в регулировках и хотите все вернуть в исходное положение. Но есть и еще одна причина ее использования. Если вы на одну и ту же плату Arduino постоянно записываете скетчи разных проектов, возможна ситуация, когда параметры одного проекта запишутся в настройки другого. Конечно, это можно исправить, но представьте, что в параметре, где должно быть, например, число 10, стоит 32000. Вручную кнопками ВВЕРХ или ВНИЗ корректировать это очень долго, проще сбросить настройки к заводским, а уже затем их подправить.

Кнопки ВВЕРХ-ВНИЗ

В основном экране в режиме управления кнопками ими можно задать положение вала. В режиме настроек этими кнопками меняются параметры.

Кнопка EXIT

В основном экране с помощью этой кнопки можно сменить направление вращения вала (по часовой или против). Нажав на кнопку EXIT в настройках, вы выйдете из них.

Кнопка MODE

Этой кнопкой можно поменять режим управления сервоприводом : джойстик или кнопки.

Кнопка на джойстике

Вы видели, что в настройках можно задать несколько ограничений и поправок на движение вала мотор-редуктора. Если вам нужно быстро отключить или включить все настройки, нажмите на кнопку на джойстике.

Cервопривод SG90 и джойстик KY-023

Cервопривод SG90 и джойстик KY-023

ИНДИКАЦИЯ LCD

Основной экран :
верхняя строчка - положение вала сервопривода в градусах. Кроме этого, если в настройках задано ограничение сектора движения вала, то появятся буквы "Sec" (sector - сектор), а если задано ограничение с краев, то буквы "Edg" (edge - край).
нижняя строчка - здесь вы увидите режим управления : "Joystick" - от джойстика или "Buttons" - кнопками. Также здесь указывается направление вращения вала : "CW" по часовой или "CCW" - против часовой. Если кнопкой на джойстике вы отключили все настройки, то в нижней строчке появится надпись "OFF".
В режиме настроек :
верхняя строчка - параметр
нижняя строчка - значение параметра

ПОДКЛЮЧЕНИЕ

Здесь приведено соединение всех элементов системы управления, Arduino (через шилд), сервопривода и джойстика. В виде схемы подключение представлено ниже.

  • питание Arduino : от адаптера 7-12VDC (2A)
  • питание шилда (перемычка убрана) : от адаптера 7-12VDC (2A) через понижающий DC-DC преобразователь типа LM2596 (не менее 2А)
  • LCD-дисплей 1602 + модуль I2C : питание от шилда (подсоединяем GND и VCC к любым свободным пинам G и V цифровых входов), SDA (I2C) - A4 (шилд), SCL (I2C) - A5 (шилд)
  • сигнал от кнопки НАСТРОЙКИ : вход в Arduino - цифровой пин 7. Линию сигнала и земли шунтируем резистором 10 кОм. Пины + и - кнопочного поста, общие для всех кнопок НАСТРОЙКИ, ВВЕРХ, ВНИЗ, EXIT, MODE, подсоединяем к любым свободным пинам V и G цифровых входов.
  • сигнал от кнопки ВВЕРХ : вход в Arduino - цифровой пин 6. Линию сигнала и земли шунтируем резистором 10 кОм
  • сигнал от кнопки ВНИЗ : вход в Arduino - цифровой пин 5. Линию сигнала и земли шунтируем резистором 10 кОм
  • сигнал от кнопки EXIT : вход в Arduino - цифровой пин 4. Линию сигнала и земли шунтируем резистором 10 кОм
  • сигнал от кнопки MODE : вход в Arduino - цифровой пин 3. Линию сигнала и земли шунтируем резистором 10 кОм
  • Сервопривод : оранжевый провод к цифровому пину 8. Красный провод (+) к любому свободному пину питания (V) цифровых пинов шилда. Коричневый провод (-) к любому свободному пину земли (G) цифровых пинов шилда.
  • джойстик : пин "+5V" к пину питания аналоговых входов шилда (это питание идет от Arduino, а не от DC-DC преобразователя).
  • джойстик : пин "GND" к пину земли аналоговых входов шилда.
  • джойстик : пин "VRX" к аналоговому пину А1.
  • джойстик : пин "SW" к цифровому пину 9.
Схема подключения сервопривода и джойстика

Схема подключения сервопривода и джойстика

ЧТО НУЖНО ДЛЯ ПРОЕКТА

  • PLC Arduino UNO (datasheet) - 1 шт
  • Sensor Shield v 5.0 (datasheet) - 1 шт
  • сервопривод SG90 (datasheet) - 1 шт
  • модуль джойстика KY-023 (datasheet) - 1 шт
  • понижающий DC-DC преобразователь типа LM2596 (не менее 2А) (datasheet) - 1 шт
  • LCD-дисплей 1602 (datasheet) + модуль I2C - 1 шт
  • кнопка тактовая с колпачком (datasheet) - 5 шт
  • резистор 10 кОм (0,25 Вт) - 5 шт
  • макетная плата под пайку 30х85 - 1 шт (для монтажа кнопок)
  • стойка мама-мама М3х15 - 4 шт (для монтажа LCD-дисплея)
  • стойка мама-мама М3х10 - 4 шт (для монтажа джойстика)
  • стойка мама-мама М3х25 - 2 шт (для монтажа сервопривода)
  • гайка М3 - 50 шт и более в зависимости от способа крепления вышеуказанных элементов
  • болт М3х15, М3х10 - 20 шт и более
  • провод Dupont мама-мама или папа-мама (20 см) - 30 шт и более в зависимости от типа пинов соединяемых элементов
  • провод типа AWG - 50 см (соединение штекер - DC-DC преобразователь - Sensor Shield)
  • штыревой соединитель 40pin - 1 шт
  • штекер питания DC 2.1 мм с клеммной колодкой папа и мама - 1 пара (для подключения шилда)
  • кусок оргстекла или т.п. - 20х30 см (для монтажа всех элементов)
  • болт М6х15 и гайка - 4 шт (ножки оргстекла)

СКЕТЧ

Ниже представлен скетч системы управления. В этом окне он неудобочитаем, поэтому скачать его в формате ino вы можете по этой ссылке.

Для работы этого скетча вам понадобятся дополнительные библиотеки :

  • EEPROM.h - библиотека работы с памятью (она нужна для чтения и записи наших настроек в энергонезависимую память Arduino). Это стандартная библиотека, она входит в комплект среды программирования Arduino IDE.
  • Wire.h - библиотека для работы с протоколом I2C. Это тоже стандартная библиотека, ее устанавливать не нужно.
  • LiquidCrystal_I2C.h - библиотека для работы с LCD по протоколу I2C. Скачать.
  • Servo.h - библиотека для работы с сервоприводом. Это стандартная библиотека, ее устанавливать не нужно.

Если есть возможность, проверьте эти библиотеки на наличие обновлений.