The One Cube // Железо консоли. На чем работает магия шести экранов.
Меня не редко спрашивают что внутри куба? Отвечаю..
Ранее были посты про 6D-змейку и рулетку артефактов на том самом кубе. Но это всё программная оболочка.
Чтобы по-настоящему понять, почему куб работает именно так, нужно заглянуть в самое его сердце — в железо. Сегодня проведу экскурсию по его “внутренностям” и расскажу, какие инженерные решения стоят за этим игровым опытом. Это история не про погоню за терафлопсами, а про поиск баланса. Про то, как из доступных компонентов собрать что-то уникальное.
Процессор
Любой проект начинается с выбора «мозга». Выбор пал на ESP32-S3 N8R8. Почему? Потому что я уже пять лет собираю устройства на ESP32, и эта платформа мне как родная.
Но и объективно, это идеальный компромисс:
- Два быстрых ядра 240МГц для расчетов и рендера.
- Встроенный Wi-Fi для будущих онлайн-фич.
- Огромное количество GPIO-пинов. Без них подключить шесть экранов и другие штуки было бы просто невозможно.
Кстати, 8 МБ дополнительной PSRAM — это не роскошь, а жизненная необходимость. Это что-то вроде второго уровня оперативки, куда отгружается всё, что не влезло в основную, более быструю память.
Дисплеи
Чтобы показать мир на кубе, нужно было превратить его грани в экраны. Я остановился на 1.54-дюймовых TFT IPS-экранах (ST7789) с разрешением 240x240. Нашел их на Ali, и это был единственный годный вариант по соотношению цена / качество.
Почему именно они?
- Яркие, с отличными углами обзора — критически важно, ведь на куб смотришь всегда под углом.
- Разрешение 240x240 — это тот самый “sweet spot”, где картинка уже четкая, а микроконтроллер еще не задыхается от потока пикселей. Как потом подтвердили тесты, возьми я разрешение побольше — проц бы просто не вывез, и мы бы получили слайд-шоу вместо игры.
Правда, это были готовые платы, к которым пришлось вручную припаивать десятки проводов. Об этом кошмаре — чуть позже.
Управление
У куба нет джойстиков и кнопок в привычном понимании. Его главная парадигма ввода — движение / положение устройства в пространстве.
Я выбрал BNO055, потому что это “умный” сенсор (IMU). Он не просто выдает сырые данные с акселерометра и гироскопа, а сам их обрабатывает и отдает уже чистую, отфильтрованную ориентацию в пространстве. Это позволило мне сосредоточиться на геймплее, а не на борьбе с математикой кватернионов и дрейфом гироскопа.
Память и питание
Чтобы на кубе могли жить десятки игр, ему нужно было вместительное хранилище. Решение простое и очевидное — слот для MicroSD-карты. Это было одно из первых решений при проектировании. Сейчас в кубе стоит карточка на 32 ГБ, чего хватает с головой.
За автономность отвечают пара аккумуляторов 18350 и чип IP5310. Это современная микросхема для повербанков, и по сути, вся электроника куба питается от её линии 5В. Кнопка включения на корпусе не разрывает цепь напрямую, а подает сигнал именно на этот чип, который уже включает или выключает всё устройство. Просто и надежно.
Накупить компонентов — это полдела. Самое интересное начинается, когда ты пытаешься всё это вместе уместить в маленькой коробочке.
Материнская плата
Чтобы вся эта электроника не болталась в виде клубка проводов, я с нуля спроектировал собственную материнскую плату. Это основа, на которой держится буквально всё: на ней распаян ESP32-S3, BNO055, разъемы для экранов, слот для MicroSD и система питания. Создание кастомной платы позволило максимально компактно разместить все ключевые узлы и заранее продумать их взаимодействие.
Экраны, кстати, подключены через так называемый «тройник» — их линии данных (SPI) объединены, чтобы не занимать все пины контроллера.
Корпус и рама: Эволюция дизайна
Изначально я планировал корпус из двух половинок по три грани, к которым бы крепились экраны. Начав сборку, я понял, что это было ужасно неудобно.
Пришлось все переделывать. Так родилась идея внутренней сборной рамы. Теперь вся электроника — материнская плата, экраны, батареи — крепится на этот внутренний «скелет». А уже потом вся эта конструкция целиком вставляется в аккуратный внешний корпус, который просто защелкивается. Это в разы упростило и сборку, и возможный ремонт.
Сам дизайн получился минималистичным. Настолько, что его даже сложно фотографировать — со всех сторон он почти одинаковый. Видно только стык крышки, разъем USB-C и кнопку включения. Зато получилась идеальная форма, ничего лишнего. В будущем, возможно, сделаю корпус чуть более шершавым для лучшего хвата.
Боль и страдания: Провода и косяки
Без этого не обходится ни один DIY-проект.
Провода. Я их ненавижу. Я устал их паять. Десятки тонких проводков, которые нужно было зачищать, лудить и припаивать к платам дисплеев, а потом укладывать в тесном корпусе. И они занимают кучу места. Да, это работает. Но в следующей версии я точно перейду на шлейфы.
Косяки проектирования.
Когда пришла материнские платы с завода, начались «танцы с бубном». При попытке запустить экраны выяснилось, что в своем «тройнике» для дисплеев я забыл развести все линий данных. Плюс, один из пинов управления должен был идти к тройник отдельно, а не быть общим. Пришлось колхозить: кидать на плату проводки-перемычки, выводить еще один отдельный разъем. Выглядит не очень, но работает.
Про патент и копирование
Запатентовать конструкцию как полезную модель невозможно. 20 лет назад уже был патент на такую конструкцию. А новые патенты подаются по новизне предлагаемых решений.
Да, можно скопировать железо проекта и оно даже запустится. Но написать драйвера, программное ядро и остальное веселье (я уж не говорю про UX) очень сложно и требует много времени и навыков в разных сферах. Тем более здесь железо по современным меркам очень слабое, и кроме энтузиастов мало кто полезет экономить каждый килобайт памяти и милисекунды работы процессора, чтобы запустить не сложные 2D игры.
В заключение
Каждый компонент в The One Cube был выбран не случайно. Это система компромиссов, осознанных решений и ошибок, которые пришлось исправлять на лету. Именно это железо с его возможностями и ограничениями диктует правила игры и формирует тот уникальный опыт, который дает куб.
Буду рад обсудить в комментариях выбранные решения. Может, у вас есть идеи, как можно было бы сделать иначе или что можно улучшить в следующей версии?
P.S. В следующей версии точно планирую вибромоторчик =)
И кстати, в моем TG-канале регулярно обновления по проекту