viernes, enero 30, 2015

Controlar Autorradio Sony con los mandos del volante del Opel Zafira y Arduino Nano

He decidido substituir el autorradio original de mi Opel Zafira del 2004 por otro que pueda reproducir archivos MP3 desde una memoria USB pero quiero conservar la opción de poder controlar el aparato mediante los mandos del volante. He podido ver que hay determinadas marcas como SONY o Pioneer que incluyen en algunos de sus modelos un zócalo para un conector jack de 3.5 mm en donde conectar un mando compatible o bien un adaptador que detecta el botón pulsado del control del volante y lo interpreta en el aparato ejecutando la función correspondiente, pero estos mandos son caros y no deja de ser otro cacharro que tenemos que instalar cercano al volante y dejando nuestros botones del volante sin usar. Respecto a los adaptadores, sí conservaremos operativos los botones del volante, pero no hay más que buscar en Google por "Steering Wheel Control Adaptor" o "Stalk Adaptor" y ver sus precios, que en algunas ocasiones y dependiendo del modelo de coche y aparato duplican el valor de este último. Es por ello que he estado investigando cómo construir fácilmente un adaptador que cumpla su función sin tener que gastar demasiado, y que su desarrollo esté al alcance de cualquiera con mínimos conocimientos de electrónica. Veamos qué información tenemos y cómo podemos construirlo.

En el SONY DSX-A42UI, que es el aparato que he comprado, esto se puede hacer con una serie de resistencias interconectadas entre los tres pines del jack estéreo de 3.5 mm insertable en su parte trasera.

Sony Steering Wheel Control

El pin del canal derecho del jack solo se usa para la función SHIFT; el resto de funciones las realiza intercalando una o varias resistencias en serie entre los pines canal izquierdo y común o masa. Dependiendo del botón presionado entre estos dos pines habrá una determinada resistencia que el aparato interpretará como una función en concreto. Podemos verlo en detalle en el siguiente esquema de un mando Sony.


Sony Remote Control
Vemos que para el comando OFF o apagado no usa resistencia y será 0 ohm, para el de SOURCE o fuente de sonido usa una resistencia de 2.2k y sucesivamente va usando resistencias del mismo o diferente valor para las otras funciones, pero el valor de las resistencias al estar en serie se irá sumando. La suma de los valores para conseguir disparar la función deseada en un autorradio Sony o Pioneer podremos verla en el siguiente resumen:


Valor Sony Función Sony Valor Pioneer Función Pioneer
0 OFF o Apagado 1.2k Source o Fuente de sonido / 2seg. = apagado
2.2k Source o Fuente de sonido 3.5k Mute o Silencio
4.4k Mute o Silencio 5.75k Display o Cambia el modo del display
6.6k List/Display o Cambia el modo del display 8k Seek+ o Siguiente pista/emisora
8.8k Seek+ o Siguiente pista/emisora 11.25k Seek- o Anterior pista/emisora
12.1k Seek- o Anterior pista/emisora 16k Vol+ o Subir volumen
16.8k Vol+ o Subir volumen 24k Vol- o Bajar volumen
23.6k Vol- o Bajar volumen 62.75k Band/Escape o Banda/Salir
33.6k Sel o Seleccionar
48.6k Mode o Modo

En definitiva tenemos 10 funciones que podemos usar, pero no olvidemos que nuestro volante tiene solo 6 botones. Por lo tanto, elegiremos qué 6 funciones deseamos usar. En mi caso he decidido usar las de Source, Display, Subir volumen, Bajar volumen, Pista/Emisora siguiente y Pista/Emisora anterior.
En la siguiente imagen podemos ver los valores de las resistencias del Opel Zafira para cada botón, así como la suma de sus valores para cada función del autorradio original y su correspondencia con el valor que requiere el nuevo autorradio SONY.

 Zafira Sony Steering Wheel ControlYa tenemos los valores de resistencia del control de nuestro volante y los que necesitamos tener para que el aparato haga sus funciones. Ahora solo necesitamos un dispositivo que, dependiendo de la resistencia aplicada desde los pulsadores del volante en su entrada, seleccione en su salida una determinada resistencia para que el aparato realice la función deseada. Esto puede hacerlo un microcontrolador PIC: es barato y consume muy poco, pero necesita de un programador que ya no es tan barato y construirlo uno mismo no está al alcance de alguien con pocos conocimientos de electrónica. Como lo que deseo es que sea muy fácil de construir, se me ocurrió entonces la posibilidad de usar un Arduino Nano.

Arduino Nano
Este microcontrolador ya viene montado, consume poco, tiene puertos serie y usb integrados para ser programado fácilmente con un ordenador, es barato y solo requiere de unos pocos componentes externos para realizar el trabajo. Aparte del microcontrolador necesitaremos unos materiales extra; veamos cuáles son y su precio aproximado:


Cantidad Descripción Precio Unidad Total
1 Clon Arduino Nano V3.0 6.50 6.50
6 Transistor BC547 0.20 1.20
1 Regulador LM7805CV 0.44 0.44
1 Micro fusible 500mA 0.40 0.40
14 Resistencia 1/4W 1% (*) 0.05 0.70
2 Condensador electrolítico 100uf 16V 0.20 0.40
1 Tira 40 pines hembra paso 2.54mm (**) 0.40 0.40
1 Cable macho/macho estéreo 3.5mm (***) 1.20 1.20
1 Placa topos o cuadros perforada 2.50 2.50
1 Caja ABS 85x55x30mm Welleman WCAH2855 2.80 2.80
Total 16.54€

(*) La cantidad de resistencias a comprar dependerá de los valores que necesitemos y de su disponibilidad comercial. No todos los valores son comercializados y para obtener un valor a veces bastará con una sola resistencia y otras habrá que sumar varias en serie. En mi caso conseguí los valores con las resistencias que tenía a mano y fueron los siguientes:


Función Valor resistencia Resistencias necesarias Valores resistencias
Fuente de sonido 2.2k 1 2.2k
Modo del display 6.6k 2 3k + 3.6k
Siguiente pista/emisora 8.8k 3 2.2k + 3k +3.6k
Anterior pista/emisora 12.1k 2 100R + 12k
Subir volumen 16.8k 2 6.8k + 10k
Bajar volumen 23.6k 3 3.6k +10k + 10k
Necesaria en circuito 1k 1 1k

Arduino Socket

(**) La tira de 40 pines la necesitamos para poder pinchar el Arduino Nano a la placa del proyecto; cortándola obtendremos 2 tiras de 15 pines cada una como las de la imagen.



(***) El cable macho a macho de 3.5 mm estéreo lo necesité en mi modelo de autorradio ya que el jack convencional para soldar que nos venden en las tiendas de electrónica tiene muy grueso el capuchón de plástico y no entraba en el zócalo de mi modelo, pues está rodeado del aluminio del disipador (ver primera imagen de esta publicación). Dependiendo del autorradio a instalar se comprará un cable ya hecho que suele tener el plástico del jack más fino o bien un jack simple y soldarlo a un trozo de 35 cm de cable coaxial.


Una vez que tengamos los materiales procedemos a montarlos en su correspondiente placa de circuito impreso, ya sea en una placa perforada de prototipos como veremos a continuación o en una placa para circuitos impresos que podemos realizar con el método del planchado y en este caso podrán imprimir la imagen de las pistas con el archivo que pondré al final de esta publicación. Dependiendo de nuestras habilidades seleccionaremos un método u otro; el esquema a seguir es el de la derecha.



Aunque yo he montado los componentes en una placa de circuito impreso realizada con el método de la transferencia de tóner, recomiendo usar una placa perforada de prototipos, ya que el circuito es relativamente simple y así nos evitamos tener que imprimir, planchar, atacar y perforar. Abajo pueden ver las imágenes de la placa de prototipos en sus dos caras, componentes y pistas.


Sony Stalk Adapter Bottom

Al soldar los componentes hay que tener en cuenta que el condensador C2 situado entre los zócalos del microprocesador, en vez de soldarse en vertical como se hace normalmente, lo soldaremos acostado contra la placa: Esto es necesario para que no impida la inserción del microprocesador en sus zócalos. Yo recomiendo soldar primero todos los componentes y zócalos, y luego soldar los alambres o cables de uniones entre pines.

Revisen todo dos o tres veces hasta estar seguros de que no hay ninguna conexión errónea, ninguna soldadura fría y por supuesto ningún cortocircuito entre pines o pistas. Prestad especial atención a la polaridad de los condensadores electrolíticos, a la posición del regulador de voltaje y a que las conexiones a los pines del microprocesador sean las correctas. No insertar este en su zócalo hasta haber comprobado que todo está según el esquema e igual que en las imágenes de la placa de prototipo.


Esta imagen del adaptador ya montado y con el Arduino Nano ya insertado en sus correspondientes zócalos les ayudará con la conexión de los cables externos que irán a los conectores ISO del autorradio y al zócalo del remoto. Prestar mucha atención al conectar la alimentación del circuito y no invertir la polaridad.




Ahora que ya tenemos todo montado, ha llegado el momento de programar el microcontrolador. Para ello , lo sacaremos de los zócalos del adaptador. Necesitaremos la última versión del software IDE de Arduino correspondiente a nuestro sistema operativo. Podemos descargarlo haciendo clic aquí.

Una vez instalado el software, conectaremos el Arduino Nano mediante el cable USB a nuestro ordenador. Este lo detectará y se instalarán los controladores necesarios para su funcionamiento. Sí falta algún controlador, lo encontraremos en la subcarpeta "drivers" del programa Arduino que instalamos anteriormente. Si no encontramos el controlador necesario para el USB Serial, es debido a que el Clon del Nano que hemos comprado tiene el chip CH340G, en cuyo caso podremos descargar el driver de aquí.
Para cualquier otra duda siempre podremos buscar en Google cómo instalarlo en nuestro sistema operativo.

Cuando tengamos todo instalado correctamente, ejecutaremos el programa "arduino.exe" y lo configuraremos para nuestro modelo de Arduino y puerto serie. Para ello abrimos la pestaña "Herramientas", seleccionamos del menú desplegable la opción "Tarjeta" y marcamos "Arduino Nano w/ ATmega328". Volvemos a desplegar "Herramientas", seleccionamos "Puerto Serial" y elegimos el nuevo puerto serie que se ha instalado con los controladores del Arduino Nano. Generalmente es el COM4 (COM3 si tenemos más dispositivos que usen puertos serie virtuales). Debajo dejo capturas de las dos configuraciones necesarias.

Configurando Tarjeta ArduinoConfigurando Puerto Arduino

Ya tenemos todo listo para cargar el código en el Nano. Podemos descargarlo del final de esta publicación. Una una vez descomprimido y con el software de Arduino abierto, desplegamos la pestaña "Archivo" y buscamos la carpeta "Programa" que acabamos de descomprimir. Dentro de esta carpeta hay dos subcarpetas llamadas "ZafiraSteeringWheelControl" y  "ZafiraSteeringWheelControlDebug". Esta última contiene el mismo código que la primera, pero con la comunicación por puerto serie activada. La he incluido para que los más inquietos hagan modificaciones en el código y puedan monitorizar los resultados por la conexión serial del Nano. La que nos interesa para cargar y probar el adaptador es la carpeta "ZafiraSteeringWheelControl",  y concretamente el archivo "ZafiraSteeringWheelControl.ino". Seleccionamos este archivo y se abrirá una nueva ventana con el código. En esa misma ventana pulsamos sobre el icono circular con una flecha hacia la derecha y se cargará el código en el Nano. Si el puerto configurado anteriormente era correcto y todo ha salido bien, nos mostrará en la parte inferior un mensaje confirmando la compilación y carga del código. Si aparecen errores de color naranja o no comunica con el Nano, habrá que revisar las configuraciones de placa y puerto en la pestaña "Herramientas".

Con el código cargado en el microcontrolador ya podemos desenchufarlo del USB e insertarlo en la posición correcta en los zócalos del adaptador. Cerramos la caja de plástico con sus tornillos y ya podemos instalar todo en el coche. El consumo del adaptador  es de solo 58.1 mA y, aunque es un consumo muy pequeño, solo lo alimentaremos de un cable que entregue +12v con el autorradio encendido. Es por ello que recomiendo conectarlo al azul/blanco (Amp. Remote) del SONY, que soporta un consumo máximo de 300 mA y que solo entrega tensión si el aparato está encendido.

Abajo les dejo los enlaces a las descargas del archivo con el código para programar el microcontrolador, así como el archivo que contiene el diseño de la placa PCB con su visor e instrucciones para los que deseen crear una placa con el método de la transferencia de tóner o planchado.

- Descargar el código para Arduino
- Descargar el diseño del PCB

Por último, les dejo imágenes del adaptador con detalles del proceso de desarrollo y un vídeo del funcionamiento en el coche.


Sony Stalk Adapter
Interfaz mandos volante zafira
Detalle Interfaz mandos volante zafira
Otro detalle Interfaz mandos volante zafira
Cable ISO con el adaptador conectado
Midiendo consumo adaptador opel zafira





15 comentarios:

  1. muy interesante, es basicamente lo que venía haciendo yo asi que me has ahorrado el trabajo. gracias!

    ResponderEliminar
  2. Muy interesante
    ¿Me podrias confirmar si funcionaria con un mando de Renault Scenic con radio updatelist y donde podria descargar el codigo para cargarlo en el Nano?
    Gracias

    ResponderEliminar
  3. Hola muy buenas, para kenwood no tendrás los valores de las resistencias muchas gracias.

    ResponderEliminar
  4. Y otra cosa , no será más fácil cambiando las resistencias directamente de las teclas de los mandos del volante, abriéndolas ? Yo he visto algo parecido cambiando estas resistencias de dentro de los mandos de Astra g , muchas gracias , saludos.

    ResponderEliminar
  5. Buena noche, muy interesante tu proyecto.Quisiera saber si me puedes ayudar con un asunto similar. Me gustaría saber como modificar o realizar un código ya que tengo multiplexado el teclado tengo 6 teclas y dos cables de salida. Osea que al pulsar una tecla me da un valor resistivo, este valor lo quiero tomar de entrada con el arduino y que me entregue el mismo valor. No tengo mucha idea en la programación.

    ResponderEliminar
  6. Hola,tu proyecto es fantastico y es lo que estaba buscando pero los enlaces para descargar el codigo para el arduino y el diseño de la pcb no funcionan.
    Podrias revisar los enlaces para su descarga.
    Gracias

    ResponderEliminar
    Respuestas
    1. Ya los he cambiado, a ver si ahora funcionan.

      Saludos.

      Eliminar
    2. Gracias, ya funcionan correctamente y he podido descargalos.

      Saludos

      Eliminar
  7. Hola en mi caso, mi radio tiene el zocalo necesito el mismo dispositivo o solo las resistencias?

    ResponderEliminar
  8. Hola. Estoy haciendo algo parecido y tengo una duda con la conexión de los transistores. Normalmente, en los NPN van conectados el Emisor a Masa, pero tu has conectado el Colector a Masa. Podrías explicar el porque? O simplemente en un fallo en el esquema?
    Muchas gracias y un saludo.

    ResponderEliminar
  9. Hola, dónde has conseguido los archivos ZafiraSteeringWheelControl??
    el resto todo controlado, pero cómo consigues eso? porque parece que es una librería del nano, pero me sorprende. Mil gracias!
    Carmen

    ResponderEliminar
  10. Hola, muy buen artículo! Me animé a hacerlo con casi nulos conocimiento sobre electrónica y casi lo consigo gracias al detalle! Tengo un problema, no gatilla las funciones de r4, r5 y r6, subir y bajar volumen activan la señal de track adelante y el botón de track atrás no genera ninguna acción, las demás acciones las realiza bien, dónde puede estar el error?

    ResponderEliminar
  11. genial, gracias por compartir Dr. Clone interesante site

    ResponderEliminar
  12. Hola si me volante tiene valores de resistencia diferentes qué parte del codicó tengo que modificar para adaptarse al nuevo valor ?

    ResponderEliminar
  13. estimado buen día, yo tengo una radio pioneer con el mimo sistema de control al volante,
    el problema es que no todos los botones funcionan solamente volumen. se revisaron los dos pines que trae el comando y la raqdio solo reconoce el volumen

    ResponderEliminar