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.

¿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.

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:

- 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)
- un espacio de 4.5 ms
- la dirección de 8 bits del dispositivo receptor
- el inverso lógico de 8 bits de la dirección
- el comando de 8 bits
- el inverso lógico de 8 bits del comando
- 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 Nano | Amazon | AliExpress |
Arduino Pro Mini | Amazon | AliExpress |
Arduino Uno | Amazon | AliExpress |
Arduino Mega | Amazon | AliExpress |
ESP32 ESP-WROOM-32 | Amazon | AliExpress |
ESP8266 NodeMCU | Amazon | AliExpress |
ESP8266 WeMos D1 Mini | Amazon | AliExpress |
VS1838B Infrared Sensor in Sensor Kit | Amazon | – |
VS1838B Infrared Sensor in Sensor Kit | – | AliExpress |
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.
- Para el microcontrolador Arduino, use la biblioteca «IRremote» de Ken Shirriff
- Para microcontroladores ESP8266 y ESP32, use la biblioteca «IRremoteESP8266» de David Conran
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

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

Arduino Uno

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

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
ESP32 ESP-WROOM-32

ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

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.

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.