СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

H Бортовой компьютер для авто на Arduino своими руками за 25$ в черновиках Из песочницы

Приветствую!

Примерно за 25 долларов мы сможем сделать бортовой компьютер, умеющий считать расход топлива, показывать температуру охлаждающей жидкости, скорость авто, расстояние поездки, потраченный бензин за поездку, обороты двигателя, давление во впускном коллекторе, температуру впускного коллектора, УОЗ, коррекции топлива, вольтаж датчиков кислорода, нагрузку двигателя и многое другое. Сброс ошибок доступен в режиме «recovery» (как зайти написано ниже). Общий цикл работы с запросом всех данных из эбу происходит примерно раз в 750 мс. (при условии паузы между запросами в 65 мс, так по умолчанию)

image

Еще фото
image
image
image
image
image
image
image

Список требуемых деталей для сборки БК


1) Arduino Uno R3 — 1 шт. ~ 7 долларов:

image

2) LCD2004 жк-модуль ~ 6 долларов:

image

3) Модуль Bluetooth HC-05 ~ 4 доллара:



4) OBD ELM327 Bluetooth сканер ~ 4 доллара:



5) Резистор 10 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус ~ 3 доллара.

Настройка блютуз модуля HC-05 для работы


Подпаиваем провода к пинам блютуза: (картинку с выходами смотреть в описании требуемых деталей)

  • 1 — это TX
  • 2 — это RX
  • 12 — это 3.3V
  • 13 — это GND
  • 34 — на этот вход тоже кидаем 3,3 V (нужен для перевода модуля в режим настройки с помощью AT команд).

Подключаем блютуз модуль к ардуине для его настройки



  • 1 — TX модуля в 6 пин ардуины. (внимание будет TX в TX это не ошибка!)
  • 2 — RX модуля в 7 пин ардуины. (аналогично не ошибка!)
  • 12 — и 34 пин к 3,3V ардуины.
  • 13 — GND ардуины.

Открываем Aduino IDE 1.0.6 (использовал эту версию) и заливаем скетч через USB порт в плату.

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(6, 7); // TX | RX
void setup()
{
Serial.begin(9600);
Serial.println(«Enter AT commands:»);
BTSerial.begin(38400);
}

void loop()
{
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
}


После успешной загрузки скетча открываем: Сервис->Монитор порта. Далее снизу ставим скорость 9600 бод и NL+CR вместе.

Далее вводим команды по одной и нажимаем [Послать]. После каждого ввода должен быть ответ ok.

AT // (возможно 1 раз вылетит Error, не пугайтесь… это нормально, повторите опять)
AT+NAME=Car //Присваиваем имя модулю Car
AT+ROLE=1 // Переводим модуль в режим Мастер
AT+PSWD=1234 // Ставим пароль 1234 как на OBD ELM327
AT+BIND=AABB,CC,112233 //Прописываем Mac адрес OBD ELM327.
AT+CMODE=1 // Подключение модуля с фиксированным адресом


Заметьте, что mac-адрес вида: «AA:BB:CC:11:22:33» вводится как «AABB,CC,112233». MAC- адрес своего модуля ELM327 можете посмотреть, подключившись для начала на него со своего мобильника. (Стандартные пароли обычно: 1234, 6789, 0000).

Всё, настройка модуля Bluetooth закончена.

Теперь нужно собрать схему Arduino + блютуз + LCD-экран



Схема:


1.Начнем с подключения HC-05 Bluetooth модуля.
  • 1 — TX модуля засовываем в 7 Pin (Rx) арудины (именно TX в RX, не так как ранее);
  • 2 — RX модуля засовываем в 8 Pin (Tx) арудины;
  • 12 — Pin (3,3V) модуля в Pin 3,3V ардуины;
  • 13 — Pin (Gnd) в Gnd арудуины;
  • 34 — Pin мы никуда не подключаем (заизолируйте или отпаяйте).

2. Подключаем монитор LCD.
  • VSS экрана к GND ардуины;
  • VDD экрана к 5V ардуины;
  • V0 экрана к центральному выходу резистора;
  • RS экрана к 12 пину ардуины;
  • RW экрана к GND ардуины;
  • E экрана к 11 пину ардуины;
  • DB4 экрана к 5 пину ардуины;
  • DB5 экрана к 4 пину ардуины;
  • DB6 экрана к 3 пину ардуины;
  • DB7 экрана к 2 пину ардуины;
  • A — к 5V ардуины;
  • K — GND ардуины.

Одну из оставшихся ног потенциометра пустить на GND ардуины.

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

3. Подключаем дополнительную кнопку для переключения экранов с данными.

[1 кнопка]: один конец от нормально-открытой кнопки подключаем в GND ардуино, а второй конец в пин 10.
[2 кнопка]: GND + пин 9.

Бипер для звуковых предупреждений подключить по следующей схеме "+" к пину 13, а минус к GND ардуино.

Заливаем скетч в Arduino с помощью Aduino IDE 1.0.6 (использовал эту версию).


Единственное, в скетче присутствуют переменные, которую нужно подправить.

Нужно будет обязательно учесть три переменных:

1) ED=1.998 Например объем двигателя в литрах 1.398;
2) VE_correct=1.0; Корректировка объёмного КПД ДВС по таблице: (если расход реально меньше — то уменьшаем значение в процентном соотношении). Если не хотите калибровать добейтесь чтобы при прогретом двигателе мгновенный расход в л/час был в районе половины обьема двигателя;
3) tcorrect=1.014 (калибровка времени).
4) delay_var=65 Время паузы между запросами в ЭБУ, в дастере например все работает уже на 65 мс, а в старом chrysler cirrus надо аж 235 мс ставить.
5)speed_korrect_val=1; Корректировка скорости машины, смотреть по GPS/

Возможно, Arduino будет не точно считать время с помощью комманды millis()… Тут только вручную корректировать значение. На экране «технологический 2» будет указаны секунды: например, time_start: 23. Сравните значение с реальным. Для примера засеките 10 минут, когда значение time_start будет, например, равно 23. И выйдет, что через 600 секунд реально покажет 605. Итого 623-605=18 секунд отставание в ардуинке. То есть поправочный коэффициент tcorrect будет равен 623/605=1,02975.

Управление


[Кнопка 1], [кнопка 2] — листать экран вперед назад.
При включении при надписи «Connecting»… держать [кнопку 1] вход в режим показывания технологических экранов и параметров отдаваемых ЭБУ в 16-чном формате. Если будете включать БК не в машине то нужно отключить функцию опроса блютуз, надо продолжать держать две кнопки при надписи «Recovery»… до появлении надписи «All off»… а то экран будет все время пустой.

[Кнопка 1] + [кнопка 2]: 4 секунды — Сброс журнала общего пробега и потраченного бензина на втором экране, также это сброс ошибок на экране информации об ошибках.

Скетч:

доступен по ссылке: pastebin.com/eP20LeXX

(по умолчанию настройки в скетче на Рено Дастер 2.0)

Все, идем в машину, вставляем ELM327 в порт, ардуину в зарядку для авто и проверяем.

UPD 06.02.15: Обновлен расчет MAF по изменяемой объемной эффективности VE согласно графика при которое VE зависит от оборотов двигателя.
UPD 05.03.15: Переделан режим записи в EEPROM данных журнала пробега и расхода. Теперь данные записывает при низкой скорости от 1 до 9 км/час раз в 30 секунд, а при заведенном двигателе но скорости 0 км/час, раз в 10 секунд.
UPD 04.03.15: Обновлен режим «торможение двигателем», теперь срабатывает по нагрузке двигателя, работает корректнее чем по Fuel System Status. Расход топлива теперь изменяется по топливным коррекциям Long и Short. Также добавлено множество других правок.
UPD 26.02.15: Добавлен звуковой бипер. Если температура двигателя выше 102 градусов то вывести предупреждение о высокой температуре на экран и прогудеть бипером, так же будет звук при появлении ДжекиЧана
UPD 25.02.15: Добавлены экраны датчиков кислорода B1S1, B1S2.
UPD 24.02.15: При включении БК проверяет есть ли ошибки двигателя. При их наличии пишет сколько ошибок в двигателе, и показывает код ошибки. Сброс доступен в режиме рекавери.
UPD 23.02.15: Добавлен экран топливной коррекции.
UPD 22.02.15: Добавлен экран очистки ошибок в режиме recovery. Для очистки ошибок зажать обе кнопки на 4 секунды.
UPD 19.02.15: Добавил журнал общего пробега и потраченного бензина. Сброс — обе кнопки подержать 3 секунды.


Про параметр Fuel system status:

Для него нормальные показания это Closed loop (2).
Но иногда можно увидеть там open loop (1). Это значение можно увидеть в трех случаях:
1) автомобиль холодный и датчик кислорода еще не прогрелся
2) сильное нажатие на педаль газа и прекращение коррекции по ДК с целью достижения макс. мощности
3) прекращение подачи топлива при отпускании педали газа на скорости на передаче.
Про Обьемный КПД двигателя

Объёмный КПД двигателя внутреннего сгорания отражает эффективность всасывания в цилиндр и выпуска из цилиндра рабочей среды (то есть, топливо-воздушной смеси или выхлопных газов). Говоря более строго, объёмный КПД — это отношение (или процентное соотношение) количества рабочей среды, фактически всасываемой в цилиндр, к объёму самого цилиндра (при неизменных условиях). Поэтому те двигатели, которые могут создавать давления на входах в трубопроводы выше давления окружающей среды, могут иметь объёмный КПД больший 100 %.

VE изменяется в зависимости от оборотов, и дроссельной заслонке согласно найденной информации и в машинах для него вообще есть настоящие 3D таблицы:



Нашел график изменения в гугле и попытался воспроизвести хотя бы грубо его изменение.



Вот такой вот график получился! =))) ( кто сможет точнее дать данные для более точного графика буду рад, информации особо не нашел сколько не искал.)



Успехов!

Интересные ссылки по теме


Все о блютуз модулях и их программировании;
OBD-II_PIDs;
Про расход, IMAP, MAP, MAF;
Все о ELM327;
ELM327 Scanmaster manual;
Объёмный_КПД_двигателя_внутреннего_сгорания;
Hobdrive forum;
Подключение ЖКИ;
Расчет расхода бензина;
ПРО OBDII протокол;
Про кратковременную и долговременную коррекцию;
Датчики современной машины.
Описание возвращаемых PID;
Бедная или богатая смесь бензина и воздуха;
Информация о EOBD;
Про коррекцию топлива;

комментарии (51)

+1
+2 –1
saboteur_kiev ,  
Можно указать минимальные требования к машине, а то на своей я не совсем понял куда именно подключать «идем в машину, вставляем ELM327 в порт»… у меня машина 88 года выпуска, где искать?
0
ionflux ,  
Если есть ODB2 интерфейс, то туда. В машинах 88 года выпуска такого счастья не было.
0
LE0N ,  
Но разъемы же в каждой отдельной машинке разные? Я правильно понимаю? Как подобрать модуль под свою машинку? )
0
horhomun ,  
у всех машин сейчас единый стандарт… так что любой elm327 v1.5.
0
DMiTRONiK ,  
Не обобщайте, имею Skoda Fabia new, elm327 v1.5 — с ней не работает. Используется другой протокол.
0
horhomun ,  
1991: California Air Resources Board (CARB) регламентировало, чтобы все новые автомобили, проданные в Калифорнии начиная с 1991 года, соответствовали требованиям OBD-I. Разъёмы линии передачи данных и его положение не стандартизированы, равно как и данные протокола.
1996: OBD-II (On-Board Diagnostic) протокол Бортовой диагностики сделан обязательным для всех автомобилей, проданных в Соединенных Штатах.
2000: EOBD (European Union On-Board Diagnostic) — версия OBD-II, расширенная Controller Area Network, требуемая в Европе. Европейский союз делает EOBD обязательным для всех бензиновых автомобилей, проданных в Европейском Союзе, начиная с 2001 модельного года (см. европейские нормы выбросов Директивы 98/69/ЕС[1]).
0
saboteur_kiev ,  
Спасибо!!!
0
aperechnev ,  
О, дисплей интересный. Спасибо, прикуплю.
+1
shtirlitsus ,  
Плюсанул, но не поленитесь все же схемку набросать
+1
+2 –1
horhomun ,  
Ok, нарисую. Спс
+3
creat0r ,  
Прокомментирую после просмотра исходника по диагонали:

1. Для расчёта расхода бензина необходимы всего три рабочих параметра: текущее время открытия форсунки, обороты двигателя и скорость движения. Производительность форсунок можно считать примерно постоянной, ну или корректировать по давлению топлива, если доступно его значение. Расчёты на основе MAF очень неточны, т.к. смесь при езде очень часто далека от соотношения 14.7:1.

2. Писать в EEPROM каждые 5 секунд — плохая идея. Циклов записи у этой памяти что-то вроде нескольких десятков тысяч. Лучше хранить всё в оперативке, а скидывать в EEPROM, когда обороты двигателя = 0 или нет отклика от ELM. У дастера есть цепи, на которых питание остаётся в течение нескольких минут после отключения зажигания, ардуине хватит.

3. А вообще при наличии ELM327 лучше не изобретать велосипед (кроме образовательных случаев), а использовать какой-нибудь Torque на смартфоне.

Мой вариант борткомпа на дастере 2.0: www.youtube.com/watch?v=r65grwgpdPc
Обещал статью о его разработке — помню, пишу :)
+1
horhomun ,   * (был изменён)
1) К сожалению не каждый полезет к форсункам подключаться. Уверяю Вас, что при калибровке по баку, точность по методу MAP будет 95-98%, тем более я применяю и Short и Long корректировку ЭБУ, они то как раз и корректируют время открытия форсунки и соотношение 14,7 к 1.
2) Циклов перезаписи EEPROM 100 тысяч… попробую что нить придумать… есть что улучшать.
3) Ну тут бы хотелось что-нибудь стационарное чтобы постоянно не подключать.

Спасибо за интерес.
0
creat0r ,  
К форсункам не надо подключаться, надо считывать параметр injector duty cycle из ECU. У большинства машин это соответствует % времени открытия форсунки за цикл.
А STFT и LTFT не корректируют время форсунок к соотношению 14.7 к 1. Точнее, не совсем корректируют. LTFT — это такой суммарный корректирующий коэффициент, помимо него есть ещё целая таблица адаптации, где местами и по 10-15% может быть накоплено. А STFT слишком запаздывает и является, по сути, просто значением того, насколько ECU «не угадал» с количеством впрыснутого топлива. Другими словами, из STFT можно в некоторых режимах высчитать, насколько надо скорректировать время впрыска, чтобы в следующий раз смесь была в норме. А вот наоборот, высчитать, сколько было перелито или недолито топлива относительно гипотетической «стехиометрии» — нельзя.

Это я ещё не упоминаю всякие acceleration enrichment и вообще отсутствие коррекций в режиме open loop.
0
horhomun ,  
подскажите тогда пожалуйста pid и формулу injector duty cycle.
0
creat0r ,  
Не подскажу. Я считываю время форсунок из газового ECU. Там оно есть, так сказать, по определению работы газового впрыска.
Впрочем, тут вот много чего есть: en.wikipedia.org/wiki/OBD-II_PIDs
0
horhomun ,  
Вот именно что много у кого нет информации по этому pid к сожалению. Так что или подключаться к форсункам или считать по MAF, ну или вообще по MAP.
0
Meklon ,  
Добавьте sd-карту памяти, если очень надо хранить логи
0
horhomun ,  
спс… к сожалению при чтении, записи с SD очень большие задержки… что при опросе с эбу авто… недопустимо…
0
Alexeyslav ,  
Данных ведь немного писать? держи кеш в RAM-е, а по мере возможности записывай на карточку.
0
horhomun ,  
Исправил алгоритм записи. При текущем условии памяти eeprom хватит. Спс за советы.
0
RSATom ,  
0
Alexeyslav ,  
Для часто перезаписываемых данных есть FRAM память — свойства как у EEPROM только количество перезаписей не ограничено. Дорогая правда, пару лет назад отдавал 10$ за 32Кбит чип.
0
horhomun ,  
спс за информацию.
0
svd71 ,  
Одно мелкое замечание. Оставленый на длительное время elm327 в штекере пр вебет к разрядке аккумулятора. Время не засекал. Но оставленнаяна 3 недели в гараже машина позже не завелась.
доработал немного напильником: если включ не вставлен, питание к elm327 не подключаю.
0
horhomun ,  
Исправный ELM327 v1.5 умеет уже уходить в спящий режим через 30 минут и потребляет 15мА, елм v1.4 еще не умел этого, возможно он у вас и был. Так что потребляет он меньше любой сигналки авто. Но да, я тоже изучал этот вопрос, спс.
0
bougakov ,  
Версии модуля 1.5 не существует. Под этим названием скрываются китайские «усовершенствования» канадского чипа: www.elmelectronics.com/obdic.html#ELM327v14b

Как китайские авторы конкретной реализации устройства с чипом ELM [не]реализовали энергосбережение — это чистая лотерея. Проще, действительно, разобрать разъём и сделать, как предлагает svd71
0
horhomun ,  
да, есть такое… но оригинальный елм стоит в 10 раз дороже…
0
N0Good ,  
Не совсем так. Оригинальная канадская версия ELM327 v1.5 как раз таки существует, как и версия 2.1, однако купить в продаже ELM327 v2.1 с оригинальным чипом (хотя, корректнее было бы сказать прошивкой) практически нереально. А вот версию 1.5 китайцы уже умудрились слить с оригинала, так, что вполне есть шанс купить полный аналог.
+3
MiHaLaP ,  
Когда переделывал свой 417 под инжектор, тоже делал бортовой компьютер на ардуино. Задача была интереснее в том плане, что использовал mega8 и через uart(по средством mc33290) общался с ЭБУ на прямую. Помимо отображения пары параметров сей компьютер через ШИМ выводил показания температуры на аналоговый прибор, а так-же сделал плавную регулировку оборотов электровентиляторов охлаждения в зависимости от температуры. И для полной красоты встроил в панель на родные места.
0
RSATom ,   * (был изменён)
Для желающих поэкспериментировать со своим автомобилем, но не имеющим возможности разбираться с аппаратной частью, есть альтернатива: freematics.com Фактически это уже готовый аналог того что сделал автор.
+1
ncix ,  
Дастер, с полным приводом, верно?

Я так понимаю проект сделан больше ради развлечения? С OBD-BT адаптера куда удобнее снимать данные смартфоном. Да и большая часть инфы и так выводится на приборы.
0
horhomun ,  
Да, Дастер 2,0 полный, отцу делаю на логан 1.4, у меня в Дастере стоит multitronics c-590…
0
rstepanov ,  
У меня аналогичный ELM, там внутри bluetooth-адаптер точно так же насажен на последовательный порт, как автор предлагает поступить с ардуиной. Можно попробовать припаять ардуину напрямую, без прослойки в виде ненужного bluetooth.
0
horhomun ,  
я начинал делать что припаивался напрямую к elm через uart, но потом решил перевести все на bluetooth… и не жалею…
+1
+2 –1
Alexeyslav ,  
Хм. По блютузу OBD-II разъем? Только на свой страх и риск, я бы лучше проводами. Объективной необходимости в блютузе нет и тем не менее система становится более уязвимой. Взломать блютуз-адаптер и получить доступ к шине с которой управляются все замки… тем более китайский адаптер, у которого неясно с безопасностью.
0
horhomun ,  
на крайняк сам обд можно сделать невидимым… а так вы правы… но статья не о том…
0
mickvav ,  
Ну, идея с отрубанием питания этого obd по таймауту спасает.
0
Zzzuhell ,  
Вы уверены, что по OBD-II можно управлять замками? Пруф можно?
0
derwin ,  
к слову говоря, на разных машинах одни и те же выходы OBD-II могут использоваться по разному. Я на свою мазду(98г.в.) паял переходник. И у меня там только ошибки, без детальной информации из ECU.
0
Nikobraz ,  
На Цивике 8, наоборот. Данные видит, а ошибки нет. Хотя вся приборка мигает, вообще японцами много проблем в плане работы с OBDII.
0
Sequd ,  
что за корпус для ардуинки, можно название или ссылку?
0
horhomun ,  
просто вырезал из стандартного корпуса дырку для монитора… подобрал по размерам что было в магазине…
0
Sequd ,  
Видел готовые решения под экраны, но из акрила. Есть из пластика, но цена у них больше самой платы.
0
horhomun ,  
мне корпус обошелся в 1,5 доллара… сверлил и напильником с надфилями ровнял… за 30 минут сделал.
0
gadzhi15 ,  
Подойдет ли данный аппарат на 21099 инжектор?
0
Fandir ,  
У друга на 15 стоит вот этот: www.multitronics.ru/products/mk_vaz_inj/x115/ Умеет дофига всего… стоит, не 25 баксов, но до 50 точно))
0
Nikobraz ,  
Для наших машин проще готовый БК купить.
0
AlexRoch ,  
Хорошая работа, появилось несколько вопросов:
1. Каким образом вы производите расчет расстояние поездки и потраченный бензин за поездку?
2. Если я правильно понял, то Вы посылаете синхронные запросы на ELM, цикл составляет 750 м/с, выходит что параметр, участвующий в расчете, меняется раз 750 м/с. При такой схеме работы расчет должен быть с большой погрешностью. Каким образом вы можете утверждать: " Уверяю Вас, что при калибровке по баку, точность по методу MAP будет 95-98% ..."?
3. Так же, хотелось бы узнать Ваше личное мнение на предмет непрекращающейся «бомбардировки» запросами ECU через ДИАГНОСТИЧЕСКИЙ разъем во время движения автомобиля, опасно/безопасно/не задумывался…
4. Есть ли у Вас данные по «закрытым» PID?
5. Я к сожалению не смотрел алгоритм работы, интересно делаете ли Вы проверку на поддерживаемые PIDs конкретным автомобилем, т.к. набор поддерживаемых PIDs весьма отличается не только у разных производителей, но на разных моделях?
+1
horhomun ,   * (был изменён)
1. Текущая скорость умножаю на время прошедшее с последнего цикла.
2. Ну цикл работы раз в 750 мс… примерно 6 разных запросов в цикле по 65 мс… + время работы программы… ну судя по одометру… на 50 км хода… погрешность максимум 10м… так что ее нету… я пользовался разными мультитрониксами… и при точной калибровке погрешность на бак бензина обычно 1 литр… по самодельному бк… я уже добился погрешности в 4-5% сравнивая потраченный бензин на поездку самодельного и бк дастера.
3. безопасно, любой сторонний бк делает тоже самое.
4. данных по закрытым PID нету.
5. Все используемые PID универсальны для любого авто с OBD стандартом, так что работать будет у всех. Все пиды которые отличаются несут не стандартную инфу… а давление коллектора, температура, скорость — это все у всех одинаково.
0
AlexRoch ,  
К сожалению Вы не правы по собственному опыту скажу что пиды отличаются. В нашем случае приходилось делать запрос на список поддерживаемых пидов и уже от полученного списка отталкиваться в выборе способа расчета расхода. Расстояние считали так же как Вы. Кстате скорость которую Вы получаете, несколько отличается от реальной она завышена (если сравнить показания с GPS и спидометра).
0
horhomun ,  
Если считать по maf то его конечно может не быть, я считал по map, эти пиды у всех одинаковы так как это стандарт OBD. Скорость не завышена если машина куплена с колесами на которые идет прошивка, у меня дастер максимальной комплектации и скорость от эбу и gps одинакова. Но на машинах может отличатся и на 5-10 км в час, так как минус 1 дюйм у колес, будет сразу врать на 5 км/час, в зависимочти от резины конечно.