Подключение джойстика к Arduino Uno

Первое, что приходит в голову большинству людей когда их спрашивают про джойстик – это игровой контроллер. Да, джойстики действительно очень широко применяются в индустрии компьютерных игр, но, кроме этого, они находят применение и в разнообразных DIY (сделай сам) электронных проектах. По сути, джойстик – это не что иное как комбинация двух потенциометров, для плоскостей X и Y соответственно.

Внешний вид подключения джойстика к плате Arduino Uno

В этой статье мы рассмотрим подключение джойстика к плате Arduino, с помощью которого мы будем управлять включением/выключением 4-х светодиодов, которые будут показывать направление перемещения ручки джойстика. Также у джойстика есть кнопка (нажатия), которая, при необходимости, также может задействоваться для различных целей. Мы при нажатии этой кнопки будем зажигать в нашем проекте еще один светодиод.

Необходимые компоненты

  1. Плата Arduino Uno.
  2. Джойстик.
  3. Светодиоды (5 шт.).
  4. Резисторы 100 Ом (3 шт.).
  5. Соединительные провода.
  6. Макетная плата.

Схема проекта

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

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

Модуль джойстика

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

Внешний вид джойстика

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

Когда джойстик движется вдоль горизонтальной оси напряжение на контакте Rx изменяется. Аналогично, если джойстик движется вдоль вертикальной оси, то изменяется напряжение на контакте Ry. То есть мы имеем 4 направления движения джойстика и 2 выходных контакта АЦП (аналого-цифрового преобразования). Когда ось джойстика движется, напряжение на этих контактах становится больше или меньше в зависимости от направления движения джойстика.

Мы в нашем проекте направление движения джойстика будем отслеживать с помощью АЦП, присутствующих на аналоговых входах платы Arduino. Более подробно об АЦП в Arduino можно прочитать в этой статье.

Объяснение программы для Arduino

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

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

Далее мы инициализируем контакт PIN 2 (к нему подключена кнопка джойстика) и определим начальные значения переменных buttonstate и buttonstate1.

В следующем фрагменте кода мы инициализируем последовательный порт связи для работы на скорости 9600 бод/с и зададим режим работы контактов: Pin 7 – на вывод данных, контакт, к которому подключена кнопка – на ввод данных.

Далее в программе мы считываем значения с аналоговых входов A0 и A1 и передаем их в окно монитора последовательной связи.

Затем мы должны прописать в программе условия включения и выключения светодиодов в зависимости от перемещений оси джойстика. На следующем рисунке представлены диапазоны возможных изменений значений на выходах АЦП контактов A0 и A1 в зависимости от перемещения оси джойстика.

Диапазоны возможных изменений значений на выходах АЦП в зависимости от перемещения оси джойстика

Условие для перемещения оси джойстика в направлении -Y:

Условие для перемещения оси джойстика в направлении -X:

Условие для перемещения оси джойстика в направлении +X:

Условие для перемещения оси джойстика в направлении +Y:

Но если мы переместим джойстик по диагонали, то значения с выходов АЦП по осям X и Y будут 1023 и 1023 соответственно. И, поскольку, в этом случае будут выполнены сразу два из вышеперечисленных условий, то должны зажечься светодиоды, подключенные к контактам Pin 9 и Pin 8. Чтобы устранить это несоответствие, мы добавим еще условие – если оба значения (X, Y) будут равны (1023, 1023), тогда оба светодиода будут в выключенном состоянии.

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

Тестирование работы проекта

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

Тестирование работы проекта

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

Исходный код программы

Код программы достаточно подробно объяснен выше в статье, поэтому, надеюсь, анализ его работы не вызовет у вас затруднений.

(Проголосуй первым!)
Загрузка...
49 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *