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

в 16:16, , рубрики: arduino, bluetooth, elm327, hc-05, автомобиль, бортовой компьютер, метки:

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

image

Еще фото

image
image
image
image
image
image
image

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

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

image

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

image

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

image

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

image

5) Резистор 5 кОм подстроечный, бипер для звука, 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 и заливаем скетч через 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 вместе.

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

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 ардуины, а вторую на 5V ардуины.

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

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

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

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

Заливаем скетч в Arduino с помощью Arduino IDE

Единственное, в скетче присутствует переменная, которую нужно поправить в соответствии с объёмом вашего автомобиля. Скетч написан так, чтобы было понятно каждому и любой мог исправить что захочет.

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

1) ED=2.000 Например объем двигателя в литрах 1.398;
2) VE=80.00 Объёмный КПД ДВС: обычно в районе 80 (если расход реально меньше — то уменьшаем значение в процентном соотношении). Если не хотите калибровать добейтесь чтобы при прогретом двигателе мгновенный расход в л/час был в районе половины обьема двигателя;
3) tcorrect=1.014 (калибровка времени).

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

Управление

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

[Кнопка 1] + [кнопка 2]: 4 секунды — Сброс журнала общего пробега и потраченного бензина.

Скетч

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

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

UPD 19.02.15: Добавил журнал общего пробега и потраченного бензина. Сброс — обе кнопки подержать 3 секунды;
UPD 22.02.15: Добавлен экран очистки ошибок в режиме recovery. Для очистки ошибок зажать обе кнопки на 4 секунды;
UPD 23.02.15: Добавлен экран топливной коррекции;
UPD 24.02.15: При включении БК проверяет есть ли ошибки двигателя. При их наличии пишет сколько ошибок в двигателе, и показывает код ошибки. Сброс доступен в режиме рекавери;
UPD 25.02.15: Добавлены экраны датчиков кислорода B1S1, B1S2;
UPD 26.02.15: Добавлен звуковой бипер. Если температура двигателя выше 102 градусов то вывести предупреждение о высокой температуре на экран и прогудеть бипером, так же будет звук при появлении ДжекиЧана;
UPD 28.02.15: Добавлен режим «торможения двигателем» при котором не считает расход, так как он в этот момент по нулям.

Успехов!

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

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

Автор: horhomun

Источник

Поделиться

  1. Ярослав:

    не понял одного: какую функцию выполняет блютуз?! И можно ли обойтись совсем без него?

* - обязательные к заполнению поля