Игровой контроллер для Arduino 2


Добрый день, сегодня хотелось бы поговорить об игровом контроллере для Arduino или просто джойстике.

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

Игровой контроллер

Поговорим о том, что может данный модуль.

Он способен осуществлять управление по двум осям, а также имеет тактовую кнопку. Питаться данный модуль может как от 5В так и от 3,3В. Т.к. у нас он будет использоваться в связке с Arduino, то будем питать его 5В.

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

Нам потребуется:

Arduino (в моем случае Nano), два сервопривода, игровой контроллер и соединительные провода.

Соберем нашу схему.

  • Выходы VRX и VRY игрового контроллера подключаем к аналоговым ногам А0 и А1 arduino. Выход SW – к цифровой ноге D2. Подключаем питание к модулю.
  • Сервоприводы подключаем к внешнему питанию (ардуино может не потянуть), а сигнальные провода подключаем к ногам D9 и D10.
  • Светодиод подключать не будем, т.к. он уже распаян на самой ардуино и подключен к 13 пину.

Подключение игрового контроллера и сервоприводов к arduino nano

В коде мы будем использовать встроенный в ардуино подтягивающий резистор, если по каким-то причинам это сделать не получается, то на самом модуле есть контактные площадки для его установки (см. фото).

Место куда впаивать подтягивающий резистор для тактовой кнопки.

Перейдем к программной части.

Немного теории как все это работает: На игровом контроллере по стоит два переменных резистора, каждый из которых по является делителем напряжения, когда джойстик установлен в центральное положение на выходе имеем приблизительно 2,5 вольта (при питании 5 вольт). Если отклонять джостик в крайнее положение – напряжение будет меняться от 2,5В до 5В или от 2,5В до 0В (это зависит от того в какую сторону двигать джойстик).

Ардуина в цикле опрашивает аналоговый вход и получает значения в диапазоне от 0 до 1024 (0В-5В), затем при помощи функции «map» сопоставляет или другими словами преобразовывает эти значения в угол поворота с диапазоном 0-180 и отправляет значение угла в сервопривод.

Тоже самое для второй оси модуля.

Обработка нажатия кнопки: в цикле наблюдаем за состоянием пина, когда уровень станет LOW – зажиаем светодиод подав высокий уровень на 13 ногу, как только кнопку отпустят, уровень вернется в состояние HIGH и ардуина потушит светодиод командой «digitalWrite(ledPin, LOW);»

Для работы с сервоприводами будем использовать стандартную библиотеку Servo.h.

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

 

Что получилось? Можно посмотреть на видео:


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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

2 мыслей про “Игровой контроллер для Arduino

  • David

    Я за 2 гoдa pаботы в kрyпнoй koмпании cтoльko нe зaрабoтала скoльko здесb. Aвтop спaсибo тебе болbшое. Именно ceйчас я точно пеpecтaну маятbcя eрундой с этими тaблетками)))) A тo и нa дeтей врeмени не хвaтaлo c таkой пoдработkoй. Teпeрb пoдaркoв смoгу вcем kупить и покaзaтb чтo финaнсы в интeрнете можно полyчaть!

  • Иван

    Здравствуйте. Для включения поттягивающего резистора можно использовать константу INPUT_PULLUP.