A medida que agregué funciones al automóvil a través de CAN, no pude programar



El propósito de este artículo es hablar sobre mi experiencia con modificaciones de automóviles y experimentos con el bus CAN.

Como empezó todo


Primero, decidí agregar una cámara frontal a mi Chevrolet Cruze 2017. Dado que el automóvil ya tiene una cámara de visión trasera de fábrica, a un nivel alto fue necesario descubrir dos cosas:

  1. La forma de transferir video desde la cámara frontal, que agregaré.
  2. Un método para mostrar imágenes de una cámara de visión trasera en cualquier momento.

La parte del video fue simple. Por experiencia previa, sabía que puedes hacer un mezclador de video en un relé.

Comenzar en la pantalla resultó ser más complicado, y después de investigar un poco, llegué a la conclusión de que el automóvil debería enviar una señal desde la cámara de visión trasera a la pantalla a través de algún tipo de bus de datos.

CAN bus


Chevrolet tiene dos buses de datos diferentes. El primero es CAN estándar, rápido (500 Kbps) y confiable, se utiliza para datos críticos. El segundo es lo que GM llama LAN (GMLAN), un bus más antiguo y más lento (33.3 Kbps) que se usa para datos que no son de seguridad.

Necesitaba una forma de escuchar el tráfico en CAN, es decir, un sniffer. El dispositivo PCAN es increíblemente útil para este propósito.


Pico puede

Peak Can (PCAN) es un dispositivo USB capaz de interceptar y transmitir mensajes. Gracias al software Pcan View, puede comenzar sin mucha capacitación.

Dado que la cámara de visión trasera es menos importante para la seguridad que otros componentes, sugerí que los datos que está buscando probablemente estén en el bus GMLAN.

El punto de acceso más fácil es el conector OBD2. Conecté Peak Can al bus GMLAN, inicié el software y comencé a escuchar el tráfico de inmediato.

Integración


El objetivo era realizar ingeniería inversa en la llamada de la cámara de visión trasera. Para hacer esto, con el sniffer encendido, invertí el auto para que encendiera la pantalla y luego intenté estacionar varias veces. A lo largo de este proceso, noté una identificación única con mensajes que imitaban secuencialmente mis acciones.

Luego estacioné y, a través de Pcan View, traté de transmitir el mismo mensaje que vi cuando la pantalla se encendía y apagaba. En un abrir y cerrar de ojos, ya estaba interactuando con el autobús.


Mensaje de PCAN pasando

Sin embargo, no planeaba viajar constantemente con una computadora portátil. Lo que se necesitaba era una forma de automatizar estas funciones, y aquí el Arduino fue útil. La capacidad de recibir directamente energía de 12V en combinación con una gran cantidad de recursos y soporte en Internet hizo obvia esta elección.

Además de Arduino, necesitaba dos componentes para completar el proyecto: el módulo CAN y el módulo de relé. En esencia, Arduino es el cerebro que ejecuta y ejecuta código. El módulo CAN proporciona la capacidad de interactuar con el bus de datos, y el relé proporciona energía a la cámara frontal, y también actúa como un mezclador de video entre este y la cámara de visión trasera.


Módulo Mcp2515 (arriba), Arduino Uno (centro), módulo de relé (abajo)

Después de agregar y configurar las bibliotecas apropiadas, Arduino hizo una conexión con el automóvil.


Escuchando el tráfico a través de Arduino

Como ya sabía que podía iniciar la visualización, comencé a pensar en CÓMO hacer esto. La idea inicial era instalar un botón especial de llamada instantánea en el panel, pero comencé a pensar: "¿Qué más en la red se puede usar como disparador?"

Durante los experimentos, descubrí que los mensajes con la identificación correspondiente al botón "Cancelar control de crucero" también se transmiten a través del bus GMLAN. Esto fue ideal porque el control de crucero se activa a velocidades superiores a 65 km / h cuando uso la cámara frontal, y a velocidades inferiores a 15 km / h la cámara de visión trasera se encenderá para ayudar con el estacionamiento, por lo que nunca superposición Después de escribir un código, pude hacer que el Arduino reconociera cuando se presiona el botón de cancelar el control de crucero.


Reconocimiento de un solo clic

Sin embargo, no quería que la cámara se activara cada vez que cancelo el control de crucero, así que decidí que el mejor enfoque es convertirlo (de hecho) en un botón multifunción. La cámara se activa solo si el botón se "presiona dos veces".

Después de un largo fin de semana explorando la función millis y depurando el código, programé con éxito el reconocimiento de doble toque.


Reconocimiento de doble toque

Y cuando lo até a mis equipos para controlar la pantalla, obtuve una pequeña utilidad genial.


Doble toque + comandos

Funcionalidad


Ahora tuve la oportunidad de encender y apagar la pantalla, pero había un problema: ¿qué pasa con la cámara de visión trasera? Los necesitaba para trabajar juntos con la cámara frontal, como si hubieran sido instalados de esa manera en la fábrica.

En el diagrama de flujo, describí cómo lo represento.



Rápidamente me di cuenta de que para tal sistema necesitas saber el estado de tres variables en cualquier momento:

  • Módulo de cámara frontal: ¿el controlador lo encendió o apagó?
  • Pantalla de la cámara: ¿la imagen está encendida o apagada?
  • Reverso: ¿coche en marcha atrás o no?

Sin experiencia en programación, fue muy difícil de hacer, y todo mi tiempo libre estaba pensando en diferentes enfoques.

¡Al final, lo logré!


Monitoreo activo

Ahora pude implementar la lógica operativa que controla el relé.


Control de relé

A lo largo del proceso, aprendí más sobre el Arduino y noté que la versión Nano es capaz de hacer todo lo que necesita, mientras que tiene un tamaño más pequeño y un precio más bajo. Es ideal para la instalación permanente en un automóvil. Desarrollé un modelo e imprimí una caja en una impresora 3D para colocar los componentes como una unidad compacta para la instalación.


Caja 3D



Todos juntos


Finalmente llegó el día en que vi los resultados. Aunque todavía tiene que jugar con el tiempo, fue agradable ver que el módulo funciona correctamente.


Enciende / apaga el modo de estacionamiento, enciende / apaga la cámara frontal, cambia automáticamente a la cámara de visión trasera y cambia automáticamente

En general, esta experiencia me enseñó mucho y me abrió los ojos a la posibilidad de integración directamente con el bus CAN. Es bastante sorprendente lo que se puede lograr mediante la conexión de dos cables.

En el futuro


En el futuro, planeo escribir un tutorial en profundidad sobre cómo agregar funcionalidad adicional a los botones existentes en su automóvil utilizando software y componentes gratuitos.

Source: https://habr.com/ru/post/451294/


All Articles