Модуль джойстика для Arduino: устройство, подключение, пример

Двухосевой аналоговый джойстик с кнопкой: как он устроен, какие значения выдаёт и как с его помощью управлять подвесом камеры на двух сервоприводах.
Как устроен джойстик
Джойстик — удобное средство передачи команд от человека компьютеру или микроконтроллеру; им управляют движением роботов, мобильных платформ и других механизмов. Двухосевой модуль представляет собой ручку на шаровом шарнире с двумя взаимно перпендикулярными осями, то есть имеет две степени свободы.

Наклон ручки поворачивает движки двух потенциометров сопротивлением 10 кОм — по одному на оси X и Y. Средние выводы потенциометров выведены на контакты VRX и VRY разъёма, крайние подключены к питанию и земле. Кроме того, в модуле есть тактовая кнопка: она срабатывает при вертикальном нажатии на ручку, а её состояние снимается с контакта SW. Отпущенная ручка сама возвращается в центральное положение.
| Напряжение питания | 3,0–5,5 В |
| Выходные сигналы | аналоговые (оси X и Y) и цифровой (кнопка) |
| Потенциометры | 2 шт., 10 кОм |
| Размеры | 26 x 40 x 22 мм |
Подключение к Arduino
Для модуля нужны два аналоговых входа и один цифровой. Питание берётся с платы Arduino и подаётся на контакты GND и +5V джойстика. В примере VRX соединён с A0, VRY — с A1, кнопка — с цифровым выводом 3.

Показания каждой оси лежат в пределах от 0 до 1023, а нейтральному положению ручки соответствует значение 511. При нажатии кнопки на входе 3 появляется логический ноль. Чтобы вход не ловил наводки, его подтягивают к +5 В; если состояние кнопки меняется случайным образом, рекомендуется подтяжка через резистор 4,7 кОм.
Проверочный скетч раз в секунду выводит в монитор порта значения analogRead для обеих осей и состояние кнопки: при высоком уровне на входе печатается «NOT CLICK», при низком — «CLICK!».

Пример: управление подвесом камеры
Наглядное применение — поворотный подвес для камеры на двух сервоприводах. Для него потребуются:
- Arduino Uno;
- макетная плата;
- модуль джойстика;
- два сервопривода;
- подвес для камеры;
- блок питания 5 В;
- провода.

Скетч использует стандартную библиотеку Servo. Сервоприводы подключены к выводам 9 и 10 и привязываются вызовами servoX.attach и servoY.attach. В цикле считываются обе оси, и каждое значение пересчитывается в угол поворота строкой вида angleX = map(joyX, 0, 1023, 0, 180), после чего передаётся приводу функцией write; на перемещение даётся пауза 15 мс.
Чтобы сервоприводы не дрожали из-за шума потенциометров, программа запоминает предыдущие показания и реагирует только на изменение больше чем на 10 единиц. Мелкие колебания ручки таким образом игнорируются.
Возможные неполадки
Если значения на аналоговых входах не меняются при движении ручки, проверяют правильность подключения модуля. При нестабильной работе кнопки, помимо проверки соединений, добавляют подтяжку её вывода к питанию.