Воссоздаем технику из вселенной видеоигры. Внутри — пошаговая инструкция, а еще фотографии процесса и результатов.
Привет! Так вышло, что я не ждал 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 и усилителем должны быть пропаяны. Остальные линии могут быть соединены перемычками для прототипирования.
В ходе сборки несколько раз выяснялось, что распечатанная модель чуть больше заложенного допуска, поэтому все приходилось печатать сначала.
Настройка прошивки
На микроконтроллере используется прошивка 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-дисплей с разрешением 128×32, все константы доступны в 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″ 128×32,
- модуль энкодера EC11,
- динамики AIYIMA, 2 шт., 2 дюйма, 4 Ом, 10 Вт, 53 мм (aliexpress);
- блок питания 5В 3А, штекер 5.5×2.5;
- разъем питания 5.5х2.5 с клеммными колодками.
Цены не указываю ввиду постоянных изменений в мире.
Читать также:
- Как совершить ротацию с пользой для карьеры?
- Китайский инженер создал машину с эффектом невесомости
- Сделай сам: котик манеки-неко, который сделает бэкап в облако