Бортовой компьютер на ардуино своими руками

Обновлено: 04.07.2024

Сам я являюсь обладателем автомобиля ВАЗ 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 руб

Экран

Экран в работе

Встраиваем

Установленный бортовой компьютер

Установленный бортовой компьютер

Показания бортового компьютера

Показания бортового компьютера

Видео работы устройства:

Вариант №2. ВАЗ 2115. Тачскрин

Далее был изготовлен компьютер под панель ВАЗ 2115. Элементная база остается та же. Только добавляется тачскрин от телефона Sony-Ericsson G900. Цена тачскрина 35 руб. Ну и естественно меняется прошивка. Были небольшие проблемы при калибровке экрана. Хотел сначала ввести алгоритм калибровки по 4-м точкам. Добавить соответствующий пункт в меню. Но, почитав и посмотрев алгоритмы на англоязычных сайтах (под Андройд и прочее), понял, что это довольно сложно и в моём случае не нужно. Просто записываем значения АЦП по 2-м точкам, сопоставляем координаты и через уравнение прямой по 2-м точкам находим промежуточные значения нажатия. У меня получилось:
x = 232 - 0.276*ADC
y = 0.25*ADC - 67.5

Схема бортового компьютера для ВАЗ 2115

Подключение тачскрина

Печатная плата претерпела существенные изменения. Теперь используется микроконтроллер ATMega16A.

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

Встраиваем бортовой компьютер в ВАЗ 2115

Встраиваем бортовой компьютер в ВАЗ 2115

Встраиваем бортовой компьютер в ВАЗ 2115

Встраиваем бортовой компьютер в ВАЗ 2115

Встраиваем бортовой компьютер в ВАЗ 2115

Работа бортового компьютера

Ббортовой компьютер в ВАЗ 2115

Для повторения рекомендую вариант с тачскрином. Его можно использовать как под Калину, так и под Пятнашку. На этом всё.

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) Резистор 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 порт в плату.

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 // Подключение модуля с фиксированным адресом

Всё, настройка модуля 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 (калибровка времени).
4) delay_var=65 Время паузы между запросами в ЭБУ, в дастере например все работает уже на 65 мс, а в старом chrysler cirrus надо аж 235 мс ставить.
5)speed_korrect_val=1; Корректировка скорости машины, смотреть по GPS/

Управление

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

Скетч

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


Больше года назад, как только купил авто, задался целью установить вместо штатного бортового компьютера (MID) дисплей для вывода любой информации о состоянии автомобиля, эдакий бортовой компьютер, умеющий считать расход, показывающий время (это самое главное, для чего данная вещь была необходима)) и выдающий ошибки, если таковые появляются. Пост написан скорее для воспоминаний о том, как это все начиналось и через что пришлось пройти. В данный момент развожу плату для нового проекта, более универсального чем этот, с возможностью подключения различных дисплеев по разным протоколам, так как друзья за БК уже в очередь выстроились). Плату буду заказывать в Китае, так как в домашних условиях никогда не сделаешь так, как сделают они в подвале на коленке.
Родной дисплей на тот момент уже не показывал ровным счетом ничего, в холода тормозил и "полосил", как сказал предыдущий владелец — "Сейчас прогреется и норм будет". Занимать такое "кошерное" место в центральной консоли для дисплея, непонятно что выдающее — слишком. Штатная магнитола уже давно была заменена на китайскую Alpine, в которую я впаял блютуз-модуль на AUX выход, но это отдельная история.
Первым делом был снят сам БК, после чего благополучно разобран для снятия мерок. Долгими ночами я искал подходящий дисплей с такой нестандартной формой и габаритами, и мои успехи окупились с лихвой — на ebay нашел идеально подходящий по размерам дисплей от одной фирмы, специализирующейся на производстве нестандартных решений и дисплеев на заказ, а конкретно — вот этот.


Варианты были разные, белый текст на черном фоне, черный текст на белом фоне, синий, зеленый, красный и тд. Было решено попробовать черный фон и белый текст, хоть вдвое дороже чем белый, зато смотрится красиво. По итогу — продавец отправил вместе с дисплеем еще и разъем для шлейфа. На изготовление платы-переходника с этого разъема на штырьки у меня ушло несколько дней, так как ширина контактов разъема была 0.2мм с шагом 0.5мм.

Для проекта, как уже сказал, был заказан черный фон и белый текст, но в процессе отладки на него упал блок питания и пиксели частично поплыли. Поэтому спустя пол года после использования был заказан второй, подешевле, который еще не тестировал — белый фон, черный текст.

Что меня всегда радует, так это то, как старательно продавец упаковывает каждый дисплей — фигурно вырезает поролон под форму дисплея и даже шлейфа)


В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).

Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.

В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.

  1. CAN сниффер из Arduino Uno
  2. Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
  3. Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
  4. Софт панели приборов на Python и Kivy (UI framework)
  5. Видео работы цифровой панели приборов на базе Raspberry Pi

CAN сниффер из Arduino Uno

Чтобы послушать, что отправляет VCDS в CAN шину я собрал сниффер на макетке из Arduino и модуля MCP2515 TJA1050 Niren.

Схема подключения следующая:

CanHackerV2 позволяет смотреть пролетающий трафик, записывать и проигрывать команды с заданным интервалом, что очень сильно помогает в анализе данных.


Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)

Программно-аппаратный сканер VCDS предназначен для диагностики электронных систем управления, устанавливаемых на автомобилях группы VAG. Доступ ко всем системам: двигатель, ACP, АБС, климат-контроль, кузовая электроника и т.п., считывание и стирание кодов неисправностей, вывод текущих параметров, активация, базовые установки, адаптация, кодирование и т.п.


Подключив сниффер к линиям CAN_L и CAN_H в диагностическом шнурке я смог увидеть какие запросы делает VCDS и что отвечает авто.



Особенность авто группы VAG в том, что OBD2 разъем подключен к CAN шине через шлюз и шлюз не пропускает весь гуляющий по сети трафик, т.е. подключившись в OBD2 разъем сниффером вы ничего не увидите. Чтобы получить данные в OBD2 разъёме нужно отправлять шлюзу специальные запросы. Эти запросы и ответы видно при прослушивании трафика от VCDS. Например вот так можно получить пробег.

В VCDS можно получить информацию почти с любого датчика в машине. Меня в первую очередь интересовала информация, которой вообще нет на моей приборке, это:

  • температура масла
  • какая именно дверь открыта

Разработка панели приборов на основе Raspberry Pi и 7″ дисплея

В качестве аппаратной части я выбрал Raspberry Pi. Была идея использовать Android планшет, но показалось, что на Raspberry Pi будет проще и быстрее. В итоге докупил официальный 7″ дисплей, и сделал CAN шилд из модуля TJA1050 Niren.


OBD2 штекер использовал от старого ELM327 адаптера.


Используются контакты: CAN_L, CAN_H, +12, GND.


Тесты в машине прошли успешно и теперь нужно было все собрать. Плату дисплея, Raspberry Pi и блок питания разместил на куске черного пластика, очень удачно подобрал пластмассовые втулки, с ними ничего не болтается и надежно закреплено.


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


Напильником довел лист черного пластика до размера крышки бардачка, к нему прикрепил бутерброд и дисплей. Для прототипа сойдет, а 3D модель с крышкой для дисплея и всеми нужными крепежами уже в разработке.


Софт панели приборов на Python и Kivy (UI framework)

Параллельно со сборкой самой панели приборов я вел разработку приложения для отображения информации с датчиков. В самом начале я не планировал какой либо дизайн.



Первая версия панели приборов

По мере разработки решил визуализировать данные более наглядно. Хотел гоночный дизайн, а получилось, что-то в стиле 80-х.



Вторая версия панели приборов

Продолжив поиски более современного дизайна я обратил внимание какие цифровые приборки делают автопроизводители и постарался сделать что-то похожее.



Третья версия панели приборов

Ранее, я никогда не разрабатывал графические приложения под Linux поэтому не знал с чего начать. Вариант на вебе простой в разработке, но слишком много лишних компонентов: иксы, браузер, nodejs, хотелось быстрой загрузки. Попробовав Qt PySide2 я понял, что это займет у меня много времени, т.к. мало опыта. Остановился на Kivy — графический фреймворк для Python, простой в понимании с полной библиотекой графических элементов и дающий возможность быстро создать мобильный интерфейс.

Kivy позволяет запускать приложение без Иксов, прямо из консоли, в качестве рендера используется OpenGL. Благодаря этому полная загрузка системы может происходить за 10 секунд.

Алгоритм работы следующий, используется 3 потока:

  1. В главном потоке работаем с графическими элементы (спидометр, тахометр, часы, температуры и др) на экране
  2. Во втором потоке каждые 5 мс делаем опрос следующего датчика
  3. В третьем потоке слушаем CAN шину, получив ответ парсим его и обновляем соответствующий графический элемент

Проект цифровой панель приборов открытый. Рад буду предложениям и комментариям!

Читайте также: