Автомобильный сканер OBDII концептуально на «Raspberry Pi»

Автомобильный сканер OBDII концептуально на «Raspberry Pi»

Сегодня на торговых площадках доступен широкий ассортимент приборов серии автомобильный сканер OBDII. Однако большая часть такого рода устройств, либо слишком дороги, либо не удовлетворяют критериям точности выдаваемых результатов. Практически все предлагаемые торговлей приборы являются системами закрытого типа, не подлежащие расширению функционала или модификации. Соответственно, создание автомобильного сканера OBDII на базе конструктора «Raspberry Pi» видится вполне подходящим решением для широкого круга владельцев машин.

Что может автомобильный сканер OBDII на «Raspberry Pi»?

Сделанный самостоятельно автомобильный сканер OBDII на базе известного конструкторского набора «Raspberry Pi» позволит отображать данные, к примеру, заложенные в памяти ЭБУ «BMW M3» 1997 года выпуска.

Конечно же, одной только маркой автомобилей «BMW» работа прибора не ограничивается. Вполне допустимо применение на самых разных машинах, эксплуатируемых сегодня. Получаемая информация выводится на интерактивном графическом интерфейсе пользователя, который представляет обычный сенсорный экран.

Сделанный продукт получается недорогим, вполне надёжным устройством и, главное, поддерживающим возможности расширения конструкции. Предусмотрена лёгкая установка (подключение) системы в состав оборудования машин и такое же лёгкое удаление (отключение).

Конструкцией, кроме всего прочего, учитывается адаптация к другим транспортным средствам (не только к автомобилям), пусть даже с некоторыми изменениями. Плюс, возможности добавления модулей «GPS», «IMU» и подобных с целью расширения функционала.

Представления на концептуальный автомобильный сканер OBDII

Концептуальный продукт содержит лицевую панель, которую в современных условиях удобно изготовить на 3D-принтере. Лицевая панель закрывает область размещения остальных комплектующих деталей внутри центральной консоли автомобиля. Сенсорный экран встроен в лицевую панель, тогда как остальное оборудование установлено непосредственно за лицевой панелью.

Аппаратное обеспечение, соответственно: конструкторский набор «Raspberry Pi 3», посредством которого налаживается связь с ЭБУ автомобиля через адаптер «USB OBD». Получаемые данные обрабатываются схемой «Raspberry Pi 3» и программными модулями, написанными на языке «Python». Результат выводятся на резистивный сенсорный экран диагональю 3,5 дюйма через интерфейс «SPI».

Программной средой каждую секунду данные записываются в файл «CSV», который допустимо просматривать в любое время. Конструкция предусматривает отдельный блок питания на микроконтроллере «Atmel ATtiny85», подающий энергию на модуль «Raspberry Pi 3» при включении зажигания. После выключения зажигания блок питания продолжает питать автомобильный сканер OBDII на протяжении 45 секунд, чем обеспечивается высокая степень надёжности работы сканера.

Связь автомобильного сканера OBDII и ЭБУ мотора

Организация связи сканера OBDII и ЭБУ автомобиля осуществляется посредством любого из протоколов ниже на выбор:

  • OBD2 protocols,
  • OBDII pinout,
  • SAE J1850,
  • ISO 14230-4:2000,
  • ISO 15765-4:2016,
  • ISO 9141-2:1994.

Идентификаторы параметров (PID) отправляются шестнадцатеричными кодами. Идентификаторы PID, как правило, представляют две или более пары шестнадцатеричных чисел. Первая пара представляет режим OBD, вторая — точный параметр этого режима.

Автомобильный сканер OBDII концептуально + интерфейс подключения
Интерфейс OBDII по умолчанию: 1, 3, 8, 9, 11, 12, 13 — конкретная модель; 2 — протокол SAE J1850-PWM POS (+) или SAE J1850-VPW POS (+); 4 — земля (шасси); 5 — сигнальная «земля»; 6 — протокол ISO15765-4 высокоуровневой CAN-шины; 7 — протокол ISO9141-2 K-line или ISO14230-4 KWP2000 K-line; 10 — протокол SAE J1850 PWM NEG (-); 14 — протокол ISO15765-4 низкоуровневой CAN-шины; 15 — протокол ISO9141-2 L-line или ISO14230-4 KWP2000 L-line; 16 — линия питания +12 вольт

К примеру, когда требуется получить список всех поддерживаемых PID идентификаторов режима 1, отправляется значение «0100». Блок управления двигателем выдаёт в ответ список всех поддерживаемых PID идентификаторов режима 1 в шестнадцатеричном формате.

Традиционно PID идентификаторы стандартизированы, но некоторые — так называемые OEM-производители, нередко добавляют собственные PID идентификаторы проприетарных датчиков.

Распространённым способом взаимодействия с портом OBD считается применение специального считывателя USB-адаптера OBD. Практически все USB-адаптеры OBD используют микроконтроллер интерпретатор фирмы «ELM Electronics» — микросхему ELM327 OBD в той или иной форме. В качестве примера можно отметить считыватель «ScanTool 8 OBDLink SX».

Этот адаптер на микроконтроллере OBD «Solutions STN1110» полностью совместим с набором команд микросхемы ELM327. Вместе с тем адаптер имеет более быстрый процессор, а также больший объём флэш-памяти и ОЗУ. Система интерпретирует необработанные данные OBD и преобразует для передачи по UART. Затем для передачи данных по кабелю USB используется мостовая интегральная схема FTDI FT230XQ USB-UART.

Автомобильный сканер OBDII + дизайн и программное обеспечение

Применительно к разработке для машины BMW M3 удобно использовать место под хранение солнцезащитных очков, что имеется на центральной консоли салона ТС. Именно здесь удачно вписывается информационный экран. Также в этом месте остаётся достаточно пространства позади экрана для монтажа модуля «Raspberry Pi».

Графический интерфейс логично сделать удобочитаемым и простым в использовании. Учитывая, что дисплей находится за пределами прямого поля зрения водителя, важным фактором является восприятие экрана и чтение всех данных. То есть шрифты необходимы большие, простые, легко читающиеся.

Автомобильный сканер OBDII концептуально + дизайн дисплея
Предполагаемый дизайн дисплея на автомобильный сканер OBDII, заявленный концептуальной версией разработки

Кроме создания основы дизайна графического интерфейса, важным моментом видится также программное обеспечение. Здесь традиционно используется язык программирования «Python» (но не исключаются и другие варианты) под написание требуемых системных файлов. В данном случае, файл «config.py» содержит глобальные переменные и пользовательские настройки.

Эти переменные и настройки используются при работе модулей сканера OBDII. Другой файл «m3_pi.py» применяется под главный контроллер и обработку графического интерфейса. Для координации модулей используются файлы «ecu.py» и «log.py», соответственно.

Файлом «ecu.py» организуется обработка соединения с ЭБУ автомобиля и запись всех полученных данных в переменные, что содержит файл «config.py». Тем самым модули сканера OBDII получают к переменным доступ. Наконец, файл «log.py» рассчитан под обработку записи всех данных в файл CSV. Также потребуется системный файл «shutdown.py».

«Железная» составляющая на автомобильный сканер OBDII

Так называемое «железо» считается наиболее сложной частью проекта автомобильного сканера OBDII. Применение конструктора «Raspberry Pi 3» здесь, конечно, видится выгодным ввиду низкой цены самого набора, приемлемой мощности и возможностей протокола «WiFi». Тем не менее, сходу достаточно непросто понять — как применить конструктор в деле?

На той же машине BMW M3 отсутствуют какие-либо USB-порты. К тому же необходима реализация преобразователя постоянного тока, понижающего напряжение 12 вольт аккумулятора автомобиля до 5 вольт питания модуля «Raspberry Pi».

Аккумулятор автомобиля постоянно выдаёт напряжение, независимо от состояния мотора машины (заведён/заглушен). Поэтому, даже если мотор машины заглушен, плата «Raspberry Pi» потребляет определённый объём энергии от аккумулятора (примерно 200 мА). Соответственно, возможен полный разряд батареи за какое-то время, если оставить электронику подключенной.

Автомобильный сканер OBDII концептуально + схема стабилизаторов
Схема электронная для питания устройства «Raspbery Pi» с учётом задержки съёма напряжения при отключении мотора

В принципе, допустимым видится задействовать линию «ACC», но в таком случае схема «Raspberry Pi» моментально отключается от питания по факту остановки мотора автомобиля. Такая ситуация потенциально грозит повредить SD-карту, подключенную к устройству «Raspberry Pi». Однако есть вариант использования линии «ACC» для включения/отключения питающего напряжения через микроконтроллер.

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

Чтобы связать всё воедино, потребуется сенсорный экран под установку на передней панели водителя. Для этого удачно подходит резистивный сенсорный экран «Adafruit PiTFT Plus 3.5» или аналогичный. Обмен данными с модулем «Raspberry Pi» осуществляется через «SPI» посредством контактов «GPIO».

Как запускается конструктор «Raspberry Pi» в работу?

Рекомендуется использовать «Raspbian» — официальную операционную систему «Raspberry Pi Foundation». В частности, «Raspbian Lite», мини ОС на основе «Debian», без графического интерфейса пользователя, но с интерфейсом командной строки. После записи образа на SD-карту:

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

После запуска следует обновить «Raspberry Pi» до последней версии, после чего использовать сценарий настройки «PiTFT Helper» от «Adafruit» для установки необходимых файлов ядра и несколько библиотек «Python» под сенсорный экран. Подключают сенсорный экран для проверки. Плата фактически готова к работе.

Автомобильный сканер OBDII концептуально + общая схема подключения
Такой видится общая схемотехника подключения устройства на автомобильную систему через плату стабилизации питающего напряжения устройства «Raspberry Pi»

Среда разработки «Python» не имеет встроенных функций графического интерфейса пользователя, но имеет несколько библиотек среды графического интерфейса, которые можно использовать для создания собственного интерактивного приложения. Один из вариантов — применение «Pygame» из набора «Python».

Главное предназначение «Pygame», конечно, создание видеоигр. Однако эта среда довольно проста в использовании (в отличие от других фреймворков графического интерфейса «Python», например «PyQt» и «17 wxPython»). Сеть Интернет предоставляет полную документацию на «Pygame». В результате получают простой графический интерфейс.

Автомобильный сканер OBDII + получение данных системой

Получение данных автомобиля в реальном времени — это довольно сложный процесс, Для такого случая лучше применять адаптер USB OBD-II, а не адаптер Bluetooth OBD-II. Придётся использовать библиотеку «Python OBD-II» с открытым исходным кодом (официальное название «Python-OBD») для создания небольшого модуля получения данных: скорости (об/мин), нагрузки на двигатель.

Здесь для отладки рекомендуется применить эмулятор «Freematics OBD-II Emulator MK220», что позволяет тестировать систему вне автомобиля. Устройством поддерживается графический интерфейс «Windows» и управление через стандартный USB-кабель.

Таким образом, открываются пользовательские возможности моделировать различные PID-коды OBD-II, а также обслуживать до 6 кодов неисправности (диагностические коды неисправностей). После некоторой начальной настройки эмулятор настраивается на использование протокола ISO 9141-2, что и целевой автомобиль.

Следует использовать функцию асинхронного подключения «Python-OBD», которая позволяет обновлять пользовательский интерфейс «на лету». Асинхронным режимом организуется поточный цикл обновления, запускающий обратные вызовы для различных запросов, как только новые данные доступны в ЭБУ.

Набор поддерживаемых PID идентификаторов можно получить, используя команду «0100». Основываясь на ответе, выбирают те идентификаторы, которые наиболее полезны для конечного пользователя:

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

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

Px * Sa * Po * 336,13 / Dk

где: Px — передаточное число моста; Sa — скорость автомобиля; Po — передаточное отношение; Dk — диаметр колеса (шины)

Применительно к автомобилю «BMW M3» передаточное число моста — это число LSD (дифференциала повышенного трения), расположенного на задней оси. Передаточное отношение — это передаточное число текущей передачи, на которой находится автомобиль.

Автомобиль «BMW M3» оснащается 5-ступенчатой коробкой передач. Причём на последней передаче используется прямое передаточное число 1:1.336,13, которое используется для преобразования числителя в число оборотов в минуту.

Графический интерфейс и схема для линии «ACC»

Предпочтительный дизайн, отображающий все требуемые данные ECU красивым и вполне читаемым шрифтом, показан ниже. Здесь есть тахометр, сочетающий в себе текст и визуальные элементы, а также логотип автомобиля «BMW M3». При касании экрана загружается отдельное представление, коим отображаются все коды неисправности, хранящиеся в ЭБУ.

Тахометр, по сути, содержит 42 линии, созданные в «Adobe Illustrator». Каждая линия на тахометре соответствует значению — 200 об/мин. Каждое очередное изображение линии основывается на следующем, выделяя одновременно пройденную линию. Фактически интерфейс работает как «стрелка» аналогового тахометра, несмотря на упрощённую конструкцию.

Графику тахометра можно программным способом окрасить полностью красным цветом, когда число оборотов приближается к пределу (7000 об/мин). Конструкция позволяет беглым взглядом на экран легко оценить количество оборотов, без необходимости считывать точное число оборотов в минуту.

Выше упоминалось о применении микроконтроллера, которым обеспечивается питание схемы конструктора, когда линия «ACC» находится под напряжением и сохранении потенциала в течение 45 секунд после отключения линии «ACC». Здесь требуется 8-битный микроконтроллер AVR «Atmel ATtiny85» и сборка электронной схемы.

Как видно из схемы, дополнительно используется стабилизатор напряжения на 3,3 вольта для питания микроконтроллера. Сама электронная схема достаточно простая, допускает сборку на простой макетной плате. Все компоненты доступны в продаже.

Автомобильный сканер OBDII + полный монтаж системы

Как всё это смонтировать внутри машины? Порт OBDII расположен в области ног водителя (для «BMW M3»). Логичным видится использовать прямоугольный разъём «OBD» для подключения к USB-кабелю. Далее USB-кабель пропускается за панелью непосредственно к устройству «Raspberry Pi» на центральной консоли.

Останется подключить терминальные линии:

  • 12В,
  • ACC,
  • Земля,

и 40-контактный ленточный кабель соединения сенсорного экрана на контакты GPIO «Raspberry Pi». Лицевую панель можно соорудить дизайном на личное усмотрение. Например, используя традиционный пластик или же фактурное дерево. Желательно сделать панель легкосъёмной.

Организация запуска в работу дисплея при каждом включении системы – это завершающий шаг концепции. Настройка выполняется через файл «/etc/rc.local». Этот файл — простой скрипт на выполнение любых команд, как только система завершит загрузку. Сюда достаточно добавить две строки, одну для сценария выключения и одну для основного модуля управления:

sudo python home / pi / shutdown.py &

sudo python home / pi / m3_pi.py &

Этими двумя командными строками активируется графический интерфейс и получает данные в реальном времени в течение 25 секунд с момента запуска транспортного средства.


При помощи информации: CalPoly