12 января 2019 г.

Кнопки для Тыквы или адaптер CAN шины для Volvo XC90

После замены штатной аудио системы на двухдиновое радио фирмы Тыква с Android в Volvo XC90, прошло полтора года. Красивые ничего не делающие кнопки на руле не то чтобы мешали спать, но зудели - сделай нас. И парктроники, несмотря на замену их камерой заднего вида, своим молчанием напоминали - мы есть.
Радио для работы хочет резистивные кнопки руля.

Volvo XC90 имеет две CAN шины быструю и медленную (low и high speed).
Двигатель, коробка, заслонка работают быстро по быстрой. Климат, сидения, двери, парктроники, кнопки на руле и др. по медленной.
И никаких проводов от кнопок. Так же на радио можно  подать сигнал заднего хода, для выключения звука во время движения задом, и сигнал включения подсветки, если в салоне темно.
Плюс нашлось странное поведение сигнала ключа зажигания. Если включить зажигание, то 12 вольт появляется, и радио включается. Заглушил машину - радио выключается. Но если завестись, и через 2-3 минуты или меньше заглушить, сигнал остаётся активен от минуты до 5 минут.  Было не очень удобно что уходишь, а радио работает, да, оно потом выключается, но хотелось чтоб сразу.

Для анализа данных на шине были заказаны и собраны два адпатера к Arduino.
Разницы оказалось нет. Можно использовать любой.
Удобное место для подключения находится в багажнике
Вот этот провод, нужны белый и зеленый
Большинство программ для анализа на компьютере работают по протоколу Lawicel CAN232/CANUSB.
Соответственно нужна прошивка для Arduino, которая конвертирует CAN сообщения в этот протокол.
Я брал arduino-canbus-monitor. Для одного адаптера правда нужно было поменять частоту кварца в прошивка с 16 на 8 МГц.

Аппаратное обеспечение готово, что с программным? Как обычно все грустно.

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

А у меня Вольво, ничего не известно, около тысячи сообщений в секунду.
В интернете пишут в файл, потом скриптами обрабатывают. В общем прошлое тысячелетие.
Наиболее известная CanHacker и её клоны.
И как тут искать? Никаких масок по данным.
Логи выглядят примерно так:
T0240162A8E0100040070019004337
T0240162A80030004007001900435A
T0240162A84030004007009900437D
T02A074288C1000000000000004380
T012177FC8C10C4800101008004385

Пока я нажимаю и отпускаю кнопку на руле, у меня уже пару тыщ сообщений.
Нашел несколько похожих проектов. Читал шведские Volvo форумы. Искал сообщения от указанных модулей в логе - НИЧЕГО. Еще и у всех разные цифры. Но данные все таки есть.

У обычных машин адреса строго определены - допустим 0x45FE модуль управления сидением пассажира. Он 0x45FE у всех машин этой модели, и другие модули знают о 0x45FE, все же просто. Инженеры же Volvo как обычно оказались.. скажем так - неправильной ориентации, и вот что удумали. В заботе о клиенте они придумали такое - каждый модуль в сети имеет свой адрес и он разный для всех машин. Соответственно модули разных машин одной модели, просто так не переставишь. Оправдывают это они тем, чтобы модули не воровали.
Но! Можно прописать адрес модуля в другие модули машины, чтобы они "увидели" новый модуль.
Это делается только через их онлайн систему за неразумные деньги. Или делают умельцы без их системы для ворованных модулей.
Т.е. чтобы поменять модуль надо во ВСЕ! (те которым надо взаимодействовать) модули системы записать новый адрес.

Ок! Буду искать не знаю что, непонятно где :)
Для этого я написал свою программу логер.
Доступна на Github.

Итак в сообщении есть адрес отправителя, я собрал их в левом списке. Рядом количество сообщений от модуля всего  и количество уникальных сообщений.  Модулю для удобства можно дать имя.
Кликнув на модуль можно посмотреть уникальные события от этого модуля, они по 8 байт.
Новые сообщения появляются снизу.
Теперь стало ясно, все модули  машины тупо  посылают своё состояние в сеть.
В большинстве сообщений меняются только старшие биты первого байта - похоже циклический код.
Добавил маску по байтам - одну глобальную, и одну для каждого модуля.
Поставил 3F в первом байте, проигнорировав первых 5 бит.
О! стало значительно меньше уникальных сообщений.
Для удобства сделал сброс количества сообщений, и глобально и по модулям.
Теперь стало понятно, ждем пока система успокоится - перестанут расти количества уникальных сообщений. Далее нажимаю кнопку на руле. О! несколько модулей выдали новое сообщение.
Сбрасываю список соотношений в подозрительный модулях, и повторяю нажатие кнопки.
Только один модуль явно посылает одно новое сообщение одновременно с кнопкой. Есть ещё модули которые лупят сообщения, но явно не одновременно с кнопкой.
Для сравнения двух сообщения сделал окно побитного сравнения
Вот и кнопки:
Адрес swm 00404066
nav enter
........ ........ ........ ........:........ ........ ..1..... ........
nav back
........ ........ ........ ........:........ ........ ...1.... ........
nav up
........ ........ ........ ........:........ ........ ....1... ........
nav down
........ ........ ........ ........:........ ........ .....1.. ........
nav left
........ ........ ........ ........:........ ........ .......1 ........
nav right
........ ........ ........ ........:........ ........ ......1. ........

Так потихоньку собрал, то что мне нужно:
Состояние кнопок на руле, дистанцию парктроников, уровень освещенности, позицию ключа зажигания, позицию коробки передач P,R,N,D, кнопка включения/отключения парктроников.
Заодно и другая инфа попадалась.

На основе собранной информации за долгие новогодние выходные родился Volvo Can Adapter.
Адаптер выложен на Github. Arduino, CAN адаптер, цифровой резистор для эмуляции нажатий кнопок.
Пригодился модуль телефона из машины, он стал донором зеленого разъема, как раз на него в машине приходит CAN low-speed шина
Поскольку на него шли еще несколько проводов от SIM карты ICM модуля я их обрезал (уж точно SIM карта никому в машине не понадобится), и через них подключил модуль к питанию. А так пока ни один провод машины не поврежден, и можно все модули вернуть назад.


Итак:
Модуль отслеживает положение ключа зажигания, и через реле дает питание на радио.
Модуль отслеживает положения переключателя передач, и выдает сигнал заднего хода на радио, радио выключает звук (как было в штатной системе).
Одновременно пищит через центральный динамик около монитора навигации, с разными интервалами в зависимости от расстояния (штатная система использовала динамик в правой задней двери, что было как-то странно). Кнопкой парктроника в блоке климата можно отключить звук и включить обратно.
При падении освещенности ниже определенного уровня (взял пасмурный день) модуль выдает сигнал на радио, и радио включает подсветку.
Модуль отслеживает 12 кнопок управления на руле, и эмулирует резистивные кнопки для радио. В радио можно запрограммировать их на любое поведение.

Настроил регулировать громкость, переключать треки, принимать, отклонять звонки, Back, Home в Androide, запуск Waze, включение видео с регистратора, переключение на радио.

Есть еще длинное нажатие кнопки, я было настроил по долгому нажатию Volume down - выключить звук. Но китайцы подвели, радио не запоминают эту настройку после выключения.

 Заодно поменял  прикуриватель на USB зарядку.









Сабвуфер для Тыквы

Радио с Android фирмы Тыква поставил. У радио есть выход на сабвуфер. Под сидением пассажира освободилось место - как раз для саба.

Места маловато конечно, динамик такого размера пришлось поискать.
Заказал динамик на Amazon, усилитель D класса на Aliexpress.
Вот и он:
Реле подключает усилок напрямую к аккумулятору (точнее через предохранитель аудио системы), по сигналу с радио. Проводку радио пришлось доработать


Влез на штатное место усилителя
Решетка от Honda Accord закрыла все безобразие


Volvo ICM превращается в Тыкву или Установка радио с Android в XC90

В ходе работ ни один провод машины не был перерезан!

Захотелось мне расширить возможности штатной аудиосистемы XC90.
В Volvo S80 это было легко, устанавливаешь за 100 евро модуль Yatour, и получаешь Bluetooth подключение к телефону,  MP3 флешки (эмулятор CD ченжера, 15 дисков по 99 песен). И кнопки на руле работают.
Но инженеры в XC90 пошли другим путем, запили оптическую аудио сеть MOST. А китайские инженеры Yatour это не осилили. Все оказалось грустно. Единственный путь это MOST адаптер за несоразмерные деньги (около 250 евро), плюс комментарии, что Volvo в свою сеть не пускает чужих, надо просить в авторизованном сервисе отключить защиту сети.
Пока я думал ставить/не ставить, машина решила за меня - сдохло штатное радио. Точнее ICM (Entertainment control module - смешно) - Как оказалось типичная проблема. Толи конденсаторы высыхают, то ли пайка потрескалась. Ремонт - лотерея, может прослужит год, может неделю, может повезет и все будет хорошо.
Отличные новости! Ремонт + мост адаптер уже под 350 евро. За дубовое радио с черно-белым дисплеем - нет спасибо. Решено менять на радио с Android (в народе китайская балалайка).

Полистав обзоры было выбрано устройство "известной" фирмы Pumpkin :) Пусть будет Тыква, плохого особо не писали, сайт в Европе есть, PayPal принимают, по Европе доставляют. 290 евро.
Практически те же деньги.

Выбирал чтоб было - дисплей 7", 1024х768, 2GB RAM, Bluetooth, Wifi, 3G modem, Видео вход, управление кнопками на руле и т.д.

Так же на Aliexpress была заказана рамка.
На Ebay - провода, чтобы ничего не резать в машине (искать CABLE BLUETOOTH VOLVO XC90).
У моей XC90 переднее стекло со спец покрытием от солнца, которое заодно гасит радио сигналы, поэтому разместить GPS антену под торпедой - получить плохой сигнал. Родные антенны размещены в крыше,  в задней части есть пластмассовая вставка - под ней.

Чтобы дотащить до радио купил удлинитель для радио антены, удлинитель для GPS антенны.
Заодно заказал видеорегистратор  без экрана, видеовход у радио есть.

Начал прокладку проводов со стороны багажника. Заодно проложил провод от видеокамеры из двери багажника.

Снял обшивку потока и боковые панели.
Демонтировал антенный модуль
От него нужна только FM антенна
Сделал переходник для удлинителя
Вернул на место
GPS антенну приклеил рядом

Провел провода до передней стойки
Спустил по передней стойке, добавив заодно провод от видеорегистратора и провод выносного микрофона для радио от зеркала заднего вида
 (пробовал родной вольвовский микрофон встроенный в зеркало, но слабый сигнал, в будущем возможно поставлю усилитель)

Регистратор приклеил к корпусу датчика дождя


Все затянул в центр

ВАЖНО! Сигнал CAN шины проходит через ICM модуль, если его не подключить, получите кучу ошибок. Нужно восстановить соединение, я взял 2.54мм гребенку и соединил пины зеленых проводов, и пины белых. Вот этот разъем:


Далее демонтировал аудио модуль - усилитель
Используя разъемы от ебеевского кита спаял кабель для подключения радио, встали как родные
Протестировал


Сигнал от выносной антенны (шла вместе с радио) отличный
Главный экран радио

Можно устанавливать!
Старое радио

Выбрасываем мертвый ICM и ненужный ченжер
Рамка для 2DIN
Все в сборе
Установка в машину



Итог:
Получено куча плюшек! Любые программы навигации Waze, Igo, любые форматы видео, аудио, можно стримать музыку с телефона, можно принимать звонки, показывает кто звонит, скачивает контакты с телефона.
Просмотр записей видеорегистратора на большом экране, а регистраторы без экрана заметно дешевле (меньше 20 евро).


Не обошось и без потерь: перестали работать кнопки на руле, парктроник Volvo работали через родную аудио систему, которой теперь нет. 
(Уже сделано, запилил CAN адаптер, кнопки работают, парктроники тоже).
Но поскольку уже была подключена видеокамера заднего вида к родному вольвовскому монитору навигации, то потеря невелика.


Ну и машина стала легче килограмм на 15! Динамика улучшилась :)






Замена чехла ручки переключения передач Volvo XC90

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

Предварительно почитав интернет, как заменить чехол, заказал на Ali что-то похожее:

Линк: Car Gear Shift Collars Sticker Gaiter Knob Boot Cover PU Leather Case For ford focus 2005-2011 Car Styling
Цена 2.5 евро.

Снятие несложное (много информации на Ютубе):
Аккуратно приподнимаем панель (та что под дерево). Затем снизу отщелкиваем вставку( та что под аллюминий), и вынимаем ее, панель можно убрать в сторону.
Дальше доволько кропотливо отщелкивая защелки, нужно извлечь рамку чехла из "аллюминиевой" вставки.
Пропустив чехол через нее, так чтобы его рамка была сверху, нужно снять кольцо, фиксирующее верх чехла.
Теперь можно выдергивать ручку. АККУРАТНО! Тянуть надо сильно! Некоторые умудрились при выдергивании, по инерции разбить стекло.
Лучше переключить в позицию D. Я отодвинул сидения, сел на подлокотник, и упершись локтями в колени сильно потянул вверх. Вышла нетрудно.


Больной и здоровый чехол:
Подрезал новый по образцу, прорези удобно делать кусачками, сложив дермантин пополам. 
Закрепил на рамке и защекнул обратно:

Сборка в обратной последовательности.
Итог: