Подключение кнопок на руле к планшету
Иногда возникает необходимость управлять каким-либо внешним устройством в автомобиле, к примеру видео регистратором или лебедкой. В этом случае, обычно, устанавливаются дополнительные кнопки. Но иногда хочется сделать скрытую установку, что б интерьер автомобиля остался неизменным. Этим сегодня и займемся, в качестве автомобиля будет VW Polo Sedan с установленным блоком мониторинга Vega MTX, а в качестве нагрузки будет кнопка «аварийки». Сделаем так, что б при удержании кнопки «ok» на руле 3 раза моргала «аварийка».
Под катом большое количество картинок и видео.
Один раз меня попросили сделать кнопку «спасибо» на автомобиле Renault Kaptur 2012 года выпуска. Нажимая на эту кнопку автомобиль должен 3 раза моргнуть «аварийкой». У этого автомобиля был аналоговый подрулевой джойстик. Одну из кнопок на подрулевом джойстике подключил к реле времени, которое подавало импульс, длинной в 3 секунды на кнопку «аварийки». Позже владелец очень хорошо отзывался о новой функции своего автомобиля и я решил попробовать повторить это на своем Polo Sedan.
В отличии от Renault Kaptur у меня нет аналоговых кнопок, но сигнал со всех кнопок на руле можно найти в CAN шине. В качестве кнопки была выбрана кнопка «ok» на руле автомобиля. В моей комплектации эта кнопка, почти нигде не используется. Пока я нашел что с помощью него можно выставлять срабатывание «лимитера», когда приборка пищит при превышении заданной скорости. В любых других случаях нажатие на эту кнопку ничего не делает.
Можно было реализовать задуманное с помощью самодельной электроники, но у меня в автомобиле уже стоял блок телематики Vega MTX, потому было принято решение попробовать реализовать данный функционал с помощью него.
Нажатие этой кнопки можно найти в CAN шине, которая находится за магнитолой. Подробно поиск подобных датчиков я описывал в своей предыдущей статье про расшифровку CAN шины.
В нашем случае данные нашлись по адресу 5BF. При нажатии на кнопку «ok» в нулевом байте появляется цифра 40 в десятичном формате. Когда кнопки не нажаты, в нулевом байте будет 0. Надо будет сделать датчик, в котором будут отображаться эти изменения. В моем случае это датчик «Кнопки на руле».
Теперь разберемся с тем, как управлять кнопкой «аварийки». К сожалению, Polo Sedan не может управлять «аварийкой» по CAN шине, поэтому придется управлять ей по аналогу. Для этого придется протянуть провод от бело-синего провода из разъема кнопки «аварийки». Если на этот провод кратковременным импульсом подать «землю», то аварийка включается. Аналогичным образом она выключается.
Подавать «землю» будем с помощью цифрового выхода Vega MTX. Тут мы имеет 4 цифровых выхода, использовать будем третий выход (синий провод).
Теперь нужно задать алгоритмы, по которым будет работать кнопка.
Во-первых, я не хочу, что б аварийка включалась сразу по нажатию на кнопку «ok», я хочу, что б она включалась после секундного удержания кнопки. Делаю я это для защиты от случайного нажатия и для того, что б сохранить функционал данной кнопки.
Во-вторых, нужно выключать аварийку спустя 3 вспышки. 3 вспышки «аварийка» делает за 2 секунды.
Что бы ввести все эти алгоритмы надо перейти в настройки Vega MTX, далее перейти на вкладку «Сценарии». Тут можно задать условия, при которых совершаются какие-либо действия. Для реализации мне пришлось использовать 3 сценария.
Вообще сценарии не предназначены для таких операций, поэтому пришлось долго экспериментировать до получения нужного результата.
Первый сценарий служит для создания задержки в секунду, после нажатия на кнопку «ok». Он срабатывает, если в CAN датчике значение станет равно 40, а внешний цифровой выход 1 будет равен 0.
Тут поясню про внешние цифровые выходы. Если для задачи требуется больше, чем 4 цифровых выхода, то к Vega MTX можно подключить дополнительный внешний модуль, в котором будет 15 цифровых выходов и еще множество других входов и выходов. Так как у нас этого внешнего блока нет, то мы можем использовать эти выходы, как переменные, помещая туда 0 или 1 (включено или выключено). По умолчанию все выходы выключены. Внешний цифровой выход 1 будет переменной, которая показывает, что с момента нажатия на кнопку «ok» прошла одна секунда.
Наш сценарий следует читать так: сейчас нажата кнопка «ok», и нажата она менее одной секунды. Если эти условия совпадают, то выполняется действие: выключается внешний цифровой выход 1 на 1 секунду. Значит он переходи в состояние «выкл», но через секунду он перейдет в состояние «вкл».
Теперь перейдем ко второму сценарию.
В отличии от первого сценария он сработает при датчике «Кнопки на руле» равном 40 и при внешнем цифровом входе, равному 1. То есть, нажата кнопка «ok» и внешний цифровой выход 1 равен 1. А внешний цифровой выход станет 1 только спустя секунду после срабатывания первого сценария.
Теперь разберем, что произойдет после срабатывания второго сценария.
Тут дается импульс длинной 1 секунду на цифровой выход 3, к которому подключен вывод с кнопки «аварийки», тем самым мы ее включаем.
После этого нам надо сбросить 0 внешний цифровой выход 1. Поэтому мы включаем внешний цифровой выход 1 на 1 секунду. То есть спустя 1 секунду после срабатывания сценария внешний цифровой выход 1 станет 0.
Последним пунктом мы переводим на 2 секунды 15 в положение 0. Спустя 2 секунды после срабатывания скрипта внешний цифровой выход 15 станет 1. Внешний цифровой выход 15 используется в качестве переменной, что «аварийка» была включена с помощью кнопки на руле. 2 секунды – это то время, за которое машина моргнет «аварийкой» 3 раза.
Теперь последний сценарий, который должен послать импульс, на выключение «аварийки».
Этот сценарий сработает, когда внешний цифровой выход 15 станет равным 1, то есть через 2 секунды после срабатывания второго сценария.
После срабатывания третьего скрипта мы посылаем импульс на выключение «аварийки», и сбрасываем в ноль (выключено) внешний цифровой выход 15.
На этом работа со сценариями заканчивается, сохраняем результат в Vega MTX и проверяем работу устройства.
Таким образом можно сделать управление любым устройством с помощью CAN шины автомобиля. Управление не ограничивается только кнопками на руле. К примеру, можно задать включение устройства по скорости автомобиля, по открытию окна или двери, по запуску двигателя, по оборотам двигателя, по температуре двигателя и т.д. Можно сделать блокировку дверей при наборе определенной скорости (если завод изготовитель не предусмотрел такой возможности), включение камеры при открытии окна и многие другие варианты.
Все вышеописанное есть в видеоформате, а также там есть пример включения аварийки при включении задней передачи.
Если вы установили планшет в автомобиль, то возникает желание управлять им с рулевых кнопок автомобиля, при этом если оставили автомагнитолу не хочется терять возможность управлять и магнитолой, для этого я разработал плату которая с этим прекрасно справляется.
Давайте разберемся как это реализовать по шагово.
Видео версия статьи управление резистивными кнопками при помощи arduinoДля начала нам необходимо приобрести плату Arduino Leonadro или ArduinoMicro, главное отличие этих контроллеров в том что на них установлены микропроцессоры Atmega32u4 которая имеет на борту встроенную поддержку USB-соединения, благодаря чему не требуется вспомогательный процессор. Это позволяет устройствам на Atmega32u4 появляться на подключенном планшете (с поддержкой OTG) или компьютере в качестве мыши или клавиатуры в дополнение к виртуальному (CDC) последовательному порту (COM). В общем подойдет любой arduino совместимый контроллер который построен на Atmega32u4.
Вторым шагом после того как приобрели необходимый вам контроллер необходимо скачать ArduinoIDE и установить для того чтобы установились драйвера, затем чтобы работали все функции скачайте подготовленную мной портативную версию ArduinoIDE вот ЗДЕСЬ, в этот архив уже добавлены все необходимые библиотеки и изменены файлы для работы в качестве медиа клавиатуры.
Далее в качестве примера я выбрал Arduino Leonardo и нам необходимо собрать схему как указано на картинке слева. Т.е установить подтягивающий резистор на 10кОм между ногами GND и A0, это нужно для того чтобы АЦП процессора не показывал паронормальные явления. Т.е нам нужные стабильные значения, в данном случае значение АЦП в терминале будет показывать 0 (где брать значения читайте ниже), если мы поставим Резистор между 5v и A0 значение АЦП в терминале будет показывать 1023. Благодаря встроенному 10-и битному АЦП мы и будем читать резистивные кнопки автомобиля.
Теперь после того как мы подключили подтягивающий резистор необходимо подключить резистивные кнопки, для этого берем 1 резистор на 1 кОм ещё один на 2 кОм, (будем собирать своего рода делитель напряжения) и 2 кнопки. По идее это всё можно и не собирать если у вас на руках резистивные кнопки автомобиля у них обычно 4 и более кнопок но всего 2 провода. Как можно видать на схеме справа у нас 2 кнопки но их количество можно увеличить скажем до 100 но будет управляться всего 2 мя проводами. 1 конец провода соединяем к порту A0 второй к порту 5v
Слева можете наблюдать схему как всё подключено, Подтягивающий резистор R1 на 10 кОм подключен между GND и A0, далее 2 резистора R2 и R3 выступают в качестве резистивной клавиатуры один конец этих сопротивлений соединен с портом A0 вторые концы к кнопкам S1 и S2 в свою очередь выводы кнопок подключены к порту 5v. Так что же произойдет если мы нажмем на кнопку кнопку S1? У нас через резистор R2 пойдёт напряжение на порт A0, но пойдёт туда не 5в а меньше так как на резисторе R2 произойдёт падение напряжения и на порту A0 окажеться примерно 4.5 если нажать на S2 то у него в цепи стоит R3, сопротивление которого больше чем у R1 значит падение на нем тоже будет больше и на порт A0 придет примерно 4.1в, эти разные значения мы и будем считывать.
Ниже скетч для считывания значений кнопок.
И так значения считали, теперь давайте сделаем переключение музыки и т.д. нам понадобятся следующие команды:После того как загрузите этот скетч в arduino, включите на компьютере плеер с музыкой и попробуйте нажать кнопку S1 по идее должно произойти переключение музыки на следующую при нажитии кнопки S2 на предыдущую. Для того чтобы добавить остальные команды просто добавляем ещё один пункт значений присваиваем им нужные значения и загружаем в ардуино, в общем то и всё. (если устройство работает на компьютере то будет и работать на планшете с OTG)
Далее поговорим как связать один рулевой пульт с планшетом и магнитолой:
Магнитолы фирмы Sony и Pioneer для управления используют определённые сопротивления (номиналы на картинках ниже), от фирм Alpain и Kewoor определённый протокол похожий на IR сигнал пульта от телевизора только он передается по проводу.
Для того чтобы управлять всем этим я разработал специальную плату для управления с рулевых кнопок. Схема устройства
Для управления магнитолами Pioneer и Sony используется микросхема MCP4131-104 это цифровой потенциометр на котором можно регулировать сопротивление от 0 кОм до 100 кОм в 129 шагов (этого достаточно чтоб управлять магнитолами) Для управления Alpain и Kenwood микросхему MCP4131-104 ставить не нужно а просто замкнуть перемычку 1 и 2 или если смотреть на ноги микросхемы MCP-4131-104 замкнуть CS(D5) с P0W(JACK 3.5 +), в этом случае выход D5 arduino напрямую пойдёт на вывод JACK3.5 + и в прошивке необходимо указать сигнальный вывод порт D5 для передачи кодов на магнитолы. В качестве источника питания используется микросхема MC34063 она имеет отличное кпд по сравнению с LM7805, но обвязка немного сложнее чтоб получить 5в. Напряжение на вывод +12V можно подавать от 6-до40. По идее питане можно и не разводить, а брать напрямую с USB устройства но в таком случае значение АЦП плавают в зависимости от напряжения на порту USB вследствии чего трудно настроить резистивные кнопки или вообще не возможно.
Приведу свой пример подключения на авто SsangYong New Actyon с МГУ CHR-7769SY (WinCe).
В связи с желанием иметь возможность управлять МГУ с руля и не имением желания разбирать руль для установки штатных кнопок, а также их стоимость. Приобрел на Алиэкспресс вот такое Устройство для беспроводного управление МГУ.
Сразу скажу, что само подключение не сложное, но требует элементарного понимания предназначения разъемов на МГУ, а так же желательно знать распиновку штатной колодки для подключения МГУ своего автомобиля. Желательно иметь тех.описание на МГУ и инструкцию о порядке его снятия и установке. Основное отличие в моем МГУ оказалось, что он имеет для подключения только один сигнальный контакт "КEY1".
Благодаря всемирной сети и профильным форуам по авто без проблем разобрал переднюю панель и вытащил магнитолу.
Инструкция найденная в Инете на мое МГУ ничего не дала, а только запутала т.к. схема подключения как и задняя панель МГУ полностью не соответствовала инструкции.
Ниже фото МГУ CHR7769 и иллюстрация с назначением разъемов из тех.описания.
Судя по приведенной недораспиновке (нормальная распиновка дана только основному разъему) разъемов на корпусе МГУ разъем колодки "A" соответствует приведенной на схеме разъему "7". Где логика в этом - не знаю. Сначала думал, что "SWC_AD1, 2" и есть те самые контакты для подключения к проводам Key 1 и Key 2 китайского устройства. Но т.к. распиновки разъема 7 (A) не нашлось изначально предположил, что белый и зеленый кабели колодки "A" те самые необходимые кабели (в зеленом круге на фото).
Нашел распиновку основной колодки (приведена ниже). Принес МГУ в квартиру (думаю всем можно обойтись без этого) и подключил для пыток к 12 V 5A. Для включения МГУ питание необходимо подавать на 1 (batt) и 2 (Acc) контакты.
Для удобства теста из колодки вытащил кабели №№4, 5, 13, 16 (номера на фото основной колодки).
Сначала подключил к приемнику устройства удал. управления. следующим образом:
Приемник - ГУ
12V - 12 V
Gnd - Gnd
Key 1 (бел.) - Бел.провод колодки №7 (приходит в пин 16 осн. колодки)
Key 2 (зел.) - Зел.провод колодки №7 (приходит в пин 13 осн. колодки)
После включения ГУ обнаружил, что реакция есть только при нажатии кнопок на одном из двух беспроводных пультов.
Поменял местами белый и зеленый кабель - заработал другой пульт, а первый перестал реагировать.
Вспомнил второй упоминаемый китайцами вариант подключения в случае если МГУ имеет только один сигнальный вход.
Пришел к выводу, что зеленый кабель на моем МГУ это не "Key2" и подключил по новой схеме. То есть объединил провода устройства "Key 1" и "Key 2" и подсоединил к кабелю от SW1 от МГУ.
Проверка кнопок и их настройка осуществляется через Меню настройки управления на руле. На моем МГУ в настройках необходимо выбрать вкладку "Руль". Для программирования функций кнопок нажать кнопку СТАРТ (на фото уже нажата).
Далее нажимаем одну из кнопок на пульте, например с символом увел. громкости - на экране розовым цветом будет отмечена строка с определенным сопротивлением (на фото 90-94).
Выбрать ранее выделенную строку и кликнуть по "НАЖАТЬ". Откроется список действий по кнопке - выбрать например "Громкость +" из предложенного МГУ списка.
Повторить вышеописанные действия для всех кнопок.
Если разные задействованные кнопки предназначенные для выполнения разных команд накладываются, то необходимо ползунок внизу "Tolerance" установить на меньшее значение. Значение Tolerance определяется опытным путем.
Моя магнитола (думаю любые современные) и пульт позволяют настроить действие не только на кратковременное нажатие, но и на удержание каждой кнопки, что позволяет увеличить функционал в два раза. Для настройки действия по длительному удержанию кнопки необходимо на экране взамен кнопки "НАЖАТЬ" выбирать кнопку "Удерживать нажатой".
Для завершения настройки на экране выбрать "СТОП", а затем нажать на "Х" для выхода с сохранением.
После настроек у меня дублируется только одна кнопка GPS, но это не страшно т.к. моя МГУ не позволяет открыть Навигатор по кнопке на руле (нет такой функции).
Когда я решил поменять магнитолу в своей машине, я встал перед выбором — потерять штатное управление звуком кнопками на руле, или же покупать специальный (достаточно дорогой) адаптер.
Потом я подумал, почему бы не сделать такой адаптер самому?
Обзор для тех, кто дружит с паяльником.
Сначала суть проблемы.
Во многих машинах есть штатно установленное управление магнитолой на руле. Кнопки эти работают по принципу резистивной клавиатуры, что позволяет передавать сигнал всего по двум проводам.
Например, нажимаем кнопку увеличения громкости — в цепи появляется сопротивление 130 Ом.
Нажимаем уменьшение громкости — появляется сопротивление 240 Ом и т.п.
На многих современных магнитолах также есть возможность подключения проводного пульта дистанционного управления. Но проблема в том, что стандарты у всех производителей автомобилей и автомагнитол разные. Например, у магнитол Pioneer для увеличения громкости надо «подать» сопротивление 16 кОм.
Поэтому, между рулем и магнитолой нужен специальный адаптер, который будет конвертировать значения сопротивлений в понятные магнитоле.
Когда я поискал такой адаптер для своей машины, оказалось, что он стоит больше 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К.
Потенциометр подключен по следующей схеме:
4, 7 — GND
8 — +5V
1 — arduino pin 4 (можно выбрать другой)
2 — arduino pin 13
3 — arduino pin 11
6 — к магнитоле, контакт «Tip» на штеккере
Фото готовой платы.
С обратной стороны фотографий не сохранилось, т.к. это было год назад и я не планировал писать обзор. Ну и там ничего интересного — куча перемычек и плохая пайка :)
Ардуина может работать от 12V, но я решил поставить понижающий до 5V конвертор. Во-первых, я от него же запитал видеорегистратор, тем самым освободил гнездо прикуривателя. Во-вторых, я читал, что напряжение в автомобильной сети грязное и нестабильное, может плавать на несколько вольт, как вниз, так и вверх. Конвертер такие скачки выдержит, а ардуина может и погореть. Чтобы еще «почистить» питание я добавил несколько защитных элементов — диод, стабилитрон, конденсатор. Схему подсмотрел вот тут. Насчет её необходимости у меня некоторые сомнения, но решил — пусть будет.
На этом все.
Устройство нормально работает в машине уже около года.
А я сэкономил некоторую сумму денег и получил ценный опыт.
Читайте также: