X0r - Розкрийте секрети вашого автомобіля за допомогою порту OBD-II

Коли я дізнався, що в моєму автомобілі є діагностичний порт, який може отримувати всі миттєві параметри, такі як швидкість, оберти двигуна чи інші речі в режимі реального часу, я відразу задумав це зробити ''. Придбання USB-модуля, що дозволяє mumuse з цим портом.

Цей порт, який називається OBD-II (для вбудованої діагностики), буде обов'язковим для всіх автомобілів, побудованих з початку 2000-х років, отже, цілком можливо, що ваш автомобіль теж має його. Загалом, він досить добре захований, іноді під люком, але частіше під кермом або іншим місцем, до якого можна дістатись з водійського сидіння.

Спочатку це діагностичний порт, який дозволяє виробникам автомобілів контролювати стан та викиди газів або частинок двигунів, які вони вкладають у свої машини, щоб мати хорошу репутацію із законами, зокрема, щодо викидів парникових газів. Звичайно, ми будемо використовувати цей порт, щоб робити речі трохи веселіше.

Дійсно, можливостей безліч. Хтось може використовувати цей порт для нагляду за флотом. Інші могли використовувати його для створення альтернативної панелі приладів, що відображає параметри двигуна (затримки запалювання, міцність тощо), яких приладова панель не вказує. Особисто я мрію зробити хедз-ап показ. Навіть якщо я доволі сумніваюся у здійсненності проекту з кількох причин, я тим не менше отримав інструменти, щоб розважити.

Для спілкування з автомобілем існує кілька стандартизованих протоколів (приблизно рівень 1 і 2), і знати, який із них використовувати, зазвичай є грою на відгадування, оскільки як і будь-який індустріальний протокол, це завжди безлад. На щастя, інтегральні мікросхеми ELM327 роблять це автовизначення для нас, і нам залишається лише наводити на нього команди OBD-II (які, в свою чергу, майже не змінюються), щоб взаємодіяти з автомобілем.

Обладнання

  • ПК, смартфон, КПК, ігрова приставка, Arduino, тостер або щось неймовірне;
  • USB-ключ ELM-327 (або вузол, що містить цей чіп).

розкрийте

Останні можна знайти на eBay приблизно за десять євро. Це дозволяє спілкуватися з портом OBD-II за допомогою власного послідовного протоколу (RS-232). Версія USB просто інтегрує перетворювач PL2303, і ​​можна спілкуватися з ключем за допомогою minicom або подібного інструменту.

Давайте трохи зламаємо

З точки зору користувача, протокол має форму "запит-відповідь" для найпростіших речей. Як і в HTTP, ми надсилаємо запит на отримання певних даних, і ключ відповідає нам. Наприклад, щоб запитати поточне значення тахометра, сеанс виглядає так:

У запиті байт 01 вказує на те, що запитується миттєве реальне значення, а байт 0D (так званий “PID”) вказує на те, що значення тахометра бажане. Список даних, які можна отримати, доступний у всьому Інтернеті. Відповідь - 23 6С, що, перекладено на базу 10 і після ділення на 4, дає фактичне значення, яке становить 2267 обертів на хвилину.

Кожне значення повертається в необробленому вигляді; щоб використовувати їх, вам, як правило, доводиться обробляти їх потроху, щоб отримати фігуру, яку можна використати.

Звичайно, лише невелика частина ПІД, перерахованих на згаданій вище сторінці, як правило, підтримується бортовим комп’ютером, інакше це не було б смішно. На щастя, існує команда, яка дозволяє отримати список підтримуваних ПІД:

Відповідь повертається як 32 біти. Перетворене на базу 2, це число дає 1011 1110 0011 1110 1011 1000 0001 0001. Читаючи зліва направо, ми прийшли до висновку, що мій автомобіль підтримує PID 00, 02 - 06, 0A - 0E, 10, 12 - 14, 1B та 1F .

Приклад застосування: простий чорний ящик

Оскільки я хотів перевірити отримання в реальному часі швидкості автомобіля v та частоти обертання двигуна N, я написав невелику програму, яка запитує ключ OBD приблизно 16 разів на секунду та форматує для заданої дати t пару (v, N ).

Оскільки я зазвичай їду один, і я вважав, що їхати з ноутбуком на колінах - це дуже погана ідея, у мене була ідея записати цю інформацію, а потім повторно відтворити її, як своєрідну чорну скриньку.

Стаціонарні випробування (нейтраль, ручне гальмо і кілька невеликих ударів на прискорювачі) дозволили мені переконатися, що 16 зразків на секунду було більш ніж достатньо, щоб мати щось рідинне, і що, здавалося, ідеально відображало те, що прилади показували на панелі приладів, не перевантажуючи БД ключ занадто багато.

Висновок

А як щодо зацікавленості у використанні можливостей порту OBD-II вашого автомобіля, окрім кращого розуміння роботи двигуна, самостійної діагностики та усунення несправностей чи просто для простої інтелектуальної цікавості? Ми бачили, як отримувати "живі" параметри двигуна та реєструвати їх.

Моїм наступним кроком буде використання Raspberry Pi або Arduino, щоб спробувати використати якомога більше даних. Я вже замовив 7-дюймовий екран HDMI на eBay, щоб зробити щось у цьому напрямку за допомогою свого Raspberry Pi.