Componentes · 5 min de lectura

Receptor IR y mando a distancia: proyectos con control remoto en Arduino

¿Cómo funciona un receptor de infrarrojos (IR)? Conexión del VS1838B, leer los códigos de las teclas con IRremote, protocolo NEC, controlar LED y relés con el mando, enviar IR con un LED infrarrojo y uso con ESP32 y Pico.

Los mandos de la tele, el aire acondicionado y el equipo de música funcionan con luz infrarroja (IR). Si añades a Arduino un receptor IR que cuesta muy poco, podrás leer las teclas de casi cualquier mando de casa y usarlas para controlar lámparas, LED, motores o música. No hace falta emparejar nada, ni app, ni internet: basta con apuntar el mando a la placa y pulsar una tecla. Es la forma más fácil y barata de hacer tu primer proyecto con control remoto.

Receptor de infrarrojos IR VS1838B
Receptor de infrarrojos (VS1838B): dentro de la cúpula negra hay un diodo sensible a la luz y un pequeño circuito que decodifica la señal; tiene 3 patas.

¿Cómo funciona un mando de infrarrojos?

El LED IR de la punta del mando emite luz de unos 940 nm, que el ojo no ve. La luz no está siempre encendida: va montada sobre una señal portadora que parpadea 38.000 veces por segundo. El circuito del receptor solo hace caso a la luz que parpadea a esa frecuencia, así que el sol y las lámparas no pueden estropear la señal. El receptor convierte ese parpadeo en pulsos digitales limpios y pone su salida en LOW mientras llega señal.

Qué tecla se ha pulsado se codifica con la duración de los pulsos y de los huecos entre ellos. Para eso existen distintos «idiomas», llamados protocolos: el más común es NEC (un byte de dirección y otro de comando), y también son habituales los de Sony, RC5 (Philips) y Samsung. Por suerte, la librería hace la decodificación y tú solo lees el código de la tecla.

Para saber si un mando funciona, apunta la cámara del móvil a su LED y pulsa una tecla. La luz infrarroja que no ves a simple vista aparece en la pantalla de la cámara como un parpadeo blanco violáceo.

Características técnicas (VS1838B)

CaracterísticaValor
Frecuencia portadora38 kHz
Longitud de ondaUnos 940 nm
Alimentación2,7–5,5 V
Alcance8–10 m (según la pila del mando y el ángulo)
Ángulo de recepciónUnos ±35°
SalidaLOW mientras hay señal (activa en LOW)
PinesOUT, GND, VCC

Conexión del receptor IR

Pin del receptorArduino UnoESP32Raspberry Pi Pico
OUT (S)D2GPIO 15GP16
GND (–)GNDGNDGND
VCC (+)5V3V33V3
En un VS1838B suelto, con la cúpula hacia ti, el orden de los pines de izquierda a derecha es OUT, GND, VCC; en los módulos montados en placa, sigue las etiquetas impresas. Si inviertes VCC y GND, el receptor se calienta y se estropea en segundos.

Leer los códigos de las teclas con la librería IRremote

En el Gestor de librerías busca IRremote e instala la librería de Armin Joachimsmeyer. El código siguiente funciona con la versión 4.x; cada vez que pulsas una tecla, escribe en el Monitor Serie el protocolo, la dirección y el código de comando. Si en ejemplos antiguos de internet ves órdenes como IRrecv y decode(&results), son de una versión vieja.

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4
5void setup() {
6  Serial.begin(9600);
7  IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);   // sinyal gelince dahili LED yanar / onboard LED blinks on signal
8}
9
10void loop() {
11  if (IrReceiver.decode()) {
12    Serial.print("Komut / command: 0x");
13    Serial.println(IrReceiver.decodedIRData.command, HEX);
14    IrReceiver.printIRResultShort(&Serial);        // protokol ve adres / protocol and address
15    IrReceiver.resume();                           // sonraki tuşa hazırlan / ready for the next key
16  }
17}

Pulsa las teclas de tu mando una a una y apunta los códigos. Los mandos pequeños de 21 teclas que vienen en los kits suelen usar el protocolo NEC y sus códigos suelen ser los de la tabla; aun así, compruébalos leyendo tu propio mando:

TeclaComando (NEC)
CH-0x45
CH0x46
CH+0x47
PREV0x44
NEXT0x40
PLAY/PAUSE0x43
VOL-0x07
VOL+0x15
00x16
10x0C
20x18
30x5E

Controlar un LED y un relé con el mando

Cuando conoces los códigos, puedes darle una tarea a cada tecla. En el ejemplo siguiente, la tecla «1» enciende y apaga un relé, y VOL+ y VOL- ajustan el brillo de un LED con PWM. Si mantienes pulsada una tecla, el mando envía señales de repetición; en tareas de encender y apagar hay que ignorarlas, o el relé no parará de cambiar. Para conectar el relé, mira ¿Qué es un módulo relé?

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4const int LED_PIN = 9;       // PWM pini / PWM pin
5const int RELAY_PIN = 7;     // aktif LOW röle / active-LOW relay
6
7bool relayOn = false;
8int brightness = 128;
9
10void setup() {
11  pinMode(LED_PIN, OUTPUT);
12  pinMode(RELAY_PIN, OUTPUT);
13  digitalWrite(RELAY_PIN, HIGH);
14  IrReceiver.begin(IR_PIN);
15}
16
17void loop() {
18  if (!IrReceiver.decode()) return;
19  bool repeat = IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT;   // tuş basılı tutuluyor / key held down
20  switch (IrReceiver.decodedIRData.command) {
21    case 0x0C:                               // "1": röleyi aç-kapa / toggle the relay
22      if (!repeat) {
23        relayOn = !relayOn;
24        digitalWrite(RELAY_PIN, relayOn ? LOW : HIGH);
25      }
26      break;
27    case 0x15:                               // VOL+: daha parlak / brighter
28      brightness = min(brightness + 15, 255);
29      break;
30    case 0x07:                               // VOL-: daha sönük / dimmer
31      brightness = max(brightness - 15, 0);
32      break;
33  }
34  analogWrite(LED_PIN, brightness);
35  IrReceiver.resume();                       // sonraki tuşa hazırlan / ready for the next key
36}
En el Arduino Uno, la librería IRremote usa el Timer2. Por eso el PWM de los pines 3 y 11 y la función tone() que se usa con los zumbadores pueden chocar con la librería; conecta el LED al pin 5, 6, 9 o 10.

Enviar señales IR con Arduino

Arduino no solo escucha mandos: también puede ser uno. Conecta un LED IR (940 nm) al pin 3 del Uno con una resistencia de 100 Ω; para más alcance, puedes manejar el LED con un transistor. Primero lee con el código anterior el mando del aparato que quieres controlar para saber su dirección y su comando, y luego envía ese mismo código desde Arduino:

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_SEND_PIN = 3;    // IR LED, 100 Ω direnç ile / IR LED with a 100 Ω resistor
4
5void setup() {
6  IrSender.begin(IR_SEND_PIN);
7}
8
9void loop() {
10  IrSender.sendNEC(0x00, 0x46, 0);   // adres, komut, tekrar sayısı / address, command, repeats
11  delay(5000);
12}

IR con el ESP32 y la Raspberry Pi Pico

El VS1838B funciona sin problemas a 3,3 V, así que se conecta directamente al ESP32 y a la Pico. La librería IRremote es compatible con el ESP32; puedes conectar el receptor a cualquier pin de entrada, como el GPIO 15. Con un ESP32 puedes reenviar por Wi-Fi las teclas del mando a otros aparatos o hacer un «mando inteligente» que envíe a la tele, con un LED IR, las órdenes que llegan del móvil. En la Pico con MicroPython se usa la librería micropython_ir de Peter Hinch:

MicroPython
1from machine import Pin
2from ir_rx.nec import NEC_8          # micropython_ir kütüphanesi / library (Peter Hinch)
3import time
4
5def on_key(command, address, ctrl):
6    if command >= 0:                 # negatif değerler tekrar ya da hata / negatives mean repeat or error
7        print("Komut / command: 0x{:02X}".format(command))
8
9ir = NEC_8(Pin(16, Pin.IN), on_key)  # GP16 → OUT
10
11while True:
12    time.sleep(1)

Ideas de proyectos con receptor IR y mando

  • Lámpara con mando: enciende una lámpara de 230 V con un relé usando una tecla libre del mando de la tele.
  • Mando de colores: cambia el color de un LED RGB con las teclas numéricas.
  • Coche robot con mando: un coche cuyos dos motores manejas con las flechas.
  • Caja de melodías: asigna una melodía distinta a cada tecla numérica; para el sonido, mira ¿Qué es un zumbador?
  • Mando que aprende: graba los códigos de otros mandos y envíalos desde un solo Arduino.
  • Cerradura con clave: abre una cerradura con un servo cuando se introduzca la secuencia correcta de teclas.

Errores comunes y cómo solucionarlos

  • No llega ningún código: el cable OUT está en un pin distinto del que pone el código, las patas del receptor están invertidas o la pila del mando se ha agotado; comprueba el mando con la cámara del móvil.
  • El código de ejemplo no compila: los ejemplos antiguos de internet son para IRremote 2.x; la versión 4.x usa IrReceiver.begin() y IrReceiver.decode().
  • Llegan códigos al azar: puede que el receptor esté de cara al sol directo o a un fluorescente; ponlo a la sombra.
  • La tecla de encender y apagar actúa dos veces: no se están ignorando las repeticiones; comprueba el indicador IRDATA_FLAGS_IS_REPEAT.
  • tone() o el PWM de los pines 3 y 11 fallan: en el Uno comparten temporizador (Timer2) con IRremote.
  • Muy poco alcance al enviar con un LED IR: maneja el LED con un transistor para darle más corriente y oriéntalo hacia el aparato.

Un receptor IR es la forma más sencilla y barata de controlar algo sin cables; hasta los mandos viejos del cajón tienen una segunda vida en tus nuevos proyectos. En la app BlueGrays encontrarás proyectos para leer códigos de mando, encender y apagar LED, tocar melodías con el mando, controlar una lámpara de 230 V y hacer un mando universal con ESP32, con esquemas y código.

Preguntas frecuentes

¿A cuántos metros recibe señal un receptor IR?

Receptores como el VS1838B captan la señal hasta 8–10 metros con un buen mando y sin obstáculos. El alcance se reduce si la pila del mando está floja, si el ángulo es grande o si hay mucha luz alrededor.

¿Funciona cualquier mando con Arduino?

Funcionan casi todos los mandos de infrarrojos de 38 kHz, y IRremote decodifica la mayoría de los protocolos comunes. Con mandos de 36, 40 o 56 kHz el alcance puede ser menor. Los mandos por radio (como los de 433 MHz) no se pueden leer con un receptor IR.

¿Funciona un receptor IR al sol?

El filtro del receptor bloquea en gran parte la luz constante, pero el sol directo puede saturarlo y reducir mucho el alcance. En exteriores, pon el receptor a la sombra o dentro de un pequeño tubo protector.

¿Funciona un mando IR a través de una pared?

No. La luz infrarroja no atraviesa paredes; entre el mando y el receptor tiene que haber visión directa o una superficie en la que rebote la luz. Para controlar un aparato de otra habitación se usan módulos de radio o Wi-Fi.

¿Qué versión de IRremote debo usar?

Usa la versión actual 4.x, con IrReceiver.begin(), IrReceiver.decode() y decodedIRData.command. Las órdenes IRrecv irrecv(pin) y decode(&results) de los ejemplos antiguos son de la versión 2.x y no son compatibles con la nueva.

¿Puedo usar el móvil como mando?

Algunos móviles Android tienen un emisor IR integrado y funcionan como mando con la app adecuada. Si tu móvil no tiene IR, puedes montar una página web en un ESP32 y enviar las órdenes desde el móvil al aparato a través de un LED IR.

Ver todos los proyectos
Leer los códigos de un mando IR
#16Principiante
Premium

Leer los códigos de un mando IR

El proyecto que lee los valores HEX de las señales infrarrojas provenientes del control remoto con el módulo receptor IR en el Monitor Serial. Enseña el uso de la librería IRremote.

4.5(39)
55
Encendido y apagado de leds con receptor de infrarrojos y mando a distancia
#17Intermedio
Premium

Encendido y apagado de leds con receptor de infrarrojos y mando a distancia

Proyecto de control por infrarrojos que permite encender y apagar 3 LED de forma independiente con distintas teclas del mando a distancia. Enseña a emparejar los códigos del mando a distancia y a cont

4.7(45)
66
Reproducir melodías con mando IR y zumbador
#18Principiante
Premium

Reproducir melodías con mando IR y zumbador

Proyecto que reproduce melodías de Mario, Día de la Madre y Año Nuevo con zumbador al pulsar distintas teclas del mando a distancia por infrarrojos. Combina la activación de funciones y la programació

4.8(57)
74
Encender una bombilla de 220 V con mando a distancia
#21Avanzado
Premium

Encender una bombilla de 220 V con mando a distancia

Proyecto que enciende y apaga una bombilla de 220V mediante relé con las teclas de encendido y silencio del mando a distancia por infrarrojos. Combina el control por infrarrojos con la conmutación de

4.4(22)
30
Sistema de seguridad láser
#23Avanzado
Premium

Sistema de seguridad láser

Sistema de seguridad avanzado que activa la alarma cuando se interrumpe el rayo láser y puede restablecerse mediante pulsador o control por infrarrojos. Enseña la gestión de múltiples fuentes de entra

4.8(60)
77
Mando a distancia con receptor IR ESP32 (con pantalla LCD)
#124Intermedio
Premium

Mando a distancia con receptor IR ESP32 (con pantalla LCD)

En este proyecto, utilizamos el módulo receptor de infrarrojos TSOP4838 para captar con el ESP32 las señales de un mando de televisión, aire acondicionado u otro dispositivo. Con la biblioteca IRremote v4, visualizamos y registramos el código único de cada tecla en la pantalla LCD I2C. Luego usamos estos códigos para encender y apagar un LED con el mando y ajustar su intensidad. Ideal para convertir mandos antiguos en control domótico.

4.7(19)
30
Mando a distancia universal ESP32 IR (receptor de infrarrojos + mando + 3 LED + zumbador + pantalla OLED)
#143Avanzado
Premium

Mando a distancia universal ESP32 IR (receptor de infrarrojos + mando + 3 LED + zumbador + pantalla OLED)

¡Con el ESP32 puedes leer un mando a distancia por infrarrojos ya preparado y controlar tu propio dispositivo! En este proyecto capturamos las señales de un mando a distancia por infrarrojos de 20 teclas mediante un receptor de infrarrojos (protocolo NEC a 38 kHz). Hemos definido una acción diferente para cada tecla: las teclas 1, 2 y 3 activan o desactivan tres LED distintos; la tecla PWR apaga todos los LED; y los números del 4 al 9 muestran un mensaje específico en la pantalla OLED. En la pan

4.6(8)
14
Sistema de alerta láser
#22Intermedio
Premium

Sistema de alerta láser

Proyecto de seguridad que detecta cuando se interrumpe el rayo láser mediante LDR y avisa con zumbador y LED. Enseña la lógica de detección de interrupción de luz con par láser-LDR.

4.8(64)
82

Aprende cómo funciona el mando de la tele, a conectar un receptor IR a Arduino, leer los códigos de las teclas, controlar lámparas y LED con el mando y enviar señales IR desde Arduino.