Arduino - Control remoto por infrarrojos

Probablemente te hayas topado con el control remoto infrarrojo, también conocido como el control remoto IR, mientras usabas dispositivos electrónicos del hogar como televisores y aires acondicionados... En este tutorial, vamos a aprender a usar el control remoto infrarrojo (IR) y el receptor infrarrojo para controlar Arduino. En detalle, aprenderemos:

Luego puedes modificar el código para controlar LED, ventilador, bomba, actuador... a través del control remoto por infrarrojos.

Controlador IR - Receptor IR - Arduino

Acerca del control remoto infrarrojo

Un sistema de control por infrarrojos incluye dos componentes:

  • Control remoto IR
  • Receptor IR

Un kit de infrarrojos suele incluir dos de los componentes mencionados anteriormente.

Control remoto infrarrojo

El control remoto IR es un dispositivo portátil que emite señales infrarrojas. El control remoto IR está compuesto por un teclado con varios botones:

  • Cada botón del control remoto corresponde a una función o comando específico.
  • Cuando se presiona un botón, el control remoto emite una señal infrarroja que transporta un código o patrón único asociado al botón pulsado.
  • Estas señales infrarrojas no son visibles para el ojo humano, ya que se encuentran en el espectro infrarrojo.
Controlador infrarrojo
image source: diyables.io

Receptor de infrarrojos

El módulo receptor de infrarrojos es un sensor que detecta y recibe las señales infrarrojas emitidas por el control remoto.

El receptor infrarrojo detecta las señales infrarrojas entrantes y las convierte en el código (comando) que representa el botón presionado en el control remoto.

El receptor IR puede ser un sensor o un módulo. Puede utilizar las siguientes opciones:

  • Solo módulo receptor IR
  • Solo sensor del receptor IR
  • Sensor del receptor IR + adaptador
Módulo de sensor receptor IR
image source: diyables.io
Adaptador de sensor para receptor IR
image source: diyables.io

Disposición de pines del receptor IR

El módulo receptor IR o sensor tiene tres pines:

  • Pin VCC: Conecte este pin al pin de 3.3V o 5V del Arduino o a una fuente de alimentación externa.
  • Pin GND: Conecte este pin al pin GND del Arduino o a una fuente de alimentación externa.
  • Pin OUT (Salida): Este pin es el pin de salida del módulo receptor IR. Conecte este pin a un pin de entrada digital en el Arduino.

Cómo funciona

Cuando el usuario pulsa un botón en el control remoto IR.

  • El control remoto IR codifica el comando correspondiente al botón en la señal infrarroja mediante un protocolo específico.
  • El control remoto IR emite la señal infrarroja codificada.
  • El receptor IR recibe la señal infrarroja codificada.
  • El receptor IR decodificó la señal infrarroja codificada en el comando.
  • El Arduino lee el comando desde el receptor IR.
  • El Arduino mapea el comando a la tecla pulsada.

Parece complicado, pero no te preocupes. Con la ayuda de la DIYables_IRcontroller library, es pan comido.

Diagrama de Cableado

Diagrama de cableado entre Arduino y el módulo receptor IR

Diagrama de cableado del control remoto IR de Arduino

This image is created using Fritzing. Click to enlarge image

El diagrama de cableado real

Módulo receptor de control remoto IR para Arduino
image source: diyables.io

Diagrama de cableado entre Arduino y el receptor de infrarrojos

Diagrama de cableado del control remoto IR de Arduino

This image is created using Fritzing. Click to enlarge image

El diagrama de cableado real

Sensor receptor IR para Arduino
image source: diyables.io

Diagrama de cableado entre Arduino y el sensor receptor IR y el adaptador

También puedes conectar el sensor receptor IR al adaptador antes de conectarlo al Arduino.

Adaptador receptor de infrarrojos para Arduino
image source: diyables.io

Cómo programar para el control remoto IR

  • Incluir la biblioteca:
#include <DIYables_IRcontroller.h> // Library for IR Receiver
  • Declarar un objeto DIYables_IRcontroller_17 o DIYables_IRcontroller_21 que corresponda a mandos a distancia IR de 17 teclas o 21 teclas:
DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms // OR DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms
  • Inicializar el controlador IR.
irController.begin();
  • En el bucle, verifica si se pulsa una tecla o no. Si es así, captura la tecla.
Key17 key = irController.getKey(); // if using 17-key IR controller // OR Key21 key = irController.getKey(); // if using 21-key IR controller
  • Una vez que hayas detectado una pulsación de tecla, puedes realizar acciones específicas según cada tecla.

Código de Arduino

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 7 // The Arduino pin connected to IR controller DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key17 key = irController.getKey(); if (key != Key17::NONE) { switch (key) { case Key17::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key17::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key17::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key17::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key17::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key17::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key17::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key17::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key17::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; case Key17::KEY_STAR: Serial.println("*"); // TODO: YOUR CONTROL break; case Key17::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key17::KEY_SHARP: Serial.println("#"); // TODO: YOUR CONTROL break; case Key17::KEY_UP: Serial.println("UP"); // TODO: YOUR CONTROL break; case Key17::KEY_DOWN: Serial.println("DOWN"); // TODO: YOUR CONTROL break; case Key17::KEY_LEFT: Serial.println("LEFT"); // TODO: YOUR CONTROL break; case Key17::KEY_RIGHT: Serial.println("RIGHT"); // TODO: YOUR CONTROL break; case Key17::KEY_OK : Serial.println("OK"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 7 // The Arduino pin connected to IR controller DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key21 key = irController.getKey(); if (key != Key21::NONE) { switch (key) { case Key21::KEY_CH_MINUS: Serial.println("CH-"); // TODO: YOUR CONTROL break; case Key21::KEY_CH: Serial.println("CH"); // TODO: YOUR CONTROL break; case Key21::KEY_CH_PLUS: Serial.println("CH+"); // TODO: YOUR CONTROL break; case Key21::KEY_PREV: Serial.println("<<"); // TODO: YOUR CONTROL break; case Key21::KEY_NEXT: Serial.println(">>"); // TODO: YOUR CONTROL break; case Key21::KEY_PLAY_PAUSE: Serial.println(">||"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_MINUS: Serial.println("–"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_PLUS: Serial.println("+"); // TODO: YOUR CONTROL break; case Key21::KEY_EQ: Serial.println("EQ"); // TODO: YOUR CONTROL break; case Key21::KEY_100_PLUS: Serial.println("100+"); // TODO: YOUR CONTROL break; case Key21::KEY_200_PLUS: Serial.println("200+"); // TODO: YOUR CONTROL break; case Key21::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key21::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key21::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key21::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key21::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key21::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key21::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key21::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key21::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key21::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }

Pasos R\u00e1pidos

  • Navega hasta el ícono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca "DIYables_IRcontroller", luego encuentra la biblioteca DIYables_IRcontroller de DIYables
  • Haz clic en el botón Instalar para instalar la biblioteca DIYables_IRcontroller.
Librería Arduino DIYables_IRcontroller
  • Se le pedirá instalar la dependencia de la biblioteca, como se muestra en la imagen a continuación:
librería IRremote de Arduino
  • Haz clic en el botón Instalar todo para instalar la dependencia
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
  • Presiona las teclas del control remoto una por una
  • Consulta el resultado en el Monitor serie.
  • A continuación se muestra el resultado cuando presionas las teclas de un control remoto IR de 21 teclas, una por una:
COM6
Send
CH- CH CH+ << >> >|| – + EQ 100+ 200+ 0 1 2 3 4 5 6 7 8 9
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Ahora puedes modificar el código para controlar LED, ventilador, bomba, actuador... a través de mandos a distancia IR.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!