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

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

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


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

Сборка ПО для консоли производилась в Arduino IDE. Да, конечно, были использованы сторонние библиотеки:
- для вывода изображения TFT_eSPI версии 2.3.59,
- для чтения состояния клавиатуры через MCP23017,
- для чтения содержимого SD карты.
Так как консоль отличается особенностями, то потребовалось внести некоторые изменения в имеющийся исходный код:
- замена вывода символов в консоль на вывод спрайтов;
- чтение клавиатуры: эмуляция kbhit и getch;
- загрузка файлов: эмуляция feof, fgetc и fscanf_s.
Четвертый этап: небольшие плюшечки для приятной игры: заставка, инструкция.


Описание проекта
Аппаратная часть
- Процессорный модуль – 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 мм.
Модель содержимого. Синим цветом показаны будущие отверстия в корпусе.

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

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

Ссылки
- Вывод изображения TFT_eSPI версии 2.3.59
https://github.com/Bodmer/TFT_eSPI - Чтение состояния клавиатуры через MCP23017
https://www.gammon.com.au/forum/?id=10945 - Чтение содержимого SD карты
https://github.com/arduino-libraries/SD - Экран – модуль MSP3520
http://www.lcdwiki.com/3.5inch_SPI_Module_ILI9488_SKU:MSP3520 - Модуль “mp3 декодера”
http://www.vlsi.fi/en/products/vs1053.html - Модуль часов реального времени ds3231
https://datasheets.maximintegrated.com/en/ds/DS3231.pdf - Модуль гироскопа/акселерометра
mpu-6050 https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6050/ - Модуль компаса hmc5883l https://www.digikey.com/en/datasheets/honeywellmicroelectronicsprecisionsensors/honeywell-microelectronics-precision-sensors-hmc5883l
- Редактор OpenSCAD
https://www.openscad.org/
Команда проекта
Студентка первого курса СПбГУАП Михайлова Василиса (Связаться в Telegram)