В первой статье «Хакаем CAN шину авто для голосового управления» я подключался непосредственно к CAN шине Comfort в двери своего авто и исследовал пролетающий траффик, это позволило определить команды управления стеклоподъемниками, центральным замком и др.
В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).
Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.
В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.
- CAN сниффер из Arduino Uno
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
Под катом полная реализация проекта, будет интересно!
Водительская дверь открыта
- CAN сниффер из Arduino Uno
- Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
- Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
- Софт панели приборов на Python и Kivy (UI framework)
- Видео работы цифровой панели приборов на базе Raspberry Pi
- Приложение на телефон Виртуальная панель приборов
- Расшифровка данных в CAN шине VW Polo sedan
- 1. Бинарные датчики
- 2. Быстро меняющиеся датчики
- 3. Температурные датчики
- 4. Пробег автомобиля
- 6. Датчики уровня
- 6. Датчики индикации
- 7. Датчики с запросами
- 💡 Видео
CAN сниффер из Arduino Uno
Чтобы послушать, что отправляет VCDS в CAN шину я собрал сниффер на макетке из Arduino и модуля MCP2515 TJA1050 Niren.
Схема подключения следующая:
Для прослушивания трафика использовал анализатор CanHackerV2 и прошивку arduino-canhacker для Arduino, которая реализует API совместимое с этой программой. Прошивка в гите https://github.com/autowp/arduino-canhacker.
CanHackerV2 позволяет смотреть пролетающий трафик, записывать и проигрывать команды с заданным интервалом, что очень сильно помогает в анализе данных.
Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
Описание VCDS с официального сайта ru.ross-tech.com:
Программно-аппаратный сканер VCDS предназначен для диагностики электронных систем управления, устанавливаемых на автомобилях группы VAG. Доступ ко всем системам: двигатель, ACP, АБС, климат-контроль, кузовая электроника и т.п., считывание и стирание кодов неисправностей, вывод текущих параметров, активация, базовые установки, адаптация, кодирование и т.п.
Подключив сниффер к линиям CAN_L и CAN_H в диагностическом шнурке я смог увидеть какие запросы делает VCDS и что отвечает авто.
Особенность авто группы VAG в том, что OBD2 разъем подключен к CAN шине через шлюз и шлюз не пропускает весь гуляющий по сети трафик, т.е. подключившись в OBD2 разъем сниффером вы ничего не увидите. Чтобы получить данные в OBD2 разъёме нужно отправлять шлюзу специальные запросы. Эти запросы и ответы видно при прослушивании трафика от VCDS. Например вот так можно получить пробег.
В VCDS можно получить информацию почти с любого датчика в машине. Меня в первую очередь интересовала информация, которой вообще нет на моей приборке, это:
- температура масла
- какая именно дверь открыта
Видео:Кан шина, что это? Поймет школьник! принцип работыСкачать
Скорость, обороты, температура ОЖ, пробег, расход, место в баке и другие запросы я тоже получил, для справки размещу.
Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
В качестве аппаратной части я выбрал Raspberry Pi. Была идея использовать Android планшет, но показалось, что на Raspberry Pi будет проще и быстрее. В итоге докупил официальный 7″ дисплей, и сделал CAN шилд из модуля TJA1050 Niren.
OBD2 штекер использовал от старого ELM327 адаптера.
Используются контакты: CAN_L, CAN_H, +12, GND.
Тесты в машине прошли успешно и теперь нужно было все собрать. Плату дисплея, Raspberry Pi и блок питания разместил на куске черного пластика, очень удачно подобрал пластмассовые втулки, с ними ничего не болтается и надежно закреплено.
Местом установки выбрал бардачок на торпедо, которым я не пользуюсь. По примеркам в него как раз помещается весь бутерброд.
Напильником довел лист черного пластика до размера крышки бардачка, к нему прикрепил бутерброд и дисплей. Для прототипа сойдет, а 3D модель с крышкой для дисплея и всеми нужными крепежами уже в разработке.
Софт панели приборов на Python и Kivy (UI framework)
Параллельно со сборкой самой панели приборов я вел разработку приложения для отображения информации с датчиков. В самом начале я не планировал какой либо дизайн.
Первая версия панели приборов
По мере разработки решил визуализировать данные более наглядно. Хотел гоночный дизайн, а получилось, что-то в стиле 80-х.
Вторая версия панели приборов
Продолжив поиски более современного дизайна я обратил внимание какие цифровые приборки делают автопроизводители и постарался сделать что-то похожее.
Третья версия панели приборов
Ранее, я никогда не разрабатывал графические приложения под Linux поэтому не знал с чего начать. Вариант на вебе простой в разработке, но слишком много лишних компонентов: иксы, браузер, nodejs, хотелось быстрой загрузки. Попробовав Qt PySide2 я понял, что это займет у меня много времени, т.к. мало опыта. Остановился на Kivy — графический фреймворк для Python, простой в понимании с полной библиотекой графических элементов и дающий возможность быстро создать мобильный интерфейс.
Kivy позволяет запускать приложение без Иксов, прямо из консоли, в качестве рендера используется OpenGL. Благодаря этому полная загрузка системы может происходить за 10 секунд.
Алгоритм работы следующий, используется 3 потока:
- В главном потоке работаем с графическими элементы (спидометр, тахометр, часы, температуры и др) на экране
- Во втором потоке каждые 5 мс делаем опрос следующего датчика
- В третьем потоке слушаем CAN шину, получив ответ парсим его и обновляем соответствующий графический элемент
Работает стабильно, самый долгий процесс в разработке был связан с рисованием дизайна. На данный момент обкатываю решение и потихоньку пишу мобильное приложение для iOS, чтобы любой мог попробовать цифровую панель приборов.
Видео:Подробно про CAN шинуСкачать
Читайте также: Средство для консервации шин автомобиля
Проект цифровой панель приборов открытый. Рад буду предложениям и комментариям!
Видео работы цифровой панели приборов на базе Raspberry Pi
Приложение на телефон Виртуальная панель приборов
Для телефона написал приложение — виртуальная панель приборов, данные от машины передаются через ELM327 Wi-Fi адаптер. Адаптер подключается в OBD2 разъем, делает запросы по CAN шине и возвращается ответы в приложение по Wi-Fi.
Приложение VAG Virtual Cockpit уже в AppStore. Пока, что только под iPhone/iPad, но Android версия планируется. Приложение решил сделать платным с минимальной символической стоимостью.
Если есть желание поддержать проект, то вот ссылка на приложение, принимаю любые замечания и предложения!
VAG Virtual Cockpit
Расшифровка данных в CAN шине VW Polo sedan
Сегодня мы поговорим о методах расшифровки данных CAN шины на примере автомобиля VW Polo Sedan 2019 года выпуска. В интернете такие статьи часто называют Хаками CAN шины, но мне такое название не по душе.
В статье описаны методики поиска нужных данных в CAN шине автомобиля, примеры применения этих методик на VW Polo Sedan. В качестве оборудования для подключения к CAN шине используется Vega MTX. Еще чуть-чуть поговорим о телематике. Под катом много картинок по теме, несколько gif и видео.
Пару слов о себе.
Зовут меня Фокин Алексей, в данный момент я работаю в компании Вега Абсолют vega_absolute. Центральный офис в г. Новосибирск, но я работаю в г. Москва. Одно из наших направлений — телематика. Мы делаем оборудование для отслеживания коммерческого транспорта, каршерингов, такси и т.д. Моя работа заключается в том, что я собираю данные с автомобилей и превращаю их в настройки для нашего оборудования.
Подключение к CAN шине произведено в двух местах: за приборной панелью (шина 500 Kbit/s) и за магнитолой (100 Kbit/s). Так же есть одно дублирующее подключение — подключение к разъему OBDII непосредственно на самом разъеме (500 Kbit/s).
Из использованных инструментов: блок мониторинга транспорта Vega MTX, оснащенный CAN сканером. Для его настройки на ПК программа Конфигуратор 1.27.14.
Больше информации о подключении к автомобилю и о MTX можно получить из видео, которое будет в конце статьи.
При подключении ко всем CAN шинам мы увидим такую картину:
В этом потоке данных надо найти те биты и байты, которые отвечают за нужные нам параметры.
На скриншоте ниже показано сколько датчиков в данный момент прописано в блоке телематики, и это еще не полный список. Можно уходить еще глубже и искать еще большее количество датчиков. Часть из этих датчиков в режиме реального времени отсылает показания на сервера, что позволяет в любой момент видеть состояние своего автомобиля.
Телематика — тема для отдельной статьи, поэтому не будем тут подробно на этом останавливаться.
Сразу появляется вопрос — зачем нужно искать данные в потоке, если можно их увидеть через ELM327 или другие диагностические приборы?
Здесь уже вопрос в том, для чего нам нужны эти данные. В нашем случае данные нам нужны для телематики, и, чтобы не вмешиваться в работу CAN шины, и не слать в нее ни каких данных, мы ищем их в потоке. В Vega MTX есть специальный режим работы с CAN шиной — режим «прослушивания». Режим говорит сам за себя, оборудование только слушает кан шину и ничего в нее не отправляет, тем самым минимизируя какие либо воздействия на штатную систему автомобиля.
К примеру датчик на открытие двери. Если мы будет его спрашивать запросом, то мы сможем это делать только на включенном зажигании. После выключения зажигания и засыпания CAN шины этот датчик будет нам недоступен. Если же мы найдем этот датчик в CAN потоке, то мы будем его видеть все время, когда работает CAN шина. А, при открытии двери, CAN будет просыпаться автоматически.
Также следует понимать, что все приведенные ниже примеры актуальны только для Polo Sedan в комплектации connect. В других комплектация может не быть каких-то из приведенных датчиков, а для других марок и моделей автомобилей данные будут находится совершенно в других ID.
Обращаю внимание, что по умолчанию в Конфигураторе стоит отображение значений в HEX формате. В дальнейшем нам не раз придется переводить данные из HEX формата в десятичные значения. Легче всего это сделать с помощью встроенного в Windows 10 приложения Калькулятор. Переводим его в режим “программист” и у нас появляется выбор, в какой системе счисления вводить данные, и они дублируются в других системах счисления.
По методу поиска все датчики в автомобиле я разделяю на несколько типов:
- Бинарные датчики.
- Быстро меняющиеся датчики.
- Температурные датчики.
- Пробег автомобиля.
- Датчики уровня.
- Датчики индикации.
- Датчики с запросами.
Теперь перейдем к методам, с помощью которых можно найти каждый тип датчиков.
1. Бинарные датчики
Видео:Для чего служит CAN-шина в сигнализацииСкачать
Начнем с самых простых датчиков, бинарных.
К этим датчикам относятся датчики дверей, ремни безопасности, тормоз (горят ли стоп сигналы), ручной тормоз, нажаты ли кнопки и т.д. Их значение помещается в 1 бит, то есть может быть 0 (дверь закрыта) или 1 (дверь открыта).
Поиск их прост, но требует внимательности. Для поиска двери водителя надо открывать/закрывать дверь и смотреть, что меняется в CAN шине.
Конфигуратор подсвечивает красным те данные, в которых были изменения в течении нескольких последних секунд.
В нашем случае за дверь водителя отвечает нулевой бит первого байта сообщения с ID 470.
В том же байте лежат датчики все остальных дверей + датчик багажника.
Читайте также: Самые прочные шины по боковине
2. Быстро меняющиеся датчики
Быстро меняющиеся датчики похожи на бинарные датчики, только их значение больше, чем 1 бит. На эти датчики мы можем воздействовать и сразу же видеть изменения в CAN — шине.
К таким датчика относятся большинство датчиков положения: положения педали газа, положение стекол, положение АКПП, положение ключа зажигания. Помимо них это датчики скорости, оборотов, датчики ускорения руля, ускорения педали газа и т.д.
Для начала разберемся с датчиками положения на примере датчика положения педали газа.
Для этого глушим автомобиль, включением зажигание и, не заводя двигателя, нажимаем на педаль газа и следим за изменением в CAN шине.
Как правило, при отпущенной педали газа значение этого датчика 0, и, по мере нажатия на педаль газа, увеличивается до какого либо значения. Такой параметр мы видим в первом CAN в ID 280. Пятый байт изменяется от 0 (педаль отпущена) до FA (педаль нажата “в пол”).
Если перевести FA из HEX в DEC, то получим число 250. Следовательно, чтобы получить нажатие на педаль газа в процентах (от 0 до 100) надо умножить наше значение на 0.4.
Теперь перейдем к датчикам, которые не влезают в один байт, например, к оборотам двигателя. Плавно повышаем и понижаем обороты двигателя, при этом смотрим, что меняется в CAN шине. Обороты двигателя находятся в том же ID, что и педаль газа.
Поработав педалью газа можно понять, что данные тут стоят в обратном порядке. То есть старшая часть находится в 3м байте (считаем байты с нулевого), а младшая во втором байте.
Дальше надо перевести данные из HEX в DEC.
Дальше надо оценить реальные обороты по тахометру, или по диагностическим приборам. В моем случае стрелка была, примерно на 1600 об/мин по тахометру.
Дальше делим данные из CAN в десятичном формате (6508) на обороты двигателя с тахометра (1600) получаем 4.0675. Учитывая погрешность определения оборотов на глаз, округляем делитель до 4. После этого надо проверить показания по нескольким точкам. Для этого педалью газа выставляем разные обороты двигателя и сверяем их с данными из CAN шины.
В конфигураторе можно подставить все коэффициенты в настройки датчика и в режиме реального времени смотреть за изменениями оборотов.
Таким образом ищется большое число датчиков: усилия на тормозе, положение руля, ускорение руля, скорость автомобиля и т.д.
3. Температурные датчики
В Polo Sedan найти температуру было очень сложно. Для начала был найден байт, который медленно изменялся в большую сторону при нагреве автомобиля. После этого начинались поиски нужных коэффициентов.
Подключаем диагностику, выбираем температуру двигателя, и сравниваем показания CAN шины и данных из диагностики. Строим таблицу соответствия и подбираем коэффициенты.
В результате подбора коэффициентов появилась формула для расчета температуры.
XX* 0.75 — 48
где XX — значение 1 байта из ID 288 в DEC.
Видео:Мерседес разьем CAN шины, как выглядит и где?Скачать
по формуле можно подсчитать, что на скриншоте была температура
где 179 это переведенное в десятичную систему число B3 из первого байта ID 288.
Но это тяжелый случай, на многих авто температура ищется намного легче.
Так как в шине сложно передать отрицательное число, то производители в качестве 0 измерений принимают значение -40°C, -48°C или -58°C. Поэтому подключаем диагностику и смотрим, какое сейчас значение температуры. Прибавляем к этому значения 40 (48 или 58), и переводим в HEX. Ищем полученное число в потоке. Ждем когда температура машины изменится на один градус и сверяем с найденным значением. Если его значение тоже увеличилось на 1, значит это нужный нам датчик.
Важно не путать значения из CAN шины со значениями диагностических запросов. Если одновременно будете искать показания в шине и будет подключен диагностический прибор, то в шине появятся еще и ответы на диагностические запросы. Их можно определить по ID. Обычно все, что идет свыше 700 ID — диагностические запросы и ответы.
Так же температуру охлаждающей жидкости всегда можно сделать запросом, о данном методе будет описано ниже в разделе о датчиках с запросами.
Можно для поиска температуры воспользоваться и другим методом: находим физически датчик температуры охлаждающей жидкости (ДТОЖ) на двигателе, отключаем его и подключаем к проводке автомобиля переменный резистор. Далее вращая резистор и следя за CAN шиной по методике поиска быстро меняющихся данных, можно найти показания температуры двигателя.
На практике таким методом не пользовался, так как ТОЖ всегда находилась или в потоке, или спрашивали машину запросом.
4. Пробег автомобиля
Один из самых важных параметров для телематики.
Для начала надо оценить, каких размеров мы ищем число. Если взять 2 байта (16 бит) данных, то в них максимум влезет число FF FF = 65 535. Автомобиль явно может проехать свыше 65 тысяч, значит пробег автомобиля должен быть минимум 24 бит длинной. Туда уже влезет 16 млн. км., что явно достаточно для пробега.
Но опять же, в разных автомобилях по разному. В Polo Sedan пробег пишется в км, в некоторых французах он передается с точностью до 100 метров. тогда число может занимать и 32 и больше бит.
Дальше для поиска следует взять пробег с приборной панели автомобиля и перевести его в HEX.
В нашем случае это 5732 км. Переводим его в HEX и получаем 16 64. Дальше поиском надо найти строку, где будет встречаться эта комбинация. Искать надо по одному байту, то есть сначала искать 16, потом в найденых вариантах смотреть, есть ли рядом с числом 16 еще и число 64. Число 64 может быть как слева, так и справа от числа 16. Так как пробег в этом автомобиле не большой, то, вероятнее всего, рядом с числом 64 так же будет 00. В Конфигураторе есть удобный поиск (CTRL + F), если пользуетесь другим инструментом, то придется искать вручную эти данные.
Читайте также: Шины в семенове нижегородской области
В нашем случае пробег найден в 520 ID
Для проверки желательно проехать еще несколько километров и проверить значение найденного датчика.
Таким же образом ищется пробег до заправки. В этом автомобиле приборная панель пробег до заправки не передает в шину, поэтому он сделан запросом.
6. Датчики уровня
Второй наиболее важный датчик для телематики — датчик уровня топлива. Можно его найти или в потоке, что предпочтительно, или запросом (менее предпочтительно, но в некоторых авто по другому не получится).
Для начала надо найти показания уровня топлива в диагностическом приборе. У меня уровень топлива нашелся в комбинации приборов (17 блок). В комбинации приборов показания с датчика уровня идут в литрах.
Сейчас в автомобиле 21 литр топлива.
Переводим 21 из DEC в HEX и получаем число 15. Поиском пробуем найти его. В потоке находится данное число в ID 320. Если число не находится, то нужно попробовать искать значения на единицу больше или меньше. В некоторых авто топливо идет с точностью в пол литра, потому надо поискать значение в 2 раза больше.
Видео:CAN шина диагностика InsigniaСкачать
После того, как найден уровень топлива надо залить в автомобиль несколько литров топлива и посмотреть за результатом.
Так же можно разобрать бензобак, вытащить ДУТ из бака и перемещать его, следя за показания CAN шины. Или же снять разъем с ДУТ и подключить туда переменный резистор. Вращая его и следя за изменениями можно найти датчик уровня топлива. Если решили разбирать, тогда уровень топлива следует искать по методике поиска быстро меняющихся датчиков.
Так же при поиске не следует брать во внимание данные с ID свыше 700. Это диагностические запросы. После отключения диагностического оборудования эти данные пропадут. Более подробно с запросами мы разберемся ниже.
К примеру ответ на запросы диагностического оборудования уровня топлива из приборной панели выглядит так.
Также уровень топлива (в процентах) можно найти в стандартных OBDII запросах, но на VAG группе они не всегда показывают верные данные. На Skoda Rapid и Skoda Oktavia при полном баке диагностика показывает уровень топлива 85 %.
6. Датчики индикации
Датчики индикации сильно похожи на бинарные датчики, и искать их следует по той же методике. К этим датчикам относятся разнообразные иконки на приборной панели. К примеру состояние значка Check Engine находится в первом байте ID 480. При включении зажигания в этом датчике 2С.
После запуска, когда погаснет значок Check Engine (CE) в этом датчике будут 00.
Теперь остается вопрос, какой именно бит отвечает за значок CE. Переводим 2C в BIN и получаем число 0010 1100.
Дальше копируем весь 480 ID, изменяем первый байт на 2C (0010 1100) и пробуем посылать этот пакет в автомобиль.
Внимание!, слать данные в автомобиль не всегда безопасно, можно что нибудь сломать, или накрутить пробег. Прибегать к этому методу стоит только в случае, если датчик не смогли найти методом поиска бинарных датчиков.
В моем случае я слал в заведенный авто (что делать не рекомендуется) и у меня на приборке моргает значок CE и EPC.
Дальше посылаем вместо 2C (0010 1100) 08 (0000 1000). На приборке начинает моргать CE. Следовательно 3 бит отвечает именно за эту иконку.
Если слать 04 (0000 0100), то моргает значок EPC.
7. Датчики с запросами
Не все данные можно найти в потоке. К примеру в дизельном VW Transporter T4 в потоке нет температуры двигателя. Ее нет и на приборке. Поэтому приходится автомобиль спрашивать об этих параметрах. То же самое относится к уровню топлива на Rio\Solaris.
В этом примере попробуем спросить уровень топлива Polo Sedan. Заходим в 17 блок, как это мы делали в пункте про поиск уровня топлива, и спрашиваем приборную панель. Проанализировав запросы мы видим, что диагностика спрашивает уровень топлива следующей командой:
Дальше копируем ID 714, отключаем диагностический прибор и пробуем послать в автомобиль запрос. Если в ID 77E приходит такой же ответ, какой был при подключенной диагностике, то мы получили пакет с уровнем топлива (4 байт. HEX 15 = DEC 21 ) 21 литр.
В Vega MTX есть встроенные средства работы с датчиками с запросами. Там можно настроить, что бы запросы слались после включения зажигания с определенным интервалом или при соблюдение каких то условий.
На этом заканчиваю с методикой поиска данных в CAN шине. Если кто знает еще какие методики поиска нужных данных в CAN шине или поделится своим опытом, то с удовольствием выслушаю их.
До написания данной статьи делал видео по этой теме. В видео есть больше информации по подключению к CAN шине автомобиля, работе с Конфигуратором и файловым сервером
На сервере есть настройки для некоторых легковых автомобилей, грузовиков и сельскохозяйственной техники. Все файлы лежат в зашифрованном виде, можно увидеть какие датчики видны в CAN автомобиля. При подключении будут видны значения датчиков, но посмотреть адреса не получится.
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
Видео:Компьютерная диагностика авто. K-линия и CAN шинаСкачать
💡 Видео
CAN-шина, простой поиск данных в кан шине автомобиля. Как расшифровать и найти данные в кан шине?Скачать
Успей КУПИТЬ ИМБУ всего за 3К БОН! Вот почему нужно поторопиться! (Если ещё не купил)Скачать
ford focus 3 проблема с CAN шиной комфортаСкачать
#2. Возможности Galileosky по работе с CAN-шиной. Какие параметры можно получить из CAN-шины?Скачать
CAN Эмулятор скорости из модуля CAN StarLine Stm32f103c8t6 Подмотчик скорости по кан шине (без схем)Скачать
CAN Считывание и определение данных уровня топлива из CAN шиныСкачать
4 правила работы с CAN в Easy logic | Easy Logic Creators | Урок 5.1Скачать
MAN контроль топлива.CAN шина и Датчик Уровня Топлива.Скачать
ESP32 CAN Monitor Сборка (простейший монитор шины CAN на ESP32)Скачать
Пробег автомобиля: поиск данных в CAN и использование в Easy LogicСкачать
CAN - шина в Passat B5 1997 годаСкачать
CAN Hacker (сниффер/эмулятор/анализатор CAN-шины) Ford (Bosch) + Suzuki (Denso)Скачать
Когда тренер - твой друг😏Скачать
Гидравлический Пресс против 1000 Листов Бумаги!Скачать