Пульт для андроид магнитолы своими руками

Добавил пользователь Евгений Кузнецов
Обновлено: 19.09.2024


Очень удобная штука для тех, у кого по какой-либо причине отсутствуют кнопки управления на руле (мультируль).
Позволяет управлять головным устройством, практически не отрывая рук от баранки.

Приехал вот в такой коробочке, обтянутой почтовой пупыркой


Угол надорван и примят, но это не критично, так как внутри коробки поролоновый ложемент


В комплекте салфетка-обезжириватель и маленькие шурупы для крепления к подрулевому кожуху

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




Фото внутреннего мира этого пульта



Если кому плохо видны номиналы резисторов
R1 47 Ом
R2 680 Ом
R3 1.2 кОм
R4 3.3 кОм
R5 10 кОм

Как видно, каждая кнопка (клавиша) подключает на выход то или иное сопротивление, в результате при нажатии определенной кнопки сопротивление между двумя проводами выхода меняется на своё, уникальное.
Это позволяет при подключении пульта к магнитоле дистанционно ею управлять.
Такой набор сопротивлений позволяет подключать пульт к фактически любой магнитоле на Андроиде или ВинСЕ

Как известно, магнитолы на Андроид или ВинСЕ имеют вход KEY, который понимает именно такие, резистивные пульты управления и позволяют назначить выполнение конкретной команды (и не одной) при нажатии конкретной кнопки пульта.

Однако у меня магнитола не такая умная (JVC KD-X352BT), поэтому пришлось сделать адаптер для того, чтобы команды от кнопок подавались на магнитолу в виде понятных ей цифровых команд.

Вот видео работы

Вот так выглядит установленный пульт на автомобиле


Вот так крепил

Управлению штатными подрулевыми не мешает абсолютно, а вот удовольствия от вождения добавилось многократно

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


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

Сначала суть проблемы.
Во многих машинах есть штатно установленное управление магнитолой на руле. Кнопки эти работают по принципу резистивной клавиатуры, что позволяет передавать сигнал всего по двум проводам.
Например, нажимаем кнопку увеличения громкости — в цепи появляется сопротивление 130 Ом.
Нажимаем уменьшение громкости — появляется сопротивление 240 Ом и т.п.

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

Когда я поискал такой адаптер для своей машины, оказалось, что он стоит больше 50$. Учитывая, что сама магнитола мне досталась за какие-то смешные 30-35$, я решил попробовать сколхозить адаптер самостоятельно на ардуине. Готовой схемы на тот момент в интернетете не было, пришлось изобретать самому.

Заранее хочу извиниться за возможные неточности и ошибки — я плохо разбираюсь в электронике. Всю информацию по крупицам собирал из гугля. :)

В своем проекте использовал следующие компоненты:
1. Автомобиль Suzuki Swift
2. Автомагнитола Pioneer MVH-X165UI (купил в оффлайне)
3. Arduino Nano, можно и Mini (купил на ebay за 2.5$)
4. MCP4131, цифровой потенциометр на 100k (купил в оффлайне за 1$, почему-то на ebay они достаточно дорогие)
5. Резистор 10k
6. Макетная плата
7. Понижающий конвертер (step down buck converter за 1.5$), чтобы из 12V сделать 5V

Принцип простой — на входе измеряем сопротивление с кнопок на руле. Если сопротивление соответствует нажатию какой-то кнопки, то на выходе на потенциометре выставляем соответствующее сопротивление, требуемое магнитоле.

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


Также в сети обнаружилась следующая схема проводного пульта для магнитолы Pioneer (используется 3.5mm штеккер):

Кнопок Preset Up/Down у меня на руле нет, поэтому я использовал только два контакта на штеккере — Tip и Sleeve.

Т.к. диапазон требуемых магнитоле сопротивлений от 1К до 62К, то я купил микросхему MCP4131 — это цифровой потенциометр на 100К с 129 шагами регулировки. 129 шагов достаточно, т.к. нам не нужна супер точность, магнитола понимает сопротивления с разбросом где-то в 10-20%.
Ну и не обязательно покупать именно MCP4131, думаю, подойдет любой другой digipot с подобными характеристиками.

В интернете есть инструкции по использованию цифрового потенциометра с ардуиной, мне понравилось вот это видео, очень подробно и доступно.

Я не буду объяснять азы работы с ардуиной, есть куча других специализированных ресурсов, где гораздо лучше все описано.


Схема подключения получилась такая:

Сопротивление измеряется на пине A5 с помощью делителя напряжения с резистором 10К.


Потенциометр подключен по следующей схеме:


Фото готовой платы.

С обратной стороны фотографий не сохранилось, т.к. это было год назад и я не планировал писать обзор. Ну и там ничего интересного — куча перемычек и плохая пайка :)

На этом все.
Устройство нормально работает в машине уже около года.
А я сэкономил некоторую сумму денег и получил ценный опыт.

Свою работу мы начали с перехвата сигнала пульта управления и изучения его осциллограммы. Для приема сигнала мы использовали обычный ИК-диод:

image



Для анализа сигнала мы пользовались программой Audacity:

image

Принятый сигнал крайне чистый.

image

Стереосигнал амплитудно-модулирован на пилообразный сигнал с частотой 20кГц, инверсный для каждого канала. Предположительно это сделано из-за того, что JACK стабильно может генерировать сигнал частотой не более 20кГц и к каждому каналу подсоединяется свой диод. Сигнал инвертирован, чтобы ИК-диоды срабатывали по разным фронтам.

Изменив ранее пойманный сигнал по этому алгоритму и сделав передатчик специально для данного алгоритма, мы начали тестировать.

image


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

Схема работала, но нас не устраивало наличие 2-х диодов. Мы решили к данному треку подключить наш приёмник, он тоже управлял устройством. Следовательно, их трек избыточен и мы оставили только один канал.

Данное решение работает только на ПК и некоторых смартфонах с расстояния не более пары метров. Очень не хотелось использовать дополнительный источник питания, но некуда деваться. Для усиления сигнала мы использовали простой транзисторный ключ.

image

Схема потеряла способность принимать сигнал. В будущем можно доработать схему, мы переключали приемник и передатчик.
Для тестирования использовали DVD проигрыватель фирмы BBK и ресивер Триколор JS 7300. Наш приемник способен управлять данными устройствами с расстояния около 15 метров (на сколько хватило коридора). На демонстрации проектов мы хотели управлять со смартфона проектором ViewSonic PJD 5132. Хорошо, что заранее решили проверить работоспособность — ничего толком не работало. Проектор воспринимал наши управляющие сигналы только если близко поднести передатчик, что было проблематично, так как он висел под потолком.

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

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



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

В свою бытность, я также как и многие, прошёл путь по созданию разных устройств, базирующихся на модулях HC-05, HC-06:

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

Такая связка была бы целесообразной в начале 2010-х годов, но в настоящее время стоит использовать более современный подход. А если более конкретно, то в качестве микроконтроллера мы возьмём esp32, управлять которым будем с экрана своего смартфона.

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

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

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

С точки зрения соединения, мы будем подключаться к микроконтроллеру по wifi, где точкой доступа будет выступать наш смартфон (то есть и пультом управления — он же, а управлять будем, соответственно, — машинкой). Поэтому изначально необходимо сконфигурировать и запустить точку доступа на смартфоне, после чего ввести в скетч параметры доступа к ней:


Далее запускаем асинхронный веб-сервер на 80 порту и создаём объект, который будет обрабатывать websocket-ы:


Далее нам необходимо создать веб-страницу, которая будет отображаться у пользователя. Эту страницу мы помещаем в массив index_html.

Как можно видеть, код содержит отдельные блоки, в частности, каскадную таблицу стилей, в которой определяются все шрифты, кнопки, на которые будет нажимать пользователь:

Там же отдельными классами прописываются кнопки:

Для обработки нажатий используется JavaScript код, в котором происходит настройка websocket-ов, а также прописывается реакция на происходящие события:


Кроме того, инициализируется обработчики нажатий кнопок:


и прописывается конкретный сценарий, который будет происходить при начале касания и его окончании (будет вызвана соответствующая функция):

Именно здесь, чтобы понимать, что происходит в данный момент, и требуется считывать состояние переменной state:

Как можно видеть, я оставил возможность для прописывания логики событий, так как при каждой конкретной реализации могут происходить различные наборы событий.
Также нам потребуется настроить сервер, который будет отвечать за отслеживание событий клиента: вход в систему, выход из системы, получение данных, получение ошибки, ответ на ping:


Для инициализации протокола websockets создана специальная функция:


Как мы говорили уже ранее, в рамках нашей системы смартфон выступает в качестве точки доступа, а esp32 — в роли клиента. Запустим монитор COM порта, точку доступа на смартфоне и посмотрим, что из этого получится. Мы видим, что esp32 подключилась к смартфону и получила IP адрес, и отчёт вывелся в COM порт:



В свою очередь, при загрузке, пульт управления будет таким:


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

Кстати сказать, при таком способе управления, мы будем ограничены дальностью действия wi-fi. Если же вам потребуется управлять устройством с больших расстояний, то нужно будет изменить схему подключения с такой:



Для этого придётся использовать радиомодули nrf. Использование их совместно с esp32 таит свои трудности, в частности, придётся использовать видоизменённую библиотеку RF24, с целью дать возможность программе использовать программную реализацию SPI, вместо аппаратной. Об этом неплохо рассказано вот здесь.

Ну вот собственно и всё! Код для работы через websockets протестирован и работает. Остаётся только прописать свою реализацию, для нужного типа двигателя/лей.

image

Сейчас многие владельцы автотранспорта сталкиваются с проблемой убогости штатных и космической дороговизны хороших магнитол с современными функциями. Вот и я купив машину 2010 года не смог ужиться с CD проигрывателем и поспешил поставить вместо него таблетку — Планшет. В статье описаны аспекты не освещённые в остальных источниках информации. В частности не как физически врезать планшет в машину, а как всё настроить так чтобы было приятно и удобно пользоваться.

Начнём из далека.

Начнём всё же с подключения.


Программу навигации каждый выбирает на свой вкус. Мне Нравится Garmin Navigon, тем более что я использую Garmin HUD.

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

Дальше я боролся за батарейку. Оказалось если не полностью усыпить андроид то даже без вай-фая и GPS за ночь или сутки он может сожрать несколько десятков процентов заряда. Что не приемлемо. Для уверенности полного засыпания я поставил Deep Sleep Battery Saver который прибивал в спящем состоянии все активности кроме редкого исключения.

Теперь встала проблема адекватного изменения яркости экрана при разном освещении. В стоковой прошивке это кастомизировать нельзя поэтому я поставил Lux+ и настроив его под разное освещение добился хорошей видимости экрана в любой ситуации.

Теперь самое вкусное это Tasker!

Без этого Мега приложения вообще ничего сделать бы не удалось. Это своеобразный автоматизатор для Android с возможность ловить внешние события и выполнять визуально программируемые действия. Он супер гибкий, супер удобный и вездесущий. К нему уже написано куча плагинов и толи ещё будет. Я рекомендую поставить сразу его и Secure Settings Pro и в нём Secure Settings Helper.



Давайте подробнее посмотрим на все Profiles (триггеры) И Tasks:

Оба пока проводные, но блютус не за горами.
У меня оказались аналоговые кнопки.
Я сделал себе аналог JoyCon Arduino mini Pro + Bluefruit EZ-Key Получилось без проводов к табетке. Bluefruit эмулирует HID клавиатуру и посылает стандартные команды акдроиду. Управление музыкой просто вот остальное пришлось делать через эмуляцию надатия Search + Буква и потом Quicklinks Shortcuts в Task и к Tasker. Но всё работает как видно на видео. Есть и клик и долгий клик. Во второй части опишу подробно.

Читайте также: