Как сделать джойстик ардуино
Подключение джойстика к Arduino Uno
Первое, что приходит в голову большинству людей когда их спрашивают про джойстик – это игровой контроллер. Да, джойстики действительно очень широко применяются в индустрии компьютерных игр, но, кроме этого, они находят применение и в разнообразных DIY (сделай сам) электронных проектах. По сути, джойстик – это не что иное как комбинация двух потенциометров, для плоскостей X и Y соответственно.
В этой статье мы рассмотрим подключение джойстика к плате Arduino, с помощью которого мы будем управлять включением/выключением 4-х светодиодов, которые будут показывать направление перемещения ручки джойстика. Также у джойстика есть кнопка (нажатия), которая, при необходимости, также может задействоваться для различных целей. Мы при нажатии этой кнопки будем зажигать в нашем проекте еще один светодиод.
Необходимые компоненты
Схема проекта
Схема подключения джойстика к плате Arduino Uno представлена на следующем рисунке.
Модуль джойстика
Джойстики выпускаются различных форм и размеров. Внешний вид типового модуля джойстика показан на рисунке ниже. Данный модуль джойстика имеет аналоговые выходы, на которых формируется выходное напряжение в зависимости от того, в каком направлении наклонена ось джойстика. Интерпретируя эти изменения напряжений на выходах джойстика с помощью микроконтроллера (в данном случае его роль выполняет плата Arduino) мы можем определить направление перемещения оси джойстика. Ранее на нашем сайте мы уже рассматривали подключение джойстика к микроконтроллеру AVR.
Как вы можете видеть из представленного рисунка, рассматриваемый нами модуль джойстика имеет две оси: X и Y. Каждая ось джойстика смонтирована на потенциометре. Средние контакты (то есть переменные контакты) этих потенциометров подключены к выходным контактам Rx и Ry джойстика. Когда джойстик находится в состоянии покоя, Rx и Ry выполняют роль делителя напряжения.
Когда джойстик движется вдоль горизонтальной оси напряжение на контакте Rx изменяется. Аналогично, если джойстик движется вдоль вертикальной оси, то изменяется напряжение на контакте Ry. То есть мы имеем 4 направления движения джойстика и 2 выходных контакта АЦП (аналого-цифрового преобразования). Когда ось джойстика движется, напряжение на этих контактах становится больше или меньше в зависимости от направления движения джойстика.
Мы в нашем проекте направление движения джойстика будем отслеживать с помощью АЦП, присутствующих на аналоговых входах платы Arduino. Более подробно об АЦП в Arduino можно прочитать в этой статье.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы обсудим его наиболее важные фрагменты.
В следующем фрагменте кода мы инициализируем аналоговые контакты Arduino A0 и A1 чтобы отслеживать перемещение джойстика по осям X и Y соответственно.
#22. Подключаем к Arduino джойстик. Управление servo сервоприводом.
Сегодня в уроке подключим джойстик к Arduino UNO. И рассмотрим пару примеров использования джойстика в робототехнике:
А для начала рассмотрим, что такое джойстик, из чего он состоит и как устроен.
Устройство аналогово джойстика и принцип работы.
Джойстик представляет из себя модуль, на который установлены 2 потенциометра и одна тактовая кнопка.
Но на практике это значение может быть другим, оно зависит от точности сборки, качества потенциометров и прочих факторов. Подробнее данную ситуацию рассмотрим на примере.
На плате установлена тактовая кнопка. Использовать ее или нет решать вам. При создании пульта для радиоуправляемой машинки я использовал данную кнопку для переключения режима работы: с джойстика или с акселерометра. Если интересно читайте на странице проекта: Машинка на радиоуправлении. Arduino + nrf24l01 + пульт.
Вывод данных о положении стика джойстика в монитор порта.
Для того, чтобы определить какие значения получает Arduino, когда мы отпустили стик джойстика и он установил свое центральное положение, выведем показания в монитор порта. Для этого подключим джойстик к Arduino UNO по схеме.
После чего нужно загрузить код в Arduino UNO.
В мониторе порта будут вот такие данные.
Как видите, они отличаются от 511. Показание отличаются на разных осях X=507, Y=510. Эти данные нам пригодятся в следующем примере.
Если мы подвигаем стик джойстика, то увидим изменение значений от 0 до 1023 по каждой оси.
После чего в мониторе порта мы получим вот такие значения.
Управление свечением двух светодиодов с помощью джойстика.
Чтобы усложнить ситуацию, сделаем так, чтобы светодиод не светился при центральном положении джойстика, а при отклонении джойстика светодиод плавно увеличивал яркость. Для этого нужно подключать светодиоды к пинам с ШИМ. Подключим джойстик и светодиоды к Ардуино по схеме.
Так как мы знаем значение при центральном положении стика, для оси Х это 507, а для оси Y 510, используя функцию map() , приведем к необходимому диапазону, например для оси Х от 507 до 1023 к диапазону от 0 до 255. Код будет вот таким.
Данный пример применим при разработке пульта радиоуправления.
Подключить джойстик и сервопривод к Arduino. Научимся управлять сервоприводами с помощью джойстика.
Джойстик часто используется для управления сервоприводами. Поэтому рассмотрим небольшой пример, в котором будем изменять угол положения двух servo подключённых к Arduino UNO по схеме.
Для данного примера устанавливать дополнительные библиотеки не нужно, так как библиотека servo устанавливается вместе с Arduino IDE.
Код для управления сервоприводами с помощью джойстика будет небольшим и достаточно простым.
Итог: Как видим из примеров, применение джойстика достаточно большое в разработке проектов на Arduino и в робототехнике.
Если вас интересует дополнительная информация о джойстике, пишите об этом в комментариях.
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока.
И до встречи в следующем уроке
Понравилась статья? Поделитесь ею с друзьями:
Как сделать джойстик ардуино
5 (2) Видеоуроки по Ard.
Если у вас есть беспроводной джойстик от PlayStation, то вы сможете подключить его к Arduino и управлять своими поделками. Для этого вам не понадобится USB Host. В данной инструкции используется аналог беспроводного джойстика от PS3 купленного на eBay.
Список необходимых компонентов:
1. Беспроводной PS3 джойстик с радиоприемником.
2. Провода 6 шт.
3. Разъёмы.
4. Вилка штыревая.
5. Arduino Uno или Mega.
Подключение PS3 джойстика к Ардуино:
1. Изготовление проводов.
Возьмите провода, я использовал «джамперы» из набора. К одному концу припаяйте разъём, если нет одинарных, тогда отрежьте неиспользуемую часть разъема. Так как контакты в радиомодуле толстые, вам придётся увеличить отверстие в разъеме. Если вы используете простые провода, тогда к другому концу припаяйте штыревую вилку. У вас должен получиться вот такой провод.
Для корректной работы джойстика вам понадобится добавить как минимум два резистора. Это связано с тем, что радиомодуль работает от 3.3В, а рабочее напряжение на пинах Ардуино Уно и Мега 5В. Сам автор библиотеки пишет, что у одних пользователей работает с резисторами, у других без резисторов. В моем случае, ниже указанная схема самая стабильная.
Для пинов Command и Clock добавьте резисторы номиналом 5.6 КОм. Провода будут выглядеть так.
Радиомодуль с подключенными проводами.
2. Подключение радиомодуль к Ардуино:
Распиновка радиомодуля от PS3 джойстика (обозначены только нужные нам пины):
Подключите провода к указанным пинам на приемнике. После этого, подключите приемник к Ардуино по следующей схеме. Пины на Ардуино можно будет изменить в скетче.
Настройка и запуск программы для работы с джойстиком:
// if(error == 1) //Цикл «loop» пропускается если джойстик не найден
// return;
Видео с демонстрацией управления машинкой при использовании беспроводного джойстика и данного кода.
Учимся управлять серводвигателями через джойстики при помощи Arduino
Процесс сборки самоделки:
Шаг первый. Подключаем серводвигатели
Процесс сборки самоделки начинается с подключения серводвигателей. Для того чтобы собрать предварительный макет, применяется монтажная плата. Потом можно будет сделать отдельный шилд. На рисунке можно увидеть, как именно все подключается.
1. На модуле джойстика можно найти выходы U/R+ и L/R+. Через эти выходы происходит подключение питания. Соответственно сюда нужно подать напряжение +5V от соответствующего пина на Arduino.
2. Еще на джойстике присутствует два разъема под названием L/R и два разъема U/D. Их нужно подключить к аналоговым выходам А3 и А4.
3. Ну и в заключении землю на джойстике нужно соединить с землей на Arduino.
После сборки подключение нужно перепроверить. Именно из-за ошибок подключения в большинстве случаев возникают проблемы. Особенно это касается случаев, когда используется монтажная плата и на ней находится много подключений.
Шаг третий. Скетч для Arduino
Код очень простой и в нем присутствуют подробные комментарии. Приведенный код нужно просто скопировать в Arduino IDE. После того как код будет загружен, двигатели не должны двигаться. Они должны начинать двигаться только при нажатии кнопки на джойстике.
Проблемы, которые могут возникнуть и способы их решения
1. Если двигатели не включаются, нужно перепроверить подключение. Для подключения двигателей используются выходы типа ШИМ, а для подключения джойстиков применяются аналоговые выходы.
2. Бывает такое, что сразу после загрузки кода двигатели начинают вибрировать. Такое бывает если неправильно подключить пины U/D+ L/R+. Подключение нужно тщательно проверить. Чтобы не сжечь плату во время проверки, ее нужно обязательно отключить от компьютера.
3. Если все перепроверено, но двигатели все равно не хотят работать, можно попробовать переподключить джойстик. Его нужно снять с монтажной платы, а затем установить назад с некоторым усилием. Коннекторы джойстика должны хорошо войти в макетку.
Если все вышло, теперь можно приступать к созданию каких-либо самоделок с управлением через джойстик. К примеру, можно сделать робота, которым можно будет управлять с помощью джойстика, и многое другое.
Как подключить джойстик к Arduino
Инструкция по подключению аналогового джойстика к Arduino
Для проекта нам понадобится:
1 Принцип действия аналогового джойстика
Джойстик – удобное и лёгкое в использовании устройство для передачи информации. Видов джойстиков по количеству степеней свободы, принципу считывания показаний и используемым технологиям существует большое количество. Джойстики чаще всего используются для управления движением каких-либо механизмов, управляемых моделей, роботов.
Аналоговый джойстик, который мы сегодня рассмотрим, представляет собой ручку, закреплённую на шаровом шарнире с двумя взаимно перпендикулярными осями. При наклоне ручки, ось вращает подвижный контакт потенциометра, благодаря чему изменяется напряжение на его выходе. Также аналоговый джойстик имеет тактовую кнопку, которая срабатывает при вертикальном надавливании на ручку.
Принципиальная схема аналогового джойстика
Здесь outX, outY – выходы для снятия показаний по осям X и Y; outSw – вывод тактовой кнопки. Vcc и GND – питание и земля, соответственно.
2 Схема подключения аналогового джойстика к Arduino
Подключим джойстик по приведённой схеме. Аналоговые выходы X и Y джойстика подключим к аналоговым входам A1 и A2 Arduino, выход кнопки SW – к цифровому входу 8. Питание джойстика осуществляется напряжением +5 В.
Схема подключения аналогового джойстика к Arduino
В результате должно получиться примерно так, как на фотографии.
Аналоговый джойстик, подключённый к Arduino
3 Считывание показаний с аналогового джойстика
Для того чтобы наглядно увидеть, как работает джойстик, напишем такой скетч.
Значения X и Y с аналогового джойстика,
выведенные в монитор последовательного порта
Объявим пины, зададим им режимы работы. Обратите внимание, в процедуре setup() мы подали на вход switchPin высокий уровень. Этим мы включили встроенный подтягивающий резистор на этом порту. Если его не включить, то, когда кнопка джойстика не нажата, 8-ой порт Arduino будет висеть в воздухе и ловить наводки. Это повлечёт за собой нежелательные хаотичные ложные срабатывания.
В процедуре loop() мы постоянно опрашиваем состояние кнопки и отображаем его с помощью светодиода на выходе 13. Из-за того, что вход switchPin подтянут к питанию, светодиод постоянно горит, а при нажатии кнопки гаснет, а не наоборот.
Обратите внимание, что показания по осям X и Y в нейтральном положении ручки джойстика могут быть разные, и не равняться ровно 512.
4 Управление яркостью и цветом светодиодас помощью аналогового джойстика и Arduino
Обычно джойстик используют для управления электродвигателями. Но почему бы не использовать его, например, для управления яркостью светодиода? Давайте подключим по приведённой схеме RGB светодиод (или три обычных светодиода) к цифровым портам 9, 10 и 11 Arduino, не забывая, конечно, о резисторах.
Подключение RGB светодиода и джойстика к Arduino
Будем менять яркость соответствующих цветов при изменении положения джойстика по осям, как показано на рисунке.
Из-за того, что джойстик может быть не точно отцентрирован производителем и иметь середину шкалы не на отметке 512, а варьироваться в диапазоне примерно от 490 до 525, то светодиод может слегка светиться даже когда джойстик находится в нейтральном положении. Если вы хотите, чтобы он был полностью выключен, то внесите в программу соответствующие поправки.
Диаграмма распределения яркости красного, синего и зелёного каналов светодиода в зависимости от положения ручки джойстика
Ориентируясь на приведённую диаграмму, напишем скетч управления Arduino яркостью RGB светодиода с помощью джойстика.
Сначала объявим соответствие пинов и две переменные – ledOn и prevSw – для работы с кнопкой. В процедуре setup() назначим пинам функции и подключим к пину кнопки подтягивающий резистор командой digitalWrite(swPin, HIGH).
В цикле loop() определяем нажатие кнопки джойстика. При нажатии на кнопку переключаем режимы работы между режимом «фонарика» и режимом «цветомузыки».
В режиме freeMode() управляем яркостью светодиодов с помощью наклона джойстика в разные стороны: чем сильнее наклон по оси, тем ярче светит соответствующий цвет. Причём преобразование значений берёт на себя функция map(значение, отНижнего, отВерхнего, кНижнему, кВерхнему).
Функция map() очень полезна и удобна в применении. Она переносит измеренные значения (отНижнего, отВерхнего) по осям джойстика в желаемый диапазон яркости (кНижнему, кВерхнему). Можно то же самое сделать обычными арифметическими действиями, но запись с помощью функции map() существенно короче.
В режиме discoMode() три цвета попеременно набирают яркость и гаснут. Чтобы можно было выйти из цикла при нажатии кнопки, каждую итерацию проверяем, не была ли нажата кнопка.
В результате получился фонарик из трёхцветного RGB светодиода, яркость свечения каждого цвета которого задаётся с помощью джойстика. А при нажатии на кнопку происходит включение режима «цветомузыка». Я сделал специальную печатную плату с Arduino Pro Mini и джойстиком, и у меня он используется в качестве ночника для ребёнка 🙂
Управление яркостью и цветом RGB светодиода с помощью аналогового джойстика, подключённого к Arduino
Таким образом, мы научились подключать к Arduino аналоговый двухосевой джойстик с кнопкой и считывать с него показания. Вы можете придумать и реализовать более интересное применение джойстику, чем наш пример.