Схема подключения джойстика KY-023 к Arduino — MicroPi

Вопросы и ответы

Технические характеристики KY-023

  • Напряжение питания: 5 В
  • Вращение ручки: 360°
  • Размер: 40 мм x 26 мм x 32 мм

Управляем матрицей

Теперь объединим знания светодиодной матрицы и джойстика в небольшое подобие игры. Включаем один из светодиодов на матрице и управляем им джойстиком. И когда вы нажмете кнопку, мы изменим цвет светодиода.

Подключаем библиотеки и выставляем все необходимые переменные.

Инициализируем библиотеки и пины. И выведем светодиод в исходное положение.

Поскольку светодиоды на нашей матрице спаяны последовательно и конец одного ряда является началом следующего. Нам нужно рассчитать переходы между линиями для нашего светодиода. Для этого напишем специальную функцию.

Он получит предыдущее состояние светодиода, а также координаты движений с джойстика. И он рассчитает следующий светодиод, который должен включиться.

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

Функция color () изменит цвет светодиода на случайный. По умолчанию кнопка в форме отправляет 1, поэтому давайте добавим знак к условию !

А в схеме управления мы просто подключаем эти функции и выставляем небольшую задержку.

Управление матрицей с помощью джойстика

Управление матрицей с помощью джойстика

Joystick Shield

Как уже упоминалось выше, выпускается много модулей джойстиков. У Sparkfun есть интересное решение. Выпускают Joystick Shield, о котором мы поговорим позже. Внешний вид экрана джойстика показан на следующем рисунке.

Щиток джойстика

Сборка джойстик шилда

Здесь стоит отметить, что щиток поставляется в разобранном виде. Значит нужно работать паяльником. Полные инструкции по сборке доступны по этому адресу: Руководство по сборке щита джойстика. Материал от производителя на английском языке, но фотоматериала достаточно. Так что это легко понять.

Считывание показаний с аналогового джойстика

Чтобы наглядно увидеть, как работает джойстик, напишем вот такой скетч.

вкладка Serial.println (Y); }

Значения X и Y аналогового джойстика отображаются на мониторе последовательного порта
Значения X и Y с аналогового джойстика,
монитор последовательного порта

Декларируем пины, устанавливаем для них режимы работы. Обратите внимание, что в процедуре setup () мы устанавливаем вход switchPin на высокий уровень. Это включает встроенный подтягивающий резистор на этом порте. Если его не включить, при не нажатой кнопке джойстика 8-й порт Arduino зависнет в воздухе и захватит звукосниматели. Это приведет к нежелательным и хаотичным ложным срабатываниям.

В процедуре loop () мы постоянно опрашиваем состояние кнопки и отображаем его с помощью светодиода на выходе 13. Из-за активации входа switchPin светодиод постоянно горит, а при нажатии кнопки гаснет, и А не наоборот.

Затем мы считываем показания двух потенциометров джойстика: выход осей X и Y. Arduino имеет 10-битный АЦП, поэтому значения, считываемые джойстиком, находятся в диапазоне от 0 до 1023. В центре положение джойстика, как вы можете видеть на иллюстрации, значения в области 500 находятся примерно в середине диапазона.

Обратите внимание, что показания осей X и Y в нейтральном положении ручки джойстика могут отличаться, а не точно 512.

Принцип действия аналогового джойстика

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

Аналоговый джойстик, который мы сегодня рассмотрим, представляет собой ручку, прикрепленную к шаровому шарниру с двумя взаимно перпендикулярными осями. При наклоне ручки ось вращает подвижный контакт потенциометра, тем самым изменяя напряжение на его выходе. Кроме того, аналоговый джойстик имеет тактильную кнопку, которая активируется при вертикальном нажатии на ручку.

Принципиальная схема аналогового джойстика
Принципиальная схема аналогового джойстика

Здесь outX, outY — выходы для снятия показаний по осям X и Y; outSw — вывод кнопки часов. Vcc и GND — соответственно питание и земля.

Распиновка KY-023

Заключение Описание

GND Земля / общий
+ 5 В / VCC Питание
VRX Аналоговый выход потенциометра оси X
VRY Аналоговый выход потенциометра оси Y
ЮЗ Кнопка выхода

Необходимые инструменты, материалы и программы

Для реализации проекта «джойстик ардуино» потребуются следующие материалы:

  • arduino UNO;
  • модуль джойстика;
  • led — 5 штук;
  • резистор 100 Ом — 3 штуки;
  • соединительные кабели;
  • договоренность.

Как отследить текущее положение джойстика?

Положение джойстика рассчитывается на основе значений двух потенциометров, установленных внутри него. Джойстик перемещается в двух направлениях, обычно обозначаемых как X и Y. Для считывания данных с потенциометров используйте функцию analogRead (), которая возвращает значение от 0 до 1023. Для этого перенесите номера контактов, на которые джойстик связан с функцией. В этом примере мы подключаемся к аналоговому выводу 0 для X и аналоговому выводу 1 для Y.

Очень удобный подход — использовать константы для значений, которые не изменяются в ходе выполнения программы. Затем в следующем коде мы объявим константы для аналоговых выводов, которые мы используем, и отобразим текущую позицию X и Y в последовательном мониторе Arduino IDE:

Настройка и отладка

После загрузки кода в Arduino и подключения компонентов в соответствии со схемой подключения, теперь мы управляем светодиодами с помощью джойстика. Четыре светодиода могут гореть в каждом направлении в зависимости от движения вала устройства. Он имеет два внутренних потенциометра, один для движения по оси X, а другой для движения по оси Y. Каждый потенциометр получает 5 В от Arduino. Когда мы перемещаем устройство, значение напряжения будет изменяться, и аналоговое значение на контактах A0 и A1 также изменится.

Затем с микроконтроллера arduino считываем аналоговое значение для осей X и Y и включаем светодиоды в соответствии с перемещением оси устройства. Нажмите переключатель на модуле и используйте его для управления одним светодиодом в цепи.

Для чего можно использовать джойстик?

На щитке джойстика четыре кнопки справа, кнопка непосредственно на джойстике и сам аналоговый джойстик. Экран можно использовать для управления мелодией или пикселями на мониторе. Кнопки можно использовать для навигации и управления играми.

Для дальнейшей мотивации смотрите видео ниже:

Собрав щиток джойстика, можно смело вносить изменения в эскизы для выполнения своих задач.

Получаем данные от джойстика

Сначала проверяем работу джойстика и пытаемся получить с него данные и отправить их на дверной монитор.

Загрузим простой скетч и откроем монитор. Мы считываем состояние кнопки и потенциометров и отображаем их на мониторе двери.

Когда джойстик перемещается из центрального положения, данные потенциометра изменяются. При нажатии кнопки данные о цифровом контакте также изменяются.

Данные с джойстика в мониторе
Данные с джойстика в мониторе
Данные с джойстика в мониторе

Принципиальная схема джойстика KY-023

Двухосевой джойстик KY-023 без жатки

2-осевой модуль джойстика состоит из двух потенциометров 10 кОм, которые определяют положение осей X и Y, а сопротивление изменяется рычагом. Средняя ножка каждого потенциометра подключена к контактам VRX и VRY, а вторая и третья ножки подключены к источнику питания и заземлению. Кроме того, установлена ​​кнопка часов, снимаются показания с контакта SW, а также предусмотрено гнездо для подтягивающего резистора (R1).
Принципиальная схема джойстика KY-023

Для чтения данных с контактов VRX (ось X) и VRY (ось Y) вам необходимо использовать аналоговый порт Arduino. (значение от 0 до 5 В или от 0 до 1023), а для чтения данных с вывода RW используйте цифровой порт (значение 0 В и 5 В или 0 и 1). Так как одна клемма кнопки часов подключена к массе и при нажатии джойстика цепь замыкается, но возможны ложные срабатывания (срабатывания). Для получения стабильных показаний вывод RW должен быть подан на питание + 5 В через подтягивающий резистор R1, или должен использоваться встроенный подтягивающий резистор.

Сборка устройства

Джойстики бывают разных форм и размеров. Типовой модуль описываемого устройства показан на рисунке ниже. Этот модуль обычно обеспечивает аналоговые выходы, и выходные напряжения, обрабатываемые этим модулем, изменяются в зависимости от направления, в котором его перемещает пользователь. Вы можете получить направление движения, интерпретируя эти изменения с помощью некоторых микроконтроллеров.

Этот модуль джойстика имеет две оси. Они представляют ось X и ось Y. Каждая ось установлена ​​на потенциометре или потенциометре. Середины этих сосудов обозначены как Rx и Ry. Следовательно, Rx и Ry — переменные точки для этих судов. Когда прибор находится в режиме ожидания, Rx и Ry действуют как делители напряжения.

Когда джойстик Arduino перемещается по горизонтальной оси, напряжение на выводе Rx изменяется. Аналогичным образом, когда он перемещается по вертикальной оси, напряжение на пикселе Ry изменяется. Таким образом, мы имеем четыре направления устройства на двух выходах АЦП. По мере движения ручки напряжение на каждом контакте должно быть высоким или низким, в зависимости от направления.

Подводные камни в работе геймпада

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

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

Схема подключения джойстика KY-023 к Arduino

Для считывания значений с потенциометров джойстика будет использоваться пара аналоговых контактов на Arduino (A0 и A1) и цифровой контакт для считывания значений с кнопки.

KY-023Ардуино

GND GND
+ 5В
VRx A0
VRy A1
ЮЗ 3

Схема подключения джойстика KY-023 к Arduino
В примере используется встроенный подтягивающий резистор (также можно использовать внешний, для этого необходимо добавить к модулям резистор R1, например, типоразмера 0805). Подключаем провода, VRX к аналоговому порту A0, VRY к аналоговому порту A1, SW к цифровому порту 3, осталось подключить блок питания + 5V к выводу 5V и GND к GND на Arduino Pro Mini или Arduino Uno.

Пример скетча

Следующий эскиз Arduino будет непрерывно считывать значения с потенциометров и кнопок KY-023 и преобразовывать их в значение напряжения (0-1023 -> 0V-5V). Перемещение джойстика вверх / вниз увеличивает / уменьшает значения X, а перемещение джойстика влево / вправо увеличивает / уменьшает значения Y. Нажмите джойстик, чтобы активировать кнопку. Запустите среду разработки и загрузите этот скетч, затем откройте дверной монитор.

Результат

В мониторинге порта вы можете видеть все изменения джойстика и нажатия кнопок.

Как настроить Arduino для отслеживания состояния кнопки (нажата ли она)?

Прежде чем вы сможете узнать, нажата ли кнопка на щите джойстика, вам необходимо настроить Arduino для распознавания кнопок. Удивительно, но это реализовано в теле функции setup()!

Во-первых, давайте определим константы для контактов Arduino, связанных с кнопками:

Если вы раньше использовали кнопки с Arduino, вы могли заметить, что необходимо использовать резистор для измерения напряжения при нажатии кнопки. Чтобы уменьшить количество деталей, щиток джойстика сконструирован таким образом, что сопротивление не требуется. Вы можете спросить: «Если для кнопок нужны резисторы, почему щиток работает без них?» Вы не учли, что в Arduino встроены резисторы. Вы можете просто активировать их и использовать вместе с нашим щитом!

Чтобы использовать эти встроенные подтягивающие резисторы, установите вывод в режим INPUT, затем включите его, используя следующие строки:

Если вы используете подтягивающий резистор, важно помнить, что нажатая кнопка не ВЫСОКИЙ, а нажатая кнопка — НИЗКИЙ.

Чтобы настроить каждый вывод для работы в режиме ввода и активировать подтягивающие резисторы, можно использовать следующий код:

Далее мы узнаем, как определить, нажата ли кнопка.

Подключение джойстика к ардуино

Подключение джойстика к Arduino Uno выполняется по следующей схеме.

Джойстик Arduino

Модуль имеет 5 выходов — Vcc, Gnd, X, Y и Key (обозначения могут различаться в зависимости от устройства).

Данные по оси X выводятся на вход A0, по оси Y — на A1. Светодиод D11 также можно подключить для визуального контроля нажатия кнопок. Электропитание осуществляется напряжением 5 вольт. Вывод GND подключается к тому же выводу на плате Arduino. Вывод SW может быть подключен к любому цифровому выводу.

Как видите, подключить модуль джойстика нетрудно. Если устройство не работает после подключения, убедитесь, что вы правильно подключили все контакты.

Как отслеживать текущее положение или направление джойстика

Чтобы использовать джойстик в реальном проекте, нам нужно написать скетч для обработки данных, которые джойстик отправляет во время своей работы.

Узнать, в каком положении сейчас находится устройство, можно в зависимости от значений потенциометров. Движение происходит в направлении перпендикулярных осей X и Y. Информация с геймпада считывается с помощью функции analogRead () — она ​​показывает значения в диапазоне от 0 до 1023. В качестве аргументов он получает номера контактов, к которым джойстик подключен:

  • Serial.println (analogRead (A0)); // показываем положение координаты X
  • Serial.println (analogRead (A1)); // показываем положение координаты Y

Для удобства мы рекомендуем использовать константы, чтобы уменьшить и упростить результирующий код. Аналоговые выводы можно просто объявить постоянными:

  • константный байт PIN_ANALOG_X = A0; // константа для координаты X
  • константный байт PIN_ANALOG_Y = A1; // константа для координаты Y

Определение направления движения джойстиком

Управление джойстиком подразумевает, что нам нужно знать направление движения ручки джойстика. Для этого нам нужно будет получить и интерпретировать данные по всем осям.

По значению положений осей X и Y можно понять, находится ли джойстик в центре или есть ли сдвиг. Значения во всех направлениях варьируются от 0 до 1023, как обсуждалось выше. Прежде всего приходит мысль, что центральная точка будет примерно в значении 511-512. Этот вывод не совсем верен, так как абсолютно точное местоположение не может быть определено.

Координаты джойстика Arduino

Неправильное определение центрального значения может привести к получению неверной информации о движении джойстика, если он неподвижен. Для этого выберите числовой диапазон и условно предполагайте, что любое значение в нем будет центральной точкой. Значения необходимо настроить для каждого типа джойстика, но примерно они будут в диапазоне 505–518. Полученные значения записываются в код как константы:

Следующим шагом является преобразование координат в диапазоне от -1 до 1. Для X, -1 — это сдвиг влево, 0 — отсутствие движения, 1 — вправо. По Y -1 — движение вниз, 0 — центральное значение, 1 — вверх. Первоначально мы устанавливаем все значения в центр 0. Чтобы проверить, происходит ли движение, мы используем операторы if / else.

Читайте также: Дисплей для Ардуино: подключение экрана LCD1602 по I2C

Оцените статью
Блог про Arduino