Минимальная программа для обработки данных OBD-II
- Войдите на сайт для отправки комментариев
Привет. Планирую сделать довольно простую штуку. Никак не могу определится с железом. Прошу вашего совета.
Хочу собрать устройство для индикации температуры автомобильного двигателя.
Индикацию планирую выводить посредством RGB-светодиода. Допустим: синий - холодно, зеленый - можно ехать, желтый - температура двигателя в норме, красный - температура достигла предельных значений (перегрев). При желании можно добавить и других цветов, миганий и т.п. (все будет зависеть от настроения). Главная фишка такой индикации - это простота и возможность легкой интеграции в интерьер автомобиля.
Данные планируется читать с CAN шины автомобиля через диагностический разъем OBD-II
Для начала хотелось бы получить совет железу. Хотелось бы получить компактное устройство. Какая платформа подойдет для моих целей? В идеале хорошо было бы сделать устройство на базе Arduino Nano. Какой при этом использовать shield для общения с CAN-шиной автомобиля?
Заранее благодарен.
неужели есть машины, где температура двигателя не показывается хотя бы на уровне "холодно - норма - перегрев", как это планируете делать вы? в чем вообще смысл этой самоделки?
Что касается оборудования - вам понадобится любая ардуина и модуль mcp2525 CAN.
Шилды покупать не советую, они дороги, большие по размеру и ненадежны в реальной жизни, лучше собирать систему на пайке
И, самое главное - адреса блоков и номера регистров. где хранится температура двигателя на конкретно вашей модели авто - известны? Без них у вас вряд ли что получится
У меня автомобиль, где показывается только перегрев. Лампочка ни разу не загоралась )) Хотелось бы получать более детальную информацию, поскольку не горящая лампочка не устраивает. Есть ребята, которые делают цифровую индикацию температуры, но я бы хотел минимализма + самому интересно разобраться, библиотеки для работы с этим вроде протоколом имеются.
Мобила + обд-2 блюпуп адаптер не подойдут?
Вариант с мобилой и адаптером работает, но он неудобный...
Дурдуина+гвозди+палки+немного_клея=наше_всё! Let It be - Forever!
У меня показыватель был. Это не спасло на трассе на семидесятом километре от закипания и клина после отказа термостата. Хорошо сцепление успел выжать. Потом долго ругал себя что пищалку не поставил, как хотел.
И, самое главное - адреса блоков и номера регистров. где хранится температура двигателя на конкретно вашей модели авто - известны? Без них у вас вряд ли что получится
Вот это вопрос. Предполагал, что температура одинаково определятся для разных авто...
Дурдуина+гвозди+палки+немного_клея=наше_всё! Let It be - Forever!
Ахаха, настрой очень правильный ))
И, самое главное - адреса блоков и номера регистров. где хранится температура двигателя на конкретно вашей модели авто - известны? Без них у вас вряд ли что получится
И про то, что на Bentley можно поставить докатку от Жыгуля - не предполагали? ;)
Предполагал, что температура одинаково определятся для разных авто...
ну может и так, так как температура ОЖ входит в базовую спецификацию CAN. А может и нет
Тут тебе к MaksVV надо - он на Кане собаку схел.
протокол OBD, он одинаковый для всех авто. Дак вот PID температуры двс там обязательно есть. Надо гуглить , какие запросы слать в кан чтобы по OBD температуру выудить. Я думаю этой инфы полно в интернете
протокол OBD, он одинаковый для всех авто. Дак вот PID температуры двс там обязательно есть. Надо гуглить , какие запросы слать в кан чтобы по OBD температуру выудить. Я думаю этой инфы полно в интернете
Оо, спасибо что толкаете меня в нужную сторону. Пока я мало чего понимаю )), но думаю что нужно разобраться в этой таблице (то что меня интересует выделил рамкой):
информацию взял отсюда
а вот тут, человек пишет такое: температура двигателя: адрес 0x288, [байт 1] *0,75-48
пока не очень понимаю, запишу тут эту информацию, может вы чего еще подскажете ))
сейчас попробовал снять лог диагностики форд фокус2 по протоколу OBD. В принципе совпадает с вашей таблицей. PID температуры ДВС действительно 01 05(hex). См. рис. Там в CAN диагностика шлёт запрос с ID 7DF 02 01 05 00 00 00 00 00 . Где 02 это скорее всего количество байт в запросе. 01 05 это сам запрос.
ЭБУ отвечает 7E7 03 41 05 3B 00 00 00 00 . Где 03 - кол-во байт в ответе , 41 05 это значит ответ на 01 05. А 3B это в DEC будет равно 59 и нужно отнять 40, получаем 19 градусов, Всё сходится , см. рис. 19 градусов и есть.
Думаю так должно работать и на других машинах с CAN
запрос с ID 7DF это широковещательный запрос. Ответ от блока обычно приходит +8 к ID запроса. Т.е. 7DF + 8 = 7E7 , что мы и получаем. Поэтому вот как получается по адресам на форде:
Блоки ID адреса блоков (запросы) ID ответа от блоков
PCM 7E0 7E8
TCM 7E1 7E9
ABS 760 768
Приборн доска 720 728
Усил руля 730 738
Не нужно слать никаких запросов в can шину это чревато не умелыми руками. Данные по температуре итак проскакивают в шине очень часто, главное их выцепить.
а вот тут, человек пишет такое: температура двигателя: адрес 0x288, [байт 1] *0,75-48
пока не очень понимаю, запишу тут эту информацию, может вы чего еще подскажете ))
Вот как раз по адресу 0x288, берём первый байт умножаем-вычитаем-получаем нашу заветную температуру
согласен, этот параметр обычно витает в шине и без диагностических запросов. Но нужно его вычислить, а через запрос быстрее , когда реверсить некогда.
вот новичкам пример кода (в работе не проверял).
Вот тоже так думаю. Прям два часа не мог уснуть и думал про это. Кан-шина это же поток информации в виде импульсов. Зная идентификатор необходимого кадра, можно получить нужные данные, произвести анализ и выполнить какие-то действия.
Спасибо за пример, визуально код очень понятный, и довольно красивая реализация (даже с таймером)!
А что будет, если вовсе не выполнять RequestTempPID? Как-то уж боязно что-то отправлять в шину в бесконечном цикле.. И вообще, интересно, как часто повторяется информация в шине? Быть может, в случае с температурой, эта информация поступает в шину лишь при изменении своего значения? И тогда будет достаточным вызвать RequestTempPID лишь один раз, а потом останется просто слушать шину?
Как думаете?
Нет, если инфа по температуре в шине есть, она там будет периодически (раз в секунду или может чаще) а не по изменению. Чтоб выяснить где t нужен сниффер шины или хотя бы елм327. В моем коде в шину поступает запрос раз в 3 секунды. Если не выполнять request то ничего и неполучить. LED через 15 сек покажет аварийный режим. Прием настроен на сообщение именно по запросу. Если просто в кане есть температура , она с другим id будет.
Макс, а чего ты фильтры не заюзал? Тебе же всё равно только один ID ловить. Разгрузил бы сразу ардуину...
да я на коленке код по-быстрому написал, да лучше с фильтрами. И там ошибочка небольшая. функцию ошибки надо так
И вообще, интересно, как часто повторяется информация в шине? Быть может, в случае с температурой, эта информация поступает в шину лишь при изменении своего значения?
Как думаете?
Могу сказать по реношной шине, данные идут постоянно, примерно раз в секунду, не взирая ни на что, думаю на других авто так же.
...да лучше с фильтрами. И там ошибочка небольшая.
добавил аппаратный фильтр, ошибку исправил
Ёлки палки, у меня сейчас будет взрыв мозга! ))
Спасибо, что помогаете.
Нашел код, там вроде те же самые адреса (если говорить про температуру), плюс также используются неведомые мне фильтры.
Теперь мне непонятно это:
а вот тут, человек пишет такое: температура двигателя: адрес 0x288, [байт 1] *0,75-48
и адрес совсем другой, и формула тоже какая-то нестандартная..
Как вариант:
не путайте получение температуры при помощи диагностических запросов и просто её выуживание из рабочего потока данных между блоками, понятно что формулы из рабочего потока могут быть любые, а вот диагностика стандартизирована.
sadman41, да так красивее, исправил
gumeldiman, вот вам пример БЕЗ подачи запросов в CAN, считывается только ID 0x288 (из рабочего обмена данными между блоками автомобиля) и рассчитывается по вашей формуле температура
MaksVV, получается что сам принцип чтения информации одинаковый, что с запросами, что без?
Просто в первом случае (с диагностическим запросом) мы, грубо говоря, рыбачим с наживкой, а во втором случае, мы ловим всех всех подряд и выбираем нужную нам рыбу.
само чтение конечно одинаковое, хоть посылал запросы хоть нет. Ну и отсеваем только нужное нам при любом подходе. Отсеивать можем программно
if
(rxId == TEMP_ID)
и/или аппаратно :А можно наделать бед, посылая запросы в кан шину?
Наделать бед можно просто подключившись к OBD-разъёму.
если ссать, то можно вообще в жизни ничего не добиться. Делать вдумчиво и всё получится. Инфы в сети полно. как аппаратно всё собрать тоже куча инфы, даже на этом форуме. Схема и программа простая. Тем более вам пример ПОЛНЫЙ выложили уже. не знаю может ещё подключить всё за вас?
наделать бед можно аппаратно что-нибудь не туда подключив, или посылать в шину всякие незнакомые вам ID. Испугаться также ещё можно, выбрав не ту скорость - загорятся все чеки. Но, убрав проблему, все восстановится полностью без всяких проблем.
В примерах которые вам дали, Во первом в шину только один запрос шлётся, диагностический. Это любая диагностика делает, как бы рабочий вариант, ничего тут страшного нет. Во втором примере вообще шина только читается, это как бы совсем безопасно.
ПС. для проверки к OBD достаточно только два провода - CAN-H и CAN-L. Даже землю не обязательно.
Ок!
Тут тебе к MaksVV надо - он на Кане собаку съел.
...если повар нам не врёт... (В. Высоцкий)
только небольшая ремарка, я так понял у вас VW Polo . Не работал в фольксами, но слышал, что у них в obd вроде как выведена отдельная CAN шина , используемая только для диагностики. От остальных блоков сюда инфа прёт через шлюз. Дак вот просто так в шине ничего нет, пока не отправить соответствующие диагн. запросы.
и вот тому подтверждение, последняя фраза из текста по вашей ссылке:
P.S. Забыл сказать, что слушаю CAN-power (силового агрегата).
Да, у меня поло седан. Не могу сказать почему, но слышал о проблемах у ребят с автоматическими коробками передач, которые использовали цифровой индикатор температуры (ссылку я приводил раньше). На МКПП проблем с этой приблудой ни у кого не было.
Безусловно гораздо проще купить готовое устройство, но у меня здесь спортивный интерес, плюс интересно получить дополнительные навыки.
Заказал запчасти, как приедут буду экспериментировать.
С Ардуино знаком поверхностно, хотя получилось сделать ЧПУ-шную рисовалку, с кодом на 100 строчек.
Верно я схему накидал?
И правильно я понимаю, что если я захочу получать различные полутона на RGB светодиоде, то достаточно перекинуть провода на аналоговые выходы, а в них уже закидывать значения от 0 до 255?
Понимаешь правильно, но выражаешься некорректно. И схема неверная.
Не совсем понял насчёт корректности.. а где ошибка в схеме?
Del
SPI не нарисован, светодиод без резистора не включают, аналоговых выходов у Nano не существует.
Почему-то считал, что выходы А0..А7 это и есть аналоговые, а те которые D - это цифровые (Digital).
Насчёт резисторов понял, а вот что такое SPI - что-то не понимаю...
Del. Ёлки-палки, опять дабл пост..
"Аналоговые", да не выходы. Для поставленной задачи нужны PWM-выходы.
SPI - шина такая, по ней CAN-модуль присоединяется.
Блин, не могу понять, схему рисовал полагаясь на текст программы:
...
MCP_CAN CAN0(10); // Set CS to pin 10
...
#define CAN0_INT 2 // подключить пинINT MCP2515 to pin 2 arduino
...
if(!digitalRead(CAN0_INT)) // если пришло сообщение из CAN
...
Разве другие пины упоминаются?
Вот как ты собрался в машину лезть, скажи мне... Не боишься потом в канаве перевёрнутым очнуться (в лучшем случае)?
Поищи хотя бы картинки в гугле по фразе "mcp2515 arduino".
эти "другие пины" настолько очевидны для любого болвана, что их даже не упоминают...
Хмм, картинки видел, проводков между платами больше. Логики соединения не понимаю (не вижу в коде), оттого и спрашиваю совета.
какого совета? Совет спрашивают, когда интерсен личный опыт, например "Дед Михей, а ты в чай сухой навоз добавляешь?"
А в данном случае советов спрашивать незачем, все в мануале прописано.
Судя по картинке выше и задаваемым вопросам - вы в электронике полный ноль ( даже не в курсе, как светодиод подключать). Вам одно обьяснишь - вы в другом нкасячите. Если у вас и правда цель - приобрести опыт и разобраться - прежде чем лезть в машину, изучите хотя бы любую книжку "ардуино для чайников".
Что касается подключения КАН-модулей - читайте про шину SPI
Надеюсь, в программированииу вас дела получше? Или после построения схемы нас ждет вторая серия - "Помогите написать код"?