Control remoto IR con Arduino para control de LEDS

El Control remoto IR con Arduino para control de LEDS. Actualmente la mayoría de nuestros equipos electrónicos se manejan a control remoto por IR. Este funciona gracias a un sistema simple como es la luz infrarroja. Entonces básicamente estos aparatos se activan o realizan alguna función con solo presionar un botón. En este tutorial vamos controlar LEDs con Arduino UNO a través de este dispositivo. También  se puede usar cualquiera control de TV, DVD, estéreo entre otros.

Material utilizado

Control remoto IR con Arduino para control de LEDS
Control remoto IR y modulo IR

En la tienda virtual de HeTPro puedes encontrar todos los manteriales: hetpro-store.com

Los controladores y software Arduino lo puedes encontrar en: www.arduino.cc

Comunicación con protocolo IR

Para este tutorial utilizaremos un control remoto cualquiera y un  módulo AX-1838HS que incluye el receptor IR, resistencias pullup y LED que parpadea cuando un dato IR es recibido por un remoto. El módulos es individual y puede trabajar con controles IR o emisores IR.

Para utilizar el control remoto es necesario saber que para cada botón existe un código por lo tanto al  momento que presionamos un botón este manda una serie de números que será recibida por el sensor IR y este lo utilizaremos para manipular nuestros LEDs.

El modulo receptor solo cuenta con tres pines de conexión, los cuales dos son de alimentación y el otro es el que manda la señal que recibe. Para más información del sensor revisar la hoja de datos.

Control remoto IR Keyes para Arduino
módulo AX-1838HS

 

 

Conexión del Control remoto IR con Arduino

Para el modulo de control IR con Arduino, tomamos la alimentamos de la placa Arduino y la señal la se manda al pin 11. A las salidas 5, 6 y 7 de la placa conectamos una resistencia de 220ohm  en cada una de ellas y enseguida un LED respectivamente.

Diagrama de conexión para el control remoto IR
Diagrama de Conexión de IR con Arduino

 

 

Paso 1 – Programación del Arduino:

Para hacer la programación que nos muestre el código de los botones es necesario agregar una librería al compilador de Arduino  la cual se llama IRremote.h. Después de que agregues la librería ingresa el siguiente código.

Librería (fuente original): Descargar IRremote

Paso 2 – Verificación de los datos enviados al puerto serial:

Ya cargado el código abrimos la ventana del monitor serial que se encuentra en la parte superior derecha de nuestro compilador y empezamos a presionar botones del control remoto

codigo_botones
Monitor serial mostrando los codigos de los botones

 

En el monitor serial se muestran distintos valores al ir presionando cada uno de los botones, estos valores son los que nos interesan para poder controlar los LEDs, así que identifica bien qué valor le corresponde a cada botón.

Paso 3 – editar código:

Vamos a editar el código que teníamos para hacer uso de los valores. Para este  tutorial vamos a tomar tres diferentes botones que corresponderán a cada LED que tenemos montado.

La programación hará que al presionar un botón  encienda un led y se quede así mientras que no se  presione otro botón. Entonces  el sensor IR registrara el valor y lo comparará con algunas condiciones si es verdadero encenderá el LED mientras no cambie su valor.

Funciones de Arduino

 Paso 4 – Control de los leds

Con esto esta listo el programa para controlar LEDs con un control IR solo nos queda compilarlo y cargarlo en nuestra placa Arduino.

control IR
prueba del sensor y Control remoto IR con Arduino

 

???????????????????????????????

38 comentarios en «Control remoto IR con Arduino para control de LEDS»

  1. Muy bueno este tutorial así como todo el sitio. Una consulta, se puede variar para que el angulo de emisión sea menor, a 45º o hay receptores cuyo angulo de captación sea menor a 30º. Gracias. Saludos

  2. Hola amigo tengo una duda por que me sale u error al momento de compilar, ya lo cambie todo ya mi librería, arduino de diferentes versiones espero que me ayude con eso.

  3. me da problemas para la función decode.irrecv(&results) me pone que no declaro &amp anteriormente. Muchas gracias por la infromación y espero su respuesta 🙂

    1. Fede, revisa cuando copies el código, aveces se cambian los símbolos «>,<,=,etc" por la leyenda "&amp" revísalo y modifica lo que se cambio, esto es común cuando se copia y pega el código. Saludos.

      1. Hola Hector, antes que nada gracias por el post.
        Tengo el mismo problema que Fede, ya revisado el código, es el código como está en la página, puedes ayudarnos con el entendimiento?
        en esta parte if (irrecv.decode(&results)) con qué se debe comparar results?
        De esta manera podemos ver más allá de que solo nos des la corrección del código.
        Saludos.

    2. Hola Fede, yo tenía el mismo problema que tú, y después de buscar ejemplos en youtube dí con el asunto:

      Deja el codigo hasta decode.irrecv(&results) no compares con &amp, ya que no sé de donde salió pero solo me obstaculiza la compilación,

      Al quitarlo puedes ver que el código no tiene error y al correrlo puedes verificar los valores de cada botón al oprimirlos,

      Así el código corre sin problemas,

      Saludos!

  4. Al momento de compilar me sale el siguiente error:
    Aplicaci_n_sensor:1: error: #include expects «FILENAME» or

    #include <IRremote.h>

    ^

    exit status 1
    #include expects «FILENAME» or

    ¿Qué puedo hacer para salucionarlo? 🙁

  5. Muy buen post! Me ha resultado muy útil! Podrías hacerlo también para que el led parpadee hasta que le vuelves a dar al botón? No se como hacerlo, llevo tiempo probando pero solo consigo que entre en bucle!

    Muchas gracias

  6. hola a todos ..
    estoy haciendo un proyecto relacionado… enviar dato desde el celular por medio de bluetooth a la placa arduino, el cual lo recibe y lo reenvia por el modulo emisor. el requisito de arduino es recibir datos y reenviarla por el emisor sin importar la marca de tv que se desea enviar.. si tengo que hacer cambio de dato lo tengo que hacer desde la app movil.. no de la placa arduino..
    ya logre capturar la cadena que me envia la app movil. ej. (FF9867).. lo tengo en una variable String. hay alguna forma de convertir de String a hexadecimal.
    a) lo tipico para enviar un comando por irremote
    if(readString == «5»){ // Si mando 5 manda el comando
    irsend.sendRC5(0xFF9867,12);
    Serial.println(«vol -«);
    delay(40);
    }

    lo que se pretende hacer enviar lo que recibe del movil mediante bluetooth
    if(readString >0){ // readString tiene FF9867, pero esta como string
    irsend.sendRC5(readString);
    Serial.println(«vol -«);
    delay(40);
    }
    .. habra alguna forma de reenviar el dato en su formato correcto de tipo de dato.

  7. Estoy elaborando algo similar quisiera saber como especificar que con el mismo botón que se aya presionado para encender apague el mismo foco… este es el código que estoy usando..

    #include
    #include

    int RECV_PIN = 11; //pin que recibe la señal

    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
    Serial.begin(9600); //inicializamos el puerto serial a 9600
    pinMode(4, OUTPUT); //declaramos pines de salida para los relevador
    pinMode(5, OUTPUT); //declaramos pines de salida para los relavador
    pinMode(6, OUTPUT); //declaramos pines de salida para los relevador
    pinMode(7, OUTPUT); //declaramos pines de salida para los relecador

    irrecv.enableIRIn(); // Comienza a recibir los datos
    }

    void loop()
    {
    results.value=0;
    if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // imprime el valor en codigo hexadecimal
    irrecv.resume(); // Se preparar para recibir el siguiente valor

    }
    while(results.value ==0xE0E06897) //comparamos el valor recibido con un valor seleccionado
    {
    digitalWrite(4, HIGH); //si es verdadero pondra en estado alto el pin 4 (azul)

    if (irrecv.decode(&results))
    {
    Serial.println(results.value, HEX);
    irrecv.resume();

    }
    }

    while(results.value == 0xE0E0A857) //condicion para encender el segundo foco (amarillo)
    {
    digitalWrite(5, HIGH);

    if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();

    }
    }

    while(results.value == 0xE0E028D7) //condicion para encender el tercer foco (Verde)
    {
    digitalWrite(6, HIGH);

    if(irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();

    }
    }

    while(results.value == 0xE0E036C9) //condicion para encender el cuarto foco (Rojo)
    {
    digitalWrite(7, HIGH);

    if(irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();

    }
    }

    while(results.value == 0xF4BA2988) //condicion para encender todos los focos
    {
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);

    if(irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();

    }
    }

    while(results.value == 0x42B17343) //condicion para apagar todos los focos
    {
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);

    if(irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
    }
    }
    }

  8. Una duda, cargue el codigo y en el monitor serial me salen codigos cuando no estoy usando un control (Ej:FDAC0152; 4AB0F7B5), y al apuntar con un control me salen los codigos correspondientes (Ej;D; 10; 5C; 10038). Los que salen en la consola cuando no estoy usando un control pueden ser ruido del ambiente que lo interpreta como comandos?. Por si sirve de algo, el sensor no es nuevo, lo saque de un reproductor de VHS (El la parte trasera del sensor dice 3B y 631) y el control que estoy usando es de philips.

  9. Hola, tengo un problema en el paso 2. Cada vez que presiono el mismo boton me da un valor diferente. Aqui esta el analisis de los valores. El valor que se repite mas se ha repetido 6 veces en 114 intentos.

    Word list (114 unique words):
    =============================
    Number of occurrences
    ————————————–
    Beginning of End of
    Word Total Sentence Sentence
    ————————————————————
    1052d9fa 1 0 0
    11ecf212 1 0 0
    1210d00d 1 0 0
    13d3ee3d 1 0 0
    1904babc 1 0 0
    1f7e007d 1 0 0
    202f1328 1 0 0
    21e854b3 1 0 0
    22ae7a28 1 0 0
    22ae7a2a 2 0 1
    24ae7d4c 1 0 0
    25cc91d5 1 0 0
    277c11ce 1 0 0
    2804976d 1 0 0
    2bbe08ab 1 0 0
    2c2b5c5f 1 0 0
    2d3b0cea 1 0 0
    2d5e8b63 1 0 0
    2ed9c203 1 0 0
    2f85fbba 1 0 0
    2ff45dc8 1 0 0
    34cf3f65 1 0 0
    3afc99ea 1 0 0
    3e390397 1 0 0
    41aa177e 1 0 0
    45a1f686 1 0 0
    49b0f626 4 0 0
    4ab0f7b5 1 0 0
    4ab0f7b7 1 0 0
    4cb0fadf 6 0 0
    5007e273 1 0 0
    512b80da 1 0 0
    5148ba88 1 0 0
    5459fb2 1 0 0
    55c9d562 1 0 0
    5c03e7d6 1 0 0
    6457ce5b 1 0 0
    64d4f308 1 0 0
    6902b8e6 1 0 0
    69dbbc3e 1 0 0
    6a11d780 1 0 0
    6a19a4d3 1 0 0
    6e1340c0 1 0 0
    7103bf33 1 0 0
    71b851ef 1 0 0
    73d189cd 1 0 0
    76df9dbd 1 0 0
    77df9f50 1 0 0
    791330fe 1 0 0
    7de56a17 1 1 0
    8086e7e4 1 0 0
    80e9e531 1 0 0
    80efcb54 1 0 0
    86d1521e 1 0 0
    8e02e633 1 0 0
    8e6ee0dc 1 0 0
    901c1f3b 1 0 0
    9175658e 1 0 0
    91ab24a 1 0 0
    95c7a078 1 0 0
    95d1faab 1 0 0
    9826af6f 1 0 0
    998e8523 1 0 0
    9b83842f 1 0 0
    a1222e21 2 0 0
    a4db0705 1 0 0
    a6a0a7d4 1 0 0
    ab5d4783 1 0 0
    ae0c56b0 1 0 0
    aeea70eb 1 0 0
    b1bee635 1 0 0
    bcbd452e 1 0 0
    be014f38 1 0 0
    bf2ffb1e 1 0 0
    bf7f2d3e 1 0 0
    bfe48dda 1 0 0
    c1e490fc 1 0 0
    c392e5a9 1 0 0
    c40bd815 1 0 0
    c40bd817 3 0 0
    c60bdb3f 1 0 0
    c8c4204f 1 0 0
    cac6e0b9 1 0 0
    d1b128c7 1 0 0
    d21f15de 1 0 0
    d4d0ea1b 1 0 0
    d5a737a1 1 0 0
    dae329e5 1 0 0
    dae329e6 1 0 0
    dbe32b75 1 0 0
    dde32e9c 1 0 0
    dde32e9f 1 0 0
    de373717 1 0 0
    e529b6ad 1 0 0
    e97d8e8 1 0 0
    efd70d7f 1 0 0
    f04d6234 1 0 0
    f21a62c2 1 0 0
    f2bec374 1 0 0
    f380f7ba 1 0 0
    f5eaee7d 1 0 0
    f7999755 1 0 0
    fadf2560 1 0 0
    fb1ef03a 1 0 0
    fbd9bdfb 1 0 0
    fcabffbd 1 0 0
    fcabffbf 2 0 0
    fcc77b86 1 0 0
    fdac0150 1 0 0
    fdac0153 1 0 0
    feac02e7 2 0 0
    feb27c7d 1 0 0
    ff0f019 1 0 0
    ffffffff 1 0 0

    1. Hola, a mí también me sucedía lo mismo, lo intenté con el control remoto que viene con el kit y también me daba diferentes valores para la misma tecla, así que probé con el control del proyector y funcionó.

  10. Saludos, tengo una duda, espero que me puedan ayudar.
    ¿Cómo le hago para recibir dos dígitos presionados del control remoto? , por ejemplo «23»,»45″,»15″, etc.

  11. Saludos este programa funciona correctamente tengo u arduino uno y estoy reparando un control remoto pero no tengo el televisor para probarlo estube investigando y me encontrare con su pagina descargue el código y la librería ir de arduino pude probar y corregir errores al repararlo gracias hoy en dia es muy fácil aprender cosa gracias a personas como ustedes hace 30 años tenias que tenias que ir alas bibliotecas si tenias dinero sacabas copis tan fácil que es buscar información en interne y aprender baje su código por que no se programar en prosecin estoy aprendiendo gracias y saludos.

  12. Hola, seria posible que un led fuese tipo intermitente?
    un led normal pero atraves de IR que parpadee a (500) o poder variar la velocidad
    boton1 encender led intermitente
    boton1 apagar led intermitente (encender y apagar con el mismo boton)

Deja una respuesta

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