Игровой контроллер на Arduino Uno R4


Стрессовый день? Дедлайны, шум, излишние размышления, бесконечная прокрутка ленты… иногда лучшее, что можно сделать, это поставить всё на паузу и поиграть. Игры всегда были чем-то большим, чем просто развлечение; они освежают ум, переключают внимание и незаметно меняют настроение. Когда мы играем, стресс не просто уменьшается… он взрывается. И давайте будем честны, игры — это уже не только для детей. Даже сегодня взрослые улыбаются, когда кто-то упоминает Duck Hunt, Mario, Contra, Mortal Kombat, NFS или легендарную GTA Vice City. Это были золотые дни, когда мы сидели близко к экрану, держа в руках чёрный или белый джойстик, нажимали кнопки, двигали джойстик вверх, вниз, влево, вправо… чистая радость, полное отсутствие напряжения.

Игровой контроллер на Arduino Uno R4

Теперь давайте на мгновение задумаемся о джойстике. Простой, физический, прямой, без сенсорных экранов, без жестов, только ваши руки и игра. А что, если мы создадим свой собственный игровой контроллер , вдохновленный теми классическими временами, но работающий на современном оборудовании? С этого и начинается этот проект. В этом проекте мы рассмотрим, как сделать игровой контроллер с помощью Arduino Uno R4. Так что, если вы когда-либо скучали по тем временам с джойстиками или ищете расслабляющий, увлекательный проект, сочетающий ностальгию и творчество, вы попали по адресу. Давайте избавимся от стресса, вернем радость и создадим игровой контроллер с нуля.

Если вы еще не работали с платой Arduino Uno R4 WiFi, то на нашем сайте есть статья про основы работы с данной платой.

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

  1. Плата Arduino Uno R4 WiFi (купить на AliExpress).
  2. Модуль джойстика (купить на AliExpress).
  3. Кнопки - 4 шт.
  4. Монтажная плата (Vero board).

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Назначение компонентов

∗ Arduino Uno R4: это будет отличный выбор, поскольку эта плата имеет встроенную поддержку USB HID через библиотеку Arduino Game Controller (Keyboard.h), что позволяет создать такой тип игрового контроллера Arduino, который компьютер будет автоматически распознавать при подключении к компьютеру через USB.

∗ Аналоговый джойстик: он обеспечит точное и плавное управление направлением, а также ввод данных по двум осям (X и Y), которые затем могут быть преобразованы в команды клавиш со стрелками с помощью кода игрового контроллера Arduino.

∗ Тактильные кнопки: они обеспечат надежную физическую обратную связь для игр, а поскольку в Arduino встроен подтягивающий резистор, вам не нужно беспокоиться о его добавлении самостоятельно.

∗ Вероплата: использование её для создания самодельного игрового контроллера на базе Arduino обеспечит более долговечный и профессионально выглядящий результат по сравнению с прототипированием на макетной плате.

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

Приведенная ниже принципиальная схема наглядно демонстрирует, как соединены все компоненты в системе игрового контроллера Arduino Uno. В этой системе плата Arduino Uno R4 используется в качестве основного контроллера, кнопки которого подключены к цифровым выводам контроллера, а модуль джойстика — к аналоговым выводам Arduino Uno.

Схема игрового контроллера на Arduino Uno R4

Конфигурация контактов игрового контроллера на Arduino

Компонент Контакты Arduino Функция
Ось X джойстика A0 (аналоговый) Считывает горизонтальное перемещение (клавиши со стрелками влево/вправо).
Ось Y джойстика A1 (аналоговый) Считывает вертикальное перемещение (клавиши со стрелками вверх/вниз).
Кнопка 1 Цифровой контакт 2 Сопоставлено с клавишей 'W' (с помощью INPUT_PULLUP)
Кнопка 2 Цифровой контакт 3 Сопоставляется с клавишей 'A' (с помощью INPUT_PULLUP)
Кнопка 3 Цифровой контакт 4 Сопоставлено с клавишей 'S' (с помощью INPUT_PULLUP)
Кнопка 4 Цифровой контакт 5 Сопоставлено с клавишей 'D' (с помощью INPUT_PULLUP)
Джойстик VCC 5 В Источник питания для модуля джойстика
Земля джойстика GND Общий провод (земля)

Пошаговая инструкция по самостоятельному подключению игрового контроллера на базе Arduino

* Подключите модуль джойстика к Arduino следующим образом: Подключите VCC модуля джойстика к контакту 5V на Arduino; Подключите GND модуля джойстика к контакту Ground (GND) на Arduino; Подключите VRx (ось X) модуля джойстика к аналоговому контакту 0 (A0) Arduino; Подключите VRy (ось Y) модуля джойстика к аналоговому контакту 1 (A1) Arduino. После выполнения подключений вы сможете отправлять команды игровому контроллеру для считывания аналоговых значений положения по осям X и Y модуля джойстика.

* Подключение кнопочных переключателей: Подключите первый вывод каждого переключателя к цифровым контактам 2, 3, 4 и 5 соответственно. Подключите остальные выводы всех переключателей обратно к земле (GND) на Arduino. При использовании кода библиотеки Arduino Game Controller на всех кнопках будут включены внутренние подтягивающие резисторы, поэтому внешние подтягивающие резисторы не понадобятся!

* Включите Arduino: Подключите Arduino к компьютеру с помощью USB-кабеля. Это обеспечит питание и передачу данных для корректной работы игрового контроллера.

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

Внешний вид собранной конструкции игрового контроллера показан на следующем рисунке.

Внешний вид собранной конструкции игрового контроллера

Для создания игрового контроллера на базе Arduino необходимо понимать принципы работы USB HID (Human Interface Device). При подключении Arduino Uno R4 к компьютеру через USB-кабель, он отображается как стандартная клавиатура благодаря библиотеке игрового контроллера Arduino (Keyboard.h). Это означает, что плата может отправлять нажатия и отпускания клавиш непосредственно на ваш компьютер, и для этого не требуется установка каких-либо драйверов или приложений.

Процесс инициализации USB HID

После подключения Arduino Uno R4 к компьютеру с помощью USB-кабеля, плата распознается как стандартная клавиатура. Это позволяет ей отправлять команды нажатия и отпускания клавиш непосредственно в систему. После первоначального обнаружения USB-устройства Arduino постоянно отслеживает работу модуля джойстика и кнопок для захвата пользовательского ввода в реальном времени. 

Обработка ввода с джойстика

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

Внешний вид игрового контроллера на Arduino Uno

Обработка ввода с помощью кнопок

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

Цикл ввода в реальном времени

Благодаря непрерывному процессу считывания входных данных и отправки сигналов с клавиатуры, Arduino Uno R4 преобразует движения физического джойстика и нажатия кнопок в цифровые команды. Это позволяет самодельному игровому контроллеру на базе Arduino вести себя как настоящий игровой контроллер, обеспечивая интерактивный и увлекательный игровой процесс, а также демонстрируя практическую связь между человеком и устройством. 

Демонстрация работы игрового контроллера

Почему этот подход работает в игровой индустрии

Универсальный игровой контроллер Arduino не использует стандартный интерфейс игрового контроллера (геймпад/джойстик HID) в качестве устройства ввода; вместо этого он использует интерфейс клавиатуры, что обеспечивает его универсальную совместимость, поскольку около 99% компьютерных игр поддерживают клавиатуру в качестве устройства ввода; поэтому вы можете использовать этот самодельный игровой контроллер Arduino с тысячами компьютерных игр без специальной настройки. Однако недостатком этой реализации является то, что цифровые входы не поддерживают аналоговые входы триггеров (создавая разницу между нажатием и удержанием триггера), но поскольку многие жанры, которые будут использовать это устройство, — это платформеры, файтинги и ретро-аркадные игры, цифровые кнопки соответствуют типу используемого контроллера.

Плата Arduino Uno R4 будет непрерывно обрабатывать входные сигналы, считывая их и отправляя сигналы с клавиатуры. В результате игровой контроллер Arduino будет преобразовывать аналоговые движения и нажатия кнопок физического джойстика в цифровые команды, благодаря чему самодельный игровой контроллер Arduino будет выполнять те же функции, что и настоящее игровое устройство ввода, обеспечивая приятный и интерактивный игровой процесс, а также демонстрируя пример использования Arduino в качестве устройства человеко-машинного интерфейса.

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

Ссылка на скачивание полного кода программы приведена в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Этот код позволяет Arduino Uno R4 функционировать как простой USB-игровой контроллер, используя модуль джойстика и кнопки. Эмулируя клавиатуру, этот самодельный игровой контроллер Arduino обеспечивает беспрепятственное взаимодействие с компьютерными играми с помощью базовых аппаратных компонентов. Джойстик управляет направлением движения с помощью клавиш со стрелками на клавиатуре, а кнопки запускают предопределенные команды клавиатуры.

Настройка библиотеки игрового контроллера Arduino и определение контактов

Библиотека Keyboard.h позволяет Arduino Uno R4 работать как USB-клавиатура. Оси X и Y джойстика подключены к аналоговым выводам A0 и A1, а четыре кнопки подключены к цифровым выводам 2–5 и используются в качестве входов для управления игрой.

Пороговые значения и сопоставление ключей

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

Функция настройки: инициализация игрового контроллера Arduino

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

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

Руководство по устранению неполадок игрового контроллера

Проблема 1: Плата Arduino не распознается как клавиатура.

Убедитесь, что в среде разработки Arduino IDE выбрана правильная плата (Arduino Uno R4) и что функция Keyboard.begin() используется корректно. Задержка при перечислении USB значительна, поэтому не удаляйте её до инициализации клавиатуры. Также попробуйте переподключить USB-кабель или использовать другой USB-порт.

Проблема 2: Движение джойстика обнаруживается даже в неактивном состоянии.

Это происходит из-за небольших колебаний аналоговых показаний. Отрегулируйте значения пороговых значений мертвой зоны (LOW_TH и HIGH_TH) в зависимости от положения джойстика в состоянии покоя. Увеличение мертвой зоны предотвратит нежелательные движения.

Проблема 3: Кнопки запускают действия без нажатия.

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

Проблема 4: Клавиши остаются нажатыми после отпускания джойстика или кнопки.

Это обычно происходит, когда соответствующая функция Keyboard.release() не выполняется. Убедитесь, что для каждого вызова Keyboard.press() в коде задано соответствующее условие отпускания клавиши. Добавление небольшой задержки также помогает стабилизировать поведение нажатия клавиш.

Проблема 5: Игра не реагирует на ввод с контроллера.

В некоторых играх требуется настройка раскладки клавиатуры. Откройте настройки управления игры и назначьте перемещение и действия стрелкам и выбранным кнопкам (W, A, S, D). Также убедитесь, что игра поддерживает управление с клавиатуры.

Заключение

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

Основные выводы из этого проекта игрового контроллера на базе Arduino

Arduino Uno R4 отлично подходит для создания устройств ввода с использованием библиотеки игровых контроллеров Arduino.
» Обработка в реальном времени: непрерывный опрос в функции loop() обеспечивает время отклика в реальном времени для игровых приложений.
» Реализация мертвой зоны: установка пороговых значений предотвращает возможные ложные срабатывания и дрейф джойстика при создании игрового контроллера Arduino.
» Универсальная совместимость: эмуляция клавиатуры работает в десятках тысяч игр без необходимости специальных драйверов или настройки.
» Расширяемость: код игрового контроллера Arduino может содержать дополнительные функции, такие как светодиодная индикация, несколько режимов управления и/или беспроводные возможности, разработанные по мере необходимости.

Часто задаваемые вопросы

⇥ Можно ли использовать этот контроллер с любыми компьютерными играми?
Можно использовать большинство компьютерных игр, поддерживающих управление с клавиатуры. Джойстик и кнопки работают, отправляя ввод с клавиш клавиатуры, поэтому игры с настраиваемыми параметрами управления идеально подходят. Лучше всего подойдут игры, требующие только ввода с клавиатуры.

⇥ Зачем добавляется задержка перед запуском функции клавиатуры?
Задержка позволяет компьютеру правильно распознать клавиатуру как USB-устройство ввода. Без этой задержки интерфейс клавиатуры может некорректно инициализироваться. Это обеспечивает стабильную и надежную связь с системой.

⇥ Каково назначение мертвой зоны джойстика?
Мертвая зона предотвращает нежелательные движения, когда джойстик находится в нейтральном положении. Небольшие колебания аналоговых показаний могут вызывать ложные срабатывания. Установка мертвой зоны помогает поддерживать плавное и точное управление.

⇥ Можно ли изменить функции кнопок?
Да, функции кнопок можно легко изменить в коде. Различные клавиши клавиатуры могут быть назначены в зависимости от предпочтений пользователя или требований игры. Это делает настройку управления гибкой и настраиваемой.

⇥ Какие типы плат Arduino могут использовать библиотеку Arduino Game Controller (Keyboard.h)? 
Если вы используете плату Arduino с поддержкой USB, то ваша библиотека Arduino Game Controller может использовать (под этим подразумевается работа со всеми теми же клавишами, что и) платы Arduino Uno R4S (WiFi и Minima), Arduino Leonardo, Arduino Micro, Arduino Due без дополнительного оборудования. В противном случае, Arduino Uno R3 не будет работать с библиотекой Keyboard.h до тех пор, пока не будут внесены соответствующие аппаратные изменения .

⇥ В чем разница между написанием эмулятора клавиатуры при использовании Game Controller Users и эмуляторами? 
Использование «эмуляции клавиатуры» с Arduino Game Controller (с помощью библиотеки Keyboard.h) обеспечивает больший выбор игр, чем попытка запустить игры на Game Pad HID, поскольку эмуляторы клавиатуры имеют только положения «включено» и «выключено» без аналогового движения.

⇥ Почему моим игровым контроллерам Arduino требуется три секунды, прежде чем они начнут работать? 
Трехсекундная задержка между процедурой запуска игрового контроллера Arduino и тем моментом, когда ваш компьютер сможет обнаружить/идентифицировать игровой контроллер Arduino через USB, необходима в рамках процесса инициализации USB и не может быть устранена.

Репозиторий проекта на GitHub

Полный код игрового контроллера Arduino, схемы подключения и дополнительные ресурсы для этого проекта доступны в репозитории на GitHub. Репозиторий включает в себя полную реализацию библиотеки игрового контроллера Arduino, схемы подключения и документацию по устранению неполадок, которые помогут вам успешно собрать собственный игровой контроллер Arduino.

Схема и код проекта распознавания голоса на ESP32

Полный код проекта

Видео, демонстрирующее работу проекта

Ссыка на видео на youtube

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

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

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