Как собрать игровую консоль на Arduino Nano и матрице 5×5. Схема, код, компоненты. Идеи для "Змейки", "Пинпонга" и других игр.
Игровая консоль на светодиодах: Arduino Nano + MAX7219 8×8
Мини-консоль на Arduino Nano и матрице MAX7219 — хороший проект для первого знакомства с кнопками, светодиодной графикой и игровой логикой. Здесь нет большого экрана и сложной 3D-графики, зато есть понятная схема: микроконтроллер читает кнопки, считает положение точки и зажигает нужные пиксели на матрице 8×8.
Кнопки поиска ведут на обычный поиск. Это не рекламные и не партнёрские ссылки: они помогают быстро сравнить комплектующие, цены, отзывы и наличие.
Содержание

С чего начать
Проект лучше собирать поэтапно. Сначала нужно оживить матрицу, затем проверить кнопки, после этого загрузить простую игру с одной точкой. Такой порядок экономит время: если что-то не работает, сразу понятно, где искать ошибку.
Arduino Nano, MAX7219 8×8, USB-кабель и несколько проводов Dupont. Этого хватит, чтобы вывести первые пиксели.
Шесть тактовых кнопок дают крестовину и две кнопки действия. При INPUT_PULLUP схема получается простой: кнопка замыкает пин на GND.
Когда схема заработает на макетке, можно добавить питание от 18650, тумблер, зуммер и корпус.
Как работает светодиодная консоль
Матрица 8×8 работает как маленький экран из 64 пикселей. Для простых игр удобно использовать окно 5×5: оно оставляет запас по краям и упрощает расчёт координат. При этом Arduino Nano постоянно повторяет один цикл: читает кнопки, меняет координаты объекта, обновляет матрицу.
| Узел | Что делает | Почему это удобно |
|---|---|---|
| Arduino Nano | Хранит код игры, читает кнопки и отдаёт команды матрице. | Плата маленькая, дешёвая и хорошо подходит для макетки. |
| MAX7219 8×8 | Зажигает светодиоды по команде микроконтроллера. | Для управления хватает трёх сигнальных проводов. |
| Кнопки | Задают движение и действия игрока. | INPUT_PULLUP позволяет обойтись без внешних резисторов. |
Что понадобится для сборки
| Компонент | Количество | Зачем нужен |
|---|---|---|
| Arduino Nano | 1 шт. | Основной контроллер. Подойдёт версия на ATmega328P с CH340. |
| MAX7219 8×8 FC-16 | 1 шт. | Светодиодная матрица, на которой отображается игровое поле. |
| Тактовые кнопки | 6 шт. | Вверх, вниз, влево, вправо, A и B. |
| Макетная плата | 1 шт. | Быстрая сборка без пайки. |
| Провода Dupont | 10-15 шт. | Соединение Nano, матрицы и кнопок. |
| USB-кабель | 1 шт. | Питание и прошивка платы. |
Подключение компонентов
Матрица MAX7219 подключается к Arduino Nano по трём управляющим линиям. Кнопки проще подключить одним контактом к цифровому пину, а вторым к GND. В коде включается INPUT_PULLUP, поэтому отдельные подтягивающие резисторы для базовой сборки не нужны.
| Компонент | Пин Arduino Nano | Примечание |
|---|---|---|
| MAX7219 DIN | D11 | Данные |
| MAX7219 CLK | D13 | Тактирование |
| MAX7219 CS | D10 | Выбор чипа |
| Кнопка влево | D2 | Второй вывод кнопки — GND |
| Кнопка вправо | D3 | Второй вывод кнопки — GND |
| Кнопка вверх | D4 | Второй вывод кнопки — GND |
| Кнопка вниз | D5 | Второй вывод кнопки — GND |
| Кнопка A | D6 | Второй вывод кнопки — GND |
| Кнопка B | D7 | Второй вывод кнопки — GND |
Пример кода: «Световой след»
Ниже базовый скетч: точка двигается по окну 5×5 с помощью четырёх кнопок. На его основе уже можно делать «Змейку», простую аркаду с препятствиями или мини-лабиринт.
#include <MD_MAX72xx.h>
#include <SPI.h>
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_MAX72XX mx = MD_MAX72XX(MD_MAX72XX::FC16_HW, CS_PIN, CLK_PIN, DATA_PIN, 1);
#define BTN_LEFT 2
#define BTN_RIGHT 3
#define BTN_UP 4
#define BTN_DOWN 5
#define BTN_A 6
#define BTN_B 7
byte x = 2, y = 2;
void setup() {
mx.begin();
mx.control(MD_MAX72XX::INTENSITY, 2);
mx.clear();
pinMode(BTN_LEFT, INPUT_PULLUP);
pinMode(BTN_RIGHT, INPUT_PULLUP);
pinMode(BTN_UP, INPUT_PULLUP);
pinMode(BTN_DOWN, INPUT_PULLUP);
pinMode(BTN_A, INPUT_PULLUP);
pinMode(BTN_B, INPUT_PULLUP);
}
void loop() {
mx.setPoint(y, x, true);
delay(200);
if (digitalRead(BTN_RIGHT) == LOW && x < 4) x++;
if (digitalRead(BTN_LEFT) == LOW && x > 0) x--;
if (digitalRead(BTN_DOWN) == LOW && y < 4) y++;
if (digitalRead(BTN_UP) == LOW && y > 0) y--;
mx.clear();
}Если точка движется не туда, чаще всего достаточно повернуть модуль или поменять обработку координат. Поэтому сначала лучше добиться стабильной работы одной точки, а уже потом добавлять правила игры.
Пошаговая сборка
- Сначала установите Arduino Nano на макетную плату и подключите USB.
- Затем подключите матрицу: DIN — D11, CLK — D13, CS — D10, VCC — 5V, GND — GND.
- После этого подключите кнопки к D2-D7, второй вывод каждой кнопки — к GND.
- Далее установите библиотеки MD_MAX72XX и SPI, если они ещё не готовы.
- Загрузите скетч и проверьте движение точки.
- В конце аккуратно уложите провода и подпишите кнопки, чтобы не путаться при доработках.
Питание, корпус и автономный вариант
На столе удобнее питать консоль от USB. Однако для переносного варианта можно использовать одну банку 18650, плату зарядки с защитой и повышающий модуль на 5 В. В таком варианте особенно важно не перепутать полярность, закрыть открытые контакты термоусадкой и заранее продумать выключатель питания.
Сначала лучше прошить и проверить проект от USB. Так проще отлавливать ошибки в коде, кнопках и подключении матрицы.
Для автономной версии понадобится держатель аккумулятора, плата зарядки с защитой и повышающий преобразователь до 5 В.
После проверки на макетке можно добавить тумблер, разъём зарядки, окно под матрицу и подписи кнопок.
Частые ошибки и решения
| Проблема | Что проверить |
|---|---|
| Матрица не светится | Питание 5 В, общий GND, пины DIN/CLK/CS и тип модуля FC-16 в коде. |
| Оси работают зеркально | Поверните матрицу или поменяйте координаты x/y в обработке. |
| Кнопки срабатывают наоборот | При INPUT_PULLUP нажатая кнопка даёт LOW, а отпущенная — HIGH. |
| Есть случайные нажатия | Добавьте debounce 20-40 мс и проверьте общий провод GND. |
| Матрица слишком яркая | Уменьшите INTENSITY и проверьте нагрев модуля. |
Идеи для улучшения
Пьезо-зуммер добавит короткие сигналы при старте, столкновении или наборе очков.
KY-023 может заменить четыре кнопки направления, хотя код обработки станет немного сложнее.
После проверки на макетке можно собрать всё в пластиковый бокс или напечатать простой корпус.
- «Змейка» — хранить хвост в массиве и проверять столкновения.
- «Пинпонг» — две ракетки, шарик и отражение от стенок.
- Лабиринт — точка двигается по заранее заданной карте.
- Счёт — использовать крайние светодиоды как индикатор очков.
- Заставка — добавить бегущую точку или короткую анимацию старта.
Поисковый каталог
В каталоге собраны обычные поисковые запросы по комплектующим для сборки. Так проще сравнить несколько вариантов без привязки к одному продавцу.
| Что искать | Готовый запрос |
|---|---|
| Arduino Nano | Arduino Nano ATmega328P CH340 |
| Матрица MAX7219 | MAX7219 8×8 FC-16 модуль светодиодной матрицы |
| Кнопки 6×6 | тактовые кнопки 6x6x5 мм набор |
| Макетная плата | макетная плата mini 170 точек |
| Провода Dupont | провода Dupont папа мама набор |
| USB-кабель для Nano | USB кабель для Arduino Nano Mini USB |
| Пьезо-зуммер | пьезо излучатель 5V buzzer Arduino |
| Джойстик KY-023 | аналоговый джойстик KY-023 Arduino |
| Питание от 18650 | держатель 18650 TP4056 MT3608 Arduino 5V |
| Корпус проекта | пластиковый корпус для Arduino проекта 100x60x25 |
Что ещё почитать
Для такой самоделки рядом пригодятся темы питания, аккумуляторов и расходников. Они помогают перейти от макетки к более аккуратному корпусному варианту.

TP4056 + MT3608
Как получить 5 В от одной банки 18650 и не забыть про защиту.

Держатели 18650
Какие держатели бывают и на что смотреть перед установкой в проект.

15 мелочей для мастерской
Термоусадка, пинцеты, стяжки, USB-тестер и другие вещи для аккуратной сборки.
FAQ
Можно ли собрать такую консоль без пайки?
Да, первый вариант удобно собрать на макетной плате и проводах Dupont. Однако для корпуса и постоянного использования лучше потом всё пропаять.
Почему используется окно 5×5, если матрица 8×8?
Окно 5×5 упрощает логику и оставляет свободные пиксели по краям. Поэтому новичку проще понять координаты, движение и ограничения поля.
Можно ли сделать «Змейку»?
Да. Нужно хранить координаты головы и хвоста в массиве, добавлять еду и проверять столкновения. Базовый код с движущейся точкой уже даёт основу.
Хватит ли питания от USB?
Для одной матрицы и Arduino Nano обычно хватает. Если добавить звук, яркую матрицу и автономное питание, лучше отдельно проверить потребление и нагрев.
Итоги
Светодиодная консоль на Arduino Nano и MAX7219 хороша тем, что показывает всю игровую логику без лишней сложности. Кнопка меняет состояние, код пересчитывает координаты, матрица показывает результат. После первого запуска проект легко расширить: добавить звук, счёт, корпус, питание от 18650 или новую игру.



