Manejar un ordenador con un mando a distancia

En el mercado de hoy en día se venden tarjetas sintonizadoras de televisión para el PC. Muchas de ellas tienen mando a distancia. Y en algunas de ellas el receptor de infrarojos que trae es para conectarlo a un puerto serie del PC.

Al ser el receptor de infrarojos un conector para el puerto serie, es muy sencillo comprobar que información le envía el mando a distancia y tomar esos datos para aprovecharlos en futuras aplicaciones, como por ejemplo:

-Apagar el equipo.
-Cargar una aplicación
-Simular pulsaciones del teclado predefinidas o mover el puntero ratón y simular pulsaciones de los botones.
-Escuchar música y subir el volúmen de los altavoces

La forma sencilla de saber que datos manda y en que formato sin tener que investigar mucho es usar un sniffer del puerto serie. En mi caso he usado el portmon, que es una excelente utilidad para rastrear la información que va y viene desde los puertos serie y paralelo.

Si os fijais en la imagen, se muestra como inicializa el puerto a 1200 baudios, 8 bits de datos, ninguna paridad y 1 bit de stop. A continuación vienen los datos propiamente dichos. Para la prueba he pulsado el botón 1 del mando a distancia y el resultado es FE 9F 31, si hubiese pulsado el 2 el resultado sería FE 3D 32. Si lo observamos veremos que el 1 y el 2 (y el resto de números) coinciden con su representación ASCII en hexadecimal (31 y 32). En otros casos como la pulsación de las teclas de subir (FE F1 3B) y bajar (FE 64 3D) volumen o subir (FE 17 3F)y bajar (FE C6 3E) de canal muestran otros caracteres. En el caso de que dejáramos una tecla pulsada los códigos varían ligeramente, como en la imágen, que aparece el triplete FE 77 71 cuando se deja pulsado el botón 1 del mando a distancia.

En definitiva, da igual que sea en linux o en windows, podemos capturar estos tripletes y actuar en consecuencia con cada pulsación recibida (si se pulsa el botón de off apagamos el equipo, si pulsamos los botones de subir y bajar el volumen y los canales podemos manejar el puntero del ratón, con el mute podemos apagar el altavoz del equipo, con el botón de play podemos enviar un tabulador, con los números podemos escribir letras estilo sms, etc). Por supuesto, que esa información venga así en mi receptor de infrarojos no significa que sea igual en otros, de ahi que haya que mirar como funciona con utilidades como el portmon.

17 comentarios en “Manejar un ordenador con un mando a distancia

  1. rene

    Tengo una pregunta podria ser posible que con un infrarojo del mercado de los que se conectan por usb pueda detectar las entradas de un control remoto para asi controlar cosas en la pc?

    Responder
  2. sistemasorp

    Pues supongo que si, siempre y cuando el receptor tenga una API. En caso contrario es complicado el tener que estar recibiendo la señal, mñas que nada por que tienes que tratar frecuencias, ticks, etc.

    Responder
  3. Anonymous

    Hola me llamo Rubén y me parece muy interesante esto, de hecho lo he intentado hacer, me he descargado el portmon, lo he ejecutado pero a partir de ahi no se que tengo que hacer. Yo tengo tambien un mando de pinnacle, asique me imagino que sera igual que con el tuyo.
    Saludos

    Responder
  4. sistemasorp

    ¿el cable receptor se conecta al puerto serie del ordenador? si es así solo debes elegir monitorizar el puerto serie en el que este conectado.

    Responder
  5. Anonymous

    Hola de nuevo, soy Rubén otra vez,siento molestar de nuevo, llego al punto en que leo los tripletes, pero no se que tengo que hacer a partir de ahi.
    Saludos

    Responder
  6. Anonymous

    Uso el windows xp, pero yo no tengo muchos conocimientos sobre programacion, casi ninguno, y me gustaria aprender, por lo que si puedes ayudarme en esto bien, y si ademas me facilitas algun enlace en donde enseñen a programar,pues mejor.
    Gracias y perdona las molestias.
    Rubén

    Responder
  7. Anonymous

    Hola buenas, me llamo Rhut: tengo una preguntilla, a ver si me sabeis contestar.
    ¿Alguien conoce o dispone de un programa similar al portmon para utilizar con linux?
    Muchas gracias

    Responder
  8. RaZieR

    hola soy de ecuador recien entro a la onda linux y soy muy bueno programando, me interesa tu articulo, lo que quisiera hacer es lo mismo pero en linux!, no se si sea necesario implememtar rtlinux, xq lo que normalmente haria en windows desde .net , c++ o java es lanzar un hilo que este escuchando por el puerto paralelo. ahora utilizo ubuntu 7.04 y no quiero arriesgarme aniadiendole al nucleo el tiempo real(rtlinux), existe una forma parecida en windows de escuchar por el puerto paralelo????.

    hace anios hice un programa en c++ que cuando pulsabas las direccionales del teclado controlabas un carro a control remoto.

    mi correo es razier_18@hotmail.com

    Responder
  9. Jaime Pla

    Hola, me llamo Jaime y me a parecido interesantisimo tu articulo, de hecho estaba buscando info sobre como hacerlo y me a aparecido tu articulo, haber, yo sobretodo se programar en VB.NET tienes algun codigo ejemplo para hacerlo en ese lenguaje? se trata simplemente de esperar a que se active el evento «keypress» y ya esta? o es necesario hacer un paso intermedio para que mi programa este escuchando por algun puerto especifico, muchas gracias

    Responder
  10. Jonathan

    Hola buenas, yo aporto algo mucho mas facil. Mirad entrar en la carpeta donde tengais instalado el programa de pinnacle en mi caso :C:\Archivos de programa\Pinnacle\Pinnacle PCTV\Remote. La carpeta remote es la controladora del mando. Ahi vereis un archivo pdf que dice exactamente como configurar el mando para otros dispositivos con el archivo profiles. Un saludo, por cierto si alguien me diera el codigo para manejar el raton directamente se lo agradeceria. Saluods

    Responder
  11. jairo

    Hola, muy interesante tu web, me gustaria preguntarte una duda.

    Tengo el mismo mando y el mismo receptor que tu via puerto serie, cuando los pruebo con la aplicación de pinnacle el portmon me muestra todo correctamente, pero cuando utilizo python para leer el puerto serie no me dice nada de nada, ¿sabes a que puede ser debido?¿es necesario que la aplicacion pctv remote este corriendo?, si es asi no puedo abrir el puerto serie desde python porque esta siendo usado.

    un saludo y gracias.

    Responder
    1. admin Autor

      Sólo se me ocurre que no abras el puerto correctamente. ¿Lo haces a 1200 baudios, 8 bits, 1 bit de stop y ninguna paridad?. La aplicación pctv remote no debe estar cargada.

      Responder
  12. jairo

    pues la cosa es que si…mira te muestro lo que tengo. en la primera letura me lee un cero y en la segunda se queda bloqueado, por mas que aprieto botones del mando no ocurre nada(y tiene pilas)

    >>> import serial
    >>> ser=serial.Serial(‘COM1’,baudrate=1200,parity=serial.PARITY_NONE)
    >>> ser.stopbits
    1
    >>> ser.bytesize
    8
    >>> ser.parity
    ‘N’
    >>> leido=ser.read(1)
    >>> leido
    ‘\x00’
    >>> leido=ser.read(1)

    un saludo y gracias

    Responder

Responder a Anonymous Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *