При создании приложения мы столкнулись с множеством выборов, проблем и так далее, с которыми попробуем ознакомить вас в этой статье. Как оказалось с автомобилем можно вести диалог, причем довольно таки продуктивный. Естественно для того чтобы организовать общение с автомобилем необходимо «установить контакт», «задать правильный вопрос» и правильно понять «ответ», полученный от автомобиля. Соответственно статья и будет нацелена на то, чтобы доступным языком объяснить организацию диалога, а также рассказать вам какие ошибки могут встретиться вам на пути и как с ними бороться.
Выбор подключения
Изначально необходимо пояснить что для подключения к авто будет использоваться ELM327 адаптер. ELM327 – это микросхема, которая позволяет преобразовать протоколы, используемые в диагностических шинах автомобилей в протокол RS232, которым мы и будем передавать данные. За счет того что передача данных по протоколу RS232 происходит последовательно возникает первая проблема – скорости передачи данных, которую мы постараемся обойти в одном из следующих пунктов.
Сканер OBD 2 ELM327. Что выбрать wifi или блютуз? Версия 1.5 или 2.1? С алиэкспресс. Честный отзыв.
Существует несколько вариаций адаптера ELM327, которые классифицируются по способу передачи данных – Bluetooth, WIFI, USB. Исходя из того что целью разработки является мобильное устройство под операционной системой Android можно подобрать две наиболее подходящие версии ELM327, такие как Bluetooth и WIFI. Так как способ получения и обработки данных один, а отличаются они всего лишь вариантами подключения к адаптеру, то можно выбрать всего один, организовать при помощи него диалог, а после добавить остальные варианты подключения.
ELM327 1.5 vs ELM327 2.1

Одной из первых проблем, с которыми можно столкнуться стала проблема выбора непосредственно адаптера, в нашем случае Bluetooth. Оказывается если вам необходимо поддерживать все (по крайней мере большинство) автомобилей необходимо выбирать версию v1.5 вместо v2.1, что на самом то деле необходимо несколько раз уточнить при покупке адаптера, потому как продавцы пытаются выдать версию адаптера не за ту, которая есть на самом деле, т.к. они особо ничем не отличаются. На деле же в версии v2.1 отсутствует поддержка протоколов J1850 PWM и J1850 VPW, что говорит о том, что у вас не получится подключиться к автомобилям, которые используют эти протоколы.
Подключение
Подключение к адаптеру происходит в несколько этапов:
- Подключение к адаптеру (Bluetooth, WIFI)
- Отправка инициализационных команд (инициализационной строки)
AT Z [reset all]
Сброс настроек адаптера до заводского состояния.
AT L1-0
Включить/Отключить символы перевода строки.
AT E1-0
Echo on – off
AT H1-0
Headers on – off
AT AT0-1-2
Adaptive Timing Off — adaptive Timing Auto1 — adaptive Timing Auto2
AT ST FF
Установить таймаут на максимум.
AT D [set all to Default]
Сброс настроек в исходное, настроенное пользователем состояние.
AT DP [Describe the current Protocol]
Сканер способен самостоятельно определять протокол автомобиля, к которому он подключен.
AT IB10 [set the ISO Baud rate to 10400]
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 10400
AT IB96 [ set the ISO Baud rate to 9600]
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 9600 для протоколов 3,4,5.
AT SP h [ Set Protocol h]
Команда выбора протокола h, где h:
0 – Automatic;
1 — SAE J1850 PWM (41.6 Kbaud);
2 — SAE J1850 VPW (10.4 Kbaud);
3 — ISO 9141-2 (5 baud init, 10.4 Kbaud);
4 — ISO 14230-4 KWP (5 baud init, 10.4 Kbaud);
5 — ISO 14230-4 KWP (fast init, 10.4 Kbaud);
6 — ISO 15765-4 CAN (11 bit ID, 500 Kbaud);
7 — ISO 15765-4 CAN (29 bit ID, 500 Kbaud);
8 — ISO 15765-4 CAN (11 bit ID, 250 Kbaud);
9 — ISO 15765-4 CAN (29 bit ID, 250 Kbaud);
AT SP Ah [Set Protocol h with Auto]
Команда устанавливает по умолчанию протокол h, если подключение по протоколу h не удалось, тогда адаптер начинает автоматический подбор протокола.
Исходя из описанных выше команд, формируем инициализационную строку.
initializeCommands = Arrays.asList(«ATZ», «ATL0», «ATE1», «ATH1», «ATAT1», «ATSTFF», «ATDP», «ATSP0»);
Желательно давать возможность пользователю сменять инициализационные команды, потому как для того чтобы подобрать «ключ» к некоторым авто необходимо выбрать более подходящие настройки адаптера. В нашем же случае используются настройки, которые походят для большинства стандартных протоколов.
Так же желательно обратить внимание на команду APSP0, таким образом мы устанавливаем по умолчанию автоматический подбор протокола, это может занять некоторое время.
Соответственно если пользователь знает какой у его авто протокол, то используя возможность смены протокола подключения он может поменять 0 на номер его протокола.
Считывание диагностических данных
Для считывания диагностических данных используются специальные команды PID’s.
PID (Parameter id’s — Бортовые диагностические идентификаторы параметров) – коды, которые используются для запроса показателей определенных датчиков автомобиля.
Основные пиды можно найти в Википедии, там полный набор основных команд, которые должны поддерживать все автомобили. Так же есть наборы команд для определенных марок и типов автомобилей, эти наборы предоставляются за отдельную плату. В нашем случае приложение заточено на базовую диагностику автомобилей соответственно мы используем базовый набор команд.
Также есть возможность получать текущие данные от автомобиля при этом команда получения данных от авто будет иметь вначале 01, указывая на то что мы хотим получить real data. Если же мы хотим получить сохраненные данные автомобиля, то вначале команды необходимо указать 02. Например, команда для получения текущей скорости автомобиля – 010D, а для получения сохраненной скорости – 020D.
Если внимательно посмотреть на то количество команд, которое предоставляется открытыми ресурсами, то можно как раз и заметить ту проблему, о которой я писал в самом начале, а именно проблема скорости ответа адаптера. Так как отправка и получение команд идет последовательно, то для того чтобы получить показания датчика на текущий момент времени необходимо дождаться ответа на все предыдущие команды. Соответственно если запрашивать на получение все команды, то большая вероятность того что обновление реальных данных будет происходить очень медленно. Но и эту проблему можно решить, если воспользоваться командами, которые отобразят только те команды, что существуют в автомобиле. Например:
0100 – PIDs supported [01 — 20]
0120 – PIDs supported [21 — 40]
0140 – PIDs supported [41 — 60]
0160 – PIDs supported [61 — 80]
0180 – PIDs supported [81 – A0]
01A0 – PIDs supported [A1 — C0]
Я продемонстрирую как определить какие датчики присутствуют в автомобиле при помощи одного из пидов. Например:
- 0100 \ запрос
- BB1E3211 \ ответ от авто
BB1E3211(16) > 10111011000111100011001000010001(2)
Используя следующую табличку можем определить какие пиды поддерживаются нашим автомобилем, начиная от 01 до 20:

Исходя из получившихся данных можем определить, что наш автомобиль поддерживает следующие пиды:
01, 03, 04, 05, 07, 08, 0C, 0D, 0E, 0F, 13, 14, 17, 1C, 20
Теперь вместо отправки всех 32 команд и ожидания ответа на них, несмотря на то, что некоторые могут отсутствовать, мы будем использовать всего 15 команд. Но и это не предел так называемой оптимизации. Для того чтобы данные обновлялись еще быстрее советую запрашивать только данные о тех датчиках, которые отображаются на экране.
Хотя это ограничивает некоторый функционал приложения. Например, запись истории.
Считывание и расшифровка ошибок автомобиля
Ошибки автомобиля тоже могут быть различными и для них тоже существуют отдельные команды. Например:
- 03 – Для отображения сохраненных кодов ошибок
- 0A – Для отображения постоянных кодов ошибок.
private final static char[] dtcLetters = ; private final static char[] hexArray = «0123456789ABCDEF».toCharArray(); private void performCalculations(String fault) < final String result = fault; String workingData = «»; int startIndex = 0; troubleCodesArray.clear(); try < if (result.contains(«43»)) < workingData = result.replaceAll(«^43|[rn]43|[rn]», «»); >else if (result.contains(«47»)) < workingData = result.replaceAll(«^47|[rn]47|[rn]», «»); >for(int begin=startIndex; begin < workingData.length(); begin += 4) < String dtc = «»; byte b1 = Utility.hexStringToByteArray(workingData.charAt(begin)); int ch1 = ((b1 > 6); int ch2 = ((b1 > 4); dtc += dtcLetters[ch1]; dtc += hexArray[ch2]; dtc += workingData.substring(begin + 1, begin + 4); if (dtc.equals(«P0000»)) < continue; >troubleCodesArray.add(dtc); > > catch (Exception e) < Log.e(TAG, «Error: » + e.getMessage()); >>
А теперь пояснение.
Исходя из полученного ответа мы можем получить код ошибки, для этого декодируем полученное сообщение используя следующие таблички.


3, 4, 5 символы формируются по этой таблице:

Исходя из этого можем попробовать разобрать следующий ответ 0001000000111110

Код ошибки: P103E
Эпилог
На данном этапе мы разобрались в том, каким образом организовать диалог с адаптером, посылать ему команды, получать и расшифровывать его ответы. Это большая часть работы, если считать то, сколько времени уходит на изучение материала, но в то же время довольно таки интересная. За пределами этой статьи осталось множество проблем связанных с визуальным интерфейсом, а также множество дополнительных функций, таких как добавление новых пидов из файла, стандартный и расширенный способ подключения к адаптеру и построения графиков.
Матвиенко Александр, Хоссейн Фахр.
P.S. Оригинальную английскую версию статьи можно найти здесь
- android development
- obd2
- автомобиль
- автомобильные технологии
- Java
- Разработка под Android
- IT-стандарты
- Автомобильные гаджеты
Источник: habr.com
6 приложений для диагностики автомобиля через OBD
Независимо от того, вы профессиональный автомеханик или просто автолюбитель, необходимо знать, почему загорелся контрольный индикатор двигателя. Это можно сделать с помощью смартфона работающего на ОС Android и адаптера OBD-II. Большинство адаптеров продаются менее чем за 1000 рублей, и как только вы подключите его к автомобилю, вам просто понадобится надежное приложение, чтобы собрать все необходимые данные.
Проблема в том, что в Play Store есть много бесплатных приложений для сканирования OBD, но действительно стоящих — единицы. А также может быть трудно найти правильный адаптер для конкретного смартфона и модели автомобиля. Поэтому чтобы помочь в решении этого вопроса, мы расскажем обо всем более подробно.
Подключение адаптера OBD-II

OBD-II — это стандартизированный протокол для всех авто, созданных с 1996 года. Он используется для передачи информации с компьютера машины на специальные считыватели кодов и другие диагностические инструменты. Используя правильный переходник, данные от порта OBD-II можно перенести в телефон с помощью Bluetooth.
Такие адаптеры можно купить в российских магазинах за 1500 рублей или примерно за 10 долларов на Amazon, также можно использовать устройства типа ELM327 с eBay, которое стоит всего 4 доллара. Без необходимости искать конкретную модель. Достаточно убедиться, что адаптер поддерживает работу с Bluetooth и OBD или OBD-II. Этот вопрос можно задать продавцу или посмотреть сведения в интернете.

Купив адаптер, его нужно подключить к диагностическому порту автомобиля. Найти нужный разъем иногда бывает сложно. Он должен быть где-то под рулевым колесом со стороны водителя, но если вы не можете найти порт, сервис ODB Port Location поможет вам в этом.
Синхронизация адаптера с телефоном
После того как вы подключили адаптер к порту OBD-II, необходимо синхронизировать его со смартфоном. Для этого откройте меню настроек Bluetooth на телефоне и начните поиск устройств, а затем отключите адаптер от автомобиля на несколько секунд. Как только вы это сделаете, поверните ключ зажигания.
На этом этапе OBD-II должен появиться в списке ближайших устройств Bluetooth. На телефоне нужно выбрать его и ввести PIN-код, который обычно равен «0000» или «1234» (если не один из них не работает, обратитесь к прилагаемому руководству пользователя). Теперь устройство должно быть подключено к вашему смартфону.

После окончания синхронизации нужно открыть приложение для сбора данных. Некоторые программы обладают ограниченным временем для подключения, поэтому лучше начать работать сразу после синхронизации и выполнения подготовительных этапов.
Как только процесс синхронизации будет завершен, вы сможете использовать адаптер просто подключив его к своему автомобилю. Не забудьте повернуть ключ зажигания, иначе приложение не сможет получить необходимые сведения о состоянии машины. Сейчас стоит рассмотреть пару хороших приложений, которые помогают механикам быстро провести диагностику транспортного средства.
Carista OBD2

Carista OBD2 позволяет проверить автомобиль на наличие ошибок, удалить их или провести тесты. Как только вы подключитесь к порту OBD2 и разрешите Carista собирать данные, оно сообщит, есть ли какие-то проблемы в работе транспортного средства или нет. При отсутствии адаптера, можно ввести данные вручную. Стоит отметить, что у разработчика даже есть собственный OBD2 адаптер за 26 долларов.
Carista будет следить за основными параметрами транспортного средства, а также сообщать об ошибках в режиме реального времени. Вы также сможет удалить любую неисправность и убрать «Check» двигателя.
По сравнению с другими приложениями, Carista предоставляет доступ к усовершенствованной диагностике, например, ABS, подушек безопасности, навигации и т. д. А также вы можете настроить фары, чтобы они автоматически включались, когда запускается двигатель, или чтобы двери сами блокировались, когда авто начинает двигаться. И это только небольшая часть доступного функционала.
HobDrive

HobDrive объединяет в себе интеллектуальный бортовой компьютер и диагностическое программное обеспечение. Приложение использует адаптер ELM327 и GPS-датчики для получения нужной информации.
HobDrive включает в себя показатели датчиков ТС, диагностику двигателя, запись поездок, планирование маршрута и расчет расхода топлива. Полная версия HobDrive, по сравнению с демо-версией обладает несколькими преимуществами: непрерывное отслеживание ошибок, отслеживание расхода топлива за час, день или указанный период времени.
InCarDoc

InCarDoc показывает все параметры двигателя и автомобиля в реальном времени: скорость, угол поворота, температуру, давление и другие показатели датчиков.
Данное приложение позволяет рисовать графики с полученной информацией в режиме реального времени. При желании можно удалить или сохранить коды ошибок и все связанные с ними данные. Есть возможность отправки отчетов на электронную почту.
Но есть и несколько проблем, на которые жалуются пользователи — это нестабильное соединение с дешевыми адаптерами и проблемы с подключением через Bluetooth.
Torque Pro

С помощью Torque Pro вы сможете следить за активностью автомобиля в режиме реального времени, получать коды неисправности, данные о производительности, информацию с датчиков и многое другое. Приложение будет работать почти на всех авто выпущенных после 2000 года.
На панель мониторинга можно вручную добавлять нужные виджеты. Приложение также показывает и сбрасывает коды ошибок, определять мощность, температуру, уровень выбросов CO2. Всю доступную информацию можно отправить по электронной почте для дальнейшего анализа. Есть функция Turbo Boost для автомобилей, поддерживающих MAP и MAF.
Piston
Piston довольно неплохая программа с простым интерфейсом, которая хорошо работает и не требует оплаты за использование. Возможно, вам придется использовать его в сочетании с другим бесплатным приложением под названием OBD2 Pro Check Engine Car DTC для достижения наилучших результатов, но об этом немного позже.

После подключения к адаптеру, добавьте показатели, которые вы хотите контролировать, нажав на значок датчика вверху и установив флажок рядом с каждым датчиком, который вы хотите добавить на главный экран. Можно добавить напряжение батарей, температуру охлаждающей жидкости и обороты, чтобы легко следить за различными системами автомобиля.
Если вы просто хотите узнать, почему загорелся контрольный индикатор двигателя, нажмите на значок меню в углу, затем выберите «неисправности», чтобы выявить ошибки, хранящиеся в компьютере автомобиля. Это должно помочь в сборе данных о каждой ошибке. Вы получите их исходные коды, однако, некоторые из них не будут иметь описания.
Для получения более точных данных, нажмите кнопку меню с тремя точками в верхней части экрана, а затем перейдите в раздел Setting. Отсюда перейдите в раздел Advanced и установите флажок рядом с опцией Wait longer for the ECU response.

Одним из недостатков этого приложения является то, что оно может быть немного неточным при описании определенных кодов неисправностей. Поэтому если вы не уверены в каких-либо показаниях, мы рекомендуем дополнительно установить OBD2 Pro Check Engine Car DTC, а затем искать в нем кодовый номер, чтобы найти более подробную информацию. После его установки, все, что вам нужно сделать, это выбрать производителя из верхнего меню, а затем ввести код.
DashCommand
DashCommand можно установить бесплатно, но время использования демоверсии всего 30 минут, после чего будет предложено купить полную версию за 10 долларов. В этой программе больше показателей отчетности и есть различные диаграммы, которые отсутствуют в Piston. Именно поэтому профессиональные механики чаще используют DashCommand.
После запуска приложения нужно будет согласиться с условиями использования, а затем выполнить несколько шагов по настройке, чтобы получать более точную информацию. Нажмите на кнопку «автомобиль» в главном меню, чтобы добавить информацию о машине (год, марка, модель и двигатель). Как только этот этап будет завершен, выйдите из меню и подключитесь к адаптеру, нажав на значок подключения в середине экрана. Если у вас возникли проблемы с подключением, отсоедините адаптер OBD-II на несколько секунд, а затем повторите попытку.

После подключения вы сможете просматривать данные в реальном времени на различных диаграммах почти без задержек, нажав на кнопку Dashboards и выбрав один из вариантов внизу. В других разделах можно получить доступ к нескольким другим отчетам и функциям, большинство из которых являются бесплатными в течение пробного периода. К сожалению, чтение кодов двигателя требует покупки полной версии.
Хотя, некоторые автомеханики используют бесплатную версию — им ее вполне хватает. Правда, необходимо каждые 30 минут сбрасывать период оценки софта. Для этого необходимо зайти в меню настроек и найти пункт «Хранение» в списке. Затем перейдите к DashCommand и, оказавшись внутри папки, нажмите кнопку «Очистить данные». Чтобы получить полное представление о том, что приложение может сделать, прочитайте руководство пользователя DashCommand.
Источник: geeker.ru
Обзор OBD сканера ELM327 (v1.5) для машины.

Обычно, чтобы узнать и продиагностировать свою машину на ошибки нужно ехать в сервис и платить немалые деньги, данный же прибор спасет от постоянных посещений сервисного центра и периодическую трату денег. Конечно таким устройством уже никого не удивить, но это не мешает быть ему полезным.
Сканер можно поставить практически во все машины у которых есть разъем OBDII, небольшой список поддерживаемых машин можно посмотреть здесь, но в том списке нет и половины поддерживаемых машин. Принято считать, что данный сканер будет работать в любой машине с OBDII. Версий данного сканера неизмеренное количество, есть и 1.3, и 1.4, и 1.5, и даже — 2.1, отличий не много, одно из самых главных отличий — дизайн. У нас версия 1.5, она выглядит точно так же как и 2.1, и узнал я про настоящую версию только с помощью программы.
Комплектация довольно скромная: диск с ПО для Windows и, собственно, сканер ELM327. Внешний вид тоже ничего особым не выделяется, он выглядит как и все остальные сканеры за эту сумму. Очень хорошо, что он имеет довольно скромные размеры (48х30х25мм), так как большинство других сканеров могут даже не поместится в разъеме, крышка не закроется и сканер будет просто торчать ничем не защищенный под торпедой. Устанавливается он сюда:
А выглядит так (фото мои, обработал Photoshop’ом):


Дополнительные фото



Для работы со сканером использовалась программа TORQUE версии 1.8.41 (это на данный момент последняя версия). Сама программа платная, но ведь никто не мешает скачать её ;). В обзоре я буду использовать именно эту программу, так как у неё большой функционал и интуитивно понятный интерфейс. Но есть и другие программы для работы с OBD сканером.
После того как мы установили программу мы видим заставку и рабочий стол. В программе несколько рабочих столов и на каждом раскидано большое количество нужных и не нужных виджетов, в последующих скриншотах я уже настроил свой рабочий стол. Каждый настраивает его сам, так как у всех разные потребности, у нас, например, на приборной панели отсутствовал датчик температуры (раньше он был, но начиная с 2006 года его перестали ставить… прогресс, что сказать). В общем это всё индивидуальная информация.
Если говорить про основное, то: проверял работоспособность на Kia Rio 2009 года + смартфон Sony Xperia P. Для того, чтобы начать использовать сканер, его нужно подключить в OBDII разъем, включить Bluetooth на смартфоне и найти новое устройство, которое для сопряжения попросит код «1234». Происходит это всё достаточно быстро, есть возможность подключить любой смартфон с Bluetooth версии от 2.1+, далее происходит автоматическое определение протокола и соединение с ЭБУ автомобиля. В данной машине протокол был определен как ISO-15765. Для дальнейших подключений сканера лучше выбрать устройство в настройках вручную (так как с повторными подключениями могут возникнуть проблемы).
После того как вы всё подключите и зайдёте в программу вам надо будет ввести некоторые данные Вашей машины. А именно: объем двигателя; вес машины с учетом водителя, бака и т.д.; тип двигателя; объем бака и количество оборотов. На скриншоте ниже это первая часть, вторая и третья это данные приложения с возможностью редактирования.
В программе есть множество доступных приборов и такое же множество рабочих столов (семь), но многие приборы могут быть не доступны, это всё зависит от машины. В нашем случае доступны эти (постарался сделать покороче, но вышло всё-равно много):

Ещё несколько скриншотов из настроек сканера (тут и можно увидеть, что версия сканера 1.5):
Итак, теперь давайте разберемся с основными приборами. Сделал наиболее оптимальный для себя стол.
1) Скорость. Во время движения неторопливо меняется. Показывает относительно точно.
2) Обороты двигателя. В заведенной машине это значение равно примерно 700-800.
3) Средний расход на 100 км. На скриншоте он преувеличен, так как на данном сканере мало проехали.
4) Мгновенный расход. Когда машина стоит — его нет.
5) Это температура охлаждающей жидкости.
6) Температура воздуха (на улице).
7) Общий пробег с первого подключения сканера.
8) Пробег за время текущего подключения сканера.
9) Напряжение аккумулятора.
10) Стоимость поездки (1.22грн).
Вообще первое, что я сделал в этой программе, это конечно же проверил машину на наличие ошибок. Программа их не нашла.
Теперь давайте перейдем к самому главному — как всё это работает во время езды?
Как я и писал выше, обновление данных сканера достаточно быстрое, скорость показывает с небольшой погрешностью, но терпимо. По мгновенному расходу можно регулировать нажатие педали газа (чем меньше мгновенный расход, тем меньше средний расход), тем самым сэкономив бензин. Сам расход вроде как показывает правдивый, но для более точных данных нужно проехать большее расстояние (хотя бы 500 километров). Температура правильная, ±2 градуса. Несколько фотографий:


Так же делал и видео. Но так как снимать во время движение одно место очень тяжело видео будут дерганные…
В общем довольно полезная вещь. Иногда просто интересно посмотреть некоторые показатели, или, например, посчитать примерный расход и потраченные деньги на поездку. Ещё раз повторю, я выбрал основные для себя датчики, вы же сможете выбрать совсем иные (вверху я давал список доступных). Потому я считаю, что устройство полезное. Всем спасибо за прочтение.
Товар предоставлен бесплатно.
Планирую купить +72 Добавить в избранное Обзор понравился +45 +110
- 31 октября 2014, 18:06
- автор: Vladsseven
- просмотры: 46784
Источник: mysku.me
