Игровая консоль с игрой лабиринт

Демонстрация проекта за минуту
Процесс тестирования игры и консоли

История проекта

Идея создания простой консольной игры возникла сама по себе достаточно давно и примерно около года (или двух) лежала в столе, пока на первом курсе не появилась дисциплина “Учебная практика” и очень заманчивая идея совместить приятное с полезным не пришла в голову.

Первым этапом стала разработка консольного приложения той же игры: Лабиринт-0. Разработка производилась в VS 2019. Поскольку первым изучаемым языком в вузе стал Си, было решено писать на нём: дабы получить новые знания и закрепить имеющиеся.

Запуск Лабиринта-0

Второй этап начался почти сразу, как стало понятно, что шанс на успех есть: стартовал процесс создания модели для корпуса и его печати. Первоначально модель корпуса создавалась в AutoCAD, но вскоре было принято волевое решение перейти на OpenSCAD, что значительно облегчило процесс. Чинили принтер два раза: сперва растянулся ремень и размер по одной из осей стал больше, потом сломался мотор.

Попытки напечатать корпус консоли
Масштаб проблем

Третий этап: перевод консольного приложения на автономную консоль, то есть на вот этот черный ящик зелёного цвета (устройство является прототипом другого устройства и досталось мне уже в готовом состоянии).

Консоль в сборе

Сборка ПО для консоли производилась в Arduino IDE. Да, конечно, были использованы сторонние библиотеки:

  • для вывода изображения TFT_eSPI версии 2.3.59,
  • для чтения состояния клавиатуры через MCP23017,
  • для чтения содержимого SD карты.

Так как консоль отличается особенностями, то потребовалось внести некоторые изменения в имеющийся исходный код:

  • замена вывода символов в консоль на вывод спрайтов;
  • чтение клавиатуры: эмуляция kbhit и getch;
  • загрузка файлов: эмуляция feof, fgetc и fscanf_s.

Четвертый этап: небольшие плюшечки для приятной игры: заставка, инструкция.

Заставка игры
Инструкция игры

Описание проекта

Аппаратная часть

  1. Процессорный модуль – DOIT ESP32 DEVKIT V1

2. Экран – модуль MSP3520 включающий в себя дисплей разрешением 480*320 пикселей на чипе ILI9488, резистивный тачскрин на чипе XPT2046 и слот для полноразмерной SD карты.

3. Клавиатура – 12 кнопок Omron/B3F4050 через расширитель шины I2C на чипе MCP23017.

4. Вибромотор – MTR-VIBRATING подключен к порту ввода/вывода общего назначения.

Кратко, то схема соединений выглядит так:

общая шина SPI
#define ESP32_SCLK 18
#define ESP32_MISO 19
#define ESP32_MOSI 23
общая шина I2C
#define ESP32_SDA 21
#define ESP32_SCL 22 
линии управления экраном
#define TFT_DC 14
#define TFT_CS 13 
линии управления тачскрином
#define TOUCH_CS 15
#define TOUCH_IRQ 39 
линия управления SD картой
#define SDC_CS 5 
линия управления вибромотором
#define VIBRO_PIN 4 
линии управления модулем вывода звука
#define VS1053_PIN_CS 16
#define VS1053_PIN_DCS 17
#define VS1053_PIN_DREQ 36 
клавиатура
#define KBD_MCP23017_ADDR 0x20
#define KBD_MCP23017_INT_PIN 34 
часы реального времени
#define DS3231_ADDRESS 0x68 
гироскоп/акселерометр
#define MPU6050_ADDRESS 0x69 
магнитометр
#define HMC5883L_ADDRESS 0x1E

В консоли присутствуют, но не используются:

  • модуль “mp3 декодера” vs1053,
  • модуль часов реального времени ds3231,
  • модуль гироскопа/акселерометра mpu-6050 ,
  • модуль компаса hmc5883l.

Корпус

Модель создана в редакторе OpenSCAD. Напечатана на принтере Anet A8. Пластик сначала PLA, финальная версия – PETG. Внешний размер примерно 200x110x25 мм.

Модель содержимого. Синим цветом показаны будущие отверстия в корпусе.

Верхняя часть корпуса

Нижняя часть корпуса

Ссылки

Команда проекта

Студентка первого курса СПбГУАП Михайлова Василиса (Связаться в Telegram)

Previous Article
Next Article