Ir al contenido
← Volver a Formación Arduino Intermedio

20. Mando a distancia IR: aprende y repite

Captura los códigos de cualquier mando a distancia y reprodúcelos para controlar tus aparatos. Aprende comunicación infrarroja.

Dificultad: Intermedio · Tiempo: 65 min · Cerebro: Arduino Uno

🧰 Lista de materiales

Arduino Uno R3 (ATmega328P)
Arduino Uno R3 (ATmega328P)
Decodifica y emite IR
sin foto
Receptor IR de panel
Receptor de mandos IR
LED infrarrojo 5 mm (emisor IR)
LED infrarrojo 5 mm (emisor IR)
Emisor IR para repetir
sin foto
Módulo relé 1 canal 5 V
Activa una carga con un botón del mando
sin foto
Resistencias película metálica 1/4 W
100–220 Ω para el LED IR
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

Cómo funcionan los mandos a distancia por infrarrojos: cada botón emite un código único modulado a 38 kHz. Capturarás esos códigos con un receptor y los reproducirás con un LED IR, o los usarás para disparar acciones (encender un relé).

📚 Teoría: IR modulado a 38 kHz

La luz infrarroja ambiente (sol, bombillas) saturaría un receptor simple. Por eso los mandos modulan la señal a 38 kHz: el receptor solo «escucha» parpadeos a esa frecuencia y filtra el resto. Cada botón envía una secuencia de pulsos que codifica un número (protocolo NEC, Sony, etc.).

La librería IRremote decodifica esos protocolos y también puede emitir con un LED IR. Primer paso: leer los códigos de tu mando. Segundo: usarlos.

🔌 Conexiones

ComponentePin
Receptor IR VCC/GND5 V / GND
Receptor IR OUTD2
LED IR (+)D3 vía 100–220 Ω
LED IR (−)GND
Relé IN / VCC / GNDD7 / 5 V / GND

💻 Código completo

Instala IRremote (v3+). Primero ejecuta este sketch para descubrir el código de un botón en el Monitor Serie:

// Paso 1: descubrir códigos del mando
#include 
const int PIN_RX = 2;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(PIN_RX, ENABLE_LED_FEEDBACK);
  Serial.println("Pulsa botones del mando...");
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.print("Codigo: 0x");
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    IrReceiver.resume();
  }
}

Anota el código del botón que quieras usar (p. ej. 0xF7C03F) y úsalo para disparar el relé:

// Paso 2: un botón del mando enciende/apaga el relé
#include 
const int PIN_RX = 2;
const int PIN_RELE = 7;
const uint32_t BOTON_POWER = 0xF7C03F;  // <-- pon tu código

bool releOn = false;

void setup() {
  pinMode(PIN_RELE, OUTPUT);
  digitalWrite(PIN_RELE, HIGH);          // relé activo-bajo: apagado
  IrReceiver.begin(PIN_RX, ENABLE_LED_FEEDBACK);
}

void loop() {
  if (IrReceiver.decode()) {
    if (IrReceiver.decodedIRData.decodedRawData == BOTON_POWER) {
      releOn = !releOn;
      digitalWrite(PIN_RELE, releOn ? LOW : HIGH);
    }
    IrReceiver.resume();
  }
}

🛠️ Montaje paso a paso

  1. Conecta el receptor IR (VCC, GND, OUT→D2).
  2. Sube el sketch del Paso 1 y anota los códigos de tu mando.
  3. Cablea el relé (y el LED IR si quieres re-emitir).
  4. Sube el Paso 2 con tu código y prueba el botón.

🧩 Resolución de problemas

SíntomaCausaSolución
No lee nadaReceptor mal alimentadoConfirma 5 V/GND y pin OUT
Código cambia cada vezRepetición NEC (0xFFFFFFFF)Ignora ese valor, usa el primero
No conmuta el reléLógica activo-bajoRecuerda HIGH=apagado

🚀 Para ir más lejos

  • Mapea varios botones a varias acciones (luz, ventilador, alarma).
  • Re-emite con el LED IR para clonar un mando.
← Volver a Formación Arduino