Как я добавил функции автомобилю по шине CAN, не умея программировать

Автор оригинала: TJ Bruno
  • Перевод


Цель этой статьи — рассказать о моём опыте модификации автомобиля и экспериментах с шиной CAN.

С чего всё началось


Сначала я решил добавить фронтальную камеру в свой 2017 Chevrolet Cruze. Поскольку у автомобиля уже есть заводская камера заднего вида, то на высоком уровне нужно было выяснить две вещи:

  1. Способ передачи видео с фронтальной камеры, которую я добавлю.
  2. Способ отображения на экране картинки с камеры заднего вида в любое время.

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

Запуск на экране оказался более сложным, и после некоторого расследования я пришёл к выводу, что машина должна подавать сигнал от камеры заднего вида на экран через какую-то шину данных.

Шина CAN


У Chevrolet две разные шины данных. Первая — это стандартная CAN, быстрая (500 Кбит/с) и надёжная, она используется для критических данных. Вторая — то, что GM называет LAN (GMLAN), более старая и медленная шина (33,3 Кбит/с), которая используется для данных, не связанных с безопасностью.

Мне нужен был способ прослушивать трафик по CAN, то есть снифер. Для этой цели невероятно полезно устройство PCAN.


Peak Can

Peak Can (PCAN) представляет собой USB-устройство, способное перехватывать и передавать сообщения. Благодаря программному обеспечению Pcan View можно начинать работу без особого обучения.

Поскольку камера заднего вида менее важна для безопасности, чем другие компоненты, я предположил, что искомые данные, скорее всего, будут на шине GMLAN.

Самая простая точка доступа — разъём OBD2. Я подключил Peak Can к шине GMLAN, запустил программное обеспечение — и сразу началось прослушивание трафика.

Интеграция


Цель состояла в том, чтобы перепроектировать вызов камеры заднего вида. Для этого с включённым снифером я повёл машину задним ходом, чтобы она включила дисплей, а затем несколько раз попробовал парковаться. На протяжении всего этого процесса я заметил один ID с сообщениями, которые последовательно имитировали мои действия.

Тогда я припарковался и через Pcan View попытался передать то же самое сообщение, которое я видел, когда включался и выключался дисплей. В мгновение ока я уже взаимодействовал с шиной.


Передача сообщения через PCAN

Впрочем, я не планировал постоянно ездить с ноутбуком. Нужен был способ автоматизировать эти функции — и здесь пригодилась Arduino. Возможность напрямую получать питание 12V в сочетании с большим количеством ресурсов и поддержки в интернете сделала этот выбор очевидным.

В дополнение к Arduino для завершения проекта мне понадобилось два компонента: модуль CAN и модуль реле. По сути, Arduino — это мозг, запускающий и выполняющий код. Модуль CAN предоставляет возможность взаимодействовать с шиной данных, а реле обеспечивает питание фронтальной камеры, а также действует как видеомикшер между ней и камерой заднего вида.


Модуль mcp2515 (сверху), Arduino Uno (посередине), модуль реле (снизу)

После добавления и настройки соответствующих библиотек Arduino установил связь с автомобилем.


Прослушивание трафика через Arduino

Поскольку я уже знал, что могу запустить дисплей, то начал думать о том, КАК это сделать. Первоначальная идея состояла в том, чтобы установить на панели специальную кнопку мгновенного вызова, но я начал думать: «А что ЕЩЁ в сети можно использовать в качестве триггера?»

В ходе экспериментов я обнаружил, что по шине GMLAN также передаются сообщения с ID, соответствующим кнопке «Отмена круиз-контроля». Это было идеально, потому что круиз-контроль включается на скоростях более 65 км/ч, когда я буду использовать переднюю камеру, а на скоростях ниже 15 км/ч будет включаться камера заднего вида, чтобы помочь с парковкой, так что они никогда не будут перекрываться. После написания некоторого кода я смог заставить Arduino распознать, когда нажимается кнопка отмены круиз-контроля.


Распознавание однократного нажатия кнопки

Однако я не хотел, чтобы камера активировалась каждый раз, когда я отменяю круиз-контроль, поэтому я решил, что лучший подход — превратить её (по сути) в многофункциональную кнопку. Камера активируется только в том случае, если кнопка «дважды нажата».

После долгого уикенда изучения функции millis и отладки кода я успешно запрограммировал распознавание двойного нажатия.


Распознавание двойного нажатия

И когда я привязал его к своим командам для управления дисплеем, у меня собралась довольно крутая небольшая утилита.


Двойное нажатие + команды

Функциональность


Теперь у меня была возможность включать и выключать дисплей, но оставалась одна проблема — что насчёт камеры заднего вида? Мне нужно было, чтобы они с фронтальной камерой работали вместе, словно их так настроили на заводе.

На блок-схеме я изобразил, как я это представляю.



Я быстро понял, что для такой системы нужно в любой момент времени знать состояние трёх переменных:

  • Модуль передней камеры: водитель включил или выключил его?
  • Дисплей камеры: изображение на дисплее включено или выключено?
  • Задний ход: автомобиль в реверсе или нет?

Не имея опыта программирования, это было очень сложно сделать, и я всё свободное время думал о разных подходах.

В конце концов, я добился успеха!


Активный мониторинг

Теперь я смог реализовать операционную логику, которая контролирует реле.


Управление через реле

На протяжении всего процесса я всё больше узнавал об Arduino и заметил, что версия Nano способна делать всё, что нужно, при этом у неё меньший размер и более низкая цена. Она идеально подходит для постоянной установки в автомобиль. Я разработал модель и распечатал на 3D-принтере корпус для размещения компонентов в качестве компактного блока для установки.


3D корпус



Всё вместе


Наконец настал день, когда я увидел результаты. Хотя нужно ещё повозиться с таймингом, но было приятно видеть, что модуль корректно работает.


Включение/выключение режима парковки, включение/выключение фронтальной камеры, автоматическое переключение на камеру заднего вида и автоматическое переключение обратно

В целом, этот опыт меня многому научил и открыл глаза на возможности интеграции непосредственно с шиной CAN. Довольно удивительно, чего можно достичь соединением по двум проводам.

В будущем


В будущем я планирую написать углублённый учебник о том, как добавить дополнительную функциональность к существующим кнопкам в вашем автомобиле, используя бесплатное программное обеспечение и компоненты.
Поддержать автора
Поделиться публикацией

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 28

    +4
    Китайский блок за 20$ легко и непринужденно подключает переднюю камеру к родной задней.
      0
      Вы бездумно послали в шину три команды для включения камеры, или вы их как-то отфильтровали и послали только на экран? В каком месте в итоге получилась точка подсоединения шине? У вас при этом случайно задний фонарь не включился?
        +2
        Автора, на сколько понимаю здесь нет, т.к. это перевод. О месте подключения в статье явно написано, что это OBD2, т.е. диагностический разъём.
        0

        А можно по аналогии с этим сделать опускание зеркал при движении задним ходом?
        В интернете для этого предлагают коробочку, которую надо подключать в разрыв проводки, что мне кажется кощунством.

          0
          Если при регулировке зеркал видите трафик на шине, то возможно.
            0
            Да, считывать с шины включение передачи R и посылать команду на опускание зеркал.
            Проблема в том что если авто не имеет памяти положения зеркал, то придёться управлять временем работы мотора, включать моторчик зеркала на пару секунд в одну сторону, а потом обратно на пару секунд, в результате за неделю сбивается регулировка зеркал.
            0
            Я, когда в машине жены такое делал, то передняя камера выключается если рычаг переводится в паркинг, или скорость машины становится больше 12 км/ч. или проходит 20 сек после последнего переключения.
            Правда, я никак не использовал CAN. Все совсем по простому сделал.
              0
              Совсем по-простому — это как раз через CAN.
              А вы-то как реализовали?
                +1
                Для включения камеры надо подать 12в на определенный провод приходящий к магнитоле (ну, там было так). Этот провод шел от селектора АКПП, режим «R». Порезал я этот провод, и вставил диод туда, другой диод тоже в эту точку, чтобы при активации монитора моей системой задний ход не включался. Коммутатор камер — также на мини реле. Остальное на ATTINY2313, один провод еще на селектор, который к паркингу. Один на определение скорости — он тоже шел на магнитолу (там есть функция увеличения громкости от скорости). Все функции программно.
                Сделал в 2014м году, 5 лет работает без проблем.
                А совсем по простому, потому что, мне не потребовалось разбираться с CAN, и дело свелось к подключению нескольких проводов. Пришлось только посчитать отношение частоты импульсов к скорости движения, и сделать прерывание по пересечению границы в 12 км/ч. Такая скорость тоже там сама собой получилась, я не стал там подгонять (изначально 10 км/ч хотел). Но, при имеющимся кварце там так совпало, что счетчик переполняется при скорости ниже 12, а при выше не переполняется…
              0
              А реально на ладе Весте сделать автоматический подъём стеклоподъёмников водителя, двойным нажатием клавиши?
                0

                Да, но с китайским блоком комфорта. Стеклоподьемники весты на CAN не заведены.

                0
                О да, сейчас бы ставить непонятно что в критически важную цепь автомобиля.
                Стандарт AEC-Q100 не просто так вводили.
                  0
                  Это в какую критически важную цепь вмешался автор?
                    0
                    Ну да, CAN сеть автомобиля это так, игрушки.
                      0
                      В LS-CAN. На которой висят такие критические системы как: кнопочки на руле, приборка, климат наверное.

                      Критические системы вроде двигателя, ABS и прочее висят на HS-CAN.
                    0
                    В защиту автора могу сказать, что любые сигнализации аналогично вмешиваются в цепь.
                    Тут дело в том, куда вмешиваться. Я делал на Skoda Octavia A5 FL прототип кнопок круиз-контроля (чтобы быстро переключать город-трасса, в дополнение к обычной стрекозе круиза), но в последний момент побоялся сам с этим ездить и удалил проект. Поскольку последствия одной неточной строчки кода могут быть трагическими.
                    В данном случае изменение касается по сути только медиа-системы.
                    По самому проекту — в данном случае это «из пушки по воробьям». Я бы сделал всё на реле, как обычно делается в штатных системах передних камер — активация передней камеры на 5-10 секунд после переключения из заднего хода.
                    +2
                    А что предполагается наблюдать в переднюю камеру при скорости более 65 км/ч?
                    В чем суть задумки?
                      0
                      … тоже совершенно не уловил в чем смысл фронтальной камеры…
                        +1
                        Хм, может это фронтальная камера как в смартфоне? Стоит внутри машины для крутецких селфи?
                        0
                        Вот тоже не понял, сначала подумал что это пруль, там часто ставят камеру для обгонов, но по фоткам не пруль…
                          0
                          В чем суть задумки?
                          Тут должен быть рисунок всем стопятсот раз надоевшего «троллейбуса из буханки».
                          +3
                          О, боже мой, вертикальные видео на Хабре! Не думал, что эта зараза и сюда доберется. У меня эти видео еле помещаютя в видимую область браузера на горизонтальном (удивительно, да?) экране ноута.
                            0
                            Всё в порядке. У меня не помещается на 23 дюйма стационарного экрана.
                            +3
                            Как я добавил функции автомобилю по шине CAN, не умея программировать

                            После написания некоторого кода я смог заставить Arduino распознать ...

                            Я конечно понимаю, что там наверное простецкий код, но человек, который не умеет программировать, даже его написать не сможет.
                              0
                              Был на хабре интересный пост по этой же теме:
                              Хакаем CAN шину авто для голосового управления
                                0
                                На Q7 06-15 годов, для тех у кого стоит только задняя камера ставят просто реле, которое коммутирует сигнал с передней или задней камеры. Если не включена задняя передача активна передняя камера, если включается задняя передача, подключается задняя камера. реализация занимает пол часа (без учета прокладывания проводов и установки камеры)

                                Но у вас наверное так работать не будет, иначе вы бы так сделали :)
                                  0
                                  Если не включена задняя передача активна передняя камера, если включается задняя передача, подключается задняя камера

                                  То есть какая-то камера работает всегда? Вряд ли, нужно ещё условие активации и деактивации в принципе. Для задней это R передача. А для передней?
                                    0
                                    реализуют по разному, кто то не заморачивается и подает питание на переднию камеру всегда.
                                    А сам MMI при достижении скорости 15км в целях безопасности выключает камеру на мониторе. Есть кнопочка отдельно, которая включает задний парктронник, и при включении парктронника автоматом включается камера, если в это время не включена задняя передача, на экране будет видео с передней камеры, причем с наложенными на видео траекторией движения (с реакцией на поворот руля).

                                    Если включить заднюю передачу, срабатывает реле и сигнал камеры перелючается на штатную заднюю камеру

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

                                Самое читаемое