Problema de los mandos:

Raro es el salón que no tiene un montón de mandos a distancia: televisor, equipo de sonido, Reproductor Multimedia, BlueRay, DVD, iPlus, Apple TV, Descodificador de TDT, video VHS...

Si los utilizáramos de uno en uno no sería un gran problema: voy a ver un DVD, pues cojo el mando del DVD, voy a ver el iPlus, pues cojo el mando del iPlus, pero no es así, por ejemplo, si quieres ver algo en el DVD necesitarás 3 mandos, para poder hacer todo esto:

-Encender el DVD
-Encender la TV
-Seleccionar la entrada correspondiente en la tele
-Enciender el equipo de música
-Seleccionar la entrada correspondiente en el equipo de música.

Existen mandos universales que hacen todo, pero son incómodos y engorrosos (esto es una opinión personal), y cuanto mas caros peor.

Para mí, el mejor mando para controlar un dispositivo es su propio mando. Ningún mando universal por mucha pantalla táctil que tenga iguala la experiencia del mando del Apple TV para controlar el Apple TV, o al mando del iPlus para controlar el iPlus, o el de la Playstation para la Playstation.


Objetivo

Quiero que cuando encienda el iPlus (o el DVD, o lo que sea), que se encienda automáticamente la televisión y el equipo de música, y cuando lo apague, que se apague todo.


Solución

A falta de una solución comercial que haga esto, decidí hacerlo yo mismo utilizando Arduino (1).

(1)Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. (wikipedia)

La idea es que crear un dispositivo que cuando detecte que se ha pulsado una determinada tecla de un mando a distancia, emita instrucciones que hayamos programado para otros dispositivos.

Por ejemplo se puede programar que cuando se pulse el botón de encender el DVD, se encienda la TV, se seleccione la entrada HDMI1, y se encienda equipo de sonido y se seleccione la entrada correspondiente.

Se pueden programar todas las teclas que queramos de cualquiera de los mandos para que que realicen todas las instrucciones que queramos automatizar.


Hardware

El material necesario es el siguiente:

-Placa Arduino Nano (o cualquier otra)
-Receptor IR (por ejemplo AX-1838HS)
-2 Led Infrarrojos
-2 Resistencias de 12 y 270 ohm
-Transistor NPN (por ejemplo 2N4401, 2N3904)
-Placa perforada pequeña (7 pines de ancho y 7 de alto)
-Tira de pines hembra
-Una caja pequeña
-Cables


Y el esquema del circuito es sencillo:


El prototipo inicial lo monté en una Protoboard y utilicé una placa Arduino Mega.




Para el montaje definitivo utilicé una placa Arduino Nano, mas pequeña y barata, y el circuito lo monté en un trozo de placa perforada de 7x7 pines, alineando los pinas de forma que se pudiera encajar directamente sobre el Arduino Nano:

Circuito montado sobre el Arduino Nano


Tenía por ahí una vieja caja de un "cacharro" de telefónica, que me sirvió para proteger el circuito:














Software

La librería librería IRremote de Ken Shirriff proporciona funciones para recibir y emitir señales de infrarrojos.

Con la propia librería vienen una serie de ejemplos en los que me he apoyado, en primer lugar para entender el funcionamiento de los distintos protocolos que utilizan los mandos a distancia IR, y después para desarrollar el código de mi proyecto que pongo a continuación:


En primer lugar capturé las pulsaciones que emiten los mandos a distancia, tanto las de las teclas que pulsaré para encender y apagar el equipo, como todas pulsaciones de otros equipos que quiero que se ejecuten  al encender y/o apagar.

Hay que tener en cuenta que hay distintos protocolos (NEC, Sony, RC5, RC6, Panasonic, etc) para los distintos mandos, e incluso, si no se ajusta a ninguno de estos protocolos, siempre se puede recuperar el "Raw" con todos los intervalos en milisegundos que componen cada instrucción. En la librería IRremote existen funciones diferenciadas la emisión con cada protocolo.

La parte mas delicada ha sido la recepción de las pulsaciones de los mandos, ya que en algunos mandos existen dos códigos distintos para cada tecla que se van alternando cada vez que la pulsas. Esto sirve para poder diferenciar cuando se hacen dos pulsaciones seguidas, de cuando se ha mantenido pulsado el botón.

En otros mandos, sin embargo existe un único código para cada tecla, pero se envía repetidamente un código de repetición cuando se mantiene pulsada una tecla durante mas tiempo.


No hay comentarios:

Publicar un comentario