11/12/2012

Comunicación infrarroja con Arduino

Del despiece del aparato TDT estropeado obtuve un sensor de infrarrojos, que era una de las piezas vitales que tenía pensado comprar (y de hecho compré) para poder llevar a cabo el proyecto del coche con control remoto con Arduino. Como aún no he recibido el receptor infrarrojos comprado, me he puesto directamente a trastear con el obtenido del TDT. En un principió me chocó no ver el tipo de receptor concreto que era para poder buscar una hoja de características (datasheet). Así que la solución por la que opté fue buscar imágenes de receptores infrarrojos en Internet hasta ver cuál podía corresponder y pronto la búsqueda resultó efectiva. Tenía ante mí a un PL-IRM0101-3. Si bien la documentación que encuentro relacionada con la recepción de infrarrojos usando Arduino no utiliza dicho sensor, sino más bien TSOP 1238 o algo por el estilo, el proceso es bastante similar. En las hojas de características se encuentra un esquemático sobre cómo montar el circuito para recibir señales. Podéis ver la imagen a continuación.
Esquema de montaje del receptor infrarrojos

Con todo listo, comencé a montar el circuito y la primera prueba fue un fracaso. Era incapaz de leer señal alguna, así que revisé el circuito, busqué diferentes librerías para recepción de infrarrojos en Arduino y seguía sin obtener absolutamente nada. Cuando llegué a pensar que el receptor estaba estropeado, pensé en alguna forma de probarlo directamente y fue entonces cuando me topé con un excelente artículo que explica los conceptos de receptores infrarrojos, cómo testearlos, cómo son las señales emitidas por el mando a distancia, cómo son interpretadas por el receptor y evidentemente cómo usarlo. El enlace al magnífico artículo lo podéis encontrar aquí. Como se encuentra en inglés, me parece interesante también destacar uno en castellano, menos detallado quizá pero muy sencillo de entender y que explica qué es el protocolo NEC aquí. Tras testear el receptor infrarrojos comprobé que funcionaba correctamente, así que decidí montar más cuidadosamente el circuito inicial (debía haber algo mal) y esta vez funcionó a la primera. 
Una vez resuelto, me decidí a realizar mi propio programa, que básicamente consiste en recibir las señales del mando a distancia, interpretarlas y mostrar por el display LCD cuál ha sido la tecla pulsada. Podéis ver el vídeo a continuación.

Por cierto, comentar que si compráis un receptor infrarrojos TSOP1838 procedente de DealExtreme (como es mi caso) debéis tener en cuenta que hay un cambio en las patillas del circuito. Más detallado aquí.
Y, aunque me parezca poco usable, cuelgo el código del programa que muestra la tecla pulsada en el display aquí.