Отечественная портативная консоль своими руками

17880b9046d54b449c6b566660bbb40c.png


Привет, читатель!

Как-то я отлаживал приложение для телефона на отечественной ОС «Аврора» и вдруг заскучал. Тогда я поставил на него RetroArch и скачал несколько игр. Подключив геймпад, провел за ними пару часов. Позже, листая раздел с играми в чате разработчиков «Авроры», наткнулся на идею подключения джойстиков-чехлов к телефону. Но мне не понравился их внешний вид, поэтому накидал пару концептов мобильной приставки и решил воплотить ее в жизнь.

Да, за последние десятилетия было выпущено множество портативных игровых консолей, от Электроники ИМ-02 до Nintendo Switch, Steam Deck и других. Эти устройства позволили игрокам наслаждаться любимыми играми в любом месте и в любое время. А я решил реализовать что-то свое.

Однажды я прорабатывал идею создания мобильной приставки на базе планшета. После покупки Steam Deck от идеи сборки своего аналога отказался: устройство получалось довольно громоздким и тяжелым, а при не самом лучшем процессоре Intel Atom вырисовывалась просто крупная ретроконсоль.

Буду разбирать устройство и дополнять его новым функционалом. Сразу решил, что обязательно необходимо оставить слот SIM-карты для мобильной связи и интернета, возможность подключения внешних устройств, камеры. Дополнительно должны появиться стики, кнопки и чуть более громкие динамики.

jargq5pdefecou6_ouzhfadcrr8.gifХочешь выиграть мерч? Попробуй решить IT-кроссворд! Более 256 вопросов, 7 кроссвордов на разные темы из мира IT — ежедневно с 23 по 29 сентября. Достаточно зарегистрироваться по ссылке.

Используйте навигацию, если не хотите читать текст полностью:

→ Декомпозиция
→ Джойстик
→ Разработка корпуса
→ Сборка
→ Заключение

Декомпозиция


Чтобы собрать что-нибудь, нужно сначала разобрать что-нибудь другое. Для экспериментов взял на Авито смартфон F+ (подробнее о них я писал в первой статье об «Авроре»). Разборка начинается с демонтажа экрана, благо винты на задней крышке оказались декоративными. При помощи фена аккуратно прогреваю по всему периметру экран и достаю его из ложемента. Аккуратно отключаю шлейф и откладываю для дальнейшей работы.

349bd867f754cf4137339b8b3554bd8e.png


Изнутри как любой китайский телефон.

Далее снимаю все остальные элементы, которые будут в новом девайсе: камера, сенсор отпечатка пальцев, разъемы, кнопки. Для хранения удобно использовать специально предназначенный для разбора телефонов кейс. Тут же закинул дополнительные детали, которые будут в приставке: стики, динамики, модуль усилителя.

a4c2214ee58b607d19f8b999f52929bc.png

Джойстик


На удивление «Аврора» поддерживает «из коробки» работу с геймпадами: как по USB, так и через Bluetooth. Довольно рациональным вариантом показалось использовать «проводное» подключение контроллера джойстика к устройству. Такой вариант гарантирует его стабильную работу.

Можно разобрать джойстик, взять из него плату и вставить в новое устройство, однако в таком случае очень легко выйти за габариты. В сети есть библиотеки, реализующие класс USB HID на 8- и 32-битных микроконтроллерах. Для этого в качестве обработчика ввода предлагается использовать любой микроконтроллер или отладочную плату Arduino (например, Pro Micro), несколько кнопок и пару аналоговых джойстиков. Я выбрал имеющуюся плату на базе ATmega32U4. Данный чип обладает встроенным контроллером USB 2.0.

5d3c261bb64eb5fdf05545d5ae3e4ea9.png


Вырезка из структурной схемы и искомый модуль USB.

Для данного микроконтроллера существует и поддерживается библиотека для Arduino IDE — Arduino Joystick Library. Она обладает всем необходимым функционалом от обработки кнопок до включения вибрации.

Можно ли использовать другие контроллеры? Конечно. Любой микроконтроллер способен решить эту задачу. Для 8-ми битных AVR существует старая добрая библиотека V-USB, а для объяснения ее работы отличная статья на Хабре.

Еще одним вариантом работы рассматривал EasyHID от AlexGyver, но она предназначена только для эмуляции мыши или клавиатуры.

Вы также всегда можете использовать STM32 и собрать пульт управления космическим кораблем.


Для сборки тестового геймпада подключил пару потенциометров и несколько кнопок на макетной плате, накидал простой код сбора и обработки данных. Функция get_axis () возвращает значение АЦП указанной оси. Эта функция обрабатывает значения несколько быстрее стандартной ардуиновской analogRead за счет меньшего количества маппингов (аналогичный пример есть в хорошей статье по ускоряющим алгоритмам). Аналогично получаем значения портов одной операцией и в цикле подготавливаем и отправляем значения кнопок.

Данное устройство определяется системой как стандартный геймпад как на виртуальной машине с Windows, так и на целевом устройстве на базе «Авроры».

Можно приступить к созданию устройства. Для этого из макетной платы вырезал форму будущего устройства, прикинул расположение элементов и запаял основные компоненты: кнопки и пару стиков от PSP Vita.

1ef6f05d52020e65e05cfcd2e3fd51e1.png


Игровой Франкенштейн.

На плату также вывел кнопки громкости, включения/разблокировки и функциональную программируемую кнопку. На нее настроил функцию быстрого перехода в игровой режим (открытие RetroArch), ведь в первую очередь это консоль.

Дополнительно захотелось дать возможность подключать через USB не только зарядное устройство, но и геймпады или флешки. Чтобы реализовать это, разобрал самый простой USB-хаб и припаял его к плате с разъемом Type C.

К сожалению, при работе через разветвитель теряется возможность подключить устройство к ПК в режиме флешки или для отладки в Aurora IDE. Возможно, пофикшу этот функционал в будущем.

Разработка корпуса


По завершении работы над ПО и платой приступил к рисованию корпуса будущего устройства. Все начинается с определения требуемой функциональности и набрасывания идей и эскизов.

Для этого проекта в общем виде достаточно самого планшета, пара джойстиков и динамиков, а готовое устройство должно удобно лежать в руках, аналогично существующим решениям. Дополнительно думал добавить экран OLED LCD, чтобы отображать нагрузку на процессор, текущее время и запущенную игру, но быстро отказался от этой идеи. Дело в том, что в телефоне нет некоторых драйверов.

792b7272f6017f5c0ecfd32ba1a1d86d.png


Добавить экран к телефону, чтобы выводить больше информации?

После того, как определились с общим внешним видом, можно приступать к инжинирингу. Компоненты, которые извлек из телефона (сенсорный экран, аккумулятор, платы) перенес в редактор. Основной инструмент во время этой работы — штангенциркуль и режим черчения. Также смоделировал монтажную плату и ее детали.

После получения каждого компонента можно приступить к компановке. Для этого собираю «скелет» в сборке и по его проекциям создаю макет корпуса, который тут же печатаю и примеряю.

502b5d81c984d4585f2d8bfaef7768d7.png


Сборка


Для изготовления первого образца использовал FDM-принтер для создания корпусных элементов. Чтобы кнопки хорошо нажимались, дополнительно обтачиваю посадочные места. Первый макет сделал из черного пластика, а все толкатели кнопок — из люминисцентного филамента. Получилось забавно.

После удаления малярного скотча можно приступить к сборке и запуску устройства. В монтажной плате проделал недостающие отверстия, зафиксировал ее в корпусе. Временно подключил экран для проверки работоспособности устройства и качества сборки толкателей. Все идет гладко. Далее можно закрывать заднюю крышку и приступать к поклейке экрана стандартным клеем Т7000.

03644d2749d6495bbad74a289a68f942.png


Получилась игровая консоль с камерой и телефоном.

Заключение


dae340068cb9e79b712cb425303d12d5.png


Замечательное чувство, когда в руках держишь собранное своими руками устройство и оно работает. Мне было интересно собрать подобный девайс и понять, с какими сложностями могут столкнуться разработчики подобных решений. Думаю, в свободное время подготовить печатные платы и корпуса для производства, заменить некоторые элементы (кнопки, крепления) на более надежные и собрать несколько устройств для друзей. Также хочу видеть портативку потоньше и в цветах Famicom — бежевый корпус с бордовыми кнопками и латунными вставками. Для придания цвета и приятной текстуры уже заказал жидкую резину и баллончики с акриловой краской. Возможно, это перерастет в стартап.

Можно ли это устройство конкурировать с ретро-консолями от Anbernik? Нет — себестоимость пока что довольно высока, а целевая аудитория скорее выберет популярного производителя за счет комьюнити и технической поддержки.

Вы бы хотели получить подобную приставку на базе отечественной ОС? Пишите в комментариях, какой функционал хотелось бы в ней видеть?

© Habrahabr.ru