Как из смартфона сделать бортовой компьютер автомобиля
У многих есть старые мобильные телефоны, которые лежат дома без дела. Однако им еще можно найти хорошее применение. Например, установить устаревший смартфон в салон автомобиля, где он будет выполнять функцию бортового компьютера (выводить данные системы управления двигателем, показывать, расшифровывать ошибки, сбрасывать их и пр.). Рассказываем, как доработать конструкцию телефона своими руками.
Советом поделился один из владельцев Lada Granta ( kumaxx ), который решил использовать свой старый смартфон Philips Xenium W3568 в качестве бортового компьютера (БК).
Потребуется:
- Мобильный телефон (на ОС Android) с установленным ПО (например, OpenDiag или Torque Pro ).
- ELM327 адаптер (купить на Ali), который нужно установить в OBD-II разъем машины.
- Плата DC-DC преобразователя, понижающего напряжение до 3.7В.
- Ионистор.
- Кабель питания от USB (выбирайте относительно толстый, т.к. телефон при старте потребляет приличный ток).
Порядок действий:
1. Снять аккумулятор телефона.
2. Определить на смартфоне, какой контакт (+) и какой (-). В данном случае 4 контакта: (+), (-), (датчик температуры) и (ID).
3. Срезать с аккумулятора плату контроллера и подключаются через нее. Если этого сделать не удается, тогда придется имитировать два дополнительных контакта, используя сопротивление. Необходимые сопротивление для подключения к этим контактам было подоброно опытным путем (было замерено сопротивление между доп.контактами и землей).
4. Подать на контакты штатные 3.7 вольта и используем резисторы.
5. На место аккумулятора устанавливаем плату DC-DC преобразователя, понижающего напряжение до 3.7В. К нему же подпаиваем необходимые резисторы.
6. Для того чтобы телефон не выключался в моменты краткосрочного пропадания питания (работа стартера, либо заглушение двигателя), необходимо установить в батарейный отсек ионистор.
7. Выводим наружу уже готовый провод с USB разъемом, который подключим в USB розетку в машине.
8. Смартфон-БК размещаем в удобном месте. Теперь, используя ПО, подключаемся к ЭБУ автомобиля через ELM327.
Как сделать бортовой компьютер
Бортовой компьютер для автомобиля ВАЗ2110
Автор: КАШАК, neo-bars@yandex.ru
Опубликовано 20.09.2014
Создано при помощи КотоРед.
Участник Конкурса «Поздравь Кота по-человечески 2014»
ПОЗДРАВЛЯЮ уважаемого кота с днем рождения! Желаю ему доброго здравия, а его его замечательному ресурссу — процветания!
По случаю торжества хочу представить свой проект.
Итак, я являюсь “счастливым” обладателем творения отечественного автопрома под названием ВАЗ-2110. Как и любая техника машина имеет свойство ломаться в самый неподходящий для этого момент. Но оставим обсуждение поломок для других сайтов, все-таки тут собрались радиолюбители, а не автомеханики =)
В общем история данного проекта началась примерно год назад, когда я остался без генератора в 300км от цели поездки и пришлось продолжать путешествие на АКБ чтобы встретиться с другим авто и далее ехать на его АКБ. В добавок к этому, уже начинало смеркаться. Вот тут-то и оказалось, что на приборной панели отсутствует такой полезный прибор, как вольтметр. Видимо, разработчики посчитали, что раз двигатель инжекторный, то и напряжение на АКБ знать совершенно не обязательно. Во время поездки я уже серьезно подумывал о том, чтобы подключить к бортовой сети обычный мультиметр, т.к. слышал, что падение напряжения на АКБ может вызвать порчу памяти ЭБУ двигателя и в тот момент проверять справедливость этого утверждения совершенно не хотелось. Естественно по приезду домой я решил встроить нечто, измеряющее напряжение. Но тут вспомнилась еще одна неприятная особенность инжекторного двигателя, а именно контрольная лампа Check Engine. Которая умеет загораться совершенно неожиданно и почему-то обычно достаточно далеко от какого-либо сервиса. Такое, конечно, случается довольно редко, но все же случается. Первой мыслью было пойти, купить маршрутный компьютер и не морочить голову. А он уже покажет и напряжение, и ошибки, много чего еще. Но после похода на авторынок энтузиазм поубавился. Оказалось, что железка, содержащая деталей рублей на 300-400, может стоить в несколько раз дороже.
Вот тогда и было принято решение собрать такой девайс самому. Сначала думал сделать что-то простое на AVR МК и небольшом дисплее от мобильника. Но т.к. в то время я начал активно изучать МК STM32, то делать на AVR было не интересно, особенно учитывая тот факт, что у меня в городе стоимость того же Mega32 превышает стоимость STM32 103 серии. Кроме этого, на просторах интернет-магазинов я наткнулся на очень интересную штуковину под названием TFT дисплей. Вот такой:
Диагональ целых 3,2”, сенсор с АЦП, слот для SD карты, да еще и на плате запаян. Вот только шина данных у него параллельная и для управления требуется целых 21 вывод (16 бит сама шина данных и 5 служебных выводов). После некоторого времени поисков в интернете, я выяснил, что данная железка достаточно легко и просто подключается к STM32 МК при наличии у них FSMC (Flexible static memory controller). Если объяснять в двух словах, то это некий интерфейс, к которому можно подцепить память с параллельным интерфейсом, при этом МК будет работать с ней, точно так же, как и со своей внутренней. Т.е. просто указываем адрес и пишем данные. Очень удобно. А вот теперь, если подключить туда дисплей, то можно просто засылать туда данные по неким адресам, при чем аппаратно и очень быстро.
Далее подобрал и сам МК, выбор пал на STM32F103VCT6, это 100-лапое чудище содержит на борту блок FSMC, ЦАП (к тому времени уже решил, что обычные звуковые уведомления в виде писка будут только раздражать), целую пачку USART, SPI и т.п., 256 Кб памяти, тактовую частоту 72МГц, да еще и USB модуль. Все описывать не буду, дабы не захламлять статью, остальное можно найти в даташите. Заказав дисплей и МК, начал разводить плату. К слову, плату под корпус LQFP предстояло изготавливать впервые. Не смотря на это, плата удалась (пусть и не с первого раза), делал методом ЛУТ.
Запаяв МК и дисплей, сел за написание программы. После пары недель плясок с бубном, удалось запустить дисплей и немного оптимизировать библиотеку. Уже тогда было решено, что весь интерфейс будет представлен в виде набора картинок, а звуковые уведомления в виде WAV файлов. Вот тут и ждало первое разочарование. При проектировании платы я подключил SD карточку через SPI, и если с проигрыванием звуков он справлялся на отлично, то для чтения изображений у него катастрофически не хватало скорости. На вывод картинки 320х240 пикселей уходило около 3 секунд. Промучившись еще недели три, начал искать другое решение и довольно скоро нашел. Оказывается, помимо прочих полезностей, у данного МК есть интерфейс под названием SDIO (Secure digital input/output interface), который предназначен для работы с SD (и не только) картами памяти. Отложив программирование, я заказал мешок слотов для MicroSD карточек и занялся новой платой. В итоге на отдельной плате уютно разместились MicroSD карточка и Mini USB разъем, а основная плата дополнилась выводами под SDIO, а также некоторыми полезностями, пришедшими на ум в процессе разработки. После очередных плясок с бубном все это дело завелось. Картинки выводились с приемлемой скоростью. Дело осталось за малым, сделать интерфейс пользователя, реализовать задуманные функции и заставить все это дело работать. Как раз на разработку интерфейса ушла примерно половина всего времени, во-первых, надо было придумать нечто удобное, а во-вторых создать всю графику, с которой я в принципе не особо дружу. Подробно этот момент я описывать не буду, чтобы не утомлять читателей, скажу только, что была еще раз переработана библиотека дисплея, созданы с нуля несколько шрифтов, отдельно буквенные (сразу решил делать только английские, надписи получаются короче) и отдельно цифровые. И графику я все-таки сделал.
Но, когда оставалось дописать примерно 30% прошивки, стало ясно, что придется переделать плату еще раз. Причинами послужило то, что из-за некоторых недоработок не получалось реализовать все задуманное, и просто адски грелись линейный стабилизаторы в питании схемы. (понижение до 3.3В было сделано в 2 ступени, 12В->5В, 5В->3.3В). В итоге был применен DC-DC Step-Down преобразователь на 3.3В, исправлены предыдущие недоработки, и наконец-то получена финальная версия платы, на которой и дописывалась прошивка.
В процессе написания программы количество функций увеличилось процентов на 30 по сравнению с изначально задуманными.
Итак, на момент написания статьи, функционал получился следующий.
- Показ времени (RTC в МК есть, почему бы не использовать).
- Измерение температуры в салоне и на улице (датчики DS18b20, невероятно удобная штуковина в плане подключения).
- Связь с ЭБУ через K-Line и получение таких параметров, как: Напряжение, Расход топлива (путевой/часовой), Температура двигателя, Обороты, Скорость движения, Массовый расход воздуха, Цикловой расход воздуха, Положение дроссельной заслонки, Длительность импульса впрыска, Положение регулятора холостого хода. Чтение и сброс ошибок.
- Слежение за уровнем охлаждающей жидкости и уровнем масла в двигателе, с выдачей звукового и визуального уведомления (раз уж есть датчики, то почему бы их не задействовать).
- Напоминание о замене масляного и воздушного фильтров.
- Управление фарами и ДХО в зависимости от уровня освещенности с настройкой уровня срабатывания.
- Показ максимального/минимального/среднего уровня таких параметров, как: часовой расход топлива, скорость за поездку, напряжение в бортовой сети, температура за бортом. А также вывод примерных графиков данных величин.
- Сохранение параметров и ошибок, полученных с ЭБУ, на SD карту в *.txt файл.
- Ведение статистики поездки (время, расстояние, количество израсходованного топлива, расход на 100км.).
- Управление освещением салона. У родного блока управления была такая функция, вот и сюда встроил.
Внешний вид всего устройства представлен на рисунке:
Конструктивно оно состоит из 5 отдельных блоков: дисплей, плата-адаптер K-Line, плата с Micro SD и USB, УНЧ и центральная “материнская” плата. Модульная система была выбрана специально, т.к. это заметно упрощает разводку плат и установку в авто. Кроме этого я не был уверен, что тот же адаптер K-Line будет нормально работать, а переделывать из-за него всю плату совершенно не хотелось. Рассмотрим каждый блок подробнее.
На центральной плате расположено сердце все конструкции – МК STM32F103VCT6 со всей необходимой обвязкой. На этой же плате находятся DC-DC преобразователь 12В->3.3В на MC34063 для питания всей электроники, два реле для управления фарами, мощный MOSFET для управления светом в салоне (даже излишне мощный, но их был целый мешок, поэтому его и поставил) и батарея 3В для часов реального времени.
Адаптер K-Line сделан по распространенной схеме на компараторе LM339. Так же на этой плате установлена пара транзисторов, которые служат связующим звеном между датчиками в авто и МК.
Плата с USB и Micro SD вообще ничем ни примечательна и содержит только пару разъемов и горсть резисторов.
Рассматривать УНЧ особого смысла не имеет, сделан он на TDA2003 по схеме из даташита. Тут уже каждый выбирает то, что ему удобнее. У меня была в наличии данная микра, на ней и сделал.
На плюсовом проводе питания установлен предохранитель.
Подключение дисплея осуществляется гибким шлейфом, который раньше служил для подключения IDE диска к материнке. Он обладает большей прочностью, чем обычные китайские, спокойно выдержал около месяца издевательств без единого обрыва. Кроме того, он одножильный, что заметно ускорят процесс пайки и дает гарантию, что случайно загнувшаяся незамеченная “волосинка” что-нибудь замкнет.
Установил девайс возле прикуривателя, вместо пепельницы, т.к. ей все равно не пользуюсь. Сама пепельница была успешно извлечена, на ее месте закреплены дисплей и платы, после этого сзади установил на место крышку, которая закрывала пепельницу, а лицевую панель вырезал из оргстекла и обтянул карбоновой пленкой. Получилось очень даже не плохо:
Для подключения датчиков температуры использовал обычную телефонну лапшу. Наружний датчик установлен под задним бампером, а внутренний под декоративную накладку на стоке между дверьми. Наружний датчик был заказан у китайцев и по их заверениям абсолютно водонепроницаем. Проверить пока возможности не было, сезон дождей еще не начался. Всего ушло около 3-3,5м провода. При такой длинне провода подтягивающий резистор на линии 1-Wire пришлось уменьшеить до 1К. Фотодатчик подключен экранированным микрофонным кабелем. Для установки статусного светодиода была использована стандартная фишке датчика иммобилайзера, которая бесцельно торчала в панели. Красный светодиод заменил на желтый.
А вот и схема всего девайса:
Теперь постараюсь описать его работу. В дежурном режиме экран погашен и питние УНЧ отключено. Каждые 5 сек. вспыхиввает статусный светодиод, показывая, что девайс жив. Потребление тока в этом режиме 30-35мА. Можно его еще уменьшить, если перевести МК в спячку, но пока такое потребление никакого пагубного влияния на АКБ не оказывает.
Для того, чтобы вдохнуть в него жизнь, требуется либо просто коснуться экрана, либо повернуть ключ в замке зажигания. Кстати, при прикосновении к экрану зажигается статусный светодиод, и гаснет при отпускании, сигнализируя тем самым, что касание произошло и МК его зарегистрировал. В первом случае будет включена подсветка и предоставлен доступ ко всем функциям, но без соединения с ЭБУ. Т.е. сразу же будет включен главный экран программы без заставок, мелодий и т.п. Так же не будет проводиться контроль состояний датчиков. Если же в течении 20 секунд пользователь не предпринимает никаких действий, то экран погаснет.
Во втором случае сначала будет показана заставка и через 5 секунд будет осуществлено соединение с ЭБУ и выключение произойдет только после выключения зажигания. Задержка в 5 секунд обусловлена спецификой работы ЭБУ BOSCH, установленного в моей машине, первые 5-6 секунд после включения он шлет какую-то белиберду и на входящие данные не реагирует. Иными словами – это рабочий режим. В данный момент заставка выглядит так:
После перехода на главный экран, осуществляется попытка соединения с ЭБУ. Если по каким-то причинам соединиться с первых двух попыток не удалось, на экран выводится вот такая пиктограмма и попытки наладить соединение продолжаются.
После 8 неудачных попыток будет выведено сообщение об ошибке, если после этого коснуться экрана в любом месте, процедура соединения повторится сначала.
Вся основная информация выводится на Главном экране в виде таблицы. Данные обновляются каждые 100мс. Кроме напряжения (1с) и температуры с DS18b20 (2с). Главный экран разделен на две области. В верхней, большей, области отображаются параметры представленные в виде таблицы, как:
- Напряжение в сети (MAIN VOLT.)
- Температура в салоне (TEMP. INT.)
- Температура за бортом (TEMP. OUT.)
- Время
- Температура двигателя (ENGINE TEMP.)
- Количество оборотов (ENGINE RPM)
- Скорость движения (SPEED)
- Часовой расход топлива (FUEL RATE)
Нижняя область отведена под иконки статуса и кнопки. Слева направо:
- Уровень масла
- Уровень охлаждающей жидкости
- Напоминания о замене фильтров
- Переключение режимов управления наружным светом
- Включение/отключение звука
- Меню
В случае возникновения проблем, пиктограмма выделяется красным цветом, это же относится и к напряжению. Кроме этого о неполадке сообщается частым миганием статусного светодиода (5 раз с интервалом 300мс.) и звуковым сигналом (в том случае, если включен звук). Уведомления об уровне масла/тосола/напряжения повторяются раз в минуту, а уведомления о замене фильтров раз в час. Пробег перед заменой взят из справочной литературы и для воздушного фильтра составляет 15000км, а для масляного – 10000км.
Значок “минус” для отрицательной температуры уже никак не помещался, поэтому отрицательная температура выводится синим цветом. Четвертая цифра в количестве оборотов тоже не поместилась, пришлось ее заменить точкой. Теперь если точка стоит после числа (123.) то это означает, что обороты превысили 1000, в данном примере — это 1230 об/мин. А если точка стоит слева от числа (.876), то обороты меньше 1000, в данном случае — 876 об/мин. (на фото не совсем верная информация, оно было сделано во время одного из тестов).
Часть пунктов таблицы кликабельна, это:
- Напряжение
- Температура за бортом
- Время
- Скорость
- Расход топлива
Нажатие на перечисленные пункты, кроме времени, открывает экран статистики, в верхней части которого представлены минимальное/максимальное/среднее значение параметра, а в нижней примерный график.
Первые 18 раз запись данных производится с интервалов в 10с, далее в 1мин, а потом с интервалом в 5 мин.
Нажатие на часы откроет экран статистики за поездку:
Статистика ведется в двух режимах. Пока не нажата кнопка START, статистика сбрасывается через минуту, после выключения зажигания. Если же нажать кнопку START, то ведение статистики будет работать до нажатия кнопки RESET даже с выключенным двигателем. Это будет полезно, если движение осуществляется с остановками и требуется узнать общее время, проведенное в пути, или же общее количество израсходованного топлива.
Нажатие на пикограммы с надписями AIR/OIL откроет экран статистики фильтров.
Здесь отображается расстояние, пройденное с момента замены фильтра. Соответственно, после замены фильтра требуется сбросить пробег удерживанием кнопки RESET. При выключении зажигания и по прошествии часа, значения пробега сохраняются на карту памяти.
Далее идет кнопка управления внешним освещением. При нажатии происходит перебор режимов, на что указывает изменение вида кнопки. Всего режимов 3:
— управление выключено
— включение габаритных огней
— включение фар и габаритных огней
Габаритные огни включаются после 2 минут работы двигателя если машина не движется, либо сразу после начала движения, либо при достижении температуры двигателя равной 60 градусам. Выключение происходит через минуту после выключения зажигания.
С фарами все гораздо интереснее, они реагируют на уровень освещенности. Как только этот уровень станет ниже порогового (устанавливается в меню) и продержится в этом состоянии не менее 15сек. Будет произведено включение фар. Выключение произойдет либо через 3сек. после выключения зажигания, либо в том случае, если уровень освещенности продержится выше порогового не меньше минуты. Включение фар или габаритных огней сопровождается звуковым уведомлением и миганием статусного светодиода (3 раза с интервалом 800 мс.).
Следующая кнопка управляет звуком. Тут все просто:
— звук выключен
— звук включен
При отключенном звуке уведомления будут выводиться только при помощи статусного светодиода и пиктограмм.
При нажатии на кнопку меню откроется экран настроек девайса:
Он состоит из 6 пунктов:
- Расширенный экран параметров двигателя
- Экран чтения ошибок
- Подключение USB
- Настройка часов
- Настройка порога включения фар
- Настройка яркости дисплея
Начнем по порядку. Расширенный экран параметров представляет собой вот такую таблицу:
Тут можно увидеть:
- Напряжение в сети (MAIN VOLT.);
- Обороты (ENGINE RPM);
- Расход воздуха (AIR FLOW);
- Датчик массового расхода воздуха (MAF SENSOR);
- Положение дроссельной заслонки (THROTTLE POSITION);
- Время впрыска (IHJECT. TIME);
- Регулятор положения ХХ (REG-R IDLE);
- Угол опережения зажигания (IGNITION ANGLE).
Все это дело можно сохранить в текстовый документ diagnost.txt. на карту памяти нажатием на кнопку SAVE. Если все прошло успешно, рядом с кнопкой появится зеленый квадрат, а в случае ошибки – красный.
Экран чтения ошибок.
Здесь выводятся ошибки, содержащиеся в памяти ЭБУ, конечно, если они вообще есть (у меня, к счастью, ни одной не было). Ошибки так же можно сохранить на карту памяти в файл errors.txt, а кроме этого произвести сброс удерживанием кнопки RESET.
Подключение USB. Тут, к сожалению, не все так хорошо. С USB подключением я не успел разобраться на момент написания статьи, поэтому пока только выводится вот такая картинка:
Настройка часов. Тут все просто, в этом разделе можно произвести установку времени.
Устанавливаемое значение выделяется красным цветом и стрелкой. После выставления часов, можно настроить минуты, а после минут снова часы, и так по кругу. Сохранение значений происходит по нажатию кнопки APPLY, а при нажатии кнопки CANCEL все остается без изменений.
Настройка порога включения фар. Данный экран выглядит следующим образом:
Вверху отображается текущий уровень освещенности, получаемый с датчика, а внизу тот уровень, который был настроен. Соответственно настройка осуществляется простым нажатием на ползунок. Как и ранее применение настроек происходит после нажатия кнопки APPLY. Для контроля за освещенностью применен обычный фоторезистор. Его сдедует установить так, чтобы на него попадал свет, прошедший через лобовое стекло.
Настройка яркости дисплея. Тут всего один ползунок:
Изменения яркости при настройке можно увидеть сразу после нажатия на ползунок. Далее будет происходить автоподстройка уровня яркости по показаниям, полученным с датчика освещенности, на основе заданного уровня. Сохранение все той же кнопкой APPLY.
На этом различные менюшки заканчиваются. Все настройки системы сохраняются на карту памяти в файлик settings.bin. Как можно заметить, вся работа устройства завязана на карте памяти. Поэтому проводится контроль ее наличия, чтобы избежать ошибок в работе. Если карта памяти по каким-то причинам не отвечает, то производится попытка инициализации карты памяти, а в том случае, если это не помогает, на экран выводится вот такое сообщение:
При нажатии в любой точке экрана будет предпринята попытка инициализировать карту памяти. Также без карты памяти девайс не включится, а на экране будет выводится сообщение об ошибке. Лично у меня подобной проблем с картой памяти пока не было, она прекрасно выдерживает тряску и из разъема не выпадает.
Также стоит остановится на первом включении, когда никакие настройки не сделаны. Т.к. экран сенсорный, то ему просто необходима такая вещь, как калибровка. Именно в этот режим и переходит устройство при первом включении:
Для выполнения данной процедуры следует коснуться экрана в точках, указанных перекрестием. Всего таких точек 4. После этого экран погаснет и устройство перейдет в режим ожидания каких-либо действий.
И последняя функция – управление освещением салона. В момент открытия двери начинает плавно наращиваться яркость светильника. Полная яркость достигается за 13 секунд. После закрытия двери, по прошествии 10 секунд освещение начинает плавно гаснуть. При этом если начать движение, то освещение будет погашено практически мгновенно.
Теперь расскажу о формате картинок и звуков для интерфейса. Картинки представляют собой обычные BMP файлы, но сохраненные в цветовом формате RGB565 и с вертикальным зеркальным отображением. Со звуками все проще, это WAV фалы, моно, 8 бит. Частота дискретизации не важна, в программе предусмотрена автоподстройка. Т.е. смена интерфейса проводится очень легко без необходимости изменения чего-либо в прошивке. Карта памяти должна быть с файловой таблицей FAT32. Лично мной проверена работа с карточками объемом до 8 ГБ. включительно.
По идее данная схема будет работать с любым ЭБУ, который использует Keyword Protocol 2000. В планах на будущее допилить USB и добавить функцию диагностического адаптера. Также, возможно, сделать поддержку других протоколов обмена данными с ЭБУ, с простой заменой. Например, хранить необходимые команды в файлике на карте памяти или записывать по USB. Может еще чего придумаю. Пока на этом у меня все =)
Бортовой компьютер своими руками? — легко!
Давно была идея сделать бортовой/маршрутный компьютер в авто.
Есть готовые очень неплохие мультитрониксы — но с ними проблема, они не поддерживают наши старые тоетки по OBD (точнее авто не поддерживает OBD диагностику).
Решено сделать свое универсальное устройство, которое будет уметь все и все.
В качестве "мозга" — AVК контроллер Atmel AtMEGA640/1280/2560 серии.
Тем более, что плата готовая и подходящая по всем параметрам и возможному функционалу — давно валяется в загашнике, запасы от старого проекта 🙂
Функционально состоит из 2х частей — слева БП от 220В, справа собственно сам процессор.
Т.к. в авто уже есть 12В — то соответственно БП на 220 — нам не нужен. Сделано для универсальности.
На данной плате все сделано по максимуму именно для универсального применения — можно реализовать от примитивной елочной "мигалки", до системы "умный дом" — на сколько хватит фантазии.
Ну а касательно нашей задачи, функционал будет примерно следующий:
— вывод информации со всех датчиков, как штатных так и допольнительных, а это —
— температура ОЖ ДВС
— температура масла двигателя
— температура ОЖ доп датчик (верхний патрубок радиатора)
— температура масла в АКПП, в поддоне
— температура воздуха во впуске
— давление во впускном коллекторе (наддув)
— время открытия форсунок / % загрузки
— положение дросселя (% открытия)
— напряжение в сети
— ведение логов и возможность записи информации на компьютер (ноутбук) по RS232
Функции маршрутного компьютера:
— скорость/пробег — суммарный/за поездку
— расход средний/за поездку
— снятие ограничителя скорости (для сток мозга)
— текущая передача АКПП (если кому интересно)
Любые доп. функции — кому на сколько хватит фантазии.
Можно как снимать данные с любых датчиков — например, поставить акселерометр (ADXL*) — и измерять ускорение. Либо управлять любыми внешними исполнительными устройствами.
На текущий момент стадия проектирования функционала, для наглядности пара "скринов" — экранчик пока такой, что под рукой было. Со временем может переделаю на графический — посимпатичнее будет внешний вид.
WAT — температура воды радиатор/ДВС
OIL -температура масла в двигателе/АКПП
IAT- температура воздуха во впуске INJ — время открытия форсунок
BST — давление во впуске (наддув) DRS — % открытия дросселя
FULLRUN — суммарный пробег/расход топлива
AVG — средняя скорость движения, средний расход топлива
CUR — текущая поездка, пробег/расход
SPD — текущая скорость движения, (можно еще добавить сюда же мгновенный расход топлива)
Вариант представления данных в виде "прогресс бара". На скрине буст и % открытия дросселя.
Все данные даны для примера. Пока на неподключенном к авто устройстве.
Может у кого еще какие мысли и предложения будут — каменты приветствуются.
SECU-3.org
Бортовой компьютер c графическим дисплеем 128х64 на Arduino «Сделай сам»
- Jump to page:
Бортовой компьютер c графическим дисплеем 128х64 на Arduino «Сделай сам»
Post by Kosh » 08 Dec 2020, 14:03
Символьный экран 20х4 очень прост в программировании, но места мало и особо не разгуляешься.
Графический дисплей дает большую свободу, но ценой сложности программирования.
Можно вместо надписей сделать пиктограммы, они более информативны, как мне кажется. Ну, должны быть информативны, если грамотно нарисованы.
Для создания своего экрана есть конфигуратор в Excel с инструкцией.
Изменить можно основной экран, второй экран и частично экран замера разгона (только третий столбец).
Экран разбит на 6 строк и 3 столбца.
Блоки с данными есть двух видов:
— (H) занимающие 1 строку, их можно размещать в любую строку
— (F) занимающие 2 строки, их можно размещать только в строках 1, 3 и 5.
Пример моего экрана:
1. Мгновенный расход л/ч (FF) или л/100км (FC), если значение скорости и ДПДЗ больше 3,
2. ДАД и Температура воздуха во впуске,
3. Напряжение с УДК и лямбда коррекция,
4. Температура ОЖ,
5. РХХ или ДПДЗ,
6. Напряжение сети и УОЗ,
7. Пробег суточный и общий,
8. Средний расход суточный и общий,
9. Израсходованное топливо суточное и общее.
Второй экран аналогичен первому и служит для вывода второй группы показателей.
Экран замера разгона состоит из трех частей:
— Слева индикация состояния и результат измерений,
— Посередине линейный тахометр,
— Справа три ячейки с показаниями (можно заменить на другие):
1. Скорость (моргает при наличии коррекции УОЗ от ДД),
2. ДАД,
3. Температура ОЖ.
Экран разгона имеет два режима:
— замер 0-100, если переключится при скорости меньше 5 км/ч,
— замер 60-100, если переключится при скорости больше 5 км/ч.
При переключении на экран разгона отображается сигнал «WAIT».
При скорости 0 км/ч для первого режима и скорости меньше 50км/ч для второго режима по прошествии 1 секунды БК переходит в режим «READY». При появлении сигнала от датчика скорости или превышении скорости 60км/ч для второго режима начинается измерение. Если не достигли скорости 100 км/ч в течение 64 секунд, измерение прекращается с сообщением «FAIL!».
Экран ошибок CE:
Название ошибок взял из ce_errors.h прошивки SECU, там же можно посмотреть описание ошибок.
Стрелка внизу обозначает, что есть еще ошибки.
При появлении новой ошибки на главном экране рисуется рамка по периметру.
БК считает изменение бита каждой ошибки с 0 на 1 в пакете данных от СЕКУ и записывает в массив. Таким образом, на экран выводится количество зарегистрированных ошибок. Максимально количество ошибок ограничено до 99. При выключении БК все сбрасывается.
Дисплей подключается по SPI шине.
На даный момент проверена работа со следующими дисплеями:
— Простой LCD 128х64 на чипе ST7920,
— OLED 1.3″ на чипе SH1106,
— OLED 2.42″ на чипе SSD1309.
Дисплей выбирается в начале основного файла.
Вверх/вниз (короткое) при первом нажатии сначала только отображает блок с параметром, а уже следующие нажатия меняют параметр:
0 — На основном экране регулировка яркости БК,
1 — На дополнительном экране — регулировка яркости приборной панели,
2 — На экране разгона — изменение коэффициента коррекции расхода топлива,
3 — На экране ошибок СЕ — перелистывание ошибок.
Вправо/влево короткое — смена экрана.
Долгое нажатие влево — сброс счетчика работы двигателя.
Долгое нажатие вправо — сброс суточного пробега или ошибок CE в зависимости от текущего экрана.
Как опцию в настройках можно включить управление энкодером : вращение – изменение яркости, короткое нажатие — смена экрана, нажатие более двух секунд на основном экране — сброс суточного пробега или ошибок CE в зависимости от текущего экрана.
В БК реализовано управление питанием и два режима яркости в зависимости от состояния габаритов.
В скобках указаны детали, которые использовал в своем БК, но можно заменить на аналогичные с подходящими характеристиками.
1) Делители:
— Стабилитрон 4.7 В (1N4732A) – 2 шт
— Резистор 10 кОм – 4 шт
Тут все просто, делитель 1 к 2 плюс стабилитрон. Сделал как в SECU, только конденсатора нет.
2) Костыль для подтяжки входа контроля габаритов к земле при выключенном зажигании:
— Диод 1А (1N4007) – 1 шт
При выключенном зажигании диод притягивает к земле вход контроля габаритов, так как происходит паразитное питание, которое приводит к зависанию LCD экрана.
3) Управление питанием:
— P-канальный полевой транзистор (IRF9Z34NPBF) – 1 шт
— Транзистор NPN малой мощности (КТ368) – 1 шт
— Резистор 1 кОм – 1 шт
— Резистор 4.7 кОм – 1 шт
— Диод 1А (1N4007) – 2 шт
Тут чуток интереснее, управляет питанием P-канальный MOSFET, а им уже управляет NPN транзистор, так как на затворе напряжение должно быть 12В.
Диоды стоят, чтобы ток не перетекал из одной цепи в другую.
Когда БК выключен, транзистора Q1 закрыт так как затвор подтянут к +12В резистором R1.
При включении зажигания БК запитывается через диод D1 и запускается, на управляющем выводе D4 появляется напряжение 5В, транзистор Q2 открывается и подтягивает затвор Q1 к земле. Транзистор Q1 открывается, и ток может течь через него и диод D2.
При отключении зажигания ток течет уже только через транзистор Q1 и диод D2. БК через делитель понимает, что зажигание выключено, записывает данные в EEPROM, показывает экран завершения и через управляющий вывод D4 сам себя обесточивает.
Все это можно сделать проще на обычном модуле реле для Arduino.
4) Вариант 1 — Усилитель сигнала от SECU на операционном усилителе в режиме повторителя:
— Операционный усилитель (LM358) – 1 шт.
— Резистор 1 кОм – 1 шт
5) Вариант 2 — Усилитель сигнала на транзисторах:
— Транзистор NPN малой мощности (КТ368) – 2 шт
— Резистор 1 кОм – 2 шт
— Резистор 10 кОм – 2 шт
6) Измеритель уровня освещенности для авторегулировки яркости экрана:
— Фоторезистор PGM5539 — 1 шт
— Резистор 47 кОм — 1 шт
— Конденсатор 10 мкФ — 1 шт
Делитель напряжения с фоторезистором PGM5539 и резистором 47кОм для измерения уровня освещенности, конденсатор 10 мкФ для сглаживания сигнала. При нулевой освещенности напряжение получается около 0В, при ярком свете — почти 5В.
Вся хитрость состоит в подборе парного резистора, чтобы работал весь диапазон напряжения.
Про настройку автояркости описано тут.
В Arduino вход RX соединён с USB-Serial конвертером и в нормальном состоянии подтянут к +5В резистором 1 кОм, что мешает сигналу от SECU. Можно просто в разрез впаять геркон и при прошивке подносить магнит, но это неудобно, и Ардуину приходится курочить.
Потому проще собрать усилитель. А ставить его лучше со стороны SECU и +5 вольт брать также от SECU, чтобы усилитель не мешался, когда отсоединяешь БК для прошивки. Или можно сделать на промежуточной плате как у меня и взять +5В от БК.
При использовании большого OLED дисплея, мощности встроенного стабилизатора Arduino не хватает и БК начинает перезагружаться.
В таком случаем необходимо ставить внешний стабилизатор на 5В и от него запитывать БК.
Корпус напечатал на 3D Принтере из PETG пластика:
Повторитель на операционном усилителе разместил на промежуточном блоке, чтобы когда отсоединяешь БК для прошивки ничего не мешалось:
Для загрузки прошивки рекомендую использовать Arduino IDE версии 1.8.9 с установленым дополнением GyverCore. Прошивка занимает почти всю flash память и ОЗУ, а GyverCore освободождает около 1 kB flash, кроме того у Arduino Nano можно обновить загрузчик на Optiboot, тем самым освободив еще 1.5 kB flash. Подробности в этом посте.
Кроме того есть кривые версии Arduino IDE, из-за чего потом могут вылазить странные баги.
Кроме выбора LCD дисплея все настройки находятся в файле Configuration.h.
ВНИМАНИЕ!
Перед первой прошивкой необходимо стереть EEPROM, так как там может храниться всякая ересь.
Для этого можно предварительно залить пример для работы с EEPROM «eeprom_clear» из Arduino IDE, после чего залить уже код БК.
Или раскомментировать строку ниже, прошиться, закомментировать обратно и прошить заново.