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

На этой странице представлена система управления сервоприводом 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 - 1 шт
  • Sensor Shield v 5.0 - 1 шт
  • сервопривод SG90 - 1 шт
  • модуль джойстика KY-023 - 1 шт
  • понижающий DC-DC преобразователь типа LM2596 (не менее 2А) - 1 шт
  • LCD-дисплей 1602 + модуль I2C - 1 шт
  • кнопка тактовая с колпачком - 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 шт (ножки оргстекла)