Аркадная игра на Arduino и светодиодной ленте WS2811


Устали от своих старых аркадных игр, которые выглядят и работают одинаково? Хотите создать быструю веселую игру, которой вы сможете наслаждаться с друзьями и семьей, не задумываясь? Тогда вы находитесь в правильном месте. В этой статье мы рассмотрим как создать интерактивную аркадную игру на 2-х человек с использованием платы Arduino и светодиодной ленты WS2811.

Аркадная игра на Arduino и светодиодной ленте WS2811

Принцип работы нашего проекта игры можно посмотреть в следующем видео.

Также недавно на нашем сайте мы рассматривали создание игры Tetris на основе Arduino.

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

Распиновка светодиодной ленты WS2811

Распиновка светодиодной ленты WS2811

Светодиодная лента WS2811 получает питание через свои контакты Vcc и Gnd. Светодиодная лента состоит из одного разъема «папа» и разъема «мама», центральный контакт которого используется в качестве контакта для передачи данных.

Проектирование акрилового корпуса в SolidWorks

Итак, первое, что нам нужно было сделать, это создать файл dxf с помощью любого программного обеспечения для твердотельного моделирования. Мы выбрали SolidWorks, но вы можете выбрать любое программное обеспечение, которое вам нравится. Нам нужно было сделать дизайн таким, чтобы он был достаточно большим, чтобы вместить все 50 светодиодов и две кнопки. Также необходимо было иметь слот для кнопки переключения, чтобы мы могли включать и выключать игру, когда это необходимо. Итак, после нескольких часов проб и испытаний мы наконец пришли к дизайну нашей игры, показанном на следующем рисунке.

Элементы корпуса нашей игры

Скачать stl-файлы для изготовления этих элементов корпуса игры вы можете по следующей ссылке.

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

Схема аркадной игры на основе платы Arduino и светодиодной ленты WS2811 показана на следующем рисунке.

Схема аркадной игры на основе платы Arduino и светодиодной ленты WS2811

Открытые провода vcc и gnd светодиодной ленты WS2811 подключите к 5 В и земле платы Arduino. Средний контакт разъема "мама" - это контакт данных. Подключите его к цифровому выходу данных Arduino (в нашем случае это контакт № 5).

Подключите один контакт плоской кнопки к контакту 2 платы Arduino, а другой — к земле через перемычки. Таким образом нужно вывести провода из кнопки.

Способ вывода проводов из кнопки

Подключите одну клемму второй плоской кнопки к контакту 3 Arduino, а другую — к земле через перемычки.

Аналогичным образом вы можете подключить (+) зуммера к контакту 7 Arduino, а другой — к земле через перемычки.

И, наконец, вы можете подключить переключатель между контактом Vin платы Arduino и литий-ионным аккумулятором 7,4 В.

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

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

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

Затем зададим контакты, с помощью которых мы будем взаимодействовать со светодиодной лентой, зуммером, кнопками и светодиодом.

После этого создадим CRGB объект для управления светодиодной лентой. Он будет иметь длину NUM_LEDS (в нашем случае это 50).

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

В функции setup() мы инициализируем светодиодную ленту и зададим режимы работы используемых контактов (на ввод или вывод данных).

В функции loop() мы сначала будем считывать состояния кнопок подключенных к контактам BUTTON_PIN1 и BUTTON_PIN2 с помощью функции digitalRead() записывать их в переменные buttonState1 и buttonState2.

Следующий фрагмент кода проверяет, изменилось ли состояние buttonState1 (первой кнопки) с момента последней итерации. Если кнопка нажата (buttonState1 имеет значение true), значение LEDCount1 увеличивается и проверяется не превысило ли оно общее количество светодиодов. Также мы устанавливаем для isRedButtonPressed значение true и воспроизводим звуковой сигнал с помощью функции tone() с частотой, определяемой RED_BUTTON_FREQ.

Этот блок кода аналогичен предыдущему, но обрабатывает вторую кнопку (buttonState2), увеличивает значение параметра ledCount2 и проверяет, что оно не превышает общее количество светодиодов ленты, устанавливает для isGreenButtonPressed значение true и воспроизводит звуковой сигнал зуммера с частотой, определяемой GREEN_BUTTON_FREQ.

Следующая команда выключает все светодиоды в ленте.

Следующий цикл зажигает первые ledCount1 светодиодов ленты зеленым цветом.

Следующий цикл зажигает последние ledCount2 светодиодов ленты красным цветом, начиная с ее конца.

Следующий фрагмент кода проверяет, равно ли общее количество горящих светодиодов (ledCount1 + ledCount2) общему количеству светодиодов (NUM_LEDS) или превышает его. Если это так, он определяет горящих светодиодов какого цвета больше вызывает соответствующую функцию (greenChaserEffect(), redChaserEffect() или tieChaserEffect()) для отображения эффекта преследования на светодиодной ленте. После этого он сбрасывает значения LEDCount1 и LEDCount2 в ноль.

Следующая строка кода обновляет светодиодную ленту новыми цветами, установленными на предыдущих шагах.

Если была нажата красная или зеленая кнопка (isRedButtonPressed или isGreenButtonPressed имеет значение true), это вводит задержку для управления продолжительностью звука зуммера, останавливает звук зуммера с помощью noTone() и сбрасывает флаги нажатия кнопок.

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

Определение функции TieChaserEffect(), которая отображает эффект преследования, при котором красные и зеленые светодиоды движутся к центру светодиодной ленты.

Определение функции greenChaserEffect(), которая отображает эффект преследования, при котором зеленые светодиоды перемещаются от одного конца к другому концу светодиодной ленты.

Определение функции redChaserEffect(), которая отображает эффект преследования, при котором красные светодиоды перемещаются от одного конца к другому концу светодиодной ленты.

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

После сборки электронной части проекта вы должны упаковать ее в изготовленный корпус. У вас должна получиться конструкция следующего вида.

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

После этого вы можете приступить к тестированию работы проекта как показано на следующем видео.

Исходный код программы (скетча)

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

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

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