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

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

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

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

UPD 27.12.2017: Решил дополнить статью что проект был доработан другим пользователем, улучшен скетч в плане автоматической задержки, восстановления связи в случае разрыва соединения и много других нюансов… спасибо!!! Oleg его почта для вопросов: 2003shef@gmail.com

Ссылка на скетч и библиотеки: www.dropbox.com/s/9ioe43694kxxccw/OBD.rar?dl=0

Его комментарии к переработке:

1.вся проводка и соединение всех модулей и узлов сохранены из первоначального проекта.(кроме подключения блутуз модуля, он теперь на серийном порте «1»)

2.программа жестко заточена под ардуино МЕГА 2560!!! на серийном порте «0» присутствует Дебаг при условии раскоментирования дефайна.

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

4.добавлена функция восстановления связи в случае разрыва соединения (параметром потери связи служит отсутствие оборотов двигателя).

5.для работы требуется библиотека OBD.h вложенная в архив с проектом, этот экземпляр имеет несколько изменений от оригинала который можно скачать из интернета, и без неё скорее всего проект не будет работать или будет нестабилен.
папку нужно скопировать в папку " \Documents\Arduino\libraries"


Android приложение со всеми нюансами в Google Play: OliviaDrive

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

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 // Подключение модуля с фиксированным адресом
AT+UART=9600,0,0 // Скорость работы по UART


Заметьте, что 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; Корректировка объёмного КПД ДВС по таблице: (если расход реально меньше — то уменьшаем значение в процентном соотношении). Если не хотите калибровать добейтесь чтобы при прогретом двигателе мгновенный расход в л/час был в районе половины обьема двигателя;
5)speed_korrect_val=1; Корректировка скорости машины, смотреть по GPS/

Управление


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

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

Скетч:

Старый скетч был удален в плане многих дефектов в работе… новая версия по ссылке вверху статьи… он был доработан пользователем Oleg, спасибо ему большое!!!!.. его почта для вопросов: 2003shef@gmail.com

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

комментарии (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 км/час, в зависимочти от резины конечно.