- Подключаем к плате Ардуино джойстик
- Смысл подключения джойстика к ардуино
- Принцип действия
- Необходимые инструменты, материалы и программы
- Сборка устройства
- Настройка и отладка
- Тестирование
- Джойстик Ардуино – подключение и скетч
- Принцип работы джойстика
- Подключение джойстика к ардуино
- Как отслеживать текущее положение или направление джойстика
- Определение направления движения джойстиком
- Подводные камни в работе геймпада
- Плата расширения JoyStick shield
- Заключение
- Делаем еще один джойстик (геймпад) на Arduino
Подключаем к плате Ардуино джойстик
Джойстики – отличный источник входных данных для проекта по робототехнике. Создатели электроники всегда любили подобные вещи. Однако новичкам может показаться трудным понять концепцию во время кодирования и тому подобное. В статье ниже подробно описан механизм сборки ардуино джойстика и принцип его работы.
Смысл подключения джойстика к ардуино
Многим роботизированным проектам нужен джойстик. Модуль джойстика на ардуино аналогичен тем, которые используются в игровых приставках. Это сделано путем установки двух потенциометров под углом 90 градусов. Потенциометры соединены с короткой палкой, центрированной пружинами.
Этот модуль производит на выходе около 2,5 В от X и Y, когда он находится в положение покоя. Перемещение джойстика приведет к изменению выходного сигнала от 0 В до 5 В в зависимости от его направления. Если вы подключите этот модуль к микроконтроллеру, вы можете ожидать, что значение будет около 512 в положении покоя.
Когда вы перемещаете джойстик, вы можете увидеть, что значения изменяются от 0 до 1023, в зависимости от его положения.
Принцип действия
В приведенном ниже коде мы определили оси X и Y модуля джойстика для аналогового вывода A0 и A1 соответственно:
Теперь в приведенном ниже коде мы инициализируем PIN 2 для аrduino для коммутатора модуля Joystick, а значение buttonsdtate и buttonsdtate1 будет 0 в начале описываемой программы:
В приведенном ниже коде устанавливаем необходимую скорость передачи до 9600 и определяем Pin 7, как выходной вывод, и контакт кнопки в качестве входного контакта. Первоначально контактная кнопка остается высокой, пока пользователь не нажмет на соответствующий переключатель.
Здесь, в этом коде считываем значения из аналогового вывода A0 и A1 и последовательно выводим на устройство:
Условия включения и выключения светодиода в соответствии с движением вала джойстика определяются в приведенном ниже коде. Здесь мы просто принимаем аналоговые значения напряжения на выводах A0 и A1 аrduino. Эти аналоговые значения будут меняться при перемещении джойстика, и светодиод будет светиться в соответствии с движением джойстика.
Это условие для перемещения вала джойстика в направлении оси Y:
Это условие для перемещения вала джойстика в направлении оси X:
Это условие для перемещения вала джойстика в направлении оси X:
Нижеописанный код – это условие для перемещения вала сконструированного прибора в направлении оси Y:
Когда мы перемещаем ось джойстика по диагонали, тогда одно положение приходит, когда аналоговое значение X и Y будет равно 1023 и 1023 соответственно, и светодиоды Pin 9, и Pin 8 будут светиться. Потому что он удовлетворяет условию светодиода. Итак, для устранения этого несоответствия указывается условие, что если значение (X, Y) равно (1023, 1023), то оба светодиода остаются в выключенном состоянии:
Нижеследующее условие используется для управления светодиодом, подключенным к кнопочному переключателю. Когда мы нажимаем джойстик, светодиод включается и фиксируется до тех пор, пока кнопка не опустится. Лучше использовать кнопочный переключатель.
Необходимые инструменты, материалы и программы
Для осуществления проекта “аrduino joystick” потребуются следующие материалы:
- аrduino UNO;
- модуль джойстика;
- светодиоды – 5 штук;
- резистор на 100 ом — 3 штуки;
- соединительные провода;
- макет.
Сборка устройства
Джойстики доступны в разных формах и размерах. Типичный модуль описываемого прибора показан на рисунке ниже. Этот модуль обычно обеспечивает аналоговые выходы, а выходные напряжения, обрабатываемые этим модулем, изменяются в соответствии с направлением, в котором его перемещает пользователь. Можно получить направление движения, интерпретируя эти изменения с помощью некоторого микроконтроллера.
Этот модуль джойстика имеет две оси. Они представляют собой ось X и ось Y. Каждая ось монтируется на потенциометр или горшок. Средние точки этих горшков определяются, как Rx и Ry. Таким образом, Rx и Ry являются переменными точками для этих горшков. Когда прибор находится в режиме ожидания, Rx и Ry действуют, как делитель напряжения.
Когда arduino джойстик перемещается вдоль горизонтальной оси, напряжение на контакте Rx изменяется. Аналогично, когда он перемещается вдоль вертикальной оси, напряжение на пикселе Ry изменяется. Таким образом, у нас есть четыре направления устройства на двух выходах ADC. Когда палочка перемещается, напряжение на каждом штыре должно быть высоким или низким, в зависимости от направления.
Настройка и отладка
После загрузки кода в аrduino и подключения компонентов в соответствии с электрической схемой, мы теперь управляем светодиодами с помощью джойстика. Можно включить четыре светодиода в каждом направлении в соответствии с движением вала устройства. Он имеет два потенциометра внутри, один – для перемещения по оси X, а другой – для перемещения по оси Y. Каждый потенциометр получает 5v от аrduino. Так как мы перемещаем устройство, значение напряжения изменится, и аналоговое значение в выводах A0 и A1 также станет иным.
Итак, из микроконтроллера аrduino мы считываем аналоговое значение для оси X и Y и включаем светодиоды в соответствии с движением оси устройства. Нажимаем переключатель на модуле и используем для управления одиночным светодиодом в цепи.
Код представлен ниже:
Тестирование
Для тестирования джойстика для ардуино понадобятся следующие компоненты:
- Микроконтроллер (любой, совместимый arduino).
- Модуль джойстика.
- 1 контактный разъем MM.
- Макет.
- USB-кабель.
- Подключите компоненты, используя MM-штырьковый разъем. + 5В подключается к источнику питания 5 В, вывод GND подключен к GND, контакты VRx и VRy подключены к аналоговому входу, контакты и штырьковый разъем подключены к цифровому выводу ввода/вывода.
- Номер контакта будет основан по фактическому программному коду.
- После аппаратного соединения вставьте образец эскиза в среду разработки аrduino.
- Используя USB-кабель, подключите порты от микроконтроллера к компьютеру.
- Загрузите программу.
- Смотрите результаты на последовательном мониторе.
Источник
Джойстик Ардуино – подключение и скетч
Использование джойстика – это один из способов обмена информацией между человеком и устройством (компьютер, микроконтроллер) на основе Arduino. Чаще всего их используют для управления механизмами или роботами. По аналогии с привычным игровым миром джойстики также часто называют геймпадами. Геймпад прост и удобен в использовании. Сегодня существует большое количество видов джойстиков по количеству степеней свободы, частоте считывания информации и используемой технологии. В данной статье мы рассмотрим наиболее популярный вариант, научимся управлению джойстиком и узнаем, как его подключать.
Принцип работы джойстика
Аналоговый джойстик выглядит как ручка, которая закрепляется на шарнире с двумя потенциометрами, определяющими оси X и Y, и кнопкой Z. Наклон или поворот ручки вращает специальный подвижный контакт, из-за чего изменяется выходное напряжение. Сам геймпад оснащен пружиной, благодаря которой плавно возвращается в первоначальное центральное состояние после отпускания его с какой-либо позиции. Устройство позволяет более плавно отследить степень отклонения от центральной (нулевой) точки.
Подключение джойстика к ардуино
Подключение джойстика к Arduino Uno выполняется по схеме, приведенной ниже.
На модуле имеется 5 выходов – Vcc, Gnd, X, Y и Key (обозначения могут различаться в зависимости от устройства).
Данные по оси X выводятся на вход А0, по оси Y – на А1. Для визуального контроля нажатия кнопки также можно подключить светодиод D11. Питание осуществляется напряжением 5 Вольт. Пин GND присоединяется к такому же пину на плате Ардуино. Контакт SW можно подсоединить к любому цифровому пину.
Как видим, подключение модуля джойстика не сложно. Если устройство не работает после подключения, проверьте, правильно ли вы подсоединили все пины.
Как отслеживать текущее положение или направление джойстика
Для использования джойстка в реальном проекте нам понадобится написать скетч, чтобы обрабатывать данные, которые отправляет джойстик во время своей работы.
Узнать, в каком положении в текущий момент находится устройство, можно в зависимости от значений потенциометров. Перемещение происходит по направлению находящихся перпендикулярно осей X и Y. Считывание информации с геймпада происходит с помощью функции analogRead() – она показывает значения в диапазоне от 0 до 1023. В качестве аргументов ей поступают номера пинов, к которым произведено подключение джойстика:
Serial.println(analogRead(A0)); // показывает положение X координаты
Serial.println(analogRead(A1)); // показывает положение Y координаты
Для удобства советуется использовать константы, чтобы уменьшить и упростить итоговый код. Аналоговые пины как раз можно объявить постоянными:
const byte PIN_ANALOG_X = A0; // постоянная для координаты Х
const byte PIN_ANALOG_Y = A1; // постоянная для координаты Y
Определение направления движения джойстиком
Управление с помощью джойстика подразумевает собой то, что мы должны узнать направление движения ручки джойстика. Для этого нам придется получить и интерпретировать данные по всем осям.
По значению положений осей X и Y можно узнать, находится ли джойстик в центре или произошло смещение. Значения во всех направлениях находятся в диапазоне от 0 до 1023, как говорилось ранее. В первую очередь приходит мысль, что центральная точка будет находиться примерно в значении 511-512. Это заключение не совсем правильно, так как абсолютно точное положение определить нельзя.
Неверное определение центрального значения может привести к тому, что будет получена ошибочная информация о движении джойстика, если он будет находиться в неподвижном состоянии. Для этого следует выбрать числовой диапазон и условно считать, что любое значение в нем будет центральной точкой. Значения нужно подстраивать под каждый вид джойстика, но примерно оно будет в диапазоне 505-518. Полученные значения записываются в код в виде постоянных:
const int X_THRESHOLD_LOW = 505;
const int X_THRESHOLD_HIGH = 518;
const int Y_THRESHOLD_LOW = 500;
const int Y_THRESHOLD_HIGH = 510;
Следующим шагом будет преобразование координат в диапазон от -1 до 1. Для X -1 – это перемещение влево, 0 – нет движения, 1 – вправо. По Y -1 – движение вниз, 0 – центральное значение, 1 – вверх. Изначально устанавливаем все значения в центр 0. Для проверки, происходит ли перемещение, используем выражения if/else.
Подводные камни в работе геймпада
Как и с любое устройство, джойстики не лишены недостатков. В первую очередь, наличие пружины не позволяет ручке точно вернуться в центральное положение из-за трения в механических деталях. Это приводит к тому, что приходится программно определять центральное положение, вернее диапазон значений, в которых любая точка будет условно считаться серединой.
Второй проблемой можно назвать наличие так называемых мертвых зон. Два крайних значения при наибольших отклонениях должно быть равным 0 В и напряжению питания. В действительности эти значения могут различаться, так как не используется весь электрический диапазон изменения сопротивления. Для решения этой проблемы крайние точки могут соответствовать значениям 1 кОм и 9 кОм.
Плата расширения JoyStick shield
Для управления роботами или другими механизмами иногда требуется использовать джойстик к кнопками и средствами коммуникаций. Для того, чтобы не придумывать каждый раз новые конструкции, рекомендуется купить готовую плату расширения ардуино для джойстика, в которой все необходимые элементы будут спаяны.
Рассмотрим, что представляет собой этот шилд от известного в мире ардуино производителя Sparkfun. Данный геймпад работает исправно и стоит относительно недорого. Устройство может поставляться в немного разобранном виде, так что сначала его нужно собрать.
Шилд содержит несколько стандартных кнопок (4 обычных сбоку и кнопка выбора). В зависимости от модели, на плате могут быть добавлены разъемы для подключения модулей bluetooth или wifi. Традиционно, с помощью выходов пинов и гребенки можно подключать внешние устройства.
Заключение
Джойстик ардуино – незаменимая вещь во моих проектах. Благодаря этому виду датчиков вы можете добавить в свое устройство удобные и современные средства управления. В некоторых ситуациях без джойстика вообще обойтись практически невозможно: джойстик ардуино используется для управления роботами, умными машинами, сервоприводами, громкостью музыкой и яркостью подсветки на мониторе, как навигация в различных играх и во многих других проектах.
Подключение готового модуля не сложно, так же весьма доступным является и сам управляющий скетч. Чаще всего, джойстик используется в месте с кнопками и в паре с беспроводными интерфейсами, потому то управлять джойстиком на проводе быстро перемещающимися устройствами практически невозможно. Поэтому рекомендуется для работы использовать готовые шилды, в которых есть все необходимое.
Источник
Делаем еще один джойстик (геймпад) на Arduino
Шла обычная пятница, ничто не предвещало беды…
Но червь «нужно что-то сделать» уже начал свою работу. После прочтения статьи я вспомнил, что у меня в барахле лет 15, если не больше, валяется сеговский геймпад. Забрал я его с твердым намерением сделать геймпад на процессоре AVR (про ардуино я тогда и не слышал, но пару небольших проектов на AVR сделал).
Еще больше утвердила мое намерение статья про MSX, и в пятницу я решил — делаю!
Из закромов был вытащен на белый свет сеговский геймпад в разобранном состоянии. К моему изумлению он был в полном комплекте (ну, если не считать порезанные дорожки и отсутствующий оригинальный контроллер), не хватало только 2-х болтиков.
В качестве контроллера я решил использовать Beetle, так как он был заказан мной когда-то, но пока не испробован, да и не очень понравился «малым количеством портов».
И тут меня ждало разочарование — портов 6, кнопок 10. Горю моему не было предела, но мозг таки нашел решение, для начала я решил попробовать собрать прототип из 2-х кнопок, так как я решил использовать фокус с диодом, чтобы опрашивать 10 кнопок с помощью 6 выводов. Практически окрыленный, я засел за проверку… И тут случилась следующая неприятность — кнопок на джойстике больше, чем 10! В общем это был тот момент, когда нужно было смотреть в документацию, хотя идей было много — например припаять (ага, моим паяльником, который накрывает почти все ножки с одной стороны микросхемы), или поискать просветления в интернете.
Документация же четко сказала, что портов у Beetle на самом деле не 6, а 10, что сделало дальнейший процесс скучным (так я думал). (Использование 8 выводов дает возможность опрашивать 2 * 6 = 12 кнопок, что мне и было нужно)
Схема подключения — матрица 6 х 2, потому как оригинальная плата была разведена удобным мне образом. (Кстати в процессе предыдущей переделки дорожки были порезаны, чтобы подключить клавиатурный контроллер, пришлось восстанавливать, вышло страшненько)
Схема получившегося геймпада:
Быстро накидав пример я убедился что он не работает… Не понял?! Пример то простейший. Подумав, сообразил, что цифровому пину не хватает того сопротивления, что дают резиновые токопроводящие кнопки, немного изменил схему, теперь читается аналоговый сигнал и сравнивается с половиной максимума. Перепаиваю контакты, переписываю программу и… ничего не работает, совсем. Контроллер не определяется, все пропало. Код проверен, и перепроверен, все должно работать! А контроллер не видится ни в какую. Мотивация падает, делаем перерыв.
Через некоторое время безуспешно поигравшись с Beetle, ну все, убил контроллер своим паяльником, с сожалением достаю из закромов Arduino Micro, прошиваю прошивку и снова тишина! Становится понятно, что-то не так с кодом, в конце концов нахожу банальную причину — бесконечный цикл в loop(), исправляю, но зашить то не могу! Оказывается проблема, когда контроллер не видится решается нажатием на резет во время прошивания (или замыканием пинов в моем случае)
В итоге получился сеговский геймпад, проверен, работает, я счастлив: поиграл в Metal Gear, Felix The Cat, Super Mario.
P. S. «Трюк со светодиодом». Конечно не обязательно использовать светодиод, обычный диод лучше подходит, суть простая, вместо двух выводов использовать один, соединенный с разными кнопками через 2 диода:
Источник