Как известно, штатная магнитола Hyundai Solaris отличается посредственным звучанием, странными решениями, вроде отсутствия кнопки паузы, а на не самых дорогих комплектациях еще идет и без Bluetooth и hands-free. Возможность управления кнопками на рулевом колесе в свете вышеперечисленного смотрится довольно слабым утешением, поэтому замена на какое-нибудь другое ГУ выглядит вполне логичным шагом.
С предыдущего автомобиля у меня осталась магнитола Alpine CDE-133BT, умеющая работать беспроводной гарнитурой для телефона, поэтому вскоре она заняла положенное место на машине. От прочих техника Alpine отличается тем, что использует цифровой протокол для команд дистанционного управления, поэтому подключение к кнопкам на руле в данном случае не даст ничего вообще. Не желая отказываться от былого удобства, я обратился за информацией в Интернет и выяснил, что предприимчивые китайцы (и даже россияне) охотно выпускают переходники самых разнообразных форм и конструкций. Скорее всего, что-то подобное бы я и купил, но внимание мое привлекла вот эта тема, в которой добрый человек поделился с общественностью особенностями протокола ДУ Alpine и командами, которые по нему присылаются:
https://web.archive.org/web/20160315045509/http://www.mp3car.com/forum/mp3car-technical-hardware/input-devices/134542-need-alpine-wired-remote-control-pinout. Загоревшись мыслью повторить идею автора, я приступил к собственной разработке.
Разъем дистанционного управления Alpine представляет собой обыкновенное 3,5-мм гнездо под трехполюсной штекер TRS. Первый контакт служит массой, последний передает сигналы от пульта.
Сам сигнал представляет собой последовательность импульсов амплитудой не менее 3 вольт, длительностью 500 микросекунд и таким же интервалом следования. Нормальный уровень сигнала, таким образом — низкий.
читать дальшеЛогическая единица кодируется наличием напряжения на данном периоде сигнала, нуль – его отсутствием. Непосредственно перед отправкой команды пульт сигнализирует о своих намерениях, выдавая на выход «1» на 8мс, за которой следует «0» еще на 4,5 мс, после чего начинается отправка самой команды.
Никакой синхронизации или чего-то подобного в протоколе нет: пульт просто передает пачку импульсов, никак не контролируя их получение. Интервал между сообщениями должен составлять не менее 41 мс. По наблюдениям автора, пульт продолжает непрерывно отправлять посылки, пока кнопка нажата, что говорит о том, что решение о повторе команды принимается уже логикой самого ГУ.
Полный список команд выглядит следующим образом:
Vol Up 110101111101101110101011110110111101011011010101
Vol Dn 110101111101101110101011011011011111011011010101
Mute 110101111101101110101011101011011110111011010101
Pst up 110101111101101110101011101010111110111101010101
Pst dn 110101111101101110101011010101011111111101010101
Source 110101111101101110101011101101111101101101010101
Trk up 110101111101101110101011101110111101101011010101
Trk dn 110101111101101110101011010111011111101011010101
Power 110101111101101110101011011101111110101101010101
Play 110101111101101110101011010101111111110101010101
Band 110101111101101110101011011010111111011101010101
Хорошо видно, что в сообщениях имеются повторяющиеся фрагменты в начале и в конце, которые для экономии места можно выписать отдельно, после чего сами команды приобретут такой вид:
(START) 110101111101101110101011
Vol Up 11011011110101101
Vol Dn 01101101111101101
Mute 10101101111011101
Pst up 10101011111011110
Pst dn 01010101111111110
Source 10110111110110110
Trk up 10111011110110101
Trk dn 01011101111110101
Power 01110111111010110
Play 01010111111111010
Band 01101011111101110
(END) 1010101
С цифровой частью системы, таким образом, было все понятно сразу, а вот второй контакт разъема привлек мое внимание тем, что магнитола всегда подавала на него 5 вольт, даже находясь в режиме Standby, что логично, учитывая наличие в наборе команды на включение/выключение. Надежды, что его можно будет использовать для питания планируемого переходника, к сожалению, не оправдались, поскольку любые попытки нагрузить эту линию приводили к катастрофическому проседанию напряжения, даже при токах порядка 15-20 мА. Очевидно, в фирменных пультах этот контакт используется просто как сигнал, что магнитола включена, и подтягивается ею к линии питания через высокоомный резистор. Может быть, этот контакт задает уровень логической единицы, а в самом пульте, таким образом, установлен простой ключ, подающий это напряжение на выход, но эти особенности меня уже интересовали мало.
Оборудование для реализации выбиралось из принципа «что есть под рукой», чтобы не создавать себе лишних сложностей. Макетирование и разработку программы было решено сделать с помощью отладочной платы Lauchpad от Texas Instruments, поскольку опыт программирования для MSP430 у меня на тот момент был больше, а возможности отладки у Launchpad — намного шире, поскольку там уже есть встроенный аппаратный отладчик.
Рабочий прототип устройства должен был быть реализован на ATMega 328P, поскольку, во-первых, MSP430 требует напряжения питания не выше 3,33В, а во-вторых, в наличии у меня было аж три штуки китайских клонов Arduino Pro Mini, купленных для экспериментов в незапамятные времена. Перенести уже разработанную программу на AVR казалось мне вполне посильной задачей. Опасения, что уровень сигналов для магнитолы будет слишком низкий, не оправдались — в ходе разработки она спокойно воспринимала импульсы амплитудой и 3,33 В. Прототип состоит из отдельного понижающего импульсного преобразователя напряжения и небольшой дочерней платы, в которую включается Arduino. На плате разводилась вся дополнительная обвязка вроде подтягивающих и защитных резисторов, источника опорного напряжения для встроенного компаратора микроконтроллера и т.д.
Все соединения выполнены на разъемах, чтобы облегчить процесс отладки, в том числе и с проводкой автомобиля. Конструкция прячется в корпус из-под модуля обходчика иммобилайзера от какой-то автосигнализации. На всякий случай, цепь защищена предохранителем номиналом 500 мА.
Поскольку кнопок на руле только шесть, а функций у дистанционного управления может быть больше, я еще на этапе написания программы решил, что система должна уметь различать короткое и длительное нажатие на кнопку, при этом отправляя разные команды. Исключение сделано только для регулировки громкости — здесь команда просто начинает после небольшой задержки повторяться до тех пор, пока кнопку не отпустят. Остальные же клавиши я настроил следующим образом:
Таким образом, не отрывая рук от руля, можно переключаться между файлами и каталогами на носителе или запомненными станциями приемника — практика показала, что это очень удобно. К сожалению, для изменения конфигурации пока что требуется перепрошивка устройства.
Испытания прототипа пока продолжаются, чтобы посмотреть, как ведет себя электроника в автомобильных условиях эксплуатации. Окончательное устройство планируется сделать куда менее габаритным и на одной плате с уже интегрированным блоком питания. Возможности ATMega для подобного применения также явно избыточны, поэтому можно будет поставить аналогичный МК в корпусе поменьше. Текущая версия прошивки занимает ~1300 байт флэша и умещается при работе в 42 байта ОЗУ — в основном из-за хранения в ней структуры с конфигурацией.