Как сделать радио из Cyberpunk 2077 своими руками?
Воссоздаем технику из вселенной видеоигры. Внутри — пошаговая инструкция, а еще фотографии процесса и результатов.
Привет! Так вышло, что я не ждал Cyberpunk 2077 десять лет и даже не смотрел презентации и трейлеры. Но через два месяца после релиза друг подарил мне цифровую копию игры, и с первых часов я проникся ее красочным и противоречивым миром.
Я наиграл уже более двухсот часов, разведал каждый уголок и решил не скучать, пока выход сюжетных DLC задерживается. Мне захотелось «перенести» технику из игры в реальную жизнь, и я выбрал интернет-радио. Как я собрал его своими руками и что мне для этого понадобилось, рассказываю ниже.
На создание радио ушло более двух месяцев, в течение которых я получил увлекательный опыт и создал себе объект из понравившейся игровой вселенной.
Все описанное дальше — мое личное творчество, которым я занимался в свободное от работы время. Официальное руководство по фан-контенту CD Projekt Red позволяет свободно творить по вселенным Cyberpunk 2077 и «Ведьмака», пока это не выставлено на продажу.
Полный список используемых деталей и ссылки на ресурсы указал в конце текста.
Выбор устройства
Cyberpunk 2077 — это приключенческая ролевая игра, действие которой происходит в мегаполисе Найт-Сити. Вы играете за Ви — это протагонист игры, который ищет устройство, обеспечивающее бессмертие.
В игре есть предыстории — это разные варианты прошлого Ви, которые влияют на развитие сюжета. Все они заканчиваются в одном месте: в квартире героя. Там же на столе можно найти первое радио. В игре есть несколько версий устройства, но маленькое красное радио покорило меня с первого взгляда, и я решил: «Надо делать».
Действия игры разворачиваются в мире, который изобилует множеством невозможных пока технических устройств. Условимся, что наше радио должно выдерживать баланс между аутентичностью и количеством допущений, которые позволят сделать устройство сейчас.
Всю работу я разделил на несколько этапов: сначала смоделировал корпус, после занялся созданием и спайкой «начинки», сборкой устройства и настройкой прошивки. В финале запустил онлайн-радиостанцию. Остановимся на каждом шаге подробнее.
Моделирование корпуса
Моделирование корпуса позволяет оценить количество свободного места внутри устройства и в дальнейшем определиться с «начинкой».
В квесте «Стражи беспорядка» вам предстоит зайти на Джапан-Таун и допросить продавщицу на рынке. В этот момент она разбирает радио. Это единственная возможность увидеть радио изнутри. Вне квеста устройство стоит собранным.
Инструмент WolvenKit, созданный для мододелов, помог мне найти радио в игровых файлах. Он позволяет распаковывать архивы и конвертировать ресурсы из проприетарных форматов в общеизвестные.
Поиск радио занял некоторое время, так как я искал в файлах что-то со словом radio. Но оказалось, что в терминах игры это электроника бедняков (poor_electronics — плохая электроника). Я экспортировал mesh-модель, загрузил в 3D-редактор и обнаружил, что модель «битая». Впрочем, она изначально была нужна для «срисовывания» основных пропорций, поэтому проблема оказалась незначительной.
Mesh-модель, как и скриншот из игры, не позволяет точно определить размер устройства. Но и тут есть решение. Рядом с радио в квартире Ви стоит жестяная банка, визуально напоминающая банку на 500 мл. К счастью, у меня в холодильнике нашлась аналогичная, поэтому я провел замеры. Получилось, что радио должно быть 75 мм в ширину и 300 мм в длину.
Такие размеры чуть-чуть выходят за рамки области печати распространенных 3D-принтеров. Перспектива собирать устройство из частей не радовала, поэтому я пропорционально уменьшил радио до 250 мм в длину.
Без большого опыта в моделировании я потратил не один десяток часов на воссоздание модели и «подгон» под «железо» внутри. Чтобы сократить возможные доработки, выбрал путь наименьшего сопротивления: первая версия должна просто изготавливаться, а все сложные улучшения можно сделать позже.
В результате единственным органом управления радио стала «крутилка» на передней панели, а кнопки сверху остались муляжом. Вместо акустической решетки — сплошная стенка и отверстие под динамик, что не мешает купить решетку отдельно и поместить на положенное место.
Однако верхняя часть радио не бесполезна: над кнопками в модели есть панель неизвестного назначения. Туда можно установить дисплей 128х32.
Отвлечемся от корпуса и обратимся к электронной составляющей радио.
Начинка
От шипения, низкого звука и лишних проводов меня избавил проект Wi-Fi-радио от AlexGyver. Я выбрал его по нескольким причинам.
- ESP32, на котором он работает, дешевле Raspberry Pi.
- Динамик на видео можно сравнить по цене с готовыми колонками, которые у меня есть, но качество звука лучше.
- Благодаря проекту я могу не погружаться в работу с программным обеспечением микроконтроллера.
- Цифровой шум, который есть в схеме, можно свести на «нет» регулировкой громкости динамика и аккуратной пайкой.
Сначала я собрал схему на макетной плате без пайки. Цифровой шум был ужасен. Пересобрал схему навесным монтажом, пропаял все соединения питания и передачи звука, но шум сохранился. Добавил электролитический конденсатор на 630 uF, но и это не помогло. Я решил убрать потенциометр, который выполняет функцию регулирования громкости, и чудо произошло: цифровой шум стих.
В лучших шутках программирования я исправил одну проблему и создал две.
Во-первых, усилитель работал на максимум и динамик шипел. Во-вторых, ПО микроконтроллера умеет управлять громкостью, и ставить ползунок больше 25% мне было страшно. Так я избавился от цифрового шума, но добавил раздражающее в тишине шипение и потенциальную возможность убить схему или динамик высокой громкостью в ПО.
Решение пришло внезапно. Усилитель PAM8403 существует в трех версиях. Первая версия, минималистичная, представлена в оригинальном проекте. Две других же заслуживают внимания.
Вторая версия, которую я нашел в ближайшем магазине, имеет пины для прототипирования и потенциометр. По собственным ощущениям потенциометр плохо регулирует громкость, но, как и в самодельной версии, является источником цифрового шума.
Третья же версия, с регулировкой громкости, лишена цифрового шума. Потенциометр можно настроить на комфортную максимальную громкость и спрятать схему внутри корпуса.
Когда определились с корпусом и внутренностями, пришло время собирать радио.
Сборка
Признаюсь сразу, при сборке я не преследовал цели сделать внутри красиво, будто изделие только сошло с конвейера. Наоборот, я понимал несовершенство своих рук, недостаток опыта и осознавал, что начинка может быть изменена несколько раз. Это привело к следующим решениям:
- Электронные компоненты фиксируются термоклеем.
- Неэлектронные компоненты (части корпуса) тоже фиксируются термоклеем, так как в чертежах отсутствуют крепления.
- Линии питания от блока питания до «звуковых» элементов и канал передачи звука между VS1053 и усилителем должны быть пропаяны. Остальные линии могут быть соединены перемычками для прототипирования.
В ходе сборки несколько раз выяснялось, что распечатанная модель чуть больше заложенного допуска, поэтому все приходилось печатать сначала.
Настройка прошивки
Заполненные поля ESP32 download tool. Источник: github.com
На микроконтроллере используется прошивка karadio32. Для первого запуска достаточно скачать архив со страницы релизов и прошить, как указано в README проекта.
Обратите внимание на файл standard_adb.bin. В репозитории есть каталог, где лежит csv-версия этого и аналогичных файлов. Данный файл — это описание используемых функций ПО и соответствующих портов платы. По умолчанию (standard_adb.csv) можно подключить следующее оборудование:
- один энкодер для включения/выключения, смены громкости и станций,
- I2C-дисплей для отображения информации,
- инфракрасный датчик для управления с пульта,
- светодиод состояния.
Дополнительно, если хватит выводов GPIO, можно добавить:
- сенсорную панель экрана,
- второй энкодер,
- два джойстика для навигации по меню,
- шесть кнопок через цифровые порты,
- до шести кнопок через аналоговый порт (ADC keyboard),
- отдельную подсветку дисплея.
После первого запуска karadio32 создаст точку доступа Wi-Fi с именем «WifiKaRadio», а адрес микроконтроллера в сети — 192.168.4.1. В веб-интерфейсе можно выставить сетевые и звуковые настройки.
Помимо веб-интерфейса, karadio32 предоставляет доступ через telnet и последовательный порт. При этом текстовые интерфейсы предоставляют больше конфигурируемых параметров. Действительно необходимые при первом запуске:
- sys.lcd("6") — параметр обозначает LED-дисплей с разрешением 128x32, все константы доступны в addon.h;
- sys.lcdout(“20”) — дисплей выключается через 20 секунд без команд;
- sys.ddmm("1") — выбрать формат даты DD/MM;
Теперь можно подключаться к интернет-радиостанциям и слушать музыку. Но что делать, если хочется запустить в эфир свою музыку?
Домашняя радиостанция
Для создания источника интернет-радио нужен сервис потоковой передачи аудио — Icecast2.
Icecast — это своеобразный ретранслятор. Источник (source) передает трансляцию серверу, а тот «раздает» желающим клиентам. В идеале ретранслятор должен быть размещен на мощном сервере, чтобы обслуживать большое количество параллельных подключений. На практике же для домашней трансляции хватило одной Raspberry Pi 3B+.
Все представленные далее команды актуальны для Raspbian 10. Устанавливаем Icecast:
Интерактивная установка поможет задать адрес сервера и пароли для администратора и источника. Сервис запустится сам. Проверить состояние сервиса можно с помощью веб-интерфейса по адресу, который был задан в настройках. В моем случае:
При установке через пакетный менеджер Icecast2 устанавливается как сервис, так что перезагрузки не страшны. Интерактивный установщик попросит IP-адрес и пароли, но если их необходимо поменять, то конфигурационный файл ретранслятора располагается по пути /etc/icecast2/icecast.xml.
После настройки ретранслятора можно переходить к настройке источника. Для отправки данных на ретранслятор можно использовать любую программу, которая умеет работать с протоколом shoutcast.
Действительно простым и эффективным решением стала утилита ezstream. Эта программа не только работает с mp3, но и умеет перекодировать файлы в желаемый формат «на лету». Для утилиты нужен плейлист и файл конфигурации. Плейлист создается буквально в одну строчку:
Примеры файлов конфигурации доступны по пути /usr/share/doc/ezstream/examples/ezstream*. Рассмотрим файл конфигурации для трансляции mp3 без перекодирования.
Для запуска в консоли достаточно вызвать ezstream с указанием на созданный файл конфигурации:
Так как ретранслятор работает как сервис, то и источник необходимо сделать сервисом. Создаем systemd-юнит с именем ezstream.service в каталоге /etc/systemd/system со следующим содержанием:
Обновляем список сервисов и запускаем источник:
Конечно, не идеальный юнит, но самое важное в нем — запуск после icecast2.service. Если эту строчку упустить, то источник может запуститься раньше ретранслятора, вывести ошибку и не завершиться. И сервис работает, и трансляции нет.
Ну вот, радио стоит и играет. Время подсчитать, сколько деталей ушло на проект.
Исходники и затраты
Корпус печатался на Flyingbear Ghost 5, PLA-пластиком, толщина слоя 0.32мм, скорость печати 60 мм/с, для стенок – 30 мм/с. Заполнение — 20%.
Модели (ссылка на stl-файлы):
- основа корпуса — 11 часов;
- верхняя крышка — 2 часа;
- задняя крышка — 1,5 часа;
- ручка — 30 минут.
Включая все неуспешные попытки сделать слайдер, мне хватило килограммовой катушки красного пластика и ста грамм серого пластика.
Электроника:
- микроконтроллер ESP-WROOM-32 DevKit v1,
- модуль VS1053,
- усилитель PAM8403,
- OLED-дисплей 0.91" 128x32,
- модуль энкодера EC11,
- динамики AIYIMA, 2 шт., 2 дюйма, 4 Ом, 10 Вт, 53 мм (aliexpress);
- блок питания 5В 3А, штекер 5.5x2.5;
- разъем питания 5.5х2.5 с клеммными колодками.
Цены не указываю ввиду постоянных изменений в мире.
Что бы вы воспроизвели из Cyberpunk или любой другой игры? Расскажите в комментариях и подпишитесь на блог Selectel, чтобы не пропустить полезные инструкции, новости и кейсы из мира IT.
Читать также: