Tutorial sobre sensores infrarrojos para Arduino, ESP8266 y ESP32

Aprenda a utilizar un sensor de infrarrojos en combinación con el protocolo de transmisión de infrarrojos de NEC para construir un receptor de infrarrojos con un sensor IR VS1838B.

En este tutorial, aprenderá a utilizar un sensor de infrarrojos en combinación con el protocolo de transmisión de infrarrojos de NEC.

Al final de este tutorial, creará un proyecto con el sensor de infrarrojos VS1838B para leer y codificar señales de infrarrojos desde un control remoto.

Tutorial sobre sensores infrarrojos para Arduino, ESP8266 y ESP32

¿Qué es la radiación infrarroja (IR)?

La radiación infrarroja (IR) o luz infrarroja es radiación electromagnética (EMR) y transporta energía radiante como todos los EMR. Aunque el IR se comporta tanto como una onda como su partícula cuántica, el fotón.
La luz infrarroja no es visible para los humanos debido a la longitud de onda más larga que el ojo humano puede ver:

  • Longitud de onda infrarroja: 700 nm a 1000 nm
  • Longitud de onda visible humana: 400 nm a 700 nm

Las siguientes imágenes le brindan una descripción general del espectro electromagnético.

espectro electromagnético

Pero existe la posibilidad de ver luz infrarroja. Puede ver la luz a través de su teléfono celular, porque la cámara de su teléfono celular ve la luz emitida por el diodo infrarrojo. Verá que la luz parpadea porque el diodo infrarrojo se enciende muy rápidamente. Hay un ritmo detrás de este comportamiento que es necesario para codificar la información enviada por el diodo.

Por lo tanto, podemos usar IR enviando información como señales analógicas y codificando estas señales con un sensor. Los siguientes capítulos describen los sensores infrarrojos normales y los sensores infrarrojos pasivos. Además, discutiremos el uso de módulos de distancia por infrarrojos.

Protocolo de transmisión de infrarrojos NEC

El protocolo de transmisión NEC IR utiliza la codificación por distancia de pulso de los bits del mensaje. Cada ráfaga de pulsos (marca – transmisor RC activado) tiene una longitud de 562,5 µs, a una frecuencia portadora de 38 kHz (26,3 µs). Los bits lógicos se transmiten de la siguiente manera:

  • ‘0’ lógico: una ráfaga de pulsos de 562,5 µs seguida de un intervalo de 562,5 µs, con un tiempo de transmisión total de 1,125 ms
  • Lógico ‘1’: una ráfaga de pulsos de 562,5 µs seguida de un intervalo de 1,6875 ms, con un tiempo de transmisión total de 2,25 ms

Cuando se presiona un botón en el control remoto, el mensaje transmitido consta de los siguientes elementos, en orden:

Marco de mensaje NEC
  1. una ráfaga de pulsos de 9 ms (16 veces la longitud de la ráfaga de pulsos utilizada para un bit de datos lógicos)
  2. un espacio de 4.5 ms
  3. la dirección de 8 bits del dispositivo receptor
  4. el inverso lógico de 8 bits de la dirección
  5. el comando de 8 bits
  6. el inverso lógico de 8 bits del comando
  7. una última ráfaga de pulsos de 562,5 µs para indicar el final de la transmisión del mensaje

La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.

Componente de enlace de Amazon Enlace de AliExpress

Arduino NanoAmazonAliExpress
Arduino Pro MiniAmazonAliExpress
Arduino UnoAmazonAliExpress
Arduino MegaAmazonAliExpress
ESP32 ESP-WROOM-32AmazonAliExpress
ESP8266 NodeMCUAmazonAliExpress
ESP8266 WeMos D1 MiniAmazonAliExpress
VS1838B Infrared Sensor in Sensor KitAmazon
VS1838B Infrared Sensor in Sensor KitAliExpress

Sensor infrarojo

Usando un sensor de infrarrojos, el microcontrolador Arduino, ESP8266 y ESP32 puede recibir información de un control remoto de infrarrojos y actuar de acuerdo con el botón que presionó en el control remoto de infrarrojos. Por lo tanto, el sensor escanea rangos de frecuencia específicos, definidos por estándares, y convierte estas señales en los pines de salida del sensor. El sensor de infrarrojos más básico es el VS1838B.

Diferentes bibliotecas de infrarrojos para Arduino y ESP8266 / ESP32

Para su funcionamiento, el sensor recibe una señal de infrarrojos que debe codificarse. Puede intentar codificar la señal IR para diferentes fabricantes usted mismo, pero estoy usando una biblioteca para esta tarea que codifica el pulso de luz y generará un código HEX basado en la información enviada por el diodo infrarrojo.

Encontrará ambas bibliotecas en su IDE de Arduino. Si no sabe cómo instalar una biblioteca en su IDE de Arduino, escribí una guía paso a paso.

Cableado entre el sensor de infrarrojos VS1838B y el microcontrolador

La siguiente imagen muestra el cableado entre diferentes placas de microcontroladores Arduino, ESP8266 y ESP32 y el sensor de infrarrojos VS1838B.

Arduino Nano

Cableado del sensor infrarrojo Arduino Nano VS1838B

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Cableado del sensor infrarrojo VS1838B Arduino Pro Mini

Arduino Uno

Cableado del sensor infrarrojo VS1838B Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

Cableado del sensor infrarrojo VS1838B Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

ESP32 ESP-WROOM-32

Cableado del sensor de infrarrojos VS1838B ESP32 ESP-WROOM-32

ESP8266 NodeMCU

Cableado del sensor infrarrojo VS1838B ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

VS1838B ESP8266 WeMos D1 Mini cableado del sensor de infrarrojos

Código de programa para codificar señales infrarrojas del mando a distancia

Después de conectar nuestros dispositivos, ingresaremos el código. Nuestro objetivo es imprimir el código en HEX y Decimal (DEZ) cuando presionamos diferentes botones en el infrarrojo control remoto. En este ejemplo, estoy usando el control remoto de mi televisor.

Debido a que el código del programa difiere entre Arduino y ESP8266 y ESP32 en términos de la biblioteca utilizada, creé un cuadro para cada código de programa.

  • Código de programa para Arduino
  • Código de programa para ESP8266 y ESP32

Código de programa para Arduino

#include "IRremote.h"

const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop(){
  if (irrecv.decode(&results)){
    Serial.println(results.value, HEX);
    Serial.println(results.value, DEC);
    irrecv.resume();
    Serial.println();
  }
}

Código de programa para ESP8266 y ESP32

#include "IRrecv.h"

uint16_t RECV_PIN = D4; // for ESP8266 micrcontroller
//uint16_t RECV_PIN = 4; // for ESP32 micrcontroller

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value >> 32)  // print() & println() can't handle printing long longs. (uint64_t)
      Serial.print((uint32_t) (results.value >> 32), HEX);  // print the first part of the message
    Serial.println((uint32_t) (results.value & 0xFFFFFFFF), HEX); // print the second part of the message
    irrecv.resume();  // Receive the next value
  }
  delay(100);
}

En la primera línea del script del programa, incluimos la biblioteca de infrarrojos compatible. A continuación, debemos configurar el pin digital para la conexión entre el microcontrolador y el módulo IR. Después de definir un nuevo objeto IR para recibir señales infrarrojas del control remoto y validar el pin conectado a ese objeto, creamos un objeto llamado results que recibe los resultados infrarrojos decodificados de la biblioteca.

En la función de configuración, establecemos la velocidad en baudios en 9600 para la transmisión en serie de su conexión USB entre el microcontrolador y la PC, que debe coincidir con la velocidad en baudios del monitor en serie en su Arduino IDE. El último paso de la función de configuración es activar la detección de Entrada IR.

En la función de bucle, llamamos a la función de decodificación de la biblioteca IR con la dirección de la variable de resultados. Por lo tanto, si el receptor de infrarrojos detecta una señal de infrarrojos que está recodificada, la función devuelve VERDADERO a la función if e imprimimos el valor HEX y decimal del resultado en el monitor de serie.

Para ESP8266 y ESP32, los resultados son demasiado largos para imprimirse en el monitor en serie. Por lo tanto, necesitamos dividir los resultados en los primeros 32 bits y los bits restantes que se imprimen solo en HEX en la conexión en serie.

Después de recibir la señal de infrarrojos e imprimir la señal en la conexión en serie, necesitamos reiniciar el receptor y prepararlo para recibir otro código.

La siguiente imagen muestra los resultados del código Arduino, cuando presiono botones aleatorios en mi control remoto Samsung.

Monitor de sensor de infrarrojos en serie

Con este ejemplo, puede identificar todos los códigos de tecla en el control remoto. Después de la identificación, puede reaccionar a varios botones del control remoto. Un ejemplo Es posible que desee encender un LED rojo cuando suba el volumen y un LED verde cuando presione el volumen en su control remoto. Siéntase libre de pensar en diferentes casos de uso, intente programar el boceto correspondiente y comparta su proyecto en la sección de comentarios al final de este artículo.

Si planea usar sensores infrarrojos para detectar objetos o medir distancias, consulte el artículo sobre Sensor de distancia ultrasónico, Módulo de seguimiento de línea TCRT5000 y Sensor de movimiento PIR HC-SR501.


Deja un comentario