Отечественная портативная консоль своими руками
Привет, читатель!
Как-то я отлаживал приложение для телефона на отечественной ОС «Аврора» и вдруг заскучал. Тогда я поставил на него RetroArch и скачал несколько игр. Подключив геймпад, провел за ними пару часов. Позже, листая раздел с играми в чате разработчиков «Авроры», наткнулся на идею подключения джойстиков-чехлов к телефону. Но мне не понравился их внешний вид, поэтому накидал пару концептов мобильной приставки и решил воплотить ее в жизнь.
Да, за последние десятилетия было выпущено множество портативных игровых консолей, от Электроники ИМ-02 до Nintendo Switch, Steam Deck и других. Эти устройства позволили игрокам наслаждаться любимыми играми в любом месте и в любое время. А я решил реализовать что-то свое.
Однажды я прорабатывал идею создания мобильной приставки на базе планшета. После покупки Steam Deck от идеи сборки своего аналога отказался: устройство получалось довольно громоздким и тяжелым, а при не самом лучшем процессоре Intel Atom вырисовывалась просто крупная ретроконсоль.
Буду разбирать устройство и дополнять его новым функционалом. Сразу решил, что обязательно необходимо оставить слот SIM-карты для мобильной связи и интернета, возможность подключения внешних устройств, камеры. Дополнительно должны появиться стики, кнопки и чуть более громкие динамики.
Хочешь выиграть мерч? Попробуй решить IT-кроссворд! Более 256 вопросов, 7 кроссвордов на разные темы из мира IT — ежедневно с 23 по 29 сентября. Достаточно зарегистрироваться по ссылке.
Используйте навигацию, если не хотите читать текст полностью:
→ Декомпозиция
→ Джойстик
→ Разработка корпуса
→ Сборка
→ Заключение
Декомпозиция
Чтобы собрать что-нибудь, нужно сначала разобрать что-нибудь другое. Для экспериментов взял на Авито смартфон F+ (подробнее о них я писал в первой статье об «Авроре»). Разборка начинается с демонтажа экрана, благо винты на задней крышке оказались декоративными. При помощи фена аккуратно прогреваю по всему периметру экран и достаю его из ложемента. Аккуратно отключаю шлейф и откладываю для дальнейшей работы.
Изнутри как любой китайский телефон.
Далее снимаю все остальные элементы, которые будут в новом девайсе: камера, сенсор отпечатка пальцев, разъемы, кнопки. Для хранения удобно использовать специально предназначенный для разбора телефонов кейс. Тут же закинул дополнительные детали, которые будут в приставке: стики, динамики, модуль усилителя.
Джойстик
На удивление «Аврора» поддерживает «из коробки» работу с геймпадами: как по USB, так и через Bluetooth. Довольно рациональным вариантом показалось использовать «проводное» подключение контроллера джойстика к устройству. Такой вариант гарантирует его стабильную работу.
Можно разобрать джойстик, взять из него плату и вставить в новое устройство, однако в таком случае очень легко выйти за габариты. В сети есть библиотеки, реализующие класс USB HID на 8- и 32-битных микроконтроллерах. Для этого в качестве обработчика ввода предлагается использовать любой микроконтроллер или отладочную плату Arduino (например, Pro Micro), несколько кнопок и пару аналоговых джойстиков. Я выбрал имеющуюся плату на базе ATmega32U4. Данный чип обладает встроенным контроллером USB 2.0.
Вырезка из структурной схемы и искомый модуль USB.
Для данного микроконтроллера существует и поддерживается библиотека для Arduino IDE — Arduino Joystick Library. Она обладает всем необходимым функционалом от обработки кнопок до включения вибрации.
Можно ли использовать другие контроллеры? Конечно. Любой микроконтроллер способен решить эту задачу. Для 8-ми битных AVR существует старая добрая библиотека V-USB, а для объяснения ее работы отличная статья на Хабре.Еще одним вариантом работы рассматривал EasyHID от AlexGyver, но она предназначена только для эмуляции мыши или клавиатуры.
Вы также всегда можете использовать STM32 и собрать пульт управления космическим кораблем.
Для сборки тестового геймпада подключил пару потенциометров и несколько кнопок на макетной плате, накидал простой код сбора и обработки данных. Функция get_axis () возвращает значение АЦП указанной оси. Эта функция обрабатывает значения несколько быстрее стандартной ардуиновской analogRead за счет меньшего количества маппингов (аналогичный пример есть в хорошей статье по ускоряющим алгоритмам). Аналогично получаем значения портов одной операцией и в цикле подготавливаем и отправляем значения кнопок.
Данное устройство определяется системой как стандартный геймпад как на виртуальной машине с Windows, так и на целевом устройстве на базе «Авроры».
Можно приступить к созданию устройства. Для этого из макетной платы вырезал форму будущего устройства, прикинул расположение элементов и запаял основные компоненты: кнопки и пару стиков от PSP Vita.
Игровой Франкенштейн.
На плату также вывел кнопки громкости, включения/разблокировки и функциональную программируемую кнопку. На нее настроил функцию быстрого перехода в игровой режим (открытие RetroArch), ведь в первую очередь это консоль.
Дополнительно захотелось дать возможность подключать через USB не только зарядное устройство, но и геймпады или флешки. Чтобы реализовать это, разобрал самый простой USB-хаб и припаял его к плате с разъемом Type C.
К сожалению, при работе через разветвитель теряется возможность подключить устройство к ПК в режиме флешки или для отладки в Aurora IDE. Возможно, пофикшу этот функционал в будущем.
Разработка корпуса
По завершении работы над ПО и платой приступил к рисованию корпуса будущего устройства. Все начинается с определения требуемой функциональности и набрасывания идей и эскизов.
Для этого проекта в общем виде достаточно самого планшета, пара джойстиков и динамиков, а готовое устройство должно удобно лежать в руках, аналогично существующим решениям. Дополнительно думал добавить экран OLED LCD, чтобы отображать нагрузку на процессор, текущее время и запущенную игру, но быстро отказался от этой идеи. Дело в том, что в телефоне нет некоторых драйверов.
Добавить экран к телефону, чтобы выводить больше информации?
После того, как определились с общим внешним видом, можно приступать к инжинирингу. Компоненты, которые извлек из телефона (сенсорный экран, аккумулятор, платы) перенес в редактор. Основной инструмент во время этой работы — штангенциркуль и режим черчения. Также смоделировал монтажную плату и ее детали.
После получения каждого компонента можно приступить к компановке. Для этого собираю «скелет» в сборке и по его проекциям создаю макет корпуса, который тут же печатаю и примеряю.
Сборка
Для изготовления первого образца использовал FDM-принтер для создания корпусных элементов. Чтобы кнопки хорошо нажимались, дополнительно обтачиваю посадочные места. Первый макет сделал из черного пластика, а все толкатели кнопок — из люминисцентного филамента. Получилось забавно.
После удаления малярного скотча можно приступить к сборке и запуску устройства. В монтажной плате проделал недостающие отверстия, зафиксировал ее в корпусе. Временно подключил экран для проверки работоспособности устройства и качества сборки толкателей. Все идет гладко. Далее можно закрывать заднюю крышку и приступать к поклейке экрана стандартным клеем Т7000.
Получилась игровая консоль с камерой и телефоном.
Заключение
Замечательное чувство, когда в руках держишь собранное своими руками устройство и оно работает. Мне было интересно собрать подобный девайс и понять, с какими сложностями могут столкнуться разработчики подобных решений. Думаю, в свободное время подготовить печатные платы и корпуса для производства, заменить некоторые элементы (кнопки, крепления) на более надежные и собрать несколько устройств для друзей. Также хочу видеть портативку потоньше и в цветах Famicom — бежевый корпус с бордовыми кнопками и латунными вставками. Для придания цвета и приятной текстуры уже заказал жидкую резину и баллончики с акриловой краской. Возможно, это перерастет в стартап.
Можно ли это устройство конкурировать с ретро-консолями от Anbernik? Нет — себестоимость пока что довольно высока, а целевая аудитория скорее выберет популярного производителя за счет комьюнити и технической поддержки.
Вы бы хотели получить подобную приставку на базе отечественной ОС? Пишите в комментариях, какой функционал хотелось бы в ней видеть?