Часто возникает желание управлять проектом обычным нажатием кнопки, с помощью пульта управления и так далее, не заходя в компьютер. Одним из способов управления микроконтроллером (в данном случае платой Ардуино) может служить управление с помощью джойстика.
Джойстики чаще всего применяются для контроля различных роботов или механизмов.
Самым простейшим из таких модулей служит аналоговый джойстик с двумя осями (x ;y) и кнопкой. Иногда он еще носит название KY-023.

Подключение
Модуль имеет 5 выходов для подключения к плате, все они будут использоваться. Подключить джойстик можно по приведенной ниже схеме. Питание джойстика осуществляется через контакт 5В, для замыкания цепи подключается также заземление на контакт GND (от «ground» — земля) .
Аналоговые выходы RX и RY служат для управления джойстиком по осям X и Y соответственно. Выход кнопки SW можно подключить к любому свободному цифровому контакту на плате Arduino (желательно, оставляя свободными при этом ШИМ-порты: они помечаются на плате небольшой волнистой черточкой).

Теперь можно считать значения с аналоговых выходов джойстика
(а именно с осей X и Y), используя простой скетч.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | const int Y_PIN = 2; // Ось Y джойстика подключена к аналоговому пину 2 const int X_PIN = 1; // Ось X джойстика подключена к аналоговому пину 1 onst int BUTTON_PIN = 8; // Кнопка подключена к цифровому выводу 8 float stepSize = 180F / 1024; // Вычисляем шаг. градусы / на градацию // Угол поворота джойстика 180 градусов, АЦП выдает значения от 0 до 1023, всего 1024 градации void <strong>setup</strong>() { <strong>Serial</strong>.begin(9600); // Скорость работы с монитором порта } void <strong>loop</strong>() { int yVal = analogRead(Y_PIN); // Задаем переменную yVal для считывания показаний аналогового значения int xVal = analogRead(X_PIN); // Задаем переменную xVal для считывания показаний аналогового значения float yAngle = yVal * stepSize; // Переводим выходные данные yVal в угол наклона джойстика (от 0 до 180) float xAngle = xVal * stepSize; // Аналогично xVal boolean isNotClicked = digitalRead(BUTTON_PIN); // Считываем не было ли нажатия на джойстик <strong>Serial</strong>.print("Horisontal angle = "); // Выводим текст <strong>Serial</strong>.println(xAngle); // Выводим значение угла <strong>Serial</strong>.print("Vertical angle = "); <strong>Serial</strong>.println(yAngle); if (!isNotClicked) { <strong>Serial</strong>.println("Clicked"); } delay(1000); // Устанавливаем временную задержку в 1000 миллисекунд или 1 секунду } |
После этого можно смело загружать скетч в плату. Затем попробуйте повращать джойстик в разные стороны, можете понажимать на него несколько раз и в мониторе порта увидите значения с вашего джойстика. Если же вы просто нажали на него, то появится надпись, прописанная в функции Serial.print («Clicked»).
Опираясь на эти данные, уже можно собрать что-нибудь более интересное и стоящее.
Применение
Если вы только начали изучать семейство AVR микроконтроллеров, то советуем вам попрактиковаться управлять с помощью джойстика различными движками и приводами, моторчиками или сервоприводами. Например, простейшим сервоприводом SG90.

Более сложные проекты с использованием джойстика включают в себя управление более сложными механизмами: управление машинкой, роботами, механической рукой и т.д.
Один из таких проектов приводим на видео ниже. Это управление поворотной платформе на основе сервопривода, с помощью джойстика.
Также существует большое множество плат и расширений, где уже встроен модуль джойстика — например, Joystick Shield и другие.
Купить компоненты для повторения данного урока, можно на сайте Arduinka.Pro: