1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Control Remoto en Arduino con la librería IRremote

Control Remoto en Arduino con la librería IRremote

| Actualizado:
Comentarios: 0

Control Remoto en Arduino con la librería IRremote
Control Remoto en Arduino con la librería IRremote

¿Qué te parece utilizar un mando para apagar o encender la luz? En este post vamos a utilizar un mando a distancia y un sensor infrarrojo con el que encender o apagar un led. Son elementos que podrás aplicar en futuros proyectos con Arduino.

Los detectores infrarrojos son pequeños microchips con una célula fotoeléctrica que están configurados para recibir la luz infrarroja. Casi siempre se utilizan para la detección del mando a distancia que usa cualquier TV o equipo de sonido.

Encender un led con nuestro control remoto.

En este tutorial trataremos de encender un led presionando un botón y usaremos otro botón para apagarlo. Vamos a trabajar con un emisor, el mando a distancia, y un receptor que reciba la luz infrarroja.

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • Sensor infrarrojo.
  • Mando a distancia.
  • Led.
  • Resistencia de 220 Ohm.
Sensor infrarrojo VS1838b

Este sensor posee un filtro interno para detectar frecuencias infrarrojas cercanas a 38KHz, lo que lo hace compatible con la mayoría de mandos infrarrojos; posee tres pines de conexión.

Control remoto:

Control infrarrojo remoto e la TV, utilizado para encender y apagar el led

Cada fabricante de mandos desarrolla su propio protocolo de comunicación, por lo que no todos son iguales. Pero sí tienen en común el uso de unas señales que oscilan en unas frecuencias de 36 a 50KHz, siendo la más utilizada la de 38KHz.

Montaje del circuito.

Esquema para encender un led con  nuestro control remoto

Lo primero que debemos saber es el código que envía nuestro control remoto para poder identificar si encendemos o apagamos el led.

Como no conocemos la codificación del mando, primero vamos a identificar el código que regula los botones que vamos a utilizar, usaremos el boton 1 y 2 del mando.

#include "IRremote.h"
int ReceptorIR = 11;
IRrecv irrecv (ReceptorIR);
decode_results Valor;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();  // Inicializa el receptor
}

void loop() {
  if(irrecv.decode(&Valor)){
    // es para averiguar el valor del botón 1 y 2
    Serial.print("0x");
    Serial.println(Valor.value, HEX);  // Mostrar en el monitor
    delay(50);
    irrecv.resume(); // Se prepara para recibir el siguiente dato
  }
}

Expliquemos un poco este código: primero, cargamos la librería IRremote.h que es la encargada de codificar los datos y devolvernos el valor en hexadecimal. Con IRrecv irrecv estamos indicando que el pin (11) será el encargado de recibir los datos. Los datos recibidos, los guardaremos en Valor, con la instrucción decode_results.

En el bloque setup tan solo inicializamos el puerto de serie y el receptor con la instrucción irrecv.enableIRIn().

Y con el bloque loop, en el momento que la placa reciba una señal nos la mostrará en el monitor. Si presionamos un botón, nos debe mostrar en el monitor el código correspondiente para ese botón.

Veremos que cada botón envía un código diferente, guardamos los de los botones 1 y 2. Para ver el código hexadecimal utilizamos el monitor serial.

Monitor serial con el código del botón 1 y 2

Una vez que tenemos identificados los botones podemos pasar a programar para encender o apagar un led, según el botón que presionemos. El código es:

#include "IRremote.h"
int ReceptorIR = 11;
IRrecv irrecv (ReceptorIR);
decode_results Valor;

void setup() {
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  irrecv.enableIRIn();
}

void loop() {
  if(irrecv.decode(&Valor)){
    // es para averiguar el valor del botón 1 y 2
    Serial.print("0x");
    Serial.println(Valor.value, HEX);  // Mostrar en el monitor
    switch(Valor.value){
      case 0xE0E020DF:        // boton 1
      digitalWrite(6, HIGH);  // Encender el led
      break;
      case 0xE0E0A05F:          // boton 2
      digitalWrite(6, LOW);   // Apagar el led
      break;
    }
    delay(50);
    irrecv.resume();
  }
}

Es un programa en el que podemos fácilmente aumentar el número de leds que podemos utilizar.

Artículos que te pueden interesar

Pulsadores para Arduino
Las entradas digitales en Arduino. Los pulsadores.

Las entradas digitales en Arduino. Los pulsadores.

| Actualizado:
Comentarios: 0

En muchos de los proyectos con Arduino nos encontraremos un pulsador o botón. Aquí veremos cómo hacer para utilizar correctamente sus señales. Primero, explicaremos qué son las resistencias pull-up y pull-down, montaremos un circuito eléctrico con un pulsador y una…

Salidas analógicas en Arduino
Salidas analógicas en Arduino. Intensidad lumínica.

Salidas analógicas en Arduino. Intensidad lumínica.

| Actualizado:
Comentarios: 0

El objetivo de este proyecto es regular la intensidad de un led usando las salidas que soportan PWM y que corresponden a los pines digitales con el símbolo "~". En primer lugar, cambiaremos la intensidad de un solo led. Seguidamente,…

Módulo controlador de motores L298N
Funcionamiento del módulo controlador de motores L298N

Funcionamiento del módulo controlador de motores L298N

| Actualizado:
Comentarios: 0

En este tutorial explicaremos cómo controlar dos motores de corriente continua con el módulo L298N, realizaremos un ejemplo básico, primero sin utilizar ninguna librería y después, con la biblioteca LEANTEC_ControlMotor.h El L298N es un módulo para controlar motores. Es fácil…

Motor paso a paso 28BYJ-48 con Arduino
Conexión del motor paso a paso 28BYJ-48 y el módulo ULN2003 con Arduino

Conexión del motor paso a paso 28BYJ-48 y el módulo ULN2003 con Arduino

| Actualizado:
Comentarios: 0

En este artículo veremos el motor paso a paso unipolar 28BYJ-48. Es un motor barato y que podemos utilizar en gran cantidad de proyectos como robots, impresoras 3D o fotocopiadoras. Nos vamos a centrar en la programación del motor con…

Comentarios - 0

Deja un comentario

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