Raspberry Pi sensor IR y mando a distancia

por:

Raspberry Pi con mando a distancia y sensor IR.

 

En esta entrada os vamos a enseñar como conseguir manejar vuestro XBMC con el mando del salón, sin tener que recurrir a mandos especiales (mandos universales o configurables) de una manera más o menos sencilla y lo mejor de todo muy económica.

Materiales que necesitamos

Lo primero de todo es buscar aquellas partes que vamos a utilizar y que seguramente tendremos que comprar:

  • Una Raspberry Pi, el manual está pensado para hacerlo con este aparato y no sé si se podría hacer con otro aparato.
  • Unos cables con conectores, es la manera más sencilla de poder usar los pines GPIO de la Raspberry Pi y evitar tener que soldar y conseguir que cada conector quede aislado. (Los podéis buscar poniendo “Dupont Wire Color Jumper”).
  • Un receptor Infrarrojo, esto es como un pequeño LED montado en un transistor. Yo he utilizado este: TSOP4838

Cómo hacer un sensor IR

Todo nuestro manual se basa en la tecnología infrarroja, para no extendernos diremos que los mandos de televisión y otros controles remotos, suelen usar una parte del espectro que no es visible denominado infrarrojo, por esos “canales” envían la información de manera que no interfieran con otras tecnologías como el WiFi o el propio Bluetooth, que también usan parte del espectro no visible al ser humano.

Lo que nosotros vamos a realizar es, instalar un receptor IR para capturar la señal de nuestro mando y una vez capturada, asignar cada señal a un botón de XBMC (desplazamientos, play/pause, stop etc). Así podremos manejar nuestro XBMC con el mismo mando que el de la televisión.

El circuito

Lo primero que debemos hacer es conectar nuestro sensor IR a nuestro Raspberry Pi para ello solo tenemos que usar los cables anteriormente mencionados, no hace falta ninguna resistencia ni electrónica auxiliar.

Conexión del sensor IR en los puertos GPIO de la Raspberry PI
Conexión del sensor IR en los puertos GPIO de la Raspberry PI

Configurando el sensor

Lo mejor para esta parte es utilizar un ordenador portátil o tableta y conectarnos vía ssh a nuestra Raspberry Pi en el mismo lugar donde tengamos el dispositivo y el mando.

Lo primero de todo es instalar LIRC que es el software que vamos a utilizar, para ello si no lo tienen instalado deberán poner:

 

$ sudo apt-get install lirc

Una vez que ya está instalado, usaremos los siguientes comandos en este orden:

$ sudo modprobe lirc_rpi

Esto lo que hace es cargar el driver

$ sudo kill $(pidof lircd)

Que lo que hace es matar el proceso lircd por si está funcionando.

mode2 -d /dev/lirc0

Ahora es cuando debemos pulsar botones de nuestro mando, se tendría que recibir algo similar a esto:

LIRC

Esto significa que el sensor recibe datos de nuestro mando.

Asignando cada tecla a nuestro mando

Aquí hay dos maneras de seguir el manual:

  1. La manera más sencilla, entrar aquí y descargar el archivo lirc.conf de vuestro mando.
  2. Generar el lirc.conf a mano, solo se debería de hacer si no encontramos el archivo, ya que es muy tedioso, consiste en ejecutar $ irrecord –list-namespace para ver los “botones” que tiene XBMC y apuntar esto en un papel y luego ejecutar $ irrecord -d /dev/lirc0 ~/lircd.conf con esto nos saldrá un asistente que nos pedirá el nombre de un botón y que luego pulsemos la tecla del mando que queramos asignar a ese botón. Esto proceso se repetirá con todos los botones que queramos configurar.

Una vez que tenemos el archivo lirc.conf descargado o creado “a mano”, debemos moverlo a la carpeta de lirc, para ello:

LIRC1

luego ejecutamos $ mv ruta-a-lirc.conf/lirc.conf /etc/lirc/lirc.conf

Luego de reiniciar, ejecutamos $ irw y deberíamos ver como ya nos reconoce las teclas:

irw

Asignación de teclas a XBMC

Este paso puede ser innecesario para los usuarios que en irw en lugar de salirle los mensajes que me salen a mi de Up, Down le salgan mensajes del tipo KEY_PLAYPAUSE, como en mi caso no era, os enseño como arreglarlo. Se basa en decirle a XBMC que las teclas se van a llamar de forma distinta para ello:

$ cd

$ cd .xbmc/userdata

$ nano Lircmap.xml

Tendréis que ver algo así:

KeyMap

Seguramente os salgan menos líneas, la manera de editar el fichero es:

  • Los tags <title> <down> etc se pueden ver aquí y son los botones que tiene oficialmente XBMC.
  • Entre esos tags lo que debemos colocar es el texto tal cual, sale cuando ejecutamos irw y pulsamos el botón del mando que queremos asociar a ese botón.

De esta manera le estamos diciendo, cuando LIRC reconozca el botón X asociado al Play, te dará el mensaje por ejemplo Play/Pause, pues cuando XBMC reciba el mensaje Play/Pause debe accionar el botón play. Todo esto se hace poniendo:

<play>Play/Pause</play>

Así uno a uno vamos ajustado los botones según queramos personalizar nuestra configuración y de esta manera se adapta a nuestro mando.

Esperamos que este tutorial os sea útil y para cualquier duda o sugerencia, os contestaremos a vuestros comentarios lo más rápido que podamos.

 

 

50 comentarios en “Raspberry Pi sensor IR y mando a distancia”

  1. Agostina Alcaraz

    Buenas! al introducir “irw” en la consola de mi Raspberry pi 3, me responde “Segmentation fault”, los pasos anteriores funcionaron correctamente.

    Responder
  2. Juan

    Hola, estoy intentando instalar el lirc y me sale esto:
    sudo apt-get install lirc
    Leyendo lista de paquetes… Hecho
    Creando árbol de dependencias
    Leyendo la información de estado… Hecho
    Tal vez quiera ejecutar «apt-get -f install» para corregirlo:
    Los siguientes paquetes tienen dependencias incumplidas:
    expect : Depende: tcl8.5 (>= 8.5.0) pero no va a instalarse
    lirc : Depende: libftdi1 (>= 0.20) pero no va a instalarse
    Depende: liblircclient0 (>= 0.6.4) pero no va a instalarse
    E: Dependencias incumplidas. Intente «apt-get -f install» sin paquetes (o especifique una solución).
    y no se instala, alguien sabe la solución?

    Muchas gracias

    Responder
    • SomosBinarios

      Ejecutando sudo apt-get -f install no se te arregla?

      Responder
      • Juan

        Gracias por la respuesta, he conseguido instalarlo gracias a ese comando, pero ahora, al insertar el siguiente me da el siguiente error:
        $ sudo modprobe lirc_rpi
        modprobe: ERROR: could not insert ‘lirc_rpi’: No such device

        puede ser que no reconozca el receptor ir?

        GRacoas de nuevo.

        Responder
        • Juan

          Ya está solucionado, no me había fijado que anteriormente otro usuario había tenido el mismo problema, ya lo he solucionado, sigo con el manual, gracias 😉

          Responder
          • Juan

            Hola de nuevo, continuando con el tema, ahora me lanza otro error cuando ejecuto “irw”:
            Irw connect: no such file or directory
            Y ahí estoy atascado ahora , alguna idea?

            Mil gracias

          • SomosBinarios

            Prueba a reiniciar a ver si te lo reconoce

          • Juan

            Que ejecuto justo después de reiniciar?
            Perdona si pregunto mucho pero soy novato con eso de Linux.

            Gracias.

          • SomosBinarios

            Ha conseguido obtener este resultado anteriormente?
            Me extraña que irw no le reconozca el mando.

          • Juan

            Después de ejecutar
            “mode2 -d /dev/lirc0” lee las pulsaciones del mando, pero después de hacer lo demás, cuando tengo que ejecutar “irw” me sale esto:
            “irw connect: no such file or directory”

          • SomosBinarios

            ejecute ps -e | grep lir a ver si está ejecutándose el programa

          • Juan

            Ok gracias, cuando llegue esta noche a casa lo pruebo, un apunte, no se si influirá, pero solo tengo conectado a la rpi el receptor ir.

          • Juan

            No sale nada, en blanco.

          • SomosBinarios

            Pruebe a ejecutar sudo service lircd start

          • Juan

            :~ $ sudo service lircd start
            Failed to start lircd.service: Unit lircd.service failed to load: No such file or directory.

          • SomosBinarios

            El problema es que el servicio de lirc no se ha iniciado, creo que ejecutando:
            /etc/init.d/lircd start
            se puede iniciar.

          • Juan

            Ok muchas gracias, ya parece que funciona, digo parece porque no da error, pero cuando pulso los botones del mando no hace nada, y parece ser que es porque no graba nada en el archivo lircd.conf:

            “pi@Djuan:~ $ sudo nano lircd.conf
            GNU nano 2.2.6 Fichero: lircd.conf

            aeps 100

            header 4441 4531
            one 506 1723
            zero 506 609
            ptrail 508
            gap 107652
            min_repeat 8
            # suppress_repeat 8
            # uncomment to suppress unwanted repeats
            toggle_bit_mask 0x505

            begin codes
            end codes

            end remote

          • Juan

            Ya lo he conseguido, era un problema a la hora de grabar los códigos, otra pregunta, se pueden guardar códigos de diferentes mandos en un solo archivo?

            Mil gracias.

          • SomosBinarios

            En un mismo archivo no, pero se pueden poner en archivos diferentes y luego indicarle en el fichero hardware.conf (si mal no recuerdo) las rutas a los distintos ficheros, de tal manera que debería funcionar con, por ejemplo, 2 mandos distintos.

          • Juan

            Ok, gracias.

  3. David

    Muy buenas chic@s,

    Llevo semanas intentando enviar comandos a un script bash en ejecución pero parece tarea imposible. Ejecuto un script /etc/init.d/data/omxplayer.sh que tiene una lista de reproducción pero si quiero bajar el volumen o darle a pause/stop con el teclado si le doy a menos o más si me sube y baja el volumen, pero con el mando de lirc he probado mil formas y no las hay.

    He puesto echo “-” como config por si colaba o “sudo bash /etc/init.d/data/omxplayer.sh -” y tampoco. También en prog he puesto bash y nada. ¿Se os ocurre de que forma puedo atribuir al mando la misma función que una tecla del teclado?

    Muchas gracias de antemano y un saludo.

    Responder
  4. SomosBinarios

    Creo que tu mando y sistema es de este tipo http://pmitev.blogspot.com.es/2014/01/raspberry-pi-and-ir-remote-control-with.html por lo que ese manual te debería funcionar.

    Responder
  5. David

    Buenas,
    Sigo atascado intentandolo solucionar dando vueltas sin entender el problema, no se si podéis ayudarme. Lo he configurado tal y como me dicen ustedes, y al salir: “ERROR: could not insert ‘lirc_rpi’: No such device” he probado el tutorial http://alexba.in/blog/2013/01/… pero tampoco, cambién 23 y 22 por 18 como dice J. Luis, en Boot que es lo que él dice, también en Boot y modules, he probado con 23 y 18, 23 y 5, 6 y 8, 18 y 1, 18 y 5, 23 y 22 y 23… Y así hasta todas las opciones que se os ocurran reiniciando siempre y escribiendo: $ sudo modprobe lirc_rpi para que me vuelva a decir ERROR: could not insert ‘lirc_rpi’: No such device. Como el que yo tenía era este: http://www.ebay.es/itm/3313085… y vosotros en el tutorial otro, he comprado el mismo que tienen en el tutorial por si ese era el problema y sigue saliendo lo mismo, he probado cambiando los cables por si el problema era el cable y con 3 raspberrys por si el problema era el raspberry. Entonces empiezo a pensar que el problema soy yo. ¿Me sabríais decir que hago mal por favor? Porque en el tutorial me pareció todo muy fácil pero no se si es que yo solo me estoy complicando. He probado con: http://dukkon.blogspot.com.es/2009/06/moovida-lirc-ubuntu-media-center.html
    http://tonyjevi.blogspot.com.es/2014/02/configuracion-mando-distancia-en-debian.html
    http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/

    Y varios más, no se si conocéis algún tutorial para rubios… Muchas gracias de antemano y un saludo.

    Responder
    • SomosBinarios

      Hola David que sistema estas usando en la Raspberry Pi? Nos podrías mandar una foto (o un par de ellas) donde se vea como lo has conectado a la Raspberry Pi.

      Un saludo

      Responder
      • David

        Muy buenas,

        Os paso una foto del receptor que compré en ebay http://www.ebay.es/itm/331308548921?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT que tiene el cable amarillo en señal (Pin 18 – El sexto empezando por arriba de la parte exterior de la Raspberry), rojo en tierra (el tercero por arriba del exterior) y naranja en 5V (el primero del interior) con las conexiones a la Raspberry igual que en vuestro gráfico lo que en 5V en lugar de 3V.

        Según todo eso debería ir, pero no, así que también con el que vosotros proponen en el gráfico lo compré y lo pruebo también pero cambio el naranja y el rojo porque el de tierra es el central y lo conecto a 3V.

        En ambos casos he hecho sudo apt-get instalo lidc le he dicho yes, lo he instalado me ha salido lo que hay en pantalla y escribo sudo modprobe lirc_rpi y me dice lo mismo. He escrito en sudo nano /etc/modules que pin in es 23 y out 22 e igual en /boot/config.txt y tampoco. He probado con pin in 18 como dice J. Luis y tampoco. Y con mil maneras diferentes. No se cual es el error o que hago mal.

        ¿Se os ocurre? Si que veo que en vuestro tutorial dice: xbian en mi caso estoy con usuario pi y el hostname lo cambié pero eso no debería afectar a nada. También he probado todo con root pero estamos en las mismas.
        Muchísimas gracias de antemano y un saludo.

        Responder
        • SomosBinarios

          Como bien dices para este http://a.disquscdn.com/uploads/mediaembed/images/2297/7315/original.jpg es amarillo al pin 18 (sexto de fuera), naranja a 5v (el 1º de fuera) y rojo a masa (tercero de fuera).

          Luego eso es correcto http://a.disquscdn.com/uploads/mediaembed/images/2297/7318/original.jpg

          Después aquí http://a.disquscdn.com/uploads/mediaembed/images/2297/7319/original.jpg deberías quitar la # de delante de dtoverlay…

          Reiniciar y probar con

          $ sudo modprobe lirc_rpi

          PD: a mi me sale xbian porque yo uso Xbian en lugar de Raspbian pero eso no tendría que tener nada que ver.

          Un saludo

          Responder
          • David

            No me lo puedo creer, siento entre frustración y alegría porque llevo semanas dedicando tiempo a descubrir el problema para que al final fuese algo tan simple… ¡Muchísimas gracias! Funciona genial. Ayer además me descargué el xbian y lo puse y me funcionó a la primera pero lo necesito para Raspberry y ciertamente funciona genial solamente tuve que quitar la almohadilla. Muchas gracias de nuevo, un saludo.

          • SomosBinarios

            Siento no darme cuenta antes pero muchas veces pido las fotos del montaje y la configuración porque se suelen cometer errores minúsculos como la ausencia de un carácter que hace que nada funcione.

            Usar Xbian o Raspbian no debería ser un problema.

            Acabo de ver y parece que en Source Force han tenido problemas técnicos https://twitter.com/sfnet_ops y están restaurando la copia de seguridad. Lamentablemente el proyecto lirc está allí así que tocará esperar a que acaben de recuperar y subir todos los datos (no creo que tarden mucho).

            Un saludo

  6. SomosBinarios

    Vamos por partes, creo que el kit consiste en:
    Receptor IR
    Emisor IR (el led blanco que tu dices)
    Mando con emisor IR incorporado.

    El led desde mi punto de vista no habría que configurarlo.
    Según veo el circuito que te pone de muestra tiene 3 patas, señal, masa y 5v. En la imagen superior de este artículo se ve donde tiene la Raspberry Pi estas salidas. En nuestro caso lo conectamos a 3.3V pero en el tuyo habría que conectarlo al de 5V.

    Pero necesito más datos, que Sistema usas en tu Raspberry Pi, cual es el número de serie de ese Led IR (lo pondrá debajo o en un lateral normalmente) que datos te venían en el paquete etc.

    un saludo

    PD: mejor mover no responder dentro de las preguntas de otro usuario 😉

    Responder
  7. Luis Llorent

    Hola.Tengo el sensor conectado pero me indica “ERROR: could not insert ‘lirc_rpi’: No such device”.

    Responder
    • Luis Llorent

      Solucionado el problema.He instalado openelec y ya funciona.Saludos.

      Responder
      • SomosBinarios

        Ok, si tienes alguna duda intentaremos ayudarte por aquí.

        Un saludo

        Responder
        • Luis Llorent

          Perdón por molestar otra vez, no encuentro la forma de hacerla funcionar en raspbian.Me sigue saliendo ese mismo error.

          Responder
          • SomosBinarios

            Creo que es porque está fallando el driver con modprobe lirc_rpi se supone que añades ese módulo al núcleo de Linux para que te lo reconozca.
            aqui hay una guia para Raspbian http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/
            quizás esta parte sea lo que necesites:

            Add this to your /etc/modules file:

            lirc_dev
            lirc_rpi gpio_in_pin=23 gpio_out_pin=22

            January 25th 2015: Marc W. in the comments pointed out that in the 3.18.x RaspberryPi firmware you must modify one additional file for the lirc-rpi kernel extension to be loaded:

            Edit your /boot/config.txt file and add:

            dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22

            Reboot your RaspberryPi after making this change.

            Un saludo

          • Luis Llorent

            Muchísimas gracias por la ayuda.Cuando llegue a casa lo pruebo y te comento. 😀

          • Luis Llorent

            Problema solucionado.Me faltaba añadir “dtoverlay=lirc-rpi,gpio_in_pin=18” en “/boot/config.txt” .Gracias.

  8. David

    Hola! Finalmente he podido configurar todo tal y como lo has descrito, y funciona. Lo único que de vez en cuando el sensor parece no recibir ninguna señal, durante algunos segundos (incluso algún minuto), y sin hacer nada vuelve a dar señal. Lo atribuyo a que no tengo los cables soldados (sólo los enrollé en las patillas del sensor), y debe haber alguna mala conexión. Pero cuando funciona, (que es el 98% del tiempo), va de fábula!
    Gracias por todo!

    Responder
  9. David

    Hola Jorge, voy a intentar hacer lo que dices, pero tengo una duda.
    Estos cables con conectores, son los adecuados? :

    20 CM Male to Male Dupont Wire Color Jumper Cable, 2.54mm 1P-1P For Arduino

    Gracias!

    Responder
    • SomosBinarios

      Si son de ese tipo, el problema es que la raspberry pi tienes pines (macho) deberías comprar unos que fueran hembra por un lado para meterlos en los pines de la Raspberry Pi algo como esto http://www.amazon.com/gp/product/B00A6SOGC4/ref=pd_lpo_sbs_dp_ss_1/179-4350012-3262033?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=lpo-top-stripe-1&pf_rd_r=0QFSHJP1992AWTP5DWR7&pf_rd_t=201&pf_rd_p=1944687702&pf_rd_i=B00AX3PHV6

      Responder
      • David

        Gracias Javier!
        Otra cosa, el sensor infrarojos, entiendo que debe ajustarse a la frecuencia que use el mando del salón, no?
        Es decir, debería comprar un sensor que reciba en la misma frecuencia que emita la portadora del mando. Es así?
        En mi caso tengo un mando BEKO C4A187F. En google no he sido capaz de averiguar la frecuencia de ese mando … investigaré más.
        Gracias!

        Responder
        • SomosBinarios

          La verdad es que me imagino que debería funcionar con cualquier mando ya que todos deberían emitir en esa frecuencia o muy cercana a ella. Porque el receptor (el sensor) medirá en un rango de frecuencias. Pero si es verdad que dice en el artículo original que hay que mirar el rango de frecuencias o elegir otro TSOP
          https://learn.adafruit.com/ir-sensor
          Este es el articulo original e indica en qué rango de frecuencias puede usarse. De todas maneras hay varios integrados que permiten hacerlo, así que la cosa debería ser mirar uno que sea compatible con el tuyo. Pero de todas maneras no cuesta mucho el chip 1€ si mal no recuerdo. Así que tampoco es mucha pérdida el intentarlo con el

          Responder
      • David

        Hola, creo que el conector Dupont tiene que ser hembra a hembra, no?
        Tanto la Rasp como el sensor son machos.
        Por tanto, el link anterior es incorrecto. Es así?
        (es que lo he comprado pero ya he visto que el conector macho no conecta ni por asomo con el sensor 😀 )

        Responder
        • SomosBinarios

          Para unirlo con el sensor tienes que cortar el extremo y soldarlo o empalmarlo así que te da igual el conector que lleve al final

          Responder
          • David

            La verdad es que no tengo material para soldar.
            Si compro hembra-hembra, funcionará, no?
            Gracias!

          • SomosBinarios

            Yo creo que sí, pero las patas del transistor creo que son algo más finas que las patas del conector hembra.

            Siempre puedes pelar los extremos y enrollarlos a cada una de las patas.

          • David

            si, haré eso 😀 Gracias por contestarme. Te cuento qué tal me ha ido.

Deja una Respuesta