Предлагаю в данной теме обсуждать вопросы, связанные с использованием CAN-шины для добавки нового функционала. Публиковать таблицы CAN-команд с описаниями и рекомендациями по использованию.
Для примера опишу своё решение для комплектации "Комфорт".
Вот фото результата:
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Внимательные увидят, что реснички светятся вместе с боковыми ДХО. При этом ни дальний, ни ближний не горят.
Известно, что с началом внедрения ДХО Тойота различает старшие и младшие комплектации машин по виду ДХО: старшим достаются более "внушительные", младшим - помельче и попроще. Вот и в "Комфорте" верхняя ресничка зажигается лишь совместно с ближним светом. Хотя, почему бы не включать её вместе с основными ДХО? Да потому что маркетинг, блин!
Идея мне пришла, когда на Али увидел переходники к фарам "Комфорта" (т.е. "трёхлучевым", в наименовании Тойоты), которые реализовывали вариант включения бровей вместе с ДХО. Но объявление быстро закрыли с комментарием "не подходят для российской сборки". Возможно, в Китае существовали фары без CAN-управления. Объявление исчезло, но идея осталась...
В общем, в итоге всё получилось.
Решил описание разбить на 2 части: Здесь опишу кратко реализацию, а полное описание работы с CAN-шиной напишу далее. И чуть попозже. А то уже 3 месяца как сделал, а вот писать лениво, когда представлю - сколько букв топтать надо.
Итак, сниффингом CAN-шины, переключая селектор света из "Авто" в "Габариты" и обратно удалось найти команду управления фарами по шине CAN: "ID 699".
Стандартая команда 699, включающая режим ДХО, выглядит так:
"699 9D-80-80-xx-xx-xx-xx-xx", где хх-любые значения, первые "80" - это команда фарам сменить режим на другой, а вторые "80" - это включение ДХО.
А команда, которая включает отдельно верхние брови (без ближнего света), выглядит так: "699 9D-80-40-xx-xx-xx-xx-xx".
Таким образом, чтобы сделать то, что хотим, нужно реализовать такой алгоритм: Как только мы обнаруживаем команду "699 9D-80-80-xx-xx-xx-xx-xx (т.е. включены ДХО), мы тут же подаём на фару нашу, "правильную" команду:
"699 9D-80-С0-xx-xx-xx-xx-xx", которая одновременно с ДХО включает и ресничку.
Примечание: вот это число, которое то 80, то 40, то С0 - это шестнадцатеричный формат, который в двоичном представлении (из "0" и "1") можно представить так:
"80h"(ДХО) =1000 0000, где h- означает 16-ричный формат,
"40h"(брови) =0100 0000
а комбинированная команда
"С0h" =1100 0000, т.е. включаем и то и другое.
Как это всё реализовать?
Нужен маленький дешёвый контроллер, работающий с CAN-шиной, который мог бы это сделать.
Я рассматривал 2 варианта:
- на основе контроллера Arduino с CAN-модулем ценой 300...500р (с Али)
- на основе контроллера CannyPico со встроенным CAN-адаптером и визуальным программированием ценой 3 400р (без доставки)
ссылка
В итоге выбрал CannyPico, поскольку лень было осваивать программирование под Arduino ради одной задачи, а в CannyPico всё делается прямо в бесплатной среде программирования, поставляемой вместе с контроллером.
Вот фото миниатюрной покупки:
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Вот получившаяся простенькая программа, которая реализует хотелку:
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Освоение среды разработки данного контроллера - задача не сильно сложная, если есть навыки работы хотя бы с ноутбуком (за это его и выбрал). Особенно, когда программа уже готова и достаточно просто прошить её в контроллер. Но можно пойти по ещё более простому пути: данная Среда позволяет сделать просто запускаемый файл для программирования. Тогда действия выглядят так:
- купить контроллер;
- подключить его к USB-порту компьютера;
- запустить файл программирования, дождаться окончания прошивки;
- тащить контроллер в машину и подключать.
Более подробно процесс прошивки описан в:
ссылка, начиная с заголовка "Использование утилиты автоматической загрузки ПО в контроллер"
Вот ссылка на файл для прошивки в контроллер вышеописанной программы:
ссылка
Запрограммированный контроллер подключаем параллельно CAN-шине автомобиля.
Примечание: CAN-шина не замечает любых дополнительно подключённых устройств (конечно, корректно подключённых).
Кроме того, я для подключения припаял к выводам канцелярские булавки и просто втыкал их в нужные разъёмы. Таким образом в любой момент всё устройство можно отключить.
Последовательность подключения:
- удаляем из разъёма CannyPico ненужные контакты. Оставляем только 4шт:
синий - CAN-L;
серый - CAN-H;
чёрный - минус питания (корпус)
красный - плюс питания (ACC или IGN)
- припаиваем к выводам иголки, защищаем термоусадкой:
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Подключаться проще всего к разъёмам, расположенным у левого колена водителя.
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Наименование разъёмов у левого колена водителя:
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Подключаемся к машине следующим образом:
"синий - CAN-L" - разъём GN4, выводы 15 или 17
"серый - CAN-H" - разъём GN4, выводы 16 или 18
Прикрепленное изображение (нажмите на эскиз, для увеличения)
"чёрный - минус питания (корпус)" - разъём JN1, вывод 20
Прикрепленное изображение (нажмите на эскиз, для увеличения)
"красный - плюс питания (ACC)" - разъём GN3, вывод 6
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Вот подключённый разъём контроллера:
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Вот и сам контроллер в сборе. Т.е. контроллер можно оперативно отсоединять и таскать к ноутбуку, если нужно заменить программу.
Прикрепленное изображение (нажмите на эскиз, для увеличения)
Контроллер в пороге никак не крепил - лежит свободно, просто запихнул за жгут проводов. Деться ему там некуда. Только прихватил провода контроллера изолентой к жгуту проводов - чтобы иголки не выскакивали.
Прикрепленное изображение (нажмите на эскиз, для увеличения)