Control Remoto para PC


Dicen que de las necesidades surgen las mejores ideas…y estoy convencido de que es así. La cuestión es que tengo unas cuantas películas en cd y las veo en el televisor a través de la salida tv out de la pc, pero me resultaba muy incomodo levantarme del sitio donde estaba viendolas para avanzar o retroceder en cierto momento de las mismas… así fué como me embarque en el proyecto de construirme un control remoto para la pc… no solamente para controlar los videos o la música a distancia sinó para ejecutar cualquier comando…
Éste control remoto también resulta muy útil para un departamento de sistemas, donde los servidores normalmente están en una habitación refrigerada y aislada de la oficina… es muy facil lanzar la ejecución de un script o comando a distancia…
Después de tener mucho tiempo la idea en background en mi cabeza analizando las posibilidades de implementación, llegué a la conclusión de que la manera mas facil de implementarlo sería a través del puerto serie, utilizando la linea DCD (Data Carrier Detect) , Pin 1 en una ficha DB9. Cuando un control remoto emite una señal infraroja, es captada por un receptor infrarojo, que, después de decodificarla, puede envirla como un tren de pulsos altos o bajos (ceros y unos) a la linea DCD. A partir de ahí solo es cuestión de analizar el patron del tren de pulsos a través de un programa y decidir que hacer en caso de que aparezca una secuencia dada.
Éste es el esquema electronico del receptor:
schematics-ir-receiver
La idea es que una vez construído el receptor, se graban los pulsos emitidos por un control remoto cualquiera (ej. de un tv o equipo de audio) y después se utiliza ese control remoto para controlar la pc.
El gran problema con que me encontré fué al programar algoritmo para identificar los patrones de pulsos que ingresan a la linea DCD… es bastante complejo diferenciar la secuencia de un botón Power de la de un botón Volumen, ya que al transformar la señal analogica en digital, puede haber una pequeña variacion en la cantidad de unos y ceros.
La solución a este problema me la dieron los muchachos que hicieron el lirc (Linux Infrared Remote Control) que ya habían pensado en lo mismo y tenían desarrollado el programa para trabajar de la misma manera que yo necesitaba.
La alimentación del circuito la tomamos del pin 7 RTS (request to send), con un diodo para evitar retroalimentación en éste pin.
Respecto del receptor infrarojo, éstos son algunos modelos que se pueden utilizar:
Todos estos modelos ya vienen con el decodificador necesario para obtener la señal esperada para la linea DCD. En caso de no conseguirlos, hay que buscar alguno que trabaje en la frecuencia de 38 kHz, ya que la mayoria de los control remoto, trabajan en ésta frecuencia.
El resto de los componentes se describe en el esquema de arriba.
tie_lirc1
Respecto del programa, aqui tienen una version del winlirc con los fuentes y todo. Pueden abrir el proyecto en Visual C++.