Tabla de contenido:
- Suministros
- Paso 1: olfateo de bus CAN
- Paso 2: envío de comandos al estéreo
- Paso 3: construcción del adaptador
- Paso 4: el software
- Paso 5: el recinto del proyecto
- Paso 6: Pensamientos finales
Video: Teclas del volante al adaptador estéreo del automóvil (CAN Bus -> Key1): 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
Key1) "src =" https://content.instructables.com/ORIG/F3X/UXCI/KCT3F9KZ/F3XUXCIKCT3F9KZ-p.webp
Key1) "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
Unos días después de comprar un auto usado, descubrí que no puedo reproducir música desde mi teléfono a través del estéreo del auto. Aún más frustrante fue que el automóvil tenía bluetooth, pero solo permitía llamadas de voz, no música. También tenía un puerto USB para Windows Phone, pero no funcionaría con un iPhone sin un dongle de 60 dólares.
Habiendo reemplazado los equipos de sonido de mis autos anteriores, sin pensarlo mucho ni investigar, pedí un equipo de sonido de reemplazo de 40 dólares en un sitio web muy conocido y "barato". El estéreo venía con una cámara de marcha atrás, Car Play y un montón de funciones adicionales, que parecían tener un valor mucho mejor que el dongle más caro que solo hace una cosa.
Después de comprar y pintar una nueva placa frontal, imprimir en 3D una montura y un montón de trabajo adicional (que podría ser instruible en sí mismo), llegué a un descubrimiento desagradable. Los comandos de las teclas del volante se enviaron a través del bus CAN, pero el estéreo solo tenía una entrada Key1. No siendo de los que se dan por vencidos a mitad de camino, pedí un adaptador de 60 libras, que resultó no funcionar. En este punto, decidí hacer un adaptador yo mismo.
No soy ingeniero eléctrico, solo tengo conocimientos rudimentarios de electrónica y este fue un proyecto de aprendizaje y exploración para mí. Mi consejo sería que primero verifique las especificaciones de su vehículo y solicite una radio compatible, pero si ya está atascado (como yo), siga las instrucciones bajo su propio riesgo.
Suministros
El adaptador (aprox.15 $)
- Arduino Pro Mini 5V (o una placa compatible)
- Módulo de bus CAN MCP2515
- Tablero perfilado 60x80mm
- Potenciómetro digital X9C104 100K Ohm (depende de su estéreo)
- Regulador reductor DC-DC LM2596S 3-40V 3A
- Portafusibles + fusible (100-200 Ohm)
- Caja de proyecto o impresora 3D para imprimirlo
- Tomas estéreo de coche (macho + hembra)
- Suministros de soldadura, alambres, etc.
Ayudantes de prueba (no es estrictamente necesario, pero hará que la prueba sea mucho más fácil)
- Arduino (cualquier placa de 5V servirá)
- Módulo de bus CAN MCP2515
- Protoboard + puentes
Paso 1: olfateo de bus CAN
En lugar de tener un montón de cables alrededor del interior de su automóvil interconectando un montón de sistemas, algunos vehículos modernos tienen pares de cables que van a cada componente. La información se envía como paquetes de datos digitales a través de estos cables y todos los sistemas pueden leer todos los mensajes. Esta es la red de bus CAN (puede haber varias redes en su automóvil, por lo que es posible que no se vea toda la información).
Lo que queremos hacer es conectarnos a la red de bus CAN y "olfatear" el tráfico de datos. De esta manera podemos "ver" cuando se presiona una tecla del volante. Cada paquete tiene una ID, que representa el subsistema del vehículo que envió el paquete y los datos que representan el estado del sistema. En este caso, estamos tratando de encontrar el ID del subsistema que envía los mensajes de las teclas del volante y la representación de datos de cada tecla.
Si tiene suerte, puede encontrar los valores de su automóvil en algún lugar en línea y puede omitir este paso.
Este proceso es un poco complicado y ya se ha explicado en otros lugares, así que solo lo resumiré:
- Encuentre los valores correctos para la comunicación del bus CAN en su vehículo. Para mi automóvil (un Fiat Idea 2009) tenía una velocidad de transmisión de 50KBPS y una velocidad de reloj de 8MHz.
- Conéctese a la red de bus CAN utilizando el módulo de bus CAN y un Arduino en una configuración "sniffer".
- Lea los valores del bus CAN en su computadora portátil con una herramienta como https://github.com/alexandreblin/python-can-monito…. Será muy difícil hacerlo sin él, ya que se envían muchos mensajes incluso cuando el automóvil no está haciendo nada.
- Presione el botón del volante y observe los cambios de valor. Esto puede ser un poco complicado ya que se envían muchos mensajes y puede ser difícil saber cuál es cuál.
Aquí hay dos excelentes artículos que explican el proceso en profundidad:
- https://medium.com/@alexandreblin/can-bus-reverse-…
- https://www.instructables.com/id/CAN-Bus-Sniffing-…
Al final, debe tener la ID del subsistema que usaremos para escuchar solo los mensajes del bus CAN del volante y una lista de valores hexadecimales para los comandos de teclado. En mi caso, los datos se veían así:
ID | ID Hex | Byte 0 | Byte 1 | Botón
--------------------------------------------- 964 | 3C4 | 00 | 00 | Sin botones 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Teléfono 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Win 964 | 3C4 | 00 | 02 | Up 964 | 3C4 | 00 | 01 | Hacia abajo 964 | 3C4 | 00 | 04 | OK
El ID del subsistema es 3C4 (en este caso), que es un número hexadecimal, por lo que deberíamos escribirlo como 0x3C4 en los bocetos de Arduino. También estamos interesados en los bytes 0 y 1 (en su caso, puede haber más bytes). Estos también son valores hexadecimales, por lo que también deben escribirse con un 0x inicial.
Si convierte los valores a binarios, notará que los bits no se superponen (por ejemplo, + 0b10000000 y - 0b01000000), por lo que se pueden presionar varias teclas al mismo tiempo.
Sugiero construir el rastreador con los materiales enumerados en la sección "ayuda de prueba", para que pueda reutilizarlo más tarde para simular su automóvil. Esto le evitaría tener que estar sentado en su automóvil todo el tiempo mientras construye y prueba el adaptador. Puede utilizar el boceto proporcionado para actuar como simulador. Modifique "subsystemId", "data0" y "data1" con los valores que olfateó.
Paso 2: envío de comandos al estéreo
Antes de comenzar a construir el adaptador, es mejor probar primero si el estéreo puede recibir comandos.
Tenía una batería de coche de repuesto, así que le conecté el estéreo directamente. Si tiene una fuente de alimentación de sobremesa de 12 V, aún mejor. Desafortunadamente, no pude encontrar mucha información en línea sobre la entrada Key1 en mi unidad, así que recurrí a la experimentación. No estaba demasiado preocupado por quemar el estéreo en este punto, ya que es relativamente barato, y este fue mi último intento desesperado para que funcione con mi automóvil.
El estéreo tiene una pantalla de aprendizaje de comandos, donde es posible seleccionar uno de dos valores de resistencia (1K y 3.3K) y ver el valor de "voltaje" (0-255). Se cita "voltaje" porque es engañoso. Pasé mucho tiempo aplicando diferentes voltajes a Key1 sin suerte. También intenté usar diferentes resistencias para aplicar el voltaje sin suerte.
El avance se produjo cuando traté de tocar el cable Key1 a la tierra de la batería, lo que resultó en que el "voltaje" cayera a 0. Esto, en combinación con diferentes resistencias, produciría valores consistentes de "voltaje" en la pantalla de aprendizaje.
Ahora que sabía cómo enviar entradas al estéreo, necesitaba una forma de enviarlas desde un Arduino. En este punto no he oído hablar de multiplexores, que junto con algunas resistencias, podrían haber sido una solución más rápida y confiable (todavía no estoy seguro de si esto es factible), así que usé un potenciómetro digital. Al principio tuve problemas para hacer funcionar el potenciómetro digital, hasta que me di cuenta de que necesitaba conectarlo como un reóstato para que actuara como una resistencia variable en lugar de un divisor de voltaje. Básicamente tuve que conectar los terminales RH y RW.
Además de la resistencia, el momento oportuno fue crucial. Si la caída de resistencia es demasiado corta, el comando no se registrará. Si es demasiado largo, es posible que se registre varias veces. Una caída de 240 ms, seguida de un retraso de 240 ms hasta que el siguiente comando funcionó de manera bastante confiable para mi estéreo. Si bien eso parece muy poco tiempo, significa que podemos enviar un máximo de 2 comandos por segundo, lo cual se nota si está tratando de subir o bajar el volumen rápidamente. Intenté jugar con diferentes tiempos y patrones, lo que aumentó la velocidad pero no fue muy confiable. Si tiene alguna idea sobre cómo mejorar esto, déjela en los comentarios.
Antes de continuar, sugiero construir un prototipo para verificar si su estéreo acepta el mismo tipo de entrada. Incluso si acepta diferentes voltajes, el adaptador debería funcionar con ligeras alteraciones en el cableado y el boceto de Arduino.
Paso 3: construcción del adaptador
Después de probar todos los componentes por separado y probarlos juntos en una placa de pruebas, llegó el momento de darles un hogar más permanente. Esto tomó algunas horas para diseñar componentes y soldar.
En la parte superior izquierda está el regulador reductor, que transforma 12 V de la batería del automóvil en 5 V que pueden ser utilizados por los otros componentes.
En la parte inferior izquierda está el módulo de bus CAN, que lee los valores de la red de bus CAN del automóvil y los reenvía al Arduino.
En la parte superior derecha está el potenciómetro digital (cableado como un reóstato) que actúa como una resistencia variable entre el suelo y la entrada Key1 del estéreo.
En la parte inferior derecha está el Arduino, que actúa como el cerebro del adaptador, transformando los mensajes del bus CAN en resistencias que son leídas por el estéreo.
En la entrada de 12 V hay un fusible de 150 mA, que probablemente no protegerá el circuito, pero está ahí para evitar un incendio en caso de un cortocircuito.
Paso 4: el software
Después de la descarga, coloque los tres archivos.ino en una sola carpeta. De esa manera, todos serán parte del mismo boceto y se implementarán juntos en Arudino.
También debe agregar las bibliotecas necesarias al IDE de Arduino. Para hacer esto, descargue los siguientes archivos:
github.com/autowp/arduino-mcp2515/archive/…
github.com/philbowles/Arduino-X9C/archive/…
luego agregue ambos yendo a Sketch> Incluir biblioteca> Agregar biblioteca. Zip…
CanBusStereoAdapter.ino
La configuración básica se realiza en este archivo.
Los valores del bus CAN del comando de teclado se definen en la parte superior. A menos que tengas el mismo coche que yo, lo más probable es que tengas que poner tus propios valores. Puede usar los valores hexadecimales del rastreador, usé binario para que sea más fácil ver que no hay superposiciones accidentales en los bits.
No todos los automóviles tienen los mismos comandos en el volante, así que siéntase libre de eliminar, agregar o editar los valores definidos.
No olvide reemplazar su ID de subsistema en "STEERING_ID".
CanBus.ino
Este archivo configura el oyente del bus CAN, interpreta los paquetes y coloca los valores de resistencia en un búfer circular.
Ajuste la configuración del bus CAN en la función "setupCanBus" para que se adapte a su automóvil.
Usamos un búfer circular porque, como se mencionó anteriormente, la entrada de comando del volante es mucho más rápida que la entrada estéreo. De esta manera no perdemos ningún comando mientras el potenciómetro digital está haciendo su trabajo. Si ingresamos demasiados comandos, los más antiguos se descartarán primero, ya que son los menos importantes. Esto también nos permite manejar el caso cuando se presionan varios botones, ya que la entrada estéreo solo acepta un solo valor a la vez.
Si ha cambiado alguna de las definiciones de comando en "CanBusStereoAdapter.ino", también deberá actualizarlas en la función "handleMessageData". "handleMessageData" comprueba si las tramas de datos del bus CAN proporcionadas contienen alguno de los comandos conocidos mediante una operación AND bit a bit.
Por ejemplo, si presioné >> y + al mismo tiempo, esto nos dará un marco de datos con un valor de 0b10010000. >> (para mi coche) es 0b00010000 en binario y + es 0b10000000.
--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | Comando 0b10010000 | Y 0b00010000 | Y 0b10000000 | AND 0b00001000 resultado | = 0b00010000 | = 0b10000000 | = 0b00000000
Aquí podemos ver que el resultado de la operación AND será mayor que 0 si el comando está presente en el marco de datos. Entonces, todo lo que tenemos que hacer es verificar {marco de datos} y {valor de comando}> 0, para cada comando que definimos.
Tenga en cuenta que cada marco de datos contiene diferentes comandos, por lo que está bien si los valores de los comandos son los mismos, ya que los estamos comparando con sus propios marcos. En mi ejemplo, << y ESC tienen el mismo valor 0b00001000 (0x08), pero << está en data0 y ESC en data1.
Después de haber determinado que un comando está presente en un marco, agregamos un valor de potenciómetro digital al búfer circular. Los valores van de 0 a 99, pero he notado que el "voltaje" leído por el estéreo no es lineal, así que pruebe los valores usted mismo.
DigitalPot.ino
Este archivo extrae valores del búfer circular y los envía al bote digital para su ejecución. En mi caso "pot.setPotMin (false);" aumentará la resistencia al máximo, que el estéreo leerá como "voltaje" máximo. Es posible que su estéreo requiera que configure el potenciómetro digital al mínimo, así que pruébelo.
Paso 5: el recinto del proyecto
Tengo una impresora 3D, así que decidí imprimir una carcasa de dos partes para mi adaptador. He incluido un archivo Fusion 360 que puede editar y archivos gcode que se ajustan a un perfboard de 60x80 mm.
Si no tiene acceso a una impresora 3D, puede usar un gabinete de proyecto listo para usar o un contenedor resistente.
Paso 6: Pensamientos finales
Inicialmente planeé que el adaptador estuviera conectado a una alimentación constante y que se despertara con ciertos mensajes del bus CAN, ya que mi automóvil no tiene un cable de encendido en el compartimiento estéreo. Más tarde decidí no hacerlo porque no quería arriesgarme a agotar la batería y preocuparme por el adaptador mientras estaba lejos del automóvil. Usé un divisor de caja de fusibles de automóvil para ejecutar un cable de encendido y no tener que complicar más el adaptador.
Según mis pruebas, el consumo de energía es de 20-30 mA. Lo bajé a 10 mA en modo de suspensión y podría bajar aún más quitando los LED de los componentes, pero decidí no molestarme con él, ya que solo funcionará mientras el automóvil esté en funcionamiento.
Estoy bastante satisfecho con el resultado final. El tiempo de respuesta es razonable y rara vez falla los comandos.
Aunque mi inversión de tiempo fue mucho mayor que el costo del adaptador disponible comercialmente (que no funcionó), el conocimiento que adquirí es invaluable.
Recomendado:
Cómo instalar un subwoofer del mercado de accesorios en su automóvil con un estéreo de fábrica: 8 pasos
Cómo instalar un subwoofer del mercado de accesorios en su automóvil con un estéreo de fábrica: con estas instrucciones, podrá instalar un subwoofer del mercado de accesorios en casi cualquier automóvil con un estéreo de fábrica
Entrada de automóvil biométrica - Verdadero automóvil sin llave: 4 pasos
Entrada de automóvil biométrica: verdadero automóvil sin llave: Hace unos meses, mi hija me preguntó por qué los automóviles de hoy en día no están equipados con un sistema de entrada biométrica, cuando incluso un teléfono celular lo tiene. Desde entonces estuve trabajando en implementar lo mismo y finalmente logré instalar y probar algo en mi T
Convirtiendo cualquier automóvil R / C en un automóvil R / C con control de aplicación Bluetooth: 9 pasos
Convirtiendo cualquier automóvil R / C en un automóvil R / C con control de aplicación Bluetooth: este proyecto muestra los pasos para cambiar un automóvil ordinario con control remoto a un automóvil con control Bluetooth (BLE) con la placa de robótica Wombatics SAM01, la aplicación Blynk y la aplicación MIT Inventor. Hay muchos autos RC de bajo costo con muchas características como los faros LED y
FinduCar: una llave inteligente para el automóvil que guía a las personas hacia dónde está estacionado el automóvil: 11 pasos (con imágenes)
FinduCar: una llave de coche inteligente que guía a las personas hacia dónde está aparcado el coche: para resolver los problemas anteriores, este proyecto propone desarrollar una llave de coche inteligente que podría dirigir a las personas al lugar donde aparcaron el coche. Y mi plan es integrar un GPS en la llave del auto. No es necesario utilizar la aplicación del teléfono inteligente para rastrear
Arduino personalizado para mantener los botones del volante CAN con el nuevo estéreo del automóvil: 9 pasos (con imágenes)
Arduino personalizado para mantener los botones del volante CAN con el nuevo estéreo del automóvil: Decidí reemplazar el estéreo original del automóvil en mi Volvo V70 -02 con un estéreo nuevo para poder disfrutar de cosas como mp3, bluetooth y manos libres. Mi automóvil tiene algunos controles en el volante para el estéreo que me gustaría poder seguir usando