Бортовой компьютер на ардуино obd2 своими руками
Появился как-то неожиданно в гараже Днепр МТ-16 и т.к. я только начал вникать в программирование микроконтроллеров то, руки сразу зачесались что-то заколхозить на него) Мной было принято решение сделать бортовой компьютер. Решил, что на дисплее будет отображаться напряжометр, термометр, тахометр и температура с двух бошек.
Ну чтож руки в ноги и отправился писать код) Спустя некоторое время макетная плата приобрела вид хаоса из проводов.
В левом верхнем углу вольтметр, в правом верхнем температура окружающей среды с датчика TMP36, по центру тахометр и внизу справа и слева температура с левой и правой головы соответственно. Снимать температуру решил термопарой типа К. Вольтметр из обычного делителя, для бортовика с головой хватит такого решения. Импульсы оборотов коленвала я снимать решил через оптопару с безконтактной системы зажигания.
Вроде бы все настроено и работает как надо. Проверил на аппарате. Надо бы сделать корпус для дисплея.
Да. Да! Я знаю, что маленький дисплей. Но это же моя первая поделка более менее имеющая вид и цель проекта была получить данные от мотоцикла в наглядном виде, а не на выставку. В дальнейшем хотел делать экран больше.
Сделал вот такую плату. Атмегу взял конечно конскую для таких целей))))) Тут бы и 8 хватило) Но задача была все сделать поскорее, хочется кататься) и на тот момент я в основном писал в ардуино ИДЕ.
OLED myOLED(SDA, SCL);
extern uint8_t SmallFont[]; // шрифт термометров
extern uint8_t MediumNumbers[]; // шрифт вольтметра
extern uint8_t BigNumbers[]; // шрифт тахометра
extern uint8_t akb[]; // иконка "Аккумулятор"
//extern uint8_t logo[]; // логотип используемый при запуске
extern uint8_t logo2[]; // логотип используемый при запуске
float V, V1, Voltage = 0; // переменная хранящая данные вольтметра
float temp_out; // переменная для наружной температуры
volatile unsigned int RPM = 0; // переменная тахометра
unsigned long tmr1, timer_imp = 0; // переменные для таймеров
void tacho() // Обработчик прерывания от пина INT0
<
RPM=60/((float)(micros()-timer_imp)/1000000); // расчет оборотов
timer_imp=micros(); // засекаем когда был последний импульс
>
void setup()
<
pinMode(volt, INPUT); // пин для вольтметра
pinMode(TMP36, INPUT); // датчик наружной температуры
pinMode(tachometer, INPUT); // пин тахометра
analogReference(INTERNAL); // мерить будем относительно внутреннего опорного напряжения в 1,1в
V = 1.1 / 1024.0 / (R2 / (R1 + R2)); // расчет коэффициента для вольтметра
temp_out = ((analogRead(TMP36) * 1.1 / 1024.0) — 0.5) * 100; // считываем температуру и переводим в градусы
myOLED.begin(SSD1306_128X64); // подключаем дисплей
myOLED.clrScr(); // очищаем дисплей
// myOLED.drawBitmap(30, 0, logo, 64, 64); // рисуем стартовое лого
myOLED.drawBitmap(12, 0, logo2, 100, 63); // рисуем стартовое лого2
myOLED.update(); // выводим все на экран
attachInterrupt(0, tacho, RISING); // устанавливаем прерывания на пине INT0 (D2)
delay(4000); // задержка для стабильности и показа логотипа
>
void loop()
<
Voltage = analogRead(volt) * V; // Вольтметр
if ((micros() — timer_imp) > 300000) RPM = 0; //если сигнала нет больше 300мсек считаем что RPM 0
if (millis() > tmr1) //считываем окружающую температуру по заданному интервалу
<
temp_out = ((analogRead(TMP36) * 1.1 / 1024.0) — 0.5) * 100 ; // считываем температуру и переводим в градусы
tmr1 = millis() + 30000; // задаем интервал 30мс
>
//вывод на экран
myOLED.clrScr(); // очищаем экран
myOLED.setFont(MediumNumbers); // задаем шрифт MediumNumbers
myOLED.printNumF(Voltage, 1, 18, 0); // пишем напряжение с 1 знаком после запятой. В х0 у0
myOLED.drawBitmap(0, 1, akb, 18, 15); // рисуем иконку аккумулятора
myOLED.drawLine(0, 18, 128, 18); // рисуем верхнюю линию
myOLED.drawLine(0, 48, 128, 48); // рисуем нижнюю линию
myOLED.setFont(SmallFont); // задаем шрифт SmallFont
myOLED.print("B", 67, 9); // пишем "В" (вольт)
myOLED.print("RPM", 0, 38); // пишем RPM
myOLED.printNumI(thermocouple_L.readCelsius(), LEFT, 53); // считываем температуру с левой термопары
myOLED.printNumI(thermocouple_R.readCelsius(), RIGHT, 53); // считываем температуру с правой термопары
myOLED.printNumF(temp_out, 1, 95, 0); // пишем наружнюю температуру
myOLED.print("C", RIGHT, 0); // пишем С (градусы)
myOLED.setPixel(121, 0); // ставим пиксель для обозначения градусов
myOLED.setFont(BigNumbers); // задаем шрифт BigNumbers
myOLED.printNumI(RPM/2/10*10, RIGHT, 21); // пишем обороты с 0 на конце.
myOLED.update(); // выводим все на экран
delay(150); // задержка для стабильности
>
// Generated by : ImageConverter Mono Online
// Generated from : akb.jpg
// Time generated : Wed, 18 Jan 17 11:27:44 +0100 (Server timezone: CET)
// Image Size : 18x15 pixels
// Memory usage : 33.75 bytes
imagedatatype akb[] PROGMEM=<
0xFC, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x85, 0x05, 0x05, 0x04, // 0x0010 (16) pixels
0x04, 0xFC, 0xFF, 0xC0, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC3, 0xC1, // 0x0020 (32) pixels
0xC0, 0xC0, 0xC0, 0xFF,
>;
Прошивка залита. Плата спаяна. Дисплей работает. Да вообще все работает) И вот на этом моменте планы резко поменялись. И проект был заброшен из-за отсутствия самого виновника торжества это мотоцикла.((((
Но все же решил выложить работу. Вдруг кому-то из нее что-то пригодится. Код писал очень подробно весь, разберется даже школьник. Да там вроде и ничего особо сложного и нет. Где-то даже слишком примитивно все сделано.
Сначала все немного тормознулось из-за того, что я захотел сделать систему зажигания на МК, потом инжектор вкорячить, параллельно все переписать на Си. Ну вобщем как на современных тачках сделать мозги. И однажды все к херам пошло)
Платы кстати у меня остались, кому надо обращайтесь, по сути это готовый показометр на машину или мот.
Его комментарии к переработке:
1.вся проводка и соединение всех модулей и узлов сохранены из первоначального проекта.(кроме подключения блутуз модуля, он теперь на серийном порте «1»)
2.программа жестко заточена под ардуино МЕГА 2560. на серийном порте «0» присутствует Дебаг при условии раскоментирования дефайна.
3.убран параметр задержки между опросами, задержка полностью интелектуальна и динамична, новый запрос не отправится пока не будет получен ответ на предыдущий с учетом таймаута.
4.добавлена функция восстановления связи в случае разрыва соединения (параметром потери связи служит отсутствие оборотов двигателя).
5.для работы требуется библиотека OBD.h вложенная в архив с проектом, этот экземпляр имеет несколько изменений от оригинала который можно скачать из интернета, и без неё скорее всего проект не будет работать или будет нестабилен.
папку нужно скопировать в папку " \Documents\Arduino\libraries"
Android приложение со всеми нюансами в Google Play: OliviaDrive
Мы сможем сделать бортовой компьютер, умеющий считать расход топлива, показывать температуру охлаждающей жидкости, скорость авто, расстояние поездки, потраченный бензин за поездку, обороты двигателя, давление во впускном коллекторе, температуру впускного коллектора, УОЗ, коррекции топлива, вольтаж датчиков кислорода, нагрузку двигателя и многое другое.
Список требуемых деталей для сборки БК
2) LCD2004 жк-модуль
3) Модуль Bluetooth HC-05
4) OBD ELM327 Bluetooth сканер
5) Резистор 10 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус
Настройка блютуз модуля HC-05 для работы
Подпаиваем провода к пинам блютуза: (картинку с выходами смотреть в описании требуемых деталей)
void loop()
<
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
>
После успешной загрузки скетча открываем: Сервис->Монитор порта. Далее снизу ставим скорость 9600 бод и NL+CR вместе.
Далее вводим команды по одной и нажимаем [Послать]. После каждого ввода должен быть ответ ok.
Заметьте, что mac-адрес вида: «AA:BB:CC:11:22:33» вводится как «AABB,CC,112233». MAC- адрес своего модуля ELM327 можете посмотреть, подключившись для начала на него со своего мобильника. (Стандартные пароли обычно: 1234, 6789, 0000).
Всё, настройка модуля Bluetooth закончена.
Теперь нужно собрать схему Arduino + блютуз + LCD-экран
Схема:
Переменный резистор на 10кОм нужен, чтобы управлять контрастностью монитора, так что если при первом включении вы включите и ничего не увидите, попробуйте отрегулировать контрастность шрифта поворотом резистора.
3. Подключаем дополнительную кнопку для переключения экранов с данными.
[1 кнопка]: один конец от нормально-открытой кнопки подключаем в GND ардуино, а второй конец в пин 10.
[2 кнопка]: GND + пин 9.
Бипер для звуковых предупреждений подключить по следующей схеме "+" к пину 13, а минус к GND ардуино.
Заливаем скетч в Arduino с помощью Aduino IDE 1.0.6 (использовал эту версию).
Нужно будет обязательно учесть три переменных:
Управление
Скетч:
Все, идем в машину, вставляем ELM327 в порт, ардуину в зарядку для авто и проверяем.
- alt="Xant" />
Xant - Arduino
- 23.03.2016 04:21
Примерно за 25 долларов мы сможем сделать бортовой компьютер, умеющий считать расход топлива, показывать температуру охлаждающей жидкости, скорость авто, расстояние поездки, потраченный за поездку бензин, обороты двигателя, давление во впускном коллекторе, температуру впускного коллектора, УОЗ, коррекции топлива, вольтаж датчиков кислорода, нагрузку двигателя и многое другое. Сброс ошибок доступен в режиме «recovery» (как зайти написано ниже). Общий цикл работы с запросом всех данных из эбу происходит примерно раз в 750 мс. (при условии паузы между запросами в 65 мс, так по умолчанию)
Список требуемых деталей для сборки БК
1) Arduino Uno R3 — 1 шт.
2) LCD2004 жк-модуль
3) Модуль Bluetooth HC-05
4) OBD ELM327 Bluetooth сканер
5) Резистор 10 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус
Настройка блютуз модуля 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 ардуины.
- 1 — TX модуля в 6 пин ардуины. (внимание будет TX в TX это не ошибка!)
- 2 — RX модуля в 7 пин ардуины. (аналогично не ошибка!)
- 12 — и 34 пин к 3,3V ардуины.
- 13 — GND ардуины.
Открываем Aduino IDE 1.0.6 (использовал эту версию) и заливаем скетч через USB порт в плату.
void loop()
<
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
>
Далее вводим команды по одной и нажимаем [Послать]. После каждого ввода должен быть ответ 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 — TX модуля засовываем в 7 Pin (Rx) арудины (именно TX в RX, не так как ранее);
- 2 — RX модуля засовываем в 8 Pin (Tx) арудины;
- 12 — Pin (3,3V) модуля в Pin 3,3V ардуины;
- 13 — Pin (Gnd) в Gnd арудуины;
- 34 — Pin мы никуда не подключаем (заизолируйте или отпаяйте).
- 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 секунды — Сброс журнала общего пробега и потраченного бензина на втором экране, также это сброс ошибок на экране информации об ошибках.
Скетч:
(по умолчанию настройки в скетче на Рено Дастер 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 таблицы:
Нашел график изменения в гугле и попытался воспроизвести хотя бы грубо его изменение.
Вот такой вот график получился! =))) ( кто сможет точнее дать данные для более точного графика буду рад, информации особо не нашел сколько не искал.)
С помощью платы Arduino можно соорудить автомобильный бортовой компьютер, который сможет:
Помимо устройства Arduino вам также потребуется жидкокристаллический модуль, адаптер Блютуз НС-05, а также сканер ELM327 и резисторное устройство на 10 кОм. Разумеется, необходимо приготовить и звуковой индикатор, монтажные провода и сам корпус устройства.
Процедура сборки осуществляется следующим образом:
Фотогалерея «Схема подключения БК»
GPS-трекер
Чтобы собрать GPS-трекер на базе Arduino, вам потребуется:
Как производится подключение схемы:
Парктроник
Чтобы соорудить парктроник, вам потребуются такие составляющие:
- сама микросхема;
- ультразвуковое устройство, в данном случае это дальномер HC-SR04:
- шесть светодиодных элементов;
- шесть резисторных элементов сопротивлением на 220 Ом;
- соединительные провода типа «папа-папа»;
- пьезодинамический элемент;
- макетная схема для сборки.
Процедура сборки выглядит следующим образом:
Заключение
Разумеется, для этого вы должны обладать знаниями в области электроники и электротехнике, при этом минимальных навыков, вероятнее всего, будет недостаточно. При изготовлении девайсов вам придется принимать собственные решения, о чем в Интернете может и не быть информации. Поэтому будьте готовы к тому, что процесс сборки может занять достаточно долгое время.
Видео «Как соорудить систему управления электродвигателем печки?»
С приходом в жизнь автолюбителей инжектора и его окончательной победе над карбюратором, появилась необходимость в "его" периодической диагностике. Поскольку стоимость диагностики отечественной машины варьируется от 300 до 500 руб., а квалификация диагноста порой вызывает сильные сомнения, то практически каждому автолюбителю зачастую приходится вникать в суть проблемы (неисправности) самостоятельно. И как минимум без специального адаптера и компьютера тут не обойтись. А если неисправность возникла где-то в пути и вдали от города? Поэтому порой просто необходимо иметь под рукой эдакий «миникомпьютер», который всегда будет в автомобиле и сможет помочь в пути.
Сам я являюсь обладателем автомобиля ВАЗ 11183 (Калина), поэтому далее повествование пойдет о бортовом компьютере для Калины. А в конце будет несколько слов про бортовой компьютер для ВАЗ 2115.
Цены на подобные устройства, мягко говоря, не очень радуют. Самый простой компьютер-кнопка для отображения каких-никаких кодов категорически не устраивает. Ввиду его убогости. Стоимость таких около 600-700 руб. Ну а что-то посерьёзней, с дисплеем, уже порядка 1800-2000 руб. Ну и самые дорогие модели приблизительно по 5000 руб. Поэтому было принято решение собрать бортовой компьютер для себя и с целью экономии денежных средств и с целью саморазвития.
Что я хотел видеть: параметры в режиме реального времени, текущие ошибки и возможность их сбросить. Замер времени разгона 0-100 км/ч (появилось позднее, так. побаловаться. )
Начался поиск информации. Поиск по интернету дал ответы на некоторые вопросы, но до остального пришлось доходить самому.
Я думаю многие задавались вопросом, зачем вообще используется какой то там адаптер для подключения к машине. Отвечаю: адаптер представляет из себя преобразователь уровней. В стандартном COM порте (он же интерфейс RS-232) логическая единица это -12 вольт, логический 0 это +12 вольт. В K-линии логическая единица это +12 вольт, а логический ноль это 0 вольт. Т.е. размах сигнала 0-12 вольт против "-12" - "+12" у RS232. К тому же разница не только в уровнях, RS-232 имеет 2 сигнальные линии RxD и TxD, а K-Line одну двунаправленную. Итак:
Вариант №1. Калина. Кнопочное управление компьютером
Я использовал:
1. Микроконтроллер фирмы Atmel: ATMega8
2. Дисплей от сотового телефона Siemens S65
3. Обвязка. питание, резисторы, конденсаторы и другая мелочевка.
4. Преобразование уровней на сдвоенном компараторе LM293. Просто и доступно.
Питание. Тут всё просто. LM317 формирует стабилизированный ток 20 мА для светодиодов подсветки дисплея. LM7805 стабилизирует напряжение для питания микроконтроллера. Защитный диод 1N6281 рассчитанный на 27 вольт спасет от возможных всплесков напряжения.
При отладке можно использовать +12 вольт с 16-го пина колодки OBD2. А при постоянной работе напряжение на БК должно подаваться при каждом включении зажигания. Т.е. необходимо протянуть провод от замка зажигания к БК.
Ну и сама схема:
Прошивка для микроконтроллера написана в среде CodeVisionAVR 2.05 на языке Cи.
Запрос startCommunication:
81 10 F1 81 03
Ответ:
83 F1 10 C1 6B 8F 3F
В ответе C1 означает, что ЭБУ готов с нами работать (на связи).
После этого мы можем запросить у него параметры, отправив запрос:
82 10 F1 21 01 A5
ЭБУ моей машины отвечает:
80 F1 10 26 61 01 3B 90 41 04 00 00 00 00 47 80 00 00 00 52 52 80 18 00 8E 00 5C 00 00 00 00 00 00 00 00 00 FF FF DD A4 47 02 CE
Расшифровка (пример):
61 - Положительный ответ readDataByLocalIdentifier
01 - afterSalesServiceRecordLocalIdentifier (что то там. )
.
11-й байт - Температура охлаждающей жидкости
.
Формула для расчета: N=E-40 [°C]
E - передаваемое значение
N - физическая величина
У меня это значение 47. Берем windows калькулятор. Переводим 47 hex в dec. Получаем 71. Дальше 71-40=31°C. На момент снятия данных машина постояла на улице. До конца не остыла.
И так далее… со всеми остальными параметрами.
Запрос ошибок readDTCByStatus:
84 10 F1 18 00 00 00 9D
ЭБУ моей машины отвечает:
88 F1 10 58 02 04 43 E0 14 26 E0 24
P0443 - всё верно, 2 ошибки у меня сейчас.
P1426
Самое сладкое, сброс ошибок clearDiagnosticInformation:
83 10 f1 14 00 00 98
Запрос значений АЦП:
82 10 F1 21 03 A7
Из АЦП взял напряжение на датчике кислорода и на датчике массового расхода. Хотя необходимость этого пункта под сомнением. Думаю вообще убрать. Всё остальное есть в описании.
Плата разведена на одностороннем фольгированном текстолите. Дисплей приклеен при помощи клея "секунда". Защитное стекло для дисплея сделал из коробки от компакт диска. На самоклеящейся бумаге распечатал лицевую часть (черную), наклеил на пластик, совместил, приклеил к плате. Чтобы под стекло не набивалась пыль, промазал обычным герметиком. Доработал напильником посадочное место в ящике для мелочей и просто вставил туда БК. Подключил питание и диагностическую линию. Левая кнопка смена режимов отображения, правая сброс ошибок (в режиме сброса ошибок) и сброс времени разгона на ноль (в режиме замера времени). На плате имеется место для памяти 24LC512. Но она не использовалась (не хватило flash памяти МК на реализацию). Фьюзы МК выставлены на работу от внешнего кварца.
По себестоимости получилось порядка 450 руб
Зимой было очень удобно следить за температурой двигателя при прогреве. А не ждать когда же стрелка от отметки 50 градусов «оторвется»…
Видео работы устройства:
Вариант №2. ВАЗ 2115. Тачскрин
Далее был изготовлен компьютер под панель ВАЗ 2115. Элементная база остается та же. Только добавляется тачскрин от телефона Sony-Ericsson G900. Цена тачскрина 35 руб. Ну и естественно меняется прошивка. Были небольшие проблемы при калибровке экрана. Хотел сначала ввести алгоритм калибровки по 4-м точкам. Добавить соответствующий пункт в меню. Но, почитав и посмотрев алгоритмы на англоязычных сайтах (под Андройд и прочее), понял, что это довольно сложно и в моём случае не нужно. Просто записываем значения АЦП по 2-м точкам, сопоставляем координаты и через уравнение прямой по 2-м точкам находим промежуточные значения нажатия. У меня получилось:
x = 232 - 0.276*ADC
y = 0.25*ADC - 67.5
Печатная плата претерпела существенные изменения. Теперь используется микроконтроллер ATMega16A.
При помощи ножа, напильника и шпатлевки по пластику тачскрин был вмонтирован в панель, которую потом обтянул карбоновой пленкой.
По началу прикупил стилус, но потом оказалось что проще «тыкать» пальцем в экран. Залапывается он конечно. Но не более чем на телефонах с сенсорным экраном.
Для повторения рекомендую вариант с тачскрином. Его можно использовать как под Калину, так и под Пятнашку. На этом всё.
Читайте также: