В общем-то идея сделать такое у меня появилась довольно давно, но только сейчас программное обеспечение для подобных поделок пришло в более-менее приличное состояние.
Прежде я пробовал сделать такое из x86 неттопа, но штука выходила довольно громоздкая и капризная. Потом продал неттоп и купил б/у Android TV Box. Это куда компактнее и легче, но заставить эмулятор RetroArch корректно работать на Андроиде мне так и не удалось, там что ни сборка - сплошные баги.
Поэтому решено было собирать приставку на базе Raspberry Pi 3, благо уже есть готовые образы системы для этих целей, да и гибкость настройки просто шикарная.
Итак, нам понадобится:
- Raspberry Pi (подойдёт любая, я купил самую мощную, с запасом);
- Блок питания 5V 3A;
- Два USB джойстика;
- Корпус (можно использовать что угодно);
- Различные разъемы и крепеж (по вкусу);
- Клей (по вкусу, мне нравится двухкомпонентная эпоксидка).
Корпус я решил использовать от мертвой приставки, и на барахолке была найдена за пару баксов вот такая 16-битка, китайская копия SEGA Genesis 3.
Немало времени, усилий и изопропила ушло на то, чтобы смыть корявые надписи. Но так всяко лучше. К сожалению, на корпусе есть пару внушительных царапин, но пока оставил как есть.
Прикинул расположение элементов внутри корпуса. Как видите - купил блок разъёмов RCA и бесполезнейший в быту, но незаменимый для моих нужд переходник HDMI мама-папа. Он нужен, чтобы отодвинуть плату от края корпуса. А тут и приехала посылка с набором различных латунных стоек (на местном рынке они как-то нереально дорого стоят).
Срезал на пару миллиметров мягкий корпус переходника HDMI и выпилил прямоугольное отверстие в обоих половинках корпуса. Разместил стойки под плату и залил эпоксидкой, не забыв зачистить мелкой наждачкой места склейки.
Таким же манером выпилил круглые отверстия под тюльпаны и приклеил стойки. Страшновато было пилить, не так это и просто, сделать ровно.
Но всё получилось практически идеально! Я более чем доволен.
Двигаемся дальше! Вырезал кусочек макетной платы и закрепил на нём гнездо питания. Можно было бы и micro-usb вывести, но так каноничнее. Само собой, крепиться будет на такие же стойки.
Закрепил. Отлично. Куда приспособить большое круглое отверстие рядом с питанием - не придумал, изначально хотел туда вывести аналоговый сигнал, но решил, что тюльпаны универсальнее. Поэтому закрою его пластиковой заглушкой.
Подготовил плату и припаял два гнезда USB для джойстиков.
Закрепил на стойках в нужном месте корпуса. Но, само собой, разъемы по форме не совпадают с Сеговскими, и это мне очень не понравилось.
Поэтому перемычку между родными отверстиями я спилил, а внутрь вклеил выпиленную пластиковую фальшпанель. Немного не подошло по цвету, но это малозаметно.
Распаял проводами питание, USB-гнезда и аналоговые выходы. Кстати, не знаю, программная это фишка или аппаратная, но в Raspberry Pi 3 определение выхода (аналог/цифра) автоматическое, а вот в первой версии компьютера мне приходилось переключать вручную.
Время делать кнопки включения и сброса. Поскольку штатных кнопок для этих дел в Raspberry Pi не предусмотрено, а выключать, жестким образом отрубая питание, мне не хотелось, я решил подключить кнопки к контактам GPIO и прописать в автозагрузку скрипты для выключения и перезагрузки. Кнопку включения нужно вешать на строго определённые GPIO, чтобы по нажатию кнопки наша приставка не только выключалась, но и включалась.
А скрипты легко найти в Интернетах. Тут меня ждал неприятный сюрприз. Для включения/выключения нужна кнопка без фиксации, а родной выключатель в приставке был простым ползунком. Пришлось сделать возвратный механизм, а ползунок намазать силиконовой смазкой.
А вот и второй сюрприз: какой поставить выключатель? В итоге я просто вытащил из мертвого принтера переключатель с лапкой и изогнул лапку. Теперь при нажатии на ползунок лапка нажимает на переключатель. Отлично. Припаял на плату и закрепил на стойках.
Кнопочку сброса вытащил из того же принтера и закрепил на плате. Однако сама кнопка (на корпусе) упиралась в разъём кнопки питания, а он должен быть строго на 5 и 6 GPIO. Пришлось подрезать разъем. Можно было и припаять напрямую, но не хотелось.
Гнездо для картриджей закрыл сеткой, купленной на барахолке и покрашенной баллончиком в белый цвет. Пришлось изнутри подровнять корпус, но это несложно.
А тут подъехали джойстики в стиле Sega Saturn. Почему они? Потому что у них 6 кнопок и две кнопки сверху, то есть функционал без проблем покрывает NES, SNES и Sega Mega Drive. Нужно только настроить джойстик при первом включении, а потом поправить конфиги для каждого эмулятора и раскидать по папкам.
Сами джойстики по качеству на 3 из 5, сборка отличная, но невнятно нажимаются крестовины. Это я про Retrolink. Можно найти лицензионные USB джойстики Sega, но цены на них ОЧЕНЬ кусаются.
Собственно, готово! Остаётся включить, настроить джойстики и подключить Wi-Fi (понадобится клавиатура), а потом зайти через Total Commander в расшаренные папки устройства и закинуть туда любимые игры.
Вот такая картинка при подключении по RCA. Сразу напрашивается мысль сделать шрифты побольше.
А вот так вот получается, если подключить HDMI. Гораздо лучше. Но аналоговые выходы пригодятся, чтобы играть с друзьями на даче под пивко.
Оговорка: имеется небольшая задержка ввода (Input Lag), это заметил не только я, и телевизор тут ни при чем. В Интернете описаны способы снизить задержку, но это уже другая история.
И еще один неприятный минус - при подключении питания приставка включается сразу же, а не ждёт нажатия кнопки. Это я пока не придумал, как победить.
В планах еще заказать на плоттерной резке плёночные надписи на корпус. А в остальном я доволен, да и друзья тоже.