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

title_pic

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

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

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

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

Первым делом возник вопрос, а ка же проверять работоспособность схемы и программы, не гонять же постоянно автомобиль. И решение было найдено, есть программа эмулятор, которая успешно запустилась под Windows 10. Программа называется OBDSim - https://icculus.org/obdgpslogger/obdsim.html.

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

obdsim-gui2

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

 obdsim.exe -w COM9

ну или тем 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 следующие команды:

 AT+INIT
 AT+ORGL
 AT+ROLE=1
 AT+RESET
 AT+INIT
 AT+RMAAD
 AT+CMODE=1
 AT+INQM=0,6,20
 AT+CLASS=0
 AT+INQ

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

dispaly00001

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

 AT+INQC
 AT+RESET
 AT+INIT
 AT+CMODE=0
 AT+PSWD=XXXX
 AT+RESET
 AT+INIT
 AT+PAIR=XXXXXX,XX,XXXX,30
 AT+BIND=XXXXXX,XX,XXXX
 AT+LINK=XXXXXX,XX,XXXX

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

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

dispaly00002

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

dispaly00003

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

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

dispaly00004

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

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

   { VEHICLE_SPEED, string5, NULL, string5_1 },
  { ENGINE_RPM, string4, NULL, string4_1 },
  { ENGINE_LOAD, string0, NULL, string0_1 },
  { ENGINE_COOLANT_TEMP, string1, NULL, string1_1 },
  { FUEL_PRESSURE, string2, NULL, string2_1 },
  { INTAKE_MANIFOLD_ABS_PRESSURE, string3_0, string3_1, string3_2 },
  { TIMING_ADVANCE, string6, NULL, string6_1 },
  { INTAKE_AIR_TEMP, string7, NULL, string7_1 },
  { MAF_FLOW_RATE, string8, NULL, string8_1 },
  { THROTTLE_POSITION, string9, NULL, string9_1 },
  { RUN_TIME_SINCE_ENGINE_START, string10, NULL, string10_1 },
  { DISTANCE_TRAVELED_WITH_MIL_ON, string11_0, string11_1, string11_2 },
  { FUEL_RAIL_PRESSURE, string12_0, string12_1, string12_2 },
  { FUEL_RAIL_GUAGE_PRESSURE, string13_0, string13_1, string13_2 },
  { FUEL_TANK_LEVEL_INPUT, string14, NULL, string14_1 },
  { ABS_BAROMETRIC_PRESSURE, string15, NULL, string15_1 },
  { CONTROL_MODULE_VOLTAGE, string16, NULL, string16_1 },
  { ABS_LOAD_VALUE , string17, NULL, string17_1 },
  { RELATIVE_THROTTLE_POSITION, string18, NULL, string18_1 },
  { AMBIENT_AIR_TEMP, string19, NULL, string19_1 },
  { ETHONOL_FUEL_PERCENT, string20, NULL, string20_1 },
  { RELATIVE_ACCELERATOR_PEDAL_POS, string21_0, string21_1, string21_2 },
  { ENGINE_OIL_TEMP, string22, NULL, string22_1 },
  { FUEL_INJECTION_TIMING, string23, NULL, string23_1 },

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

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

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

Видео моделирования:

Добавить комментарий

Предыдущая запись