PNN
Компания
27,02
рейтинг
10 июля 2013 в 18:23

Разработка → Часть 1. Как подключить смартфон к авто или история создания OBD Car Doctor

История

Идея подключить смартфон к бортовой системе автомобиля возникла достаточно давно. Спусковым крючком стала прочитанная статья об электронной начинке современных авто и CAN шине, которая позволяет обмениваться данными различным устройствам, подключенным к этой шине.
image
Воображение рисовало радужные картины «робомобиля» полностью управляемого со смартфона, записывающего и оптимизирующего все параметры работы двигателя и систем, предупреждающего о критических параметрах и ошибках в работе. Ну ладно с управлением это, пожалуй, чересчур, ведь кроме цифровых датчиков тут понадобятся и некоторые управляющие контролеры с сервоприводами…

Картина чуть поблекла, но считывать-то доступные параметры мы сможем, а если повезет, то может и центральный замок открыть/закрыть сможем (хотя такая перспектива сулит дыру в системе безопасности Винд… т.е. автомобиля :) ).
И так, пора приступать к практическому исследованию!


Исследование
Исследование
Автомобиль был в наличии, и теперь оставалось разобраться в том, как к нему подключиться. Подключаться нужно к диагностическому разъему (DLC — Data Link Connector). Данный разъем служит для подключения диагностических сканеров (которые «компьютерная диагностика») к бортовой сети авто и опроса/съема данных различных подсистем автомобиля.
Посмотрев на разнообразие марок авто, сканеров, коннекторов возникла легкая паника, как разобраться со всем этим «зоопарком», или хотя бы как найти вариант для своей машины?! К счастью, благодаря одному из экологических ведомств США (а именно California Air Resources Board — CARB), которое стремилось к унифицированному контролю уровней выбросов автомобилей, стандартизация добралась и до этой сферы.

Актуальным на данный момент является свод стандартов OBD-II, который описывает механические (форма и размер разъема), электрические (питание, сигнальные протоколы) и логические (информационные протоколы) уровни совместимости.

Здесь следует обратить внимание, что соответствие одному из параметров еще не гарантирует соответствия остальным. Т.е. Наличие правильного механического разъема в автомобиле не гарантирует соответствия стандарту сигнальных и логических протоколов, то есть не обязательно обеспечивает соответствие OBD-II стандарту.

Теория

Рассмотрим вышеупомянутые уровни совместимости:

  • Механически это трапециевидный разъем фиксированного размера с 16 контактами.
  • На электрическом уровне поддерживаются 5 основных сигнальных протоколов: SAE J1850 PWM, SAE J1850 VPW, ISO 9141-2, ISO 14230 KWP2000, ISO 15765 CAN
  • Логический уровень предполагает отсылку сообщений заданной структуры и соответственно получение структурированного ответа. Пакет состоит из заголовка, тела сообщения, контрольной суммы — .


    Рассмотрим структуру тела запроса:
    Структура представляется как .
    • (1 байт) определяет функциональную группу параметров, например 01 – параметры реального времени, 02 – «снимки» параметров на момент возникновения ошибки и т.д.
    • (1 или 2 байта) — Parameter ID, идентификатор запрашиваемого параметра в контексте группы, например для mode 01 pid 0D отвечает за текущее значение скорости автомобиля.
    Например, 68 6C F1 01 0D A6, где header = 68 6C F1, body = 01 0D, crc = A6.

    Структура тела ответа содержит код возврата:
    • для положительного ответа <mode+0x40>
    • для информации об ошибке 7F<pid | mode>

    • затем собственно возвращаемое значение
    .
    Например, 48 6B 10 41 0D 00 11, где header = 48 6B 10, body = 41 0D 00, crc = 11, т.е. собственно возвращаемое значение 00

    Ну вот, уже почти все готово, прямо «на блюдечке с золотой каемочкой» :-) ! А где же наша волшебная команда «Сим-сим открой центральный замок»?!… Но, к нашему большому разочарованию, стандарт OBD-II такую команду не описывает :-(. Здесь мы вспоминаем, что разрабатывался стандарт по запросу экологического ведомства и естественно им нет никакого дела до того закрыт или открыт у нас центральный замок. Ну что же, придется довольствоваться тем, что есть: список охваченных стандартом команд, например вот здесь, при этом каждая конкретная модель автомобиля обычно поддерживает только небольшую часть полного списка. Нужно также упомянуть, что OBD-II стандарт предусматривает наличие пользовательских команд, специфичных для определённых производителей и моделей, однако публичная информация по этим командам практически отсутствует.

    Что же в сухом остатке:

    • Есть список параметров, которые описаны стандартом и которые, при условии поддержки со стороны вашей машины, можно будет прочитать. Обычно это некоторые динамическим параметры, которые можно мониторить в реальном времени (скорость, обороты, температура, параметры с лямбда датчиков, параметры по которым можно вычислить расход топлива и т.п.); ошибки, приводящие к включению индикатора CheckEngine; некоторые результаты самодиагностики бортовых систем авто. Также может поддерживаться команда сброса информации об ошибках;
    • Есть гипотетическая возможность добраться до пользовательских параметров вашего автомобиля, список которых теоретически на много больше стандартного;

    Подводим итог – мы разобрались с теорией и увидели возможные перспективы ее полезного применения. Осталось самое малое – подобрать инструментарий и реализовать задуманное.

    Об этом и многом другом мы расскажем в следующих заметках, а именно о практических аспектах (см. Часть 2 ): какие авто поддерживаются, какие есть адаптеры для подключения смартфона или компьютера к автомобилю, как запросить и получить значения параметров.

    Спасибо за внимание, до новых встреч!


    П.С.
    Также, читайте продолжение - Часть 2, Часть 3
Автор: @PNNgeek
PNN
рейтинг 27,02
Компания прекратила активность на сайте

Комментарии (39)

  • +6
    Т.е. вы хотите сказать, что Bluetooth ODB-II адаптер сегодня — это нечто, покрытое мраком? Выбираем адаптер, находим список поддерживаемых моделей, ставим софт из магазина приложений (варианты есть) и пользуемся.
    Если нет — ставим софт на ноутбук.
    Да, автомобиль — не игрушка.

    Если вы увлекаетесь автомобилями и вам интересно смотреть на бегающие циферки — это супер. Но лучше их понимать.
    Кстати, у меня случались споры с «крутыми спортсменами», которые до упора тюнинговали свои автомобили, бросались крутыми фразами, но на деле даже не понимали от чего зависит крутящий момент, подаваемый на колеса и уверяли меня, что он зависит от массы колеса.
    Ребята не знали что их стенд для замера мощности и момента имеет погрешность +-5%, а при значении момента около 400Нм 10% разброса это не мелко. И не доходило до них, что нельзя при этом ограничиваться 1м измерением.

    Понесло меня в сторону…
    • 0
      Те спортсмены, которых знаю я вполне могут объяснить особенности крутящего момента подаваемого на маховик или колесо. Представляют на каких оборотах этот самый момент выше, а кроме этого еще понимают что такое мощность двигателя и зачем она нужна.
      • 0
        Вот оказалось что не все такие. Поэтому я стал относиться к таким штукам менее оптимистично.
  • +1
    ODB-II в текущем виде это слишком слабенько. Максимум смотреть чиселки в динамике от двигателя. А вот заблокировать двери хотяб со смартфона уже фиг. У каждого бренда свой закрытый протокол с убогим софтом за бешеные деньги. И ситуация пока не особо меняется.
    Вот как пример www.autoblog.com/2013/06/12/why-bmw-doesnt-plan-to-integrate-apples-ios-in-the-car/
    • 0
      Для VAGa есть что-то подобное и не очень дорогое (150-200 евро) — Advanced Polar FIS. Правда изменяемых функций не ахти как много, но они переодически что-то добавляют.
      В относительноый новых ВАГах большинство юзерных настроек можно прямо с руля менять.
      • 0
        CAN bus жеж уже давно в нормальных машинах есть, не? И через него вроде всё управляется. По крайней мере, сигнализация на такие машины ставится просто «воткните контроллер в разъем, она сама всё найдёт»
        • 0
          Смотря что считать нормальными. В корейских KIA даже 12-го года выпуска CAN есть, но там не всё нужное для сигналки доступно.
    • 0
      Потому что диагностика не задумана как игрушка для владельцев, а для более глубокого выявления неисправностей и их причин.
      К примеру моя машина не прошла ТО — завышены выхлопные газы. Причина: катализатор. Конечно можно просто поменять катализатор, но он же не просто так забился. Логично проверить смесь. Диагностика покажет и смесь и данные, которые датчики показывают, влияющие на смесь. В итоге выясняем, что катализатор забился, потому что не идет сигнал с датчика кислорода. Меряем датчик — мёртвый. Почему? Потому что кто-то туда уже лазил и коннектор соединил неправильно, выдавил контакт. Не работает лямбда -> она загаживается тем, что она должна корректировать -> загаживается и каталит. Можно было и катализатор просто поменять, но он бы опять забился скоро.

      А если туда приделать мясорубку и кофе с минетом, есть большая вероятность, что оно нормально не будет выполнять ни одну из функций. Машина нужна чтобы ездить, а не играться. Для игр есть отдельным блоком сигнализации и бортовые компутеры.
      • 0
        Вот простите, что не в тему. У меня вот как раз сейчас проблема с лямбдой на авто. И вот вопрос, как вы вообще ездили с мертвой лямбдой? Поведение движка просто невозможно не заметить.
        • 0
          Поведение движка не меняется вообще никак на некоторых машинах. И у меня оно не менялось. Просто переливает себе немного бенза, вот и все.
          Lancer 1998, CK2a
      • 0
        ох-хо… даже не посмотрел на дату поста. :)
  • +6
    OBD-II Bluetooth донгл ($23.99)
    Torque Pro ($4.95)

    • +6
      Мне кажется, что вы только что закончили цикл статей :)
    • 0
      как-то дорого
      www.aliexpress.com/item/Bluetooth-ELM327-1-4a/478706366.html -ELM327 Bluetooth OBDII $9.43 + диск присылают где есть любой софт и Torque присутствет
      • +1
        Ну я не претендовал на самый выгодный дил, я их не продаю. С тем что я привёл в пример диск тоже идёт.
        Torque не факт что про или лицензионный. В любом случае софт не проблема.
    • 0
      Я тоже так сделал. Но я руководствовался идеей, что Torque будет мне показывать расход.
      Или я не увидел как это смотреть, или там этого нет.
      Кто знает, чем это можно смотреть в такой связке?
      • 0
        я к своей Nexia N150 подключил OBD-II и Torque Pro. Показывает мгновенные значения, которые далеки от реальности, кроме пожалуй нагрузки на двигатель, температуры и оборотов. Все это с задержкой. Расход надо исхитряться как-то калибровать, всегда ездить с запущенной софтиной, из-за которой отваливается гарнитура — Bluetooth не всегда держит оба девайса, коннектится это мееееедленно, данные есть только после запуска двигателя, потому что ECU при выключенном двигателе недоступен. В общем, разочаровался в трип-компьютере на базе планшета. Если разобраться в протоколе и подключиться самому к этому донглу, то может можно сделать более-менее удобный трип-компьютер самому на базе STM32 например, или даже на AVR (Arduino)
        Кому интересно — могу показать сделать какие-нибудь фотки как это работает.
        • 0
          Чтоб получить более менее реальный расход — надо цепляться к форсам, что и делается в нормальных трип компах
        • 0
          Чтобы мерять расход нормально, нужно более-менее на прямой участок выехать и взять постоянную скорость. Мнонгновенный на то так и называется, что он показывает в данный момент времени расход на 100 км, хотя машина прошла не 100 км — из-за этого и такие величины. У меня тоже по 30 литров мнгновенный. В программе есть раздел со средним расходом, так вот спустя минут 10 езды он выравнивается и усредняется. Итого 6.7 литров в городе.
          • 0
            Что такое мгновенный расход я знаю. Я надеялся, что ЭБУ не такое тупое и имеет свою память и может выдавать хоть немного усредненное значение расхода. Или что софтина между запусками будет себя вести не так тупо. Ни то ни другое. Да и работает она неустойчиво, как и все, что содержит Bluetooth — самый глючный и неудобный радиоинтерфейс из известных мне.
            • 0
              ЭБУ имеет то, что ему нужно, и он умнее многих водителей, которых он возит.
              И память у него есть. Вопрос к вам встречный: а собственно нахрена ЭБУ знать расход автомобиля?
              ЭБУ вообще при своей работе не оперирует конкретно расходом топлива. Этим если надо занимается как раз диагностический софт, используя данные датчика воздуха или времени открытия форсунок.

              По поводу софта. Мне удалось соединиться только с маздой демио 2006 года у жены. И работает довольно неплохо при установлении соединения. Просто надо найти алгоритм установления соединения. Например у меня он соединяется только при выключенном моторе на зажигании. А чтобы переподключиться нужно выключить-включить блюпуп на телефоне, выключить зажигание и вытащить ключ. Работает всё довольно хорошо, мне нравится.
              • +1
                Для того, чтобы не нужно было держать постоянное подключение и постоянно усреднять значения мгновенных расходов. самому ЭБУ это не нужно, а вот для реализации бортового компьютера полезно.
                У меня подключается и при заведенном моторе. При выключенном зажигании вообще не отвечает, хотя питание в сети есть и шина работает.
                «чтобы переподключиться нужно выключить-включить блюпуп на телефоне, выключить зажигание и вытащить ключ» — вот это шаманство я и называю — «плохо работает» или «неудобно». Соверменные реализации шин позволяют организовать более удобное взаимодействие модулей. Танцы с бубнами — удел систем 20-30летней давности.
                Поэтому я и говорю о том, что многие автомобили имеют примитивную и устаревшую в IT плане электронную начинку. Да, они просты и надежны, но они примитивны.
    • +1
      И для мажоров: www.automatic.com/
    • 0
      мне однажды подарили такую штуку, работает… показывает… поигрался один раз, забросил.
      • 0
        зря вы так. мне вот несколько раз такая штука на диагностике экономила, не комфортно когда джекичан горит, а ехать надо.
        • 0
          ну когда джеки замоячит, тогда я вспомню о ней. Я в автомобилях профан, и большинство выдаваемых данных для меня ничего не значат
  • +1
    Для начала можно попробовать Hobdrive хобдрайв.рф/, почитать параметры, посмотреть ошибки…
  • 0
    Последний год интересуюсь управлением авто, купил себе elm327 адаптер, поизучал obd2 и can протоколы. С obd2 все просто, его должны поддерживать все современные авто. Написал прогу для iphone, которая выводит на экран скорость, обороты, температуру ОЖ и зибираемого воздуха, расход воздуха( по нему можно мощность прошитывать), время работы двигателя. Проверил на двух тачках: skoda octavia2, ford focus2, работает. Но по obd2 мало информации можно получить от машины, все интересное я перечислил. Все управление и другая информация на Can шине, причем их в машине 2, первая высокоскоростная для передачи информации от датчиков, к ней elm327 имеет доступ, вторая это шина комфорт: замок, магнитола, кнопки на руле, кондей и др, к ней elm327 доступа не имеет, нужен другой адаптер или перепаивать. Вот в can шине комфорт все самое интересное, если научиться ее читать и отправлять ей команды, то можно будет с телефона управлять авто, там есть засада с брендмауэром, как его обойти я пока не разобрался, документации по командам can шины в открытом доступе я не нашел.
    • 0
      Нужно читать соответствующий SAE. Что под брандмауэром понимается я не понял. CAN дуал-симплексная шина. Приоритет — адрес. Коллизии решаются автоматически — приемник сравнивает то что ушло в шину с тем что пришло и если есть отличия — передатчки затыкается. Таким образом на шине пакет отошлет только устройство с меньшим адресом.
      Высокоскоростности там нет и в помине. Хотя как считать. от 0.5 до 2 мегабит в зависимости от длины шины. Основное требование — время прохождения сигнала по всей шине должно быть меньше времени одного бита. Иначе синхронизация между устройствами развалится и будет каша на шине.
  • +1
    А я вот не пойму. По описаниям устройств elm327 и plx kiwi, которые работают по wifi или bluetooth, то в них пароль либо отсутствует, либо одинаковый для всех устройств одного производителя. Объясните, пожалуйста, сможет ли кто-то другой изменить параметры автомобиля, подключившись к вашему сканеру? Есть ли возможность поставить пароль на доступ к устройству через wifi или bluetooth?
    • +1
      ELM327 это контроллер поддерживающий протоколы связи с бортовым компьютером автомобиля; на его базе выпускается масса адаптеров в том числе и kiwi. Помимо ELM327 адаптер также содержит контроллер беспроводного соединения. Чуть подробнее мы это опишем в следующих частях. Возможность изменить пароль соединения и имя адаптера может предоставляться или нет производителем адаптера, нужно читать документацию по конкретному устройству.

      Возможности ELM327 в плане записи чего либо в бортовой компьютер вашего авто отсутствуют либо весьма ограничены, в основном поддерживаемые протоколы позволяют только читать данные из авто. Одна из немногих команд, которая позволяет изменить некоторые данные – это команда стирания ошибок. Теоретически нельзя исключить возможность хакеров найти дыру и что-то изменять в прошивке, но нам пока такие случаи не известны. Также есть еще микросхема STN1110 обладающая большими возможностями, но обо все по порядку в следующих частях
  • 0
    Год назад интересовался этой темой, купил elm327 адаптер, попробовал считывать километраж… и не нашел подходящего параметра в obd2! Казалось бы такая простая вещь, ан нет. Существует вообще такая возможность — считать показания одометра? Эксперименты ставил на bmw x1.
    • 0
      Не факт, т.к. OBD2 в первую очередь выдает параметры, прямо или косвенно влияющие на экологию.
      Одометр скорее через CAN будет доступен, если машина его умеет, конечно.
  • 0
    Сейчас встраиваю компьютер в авто на базе андроид, столкнулся с тем, что если хочется все сделать грамотно и красиво, то Торк не выручит. нужно софт писать самому. Но самое грустное в том, что банально остаток топлива в баке считать невозможно.
    • 0
      Формально в стандарте предусмотрена команда для запроса уровня топлива (012F) в %, проблема в том что довольно мало машин пока имеет фактическую поддержку этой команды. Также для полноценного маршрутного компьютера не помешала бы возможность чтения одометра (пробег), а вот эта возможность уже и стандартом не предусмотрена.
      • 0
        Моя, скорее всего, одна из тех, кто не поддерживает
    • 0
      Если не сложно, напишите, пожалуйста, подробнее — что получилось, какие подводные камни и т.п.
      У самого такая, только старого дизайна — хочется тоже сделать комп на базе андроида.
      • 0
        проверьте свою личную почту на хабре
    • 0
      Во-первых, Torque платный, во-вторых, что то он мне не показался удобным. А вот OBD авто доктор — то, что я давно искал.
      Остаток топлива считать невозможно, или возможно, но с большой погрешностью, либо городить целую установку из контроллера и нескольких датчиков уровня. Объем можно узнать только по ширине-высоте-длине. Бак во-первых, не одинаковый со всех сторон, во-вторых, бензин постоянно меняет уровень на поворотах и кочках. Да и остаточный объем воздуха в баке не посчитаешь, потому что бензин склонен к испарениям и изменению своего объема в зависимости от температуры.

      Лучше считать, сколько за день ушло бензика в форсунки. И кстати, для этого OBD не нужен. Между прочим, получается даже лучше и нагляднее расходомера. И датчик скорости не нужен, разве что только сопоставлять данные в роде: сегодня мы проехали 20Км и израсходовали 45 тонн бензина.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка