Ардуино obd2 сканер своими руками

Обновлено: 05.07.2024

Короче, ты вообще не шаришь в теме. Читай про CAN-bus, бро. В современных авто используется криптография, т.к. производителям нафиг не надо, чтобы там лазили криворукие кулибины.

Без защиты, любой автосканер стоил бы 5 баксов - цена CANbus трансмиттера. Подключился и вся машина как на ладони. Мечтать не вредно.

Температуры ОЖ, Воздуха на впуске второй, далее датчик Хола, датчик положения Коленвала, датчик разряжения на впуске(либо ДМРВ вместо него, главно определить объем , который всосался через коллектор:-) ), и шестой пока вакантный, так как не знаю как прописать действия при детонации! данные мозги пока без лямбды

по порядку начнем!

стабилитрон нужен для того чтобы питание перевести с бортовой 12 вольт, на 5 вольт! так как Ардуино не примет 12 вольт и просто спалится! кандеры подбирал и чтобы получилось 5 вольт на выходе из входных 12! но это не на все моменты, для других случаев используется транзисторный ключ(который будет выполнять роль реле) это касается тех же самых форсунок.
я не говорю что я супер радиоэлектрик, я любитель, но это не означает что я не имею ни морального ни какого права собирать такого рода устройства! есть желание, есть цель, есть соовтетсвующая литература. и я надеюсь найти поддержку, здравую критику тоже допускаю:-)

Здравая критика - в обычной бортовой сети напряжение прыгает от 9 до 14.5 Вольт.
Ардуинка должна работать, когда в сети идут мощные броски напряжения при запуске и дикие "иглы" при неисправном генераторе.

Это так, начальное ТЗ по питанию. Кроме всего прочего - в обратной связи с датчиков нужно ставить защиту от к.з. и контроль обрыва цепи.

А сама идея - хоть и хорошая, но страшненькая - к Ниссанам, Опелям и Мицу свежих годов неприменима. Про Хонду вообще молчу.

Короче, ты вообще не шаришь в теме. Читай про CAN-bus, бро. В современных авто используется криптография, т.к. производителям нафиг не надо, чтобы там лазили криворукие кулибины.

Без защиты, любой автосканер стоил бы 5 баксов - цена CANbus трансмиттера. Подключился и вся машина как на ладони. Мечтать не вредно.

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


Рабочий прототип БК с использованием LCD WH2004A I2C.


Для отображения (на данном этапе) используется одна страница:
— температура (T), Напряжение (v),
— краткосрочная топливная коррекция (STFT), долгосрочная топливная коррекция (LTFT), Обороты (R ).
— напряжение первого и второго зондов, время.
— принимаемая строка данных

Связь обеспечивается по BT через ELM327 BT с использованием OBD2 команд (протокола).
Компоненты:
— Arduino Uno;
— LCD WH2004A I2C
— модуль времени DS3231;
— модуль BT HC-05 (для связи с ELM327 BT);
— модуль SD-card;


Основная особенность — наличие модуля SD-card. Т.е. это полноценный регистратор данных (кроме GPS).
В этом плане (регистрация) конкуренцию может составить только Torque (на сколько знаю).

Валялся у меня сгоревший ELM327 адаптер для k-line на микросхеме PIC18F25K80. Поковырявшись с ним некоторое время понял, что ничего полезного не сделаю. Выбросил всю внутрянку, купил чип L9637D. И понеслось.


Напрямую arduino соединить с кан-шиной нельзя. Нужен конвертер уровней. Для этих целей подходит L9637D. Он подключается по классической схеме:


Данная схема встречается с дополнительной микросхемой ELM327. На моем ситрояне используется протокол ISO 14230. По тому достаточно только L9637D.

Схема питается от 12-и вольт в obd разьеме через линейный стабилизатор на 5 вольт.


K-line — пин 7 колодки, L-line пин 15 . земля пины 4 и 5, плюс пин 16. Общая распиновка разьема obd такая:


Соединяем Tx микросхемы L9637D с 14-ым пином Ardiono, uart пины с usb-ttl адаптером.


Загружаем скетч, запускаем и.. Я получил вот такой первый пакет:

C1 33 F1 81 66 83 F1 10 C1 E9 8F BD C2 33 F1 01 0C F3 84 F1 10 41 0C 0D 20 FF C2 33 F1 01 05 EC 83 F1 10 41 05 49 13 C2 33 F1 01 0F F6 83 F1 10 41 0F 47 1B

где
C1 33 F1 81 66 — эхо на запрос инициализации шины
83 F1 10 C1 E9 8F BD — ответ ЭБУ на запрос инициализации, C1 значит ОК
C2 33 F1 01 0C F3 — эхо на запрос оборотов двигателя
84 F1 10 41 0C 0D 20 FF — ответ ЭБУ с оборотами, где 0D 20 (HEX) >> 3360 (DEC)/4 = 840 об/мин
C2 33 F1 01 05 EC — эхо на запрос температуры ОЖ двигателя
83 F1 10 41 05 49 13 — ответ ЭБУ с температурой, где 49 (HEX) >> 73 (DEC) -40 = 33 град.
C2 33 F1 01 0F F6 — эхо на запрос температуры всасываемого воздуха
83 F1 10 41 0F 47 1B — ответ ЭБУ с температурой, где 47 (HEX) >> 71 (DEC) -40 = 31 град.


Схема Тестирование Электроника Моделирование

Появилась идея реализовать визуализатор для данных собираемых автомобильным OBD2 адаптером на базе ELM327 с поддержкой BlueTooth соединения. Хотелось обойтись без использования TorqueLite/Pro и прочих программных компонент, требующих наличие телефона.

title_pic

Взаимодействие и считывание было решено организовать с помощью Arduino Nano. Платка маленькая, большое число готовых библиотек для реализации задумки, а так же возможно питание от аккумулятора 12-ю вольтами. Т.к ток потребления сравнительно не большой, то перегрева внутреннего стабилизатора не должно быть. В крайнем случае можно поставить внешний стабилизатор до 7 вольт с радиатором, а далее уже внутренний стабилизатор на плате справится без перегрева.

Для взаимодействия был выбран модуль BlueTooth HC05/06. Все имелось в наличии, поэтому поле для экспериментов было открыто.

По задумке управляться устройство должно следующим способом:

  • сенсорная кнопка, нет дребезга и не требует усилий при нажатии.
  • переключатели, для отключения питания и принудительного сброса сохраненных настроек.

Выглядит при запуске примерно вот так:

obdsim-gui2

И может подцепиться при запуске к COM порту. Запускать нужно в командном окне, командой:

ну или тем COM портом, который создался при сопряжении с блутуз адаптером. Сам процесс сопряжения показан на видео в конце статьи.

Изначально была проведена операция сопряжения obdsim с TorqueLite, чтоб убедиться, что сопряжение работает и команды посылаемые в obdsim и ответы, воспринимаются корректно. Испытания прошли успешно, программа показала, что все изменения на телефоне воспринимаются корректно и любой изменение датчика в obdsim тут же отображается в TorqueLite.

vlcsnap-2021-07-13-22h53m16s266

Это был первый этап - проверка. Второй этап - компьютер с obdsim выступает в роли мастера, а arduino nano в связке с HC06(который может быть только в роли slave) в роли ведомого.

hc06

Для arduino nano была набросана простая программа с использованием ELMDuino и вновь симуляция закончилась успехом. Весь процесс соединения и работы устройства показан на видео в конце статьи.

И третий этап - это окончательная реализация визуализатора на HC05 в режиме master.

hc05

Сразу было решено, что сопрягать ELM327 и визуализатор нужно в автоматическом режиме, т.е перевод HC05 в режим приема команд должен сам микроконтроллер.

Была найдена библиотека, которая с небольшими изменениями (перевел ее с Serial, на SoftwareSerial) отлично заработала в проекте.

Окончательная схема получилась такая:

scheme1

и примерно так выглядит на макетке:

scm_bb

только аккумулятор 12В.

На HC05 я напаял два проводка на выходы 34 - CMD и выход 11 - RESET.

hc05_pins

И эти проводки были подсоединены к микроконтроллеру для перевода HC05 в режим передачи данных или в режим приема команд, а так же для жесткого сброса (hardReset).

В режиме команд МК посылает HC05 следующие команды:

Данный набор команд ищет все видимые устройства и по очереди показывает MAC адреса данных блутуз устройств на дисплее.

dispaly00001

Если за время отображения адреса нажать на сенсорную кнопку, то адрес запишется в постоянную память микроконтроллера и HC05 будут отправлены следующие команды:

После данного набора команд в Windows 10 появляется окошко с запросом пароля и устанавливается сопряжение. В автомобиле же в ELM327 просто устанавливается сопряжение. Работа данного устройства также показана в видео в конце статьи.

Далее HC05 сбрасывается командой HardReset и переводится в режим обмена данными. С этого момента перебираются различные скорости для SoftwareSeria от 4800 до 38400.

dispaly00002

Как только сопряжение визуализатора и ELM327 или obdsim произошло, сразу отображается дисплей с отображаемым параметром:

dispaly00003

Короткое однократное нажатие на сенсорную кнопку переключает следующий отображаемый параметр.

Долгое нажатие на сенсорную кнопку (более 5 сек, в этот момент светодиод начинает мигать) отображает экран со всеми доступными для считывания параметрами:

dispaly00004

При выключении запоминается какой параметр отображался и на какой скорости осуществлялась связь с ELM327.

На текущий момент вот доступные для считывания параметры OBD2:

Вот сам код для Arduino IDE. Для сборки необходимо установить библиотеки:

Все библиотеки есть в стандартном менеджере библиотек, кроме BluetoothHC05, которая скачивается с указанного репозитория.

Для сброса запомненных данных: адреса блутуз устройства и скорости, нужно отключить питание визуализатора, и законнектить переключателем присоединенным к ножке d12 контроллера на землю и включить визуализатор, данные мгновенно будут стерты из памяти. Обратное отключение питания и отключения земли от ножки D12 вернет МК в стандартное рабочее состояние и он снова начнет искать доступные BlueTooth устройства.

Друзья. Я в программировании новичок. Осваиваю потихоньку ардуино.
Есть идея по проекту, но пока не знаю как её реализовать. Если вам будет интересно и будет, чем помочь, буду очень признателен.
Стартуем.
Итак, в современных авто есть протокол диагностики OBD2. В специальный разъем вставляется диагностический прибор и смотрятся показания датчиков, ошибок и т.д. Есть модное устройство диагностический адаптер ELM327 - компактная коробочка которая вставляется в разъем OBD2. ELM327 имеет беспроводной интерфейс и может либо по блютусу либо по вайфаю связываться с андроид устройством. А уже на андроид устройстве запускается программа, коих есть большой выбор, и на экране можно в онлайн режиме видеть и показания скорости и оборотов и топлива и т.д.
У меня есть советский мотоцикл Урал. Несложно догадаться, что никакого ЭБУ с протоколом OBD2 там нет. Там примитивный карбюраторный двигатель и минимум электроники.
Что я хочу: создать на базе ардуино подобие ЭБУ, которое посредством простейших датчиков будет собирать данные по скорости, оборотам , температуре двигателя, напряжения в бортсети, включение света и поворотников, уровня топлива. А дальше как в иномарке
- Привязываем ELM327 к спроектированному ЭБУ а на андроид устройстве в красивой программе в виде спидометра и тахометра наблюдаем эмуляцию приборной панели. Родной советский спидометр я предполагаю выкинуть, поставить хороший держатель смартфона и перед поездкой устанавливать смартфон. Эдакая съемная приборная панль в стиле 21 века.
Я видел проекты как ардуино считывает с ELM327, но как ELM327 считывает с ардуино я не видел. В этом и вся проблема в реализации моей идеи. А собрать все датчики в кучу и превратить их показания в нули и единицы я, думаю, смогу.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

JollyBiber аватар

А зачем тут протокол OBD2 (даже забыв про то что там все идет практически "открытым" текстом)? Чтобы можно было считать ошибки и показания на сервис-центре мерседес?

Читайте также: