Оглавление:

Консоль Arduino VGA с пятью играми: 4 шага
Консоль Arduino VGA с пятью играми: 4 шага

Видео: Консоль Arduino VGA с пятью играми: 4 шага

Видео: Консоль Arduino VGA с пятью играми: 4 шага
Видео: Raspberry Pi 4: запускаем видео 4K, играем в игры и боремся с перегревом. Обзоры Амперки 2024, Ноябрь
Anonim
Image
Image
Консоль Arduino VGA с пятью играми
Консоль Arduino VGA с пятью играми
Консоль Arduino VGA с пятью играми
Консоль Arduino VGA с пятью играми

В моих предыдущих инструкциях я воспроизвел упрощенные версии некоторых из самых популярных классических аркадных игр с помощью простой Arduino и нескольких других компонентов. Позже я соединил пять из них в один эскиз. Здесь я покажу, как вы можете создать простую консоль, на которой можно играть в Pong, Breakout, Bomber, Tetris и игрушку для рисования, вдохновленную Etch-a-Sketch. На этой консоли можно также играть в Snake и еще две игры, написанные другими авторами: Bit Ninja от Сандро Маффиодо, также известного как «Smaffer» и Stacker от Никиты Курылева.

Основная функция - это генерация сигнала VGA благодаря библиотеке VGAx, поэтому для консоли необходим монитор VGA. Моя цель, как обычно, состоит в том, чтобы избежать использования каких-либо "специальных компонентов" для его создания, тогда вам не нужны никакие вспомогательные ИС или щиты! Единственные компоненты - это два потенциометра, пять кнопок, несколько резисторов и разъем DSUB15 (VGA). Пьезо-динамик не является обязательным. Вы можете увидеть, как выглядят эти игры, на картинках на этой странице.

Библиотека VGAx позволяет использовать четыре цвета с разрешением 120 x 60 пикселей, немного, но достаточно для этой ретро-игровой консоли. Графика сырая, но благодаря использованию потенциометров игры проходят гладко. Также доступны простые звуковые эффекты.

Шаг 1. Как создать собственную консоль Arduino VGA

Как создать собственную консоль Arduino VGA
Как создать собственную консоль Arduino VGA
Как создать собственную консоль Arduino VGA
Как создать собственную консоль Arduino VGA

Сначала загрузите коды ArduinoVGAgame.ino и / или Snake.ino внизу этой страницы и скопируйте их на свой компьютер в каталог с тем же именем. Загрузите библиотеку VGAx по этой ссылке на GitHub. Самый простой способ - скопировать его в подпапку программного обеспечения Arduino под названием «библиотеки», чтобы он был немедленно распознан.

ВАЖНО: эта библиотека работает для Arduno IDE 1.6.4, но не полностью совместима с более ранними или новыми версиями.

Загрузите код на свою плату Arduino (я тестировал как Uno, так и Nano). Предупреждение о нехватке доступной памяти - это нормально. Если у вас нет других ошибок, все в порядке, и вы можете сразу приступить к созданию собственной консоли.

Для этого вам понадобятся:

  • Arduino Uno Rev.3 или Arduino Nano 3.x (ATmega328)
  • разъем DSUB15, т. е. гнездовой разъем VGA или кабель VGA, который необходимо обрезать.
  • резисторы: 2 x 68 Ом и 2 x 470 Ом и 5 x 1-2 кОм
  • два линейных потенциометра 10 кОм (тоже подойдут аналогичные значения)
  • пять кнопок
  • какой-то кусок кабеля
  • один-два хороших ящика для размещения всех компонентов.

Факультативно:

  • макетная или стрип-доска
  • пьезо-динамик

Схема представлена в верхней части этого шага вместе с примером готовой «консоли».

на схеме показано, как соединить кнопку и потенциометр. В частности, вам нужно подключить пять кнопок к контактам 5, 10, 11, 12 и 13 соответственно. Действие, выполняемое каждой кнопкой, описано в верхней правой таблице схемы. Слева показано, как подключить потенциометр (вам понадобится два потенциометра к контактам A1 и A2). Динамик должен быть подключен к аналоговому выводу A0.

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

Если вам понравилась эта игрушка и вы решили воспроизвести ее, я буду признателен, если вы напишете комментарий или отправите изображение в разделе комментариев ниже.

Шаг 2. Игры от других авторов

Сандро Маффиодо недавно выпустил игру BitNinja. Вы можете найти больше информации здесь и скачать код здесь.

Чтобы использовать мою консоль, вам просто нужно переназначить кнопку в его коде следующим образом:

#define BTN_UP 11 (вместо 13)

#define BTN_LEFT 10 (вместо 12)

#define BTN_RIGHT 12 (вместо 11)

Укладчик от Никиты Курылёва доступен здесь. Больше информации здесь.

Опять же, вам нужно переназначить одну кнопку в другой части кода: просто замените digitalRead (2) на digitalRead (13).

Шаг 3: Приложение 1: Подробнее о том, как собрать контроллеры

Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры
Приложение 1: Подробнее о том, как собрать контроллеры

Вы можете реализовать контроллер по-разному, в зависимости от имеющегося материала и вашего вкуса.

Мне нравится воплощать их в деревянных коробках (см. Картинки на этой странице). Основной блок для Arduino, разъем VGA, кнопки и потенциометр первого плеера; второй (меньший) только для кнопки и колеса второго игрока (необходим для Pong и игрушки для рисования). Другой вариант - поместить все в одну большую коробку.

Сначала я рекомендую подключить порт VGA. На первом и втором изображениях вы можете увидеть некоторые детали: обратите внимание на два резистора 470 Ом для красного и зеленого, подключенные к контактам 6 и 7 соответственно, и два резистора 68 Ом на контакты 3 и 9 для сигнала горизонтальной и вертикальной синхронизации.

Вы можете выбрать различные цветовые комбинации в зависимости от того, какие контакты вы подключаете к разъему VGA DSUB15, контакты 1, 2 и 3 представляют красный, зеленый, синий (RGB) соответственно. Я соединил контакты 1 и 2, поэтому у меня получилась следующая цветовая комбинация: (0, 0) = черный; (1, 0) = красный; (0, 1) = зеленый; (1, 1) = желтый.

Для всех возможных вариантов я предлагаю прочитать подробности на странице, где вы загружаете библиотеки VGAx.

Как только разъем VGA будет готов, вы можете подготовить все остальные кабели для кнопок, колес и динамика (см. Рисунок 2).

Теперь просто соберите все вместе: помните, что каждый вывод кнопки должен быть подключен к земле через резистор 1 или 2 кОм, в противном случае, когда кнопка открыта, состояние вывода может быть неопределенным. Это означает, что если контакт остается отключенным, на нем может быть случайное (статическое) напряжение, которое может его активировать. См. Дополнительные подробности схемы во втором шаге данного руководства.

Последний шаг - исправить все на месте. Я использовал горячий клей-пистолет, но вы можете использовать свой предпочтительный метод.

Шаг 4: Приложение 2: Некоторые соображения по поводу ограничений памяти

Удивительно, что простой Arduino может генерировать сигнал VGA и все эти игры вместе. Настоящее узкое место - это отсутствие SRAM. Микроконтроллер AVR имеет только 2048 байтов, доступных для хранения и управления переменными, а библиотека VGAx хранит экранные переменные в фреймбуфере 120x60 пикселей, где для каждого пикселя требуется 2 бита (4 цвета), всего 1800 байтов. Это означает, что для переменных скетча осталось всего 248 байтов. Кроме того, по моему опыту, следует оставить не менее 100 байт свободными, чтобы избежать нестабильности. Используя более 1950 байт динамической памяти, микроконтроллер начинает показывать странное и непредсказуемое поведение.

Это означает, что все переменные должны использоваться разными играми, что делает код нечитаемым и трудным для отладки. Дело не только в том, чтобы «добавить новую игру» к предыдущему скетчу, но и весь код должен быть глубоко модифицирован и оптимизирован.

Кроме того, мне пришлось использовать минимально возможный формат переменной: например, для всех координат мне приходилось использовать «byte» вместо «int» или, в других случаях, мне приходилось предпочитать «int» вместо «float».

Наконец, я выражаю признательность Сандро Маффиодо, также известному как Смаффер, создателю библиотеки VGAx и потрясающей игры BitNinja. Без этой библиотеки этот проект не мог бы быть реализован.

Спасибо также Никите Курылеву за простую, но забавную игру Stacker.

Рекомендуемые: