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.
🧰 Lista de materiales
🎯 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
| Componente | Pin |
|---|---|
| Receptor IR VCC/GND | 5 V / GND |
| Receptor IR OUT | D2 |
| LED IR (+) | D3 vía 100–220 Ω |
| LED IR (−) | GND |
| Relé IN / VCC / GND | D7 / 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
- Conecta el receptor IR (VCC, GND, OUT→D2).
- Sube el sketch del Paso 1 y anota los códigos de tu mando.
- Cablea el relé (y el LED IR si quieres re-emitir).
- Sube el Paso 2 con tu código y prueba el botón.
🧩 Resolución de problemas
| Síntoma | Causa | Solución |
|---|---|---|
| No lee nada | Receptor mal alimentado | Confirma 5 V/GND y pin OUT |
| Código cambia cada vez | Repetición NEC (0xFFFFFFFF) | Ignora ese valor, usa el primero |
| No conmuta el relé | Lógica activo-bajo | Recuerda 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.