Хабрахабр

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

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

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

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

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

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

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

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


Peak Can

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


3D корпус

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

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

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

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

Показать больше

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»