Здравствуйте уважаемые!
Была у меня штатная магнитола, и 8 кнопок на руле(включая хандзфришные), да сплыла.
Купил Pioneer AVH x5800BT, да пригорюнился. Кнопки-то не пашут совсем. Поставил я интернеты на уши, нашлись варианты:
- acv swi-x1 (и аналоги Incar итп)- программируемый от ИК-пульта ДУ адаптер, хорошее решение, но нет возможности назначить все кнопки хандзфри, ибо просто их нет на пульте.
- КРУ omega - насторожило, что производитель сказал, что надо обязательно при заказе уточнять что нужна версия под кнопки хандзфри. Непонимаю зачем две прошивки держать. Плюс долго ждать пересылки.
- Хаки перепайкой резисторов, например тут. Для тех у кого три провода идет с руля, перепайка позволяет задействовать все кнопки. У меня всё по двум проводам (Pajero 4), не катит.
В результате принял решение сделать универсальный конвертер-эмулятор кнопок на Arduino.
Вот результат:
Все кнопки руля работают, даже в двух режимах - короткое и длинное нажатие.
За основу взята схема управления магнитолами пионер по проводам, доработано мной в результате экспериментов:
Принцип прост - пионер ожидает замыкания резисторами между концом и общим проводом мини-джека.
Доп функции (указано красным) активируются при одновременном замыкании "кольца" (средний контакт) на общий.
Компоненты:
1) Плата ардуино мини про 5в - 120руб
2) Плата ЦАП/АЦП на чипе PCF8591 - 146р
3) резистор 2Ком
4) стабилизатор на 8вольт (подойдет крен5, 7808 итп) (можно и без него, надеясь что более 16в в бортсети не будет)
5) программа (скетч)
6) разъем мини-джек
7) паяльник 25Вт и прямые руки, или знакомый электрик
Сигнал от кнопок с руля подается на вход A0 ардуины, вход подвешен к +5В через резюк 2ком.
Программа по измеренным на входе напряжениям находит в таблице подстановки желаемую команду (в виде значения конкретного напряжения в вольтах) и скармливает её ЦАПу по I2S
Плата ЦАП выдает на выходе AOUT ожидаемые пионером напряжения.
Повторяемость схемы стопроцентная, регулировок не требует.
Требуется измерить омметром и ввести в прогу матрицу резисторов кнопок на руле, как у меня:
соответственно:
и потом заполнить таблицу кнопок в соответствия в проге, например у меня такая:const int inButtons[]={
//resistance kOmhs. To detect volts, you need to consider your pullup resistor and Vcc. I use 1KOhm & 3.3V
// R= V * R0 / (Vcc-V)
280, // MODE
750, // CH UP
1300, // CH DOWN
2120, // VOL UP
3120, // VOL DOWN
4590, // SPEECH
6250, // ON HOOK
8630 // OFF HOOK
};
На исследования, проектирование, реализацию и настройку убил несколько дней... Не уверен, что оно того стоило...// +10 means that we must add ground to jack ring `
const int maps[8][2]=
{
{ 0, 1 }, // MODE > source/off .off
{ 3,3+10 }, // CH UP > next .fldr up
{ 4,4+10 }, // CH DN > prev .fldr dn
{ 5, 5 }, //VOL UP > vol up .
{ 6, 6 }, //VOL DN > vol dn .att-mute
{ 7+10,0+10}, //SPEECH > voice ctrl .ph.tel menu
//{ 0+10,-1}, //SPEECH > .ph.tel
{ 1+10,1+10 }, //ON HOOk> ph.answer .
{ 2+10,7 } //OFFHOOK> ph.hangup .esc
};
Поэтому с удовольствием отвечу на вопросы, дабы результат размножился ...
Полезные темы:
Социальные закладки