Меню

andipanda.dev

Самодельная магнитола для VW T4 на Raspberry Pi

CaRadio в её нынешнем виде появилась далеко не сразу. Более того, когда я впервые решил сделать собственную автомобильную магнитолу, о CarPlay я вообще не думал.

История началась в конце 2021 — начале 2022 года с моего Volkswagen T4, старых китайских магнитол и желания установить в автомобиль нормальный большой экран.

С чего всё началось

Однажды сосед попросил помочь заменить установленную у него старую 2DIN-магнитолу Orion AVM-56277BTG на новую. Старый Orion в итоге достался мне.

В то время у меня был Volkswagen T4. Практически сразу появилась мысль установить эту магнитолу в T4. Проблема заключалась в том, что штатного места для полноценного 2DIN-устройства в моей панели не было. Первоначальный план казался довольно простым: убрать часть полочки над блоком управления отопителем и установить магнитолу туда.

На практике всё оказалось сложнее. За полочкой находился элемент жёсткости кузова. Резать его ради магнитолы мне совсем не хотелось.

Тогда появилась вторая идея: уменьшить глубину самого Orion. CD/DVD-привод мне всё равно был не нужен, поэтому казалось логичным просто удалить его и укоротить корпус магнитолы.

Но после разборки выяснилось, что всё не так просто: значительная часть электроники Orion была связана с электроникой дисковода. Поэтому эта идея тоже отошла в сторону.

Именно в этот момент вместо вопроса «как установить готовую 2DIN-магнитолу?» появился гораздо более интересный вопрос:

А почему бы вообще не собрать свою?

Mystery как донор

У меня была старая Mystery MMTD-9122S с выдвижным 7-дюймовым экраном. Когда-то она вполне устраивала меня как обычная китайская магнитола, позже к ней была подключена камера заднего вида. Но со временем механизм выдвижного экрана перестал нормально работать.

При этом большая часть электроники самой магнитолы оставалась исправной.

Я разобрал Mystery и начал изучать её схемотехнику. Внутри оказался аудиопроцессор PT2348, для которого была доступна документация, и FM-тюнер TEF6621. Обоими узлами можно было управлять независимо от штатной логики магнитолы.

Первым экспериментом стала даже не Raspberry Pi. Я отключил штатный STM8 и подключил необходимые узлы к Arduino. Нашлись подходящие библиотеки, и вскоре удалось получить первый звук без участия родного контроллера Mystery.

Это был важный момент: стало понятно, что исправную аналоговую часть магнитолы совсем не обязательно выбрасывать. Ею можно управлять со своего контроллера.

Raspberry Pi вместо штатных «мозгов»

К тому времени у меня уже был опыт программирования на C++/Qt под Raspberry Pi, да и сама Raspberry Pi была под рукой. Поэтому следующий шаг был довольно очевидным: использовать её как центральный компьютер будущей магнитолы.

От Mystery я решил оставить только то, что действительно было нужно: аудиотракт, усилитель, FM-тюнер и экран.

Родная 7-дюймовая LCD-матрица имела TTL-интерфейс. Для подключения её к Raspberry Pi был приобретён скалер на RTD2660. Таким образом, экран, который раньше был частью Mystery, фактически превратился в обычный дисплей для Raspberry Pi.

С тачскрином я поступил похожим образом. Его контроллер я перенёс на отдельную плату с минимально необходимыми компонентами и подключил к Raspberry Pi.

В результате от исходной магнитолы постепенно остались только отдельные полезные аппаратные блоки, а вся логика устройства перешла под моё управление.

Собственный интерфейс

Одновременно начал появляться собственный интерфейс магнитолы, написанный на Qt/C++.

Задача заключалась не в том, чтобы просто вывести рабочий стол Linux на экран автомобиля. Интерфейс с самого начала проектировался именно для использования в машине: крупные кнопки, минимум мелких элементов и отдельные экраны для основных функций.

Одной из первых функций, которая полноценно заработала, стало FM-радио. Raspberry Pi напрямую управляла аппаратным FM-тюнером, а на экране уже был мой собственный интерфейс с отображением частоты, поиском станций и их сохранением.

Постепенно появилось главное меню с радио, музыкой, Bluetooth, камерой и настройками.

Сейчас этот интерфейс, конечно, выглядит довольно просто. Но для меня тогда гораздо важнее было другое: это уже была не просто Raspberry Pi, подключённая к автомобильному экрану. Основные функции магнитолы действительно управлялись моей программой.

Bluetooth из второй магнитолы

Здесь пригодился тот самый Orion, с которого фактически началась вся история.

Из него я извлёк готовый автомобильный Bluetooth-модуль, документацию на который найти не удалось. Поэтому пришлось подключить логический анализатор и разобраться в протоколе обмена между модулем и родной электроникой Orion.

Сам Bluetooth-модуль уже поддерживал необходимые автомобильные функции, включая Bluetooth Audio и Hands-Free. Управление им осуществлялось через UART.

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

Это вообще стало характерным подходом первой версии проекта: вместо того чтобы пытаться реализовать всё с нуля, я использовал уже имеющиеся аппаратные узлы, разбирался, как ими управляла родная электроника, и подключал их к собственной системе.

Из прототипа — в автомобиль

Электроника постепенно начала работать, но оставалась первоначальная проблема: всё это ещё нужно было нормально установить в T4.

Сначала я думал напечатать новую панель на 3D-принтере. Но к тому времени у меня появилась возможность изготовить гораздо более аккуратную металлическую панель, которая заменяла бы часть штатной центральной консоли T4. Заготовку вырезали из листового металла толщиной 1 мм на лазерном станке, затем согнули борта, после чего панель получила чёрное матовое порошковое покрытие.

В неё устанавливался экран, а снизу оставались штатные ручки управления отопителем.

В качестве корпуса для всей электроники снова пригодился корпус старой Mystery. Внутри разместились Raspberry Pi 4, преобразователь питания, остальная электроника магнитолы и скалер. Для вентиляции в нижней части корпуса дополнительно были сделаны отверстия.

Получилась довольно странная смесь оборудования от двух китайских магнитол, Raspberry Pi, собственной электроники и программы на Qt.

Но самое главное — она работала.

Камера заднего вида

Отдельной задачей была камера.

Скалер на RTD2660 имел не только вход для изображения от Raspberry Pi, но и композитный видеовход. Поэтому к нему можно было напрямую подключить обычную автомобильную камеру заднего вида.

Raspberry Pi управляла переключением источника видеосигнала, благодаря чему изображение с камеры можно было вывести непосредственно на тот же экран.

В том варианте, которым я пользовался, камеру можно было активировать через интерфейс программы. До полноценной автоматизации по сигналу задней передачи проект тогда так и не дошёл.

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

Что получилось — и чего не получилось

Эта магнитола не была законченным коммерческим устройством и никогда таким не задумывалась.

FM-радио работало. Bluetooth Audio работало. Был собственный touchscreen-интерфейс. Работала камера. Вся система была физически установлена в автомобиль и некоторое время использовалась.

Но до нормального автомобильного power management я тогда не дошёл. Магнитола включалась и выключалась обычным физическим выключателем. Не было нормальной логики работы от ACC, корректного автоматического выключения, standby и контроля состояния автомобиля.

Не была завершена и часть программных функций.

По сути, это был вполне рабочий прототип, на котором я успел проверить главную идею:

обычный одноплатный компьютер действительно может стать центральным устройством собственной автомобильной мультимедийной системы.

А дальше проект остановился по причинам, совершенно с ним не связанным.

Один из тестов загрузки CaRadio на столе перед установкой в автомобиль.

Переезд и долгая пауза

В конце 2022 года я уехал из Украины в Польшу.

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

На этом история проекта вполне могла закончиться.

Но через некоторое время уже в Польше у меня появился Nissan Primera P12 со штатным бортовым компьютером и экраном, который отображал довольно мало полезной информации. И вместе с ним снова возникла мысль что-нибудь с этим сделать.

К тому времени изменилось многое: другое железо, другой автомобиль, другой программный стек — и появилась технология, о которой во время разработки магнитолы для T4 я вообще не думал.

Apple CarPlay.

Именно с этого момента начинается следующий этап проекта.


Продолжение

→ CaRadio: как я вернулся к самодельной магнитоле и дошёл до CarPlay