Actividad 8 Robot controlado por IR

El control de Infrarojo

Hoy en día el control remoto por infrarrojos es omnipresente en la vida cotidiana. Se utiliza para controlar varios electrodomésticos, como televisores, equipos de música, grabadoras de video, equipos de refrigeración, receptores de señal satelital, etc.

El sistema de comunicación IR consta de un dispositivo de transmisión por infrarrojos, en este caso el mando a distancia, y un módulo de recepción por infrarrojos.

El sistema de mando tiene las siguientes características

CONTROL REMOTO INFRARROJO 38KHZ

  • 17 teclas de función
  • Protocolo NEC 38KHz
  • Distancia de transmisión: hasta 8 metros (en función del entorno circundante, la sensibilidad del receptor, etc.)
  • Ángulo de operación: 60 °
  • Batería de botón CR2025
  • Corriente estática: 3 ~ 5uA, dinámica actual: 3 ~ 5 mA
  • Dimensiones: 85*40*6,5 mm (L*W*H)
  • Peso: 12 gramos

Una señal infrarroja de 38K emitida por el mando a distancia es codificada por el chip de codificación del mando a distancia. Esta señal suele estar formada por una sección de código piloto, un código de usuario, un código de usuario inverso, un código de datos y un código de datos inverso. El intervalo de tiempo de pulso se utiliza para distinguir si se trata de una señal 0 o 1, y la codificación se compone de la combinación de esta señal binaria (0 y 1).

Si bien el código de usuario del mismo control remoto permanece sin cambios, el código de datos varía con cada tecla. Cuando se pulsa el botón del mando a distancia, el mando a distancia envía una señal infrarroja. Cuando el receptor IR recibe la señal, el programa decodifica la señal para determinar qué tecla se presionó.

En este caso los botones y los códigos son:

TeclaCódigo
10x16
20x19
30xD
40xC
50x18
60x5E
70x7
80x1C
90x5A
00x52
Flecha arriba0x46
Flecha abajo0x15
Flecha izquierda0x44
Flecha derecha0x43
OK0x40
*0x42
#0x4A


Las especificaciones del control de mando son:

CONTROL REMOTO INFRARROJO 38KHZ

17 teclas de función

Protocolo NEC 38KHz

Distancia de transmisión: hasta 8 metros (en función del entorno circundante, la sensibilidad del receptor, etc.)

Ángulo de operación: 60 °

Batería de botón CR2025

Corriente estática: 3 ~ 5uA, dinámica actual: 3 ~ 5 mA

Dimensiones: 85*40*6,5 mm (L*W*H)

Peso: 12 gramos

En resumen, la MCU decodifica las señales recibidas, juzgando así qué tecla fue presionada por el control remoto.

El receptor de infrarrojos es un módulo que cuenta con un sensor receptor de infrarrojos, y un dispositivo que integra la recepción, amplificación y modulación de la señal. El módulo receptor de infrarrojos tiene solo tres pines: línea de señal, VCC y GND.En el caso particular De esta forma, es muy conveniente comunicarse con el Arduino y otros microcontroladores a través del receptor IR.

En el caso particular tiene 3 pines GRY donde G es el negativo otierra (Ground), R (Red) es el +5V y Y es donde se lee la señál.

https://naylampmechatronics.com/blog/36_tutorial-arduino-y-control-remoto-infrarrojo.html

Se instala la librería IRRemote by shirriff, z3t0,ArminJo v. 4.5.0 cuya referencia se encuentra en el enlace siguiente:

https://github.com/Arduino-IRremote/Arduino-IRremote

El código es el siguiente:

#define DECODE_NEC            

#include <IRremote.hpp>      

constexpr uint8_t RECV_PIN {2};

constexpr uint8_t LED {13};

constexpr uint16_t S1 = 0x18;  // Tecla 5

uint16_t irReceive() {

  uint16_t received{0};

  if (IrReceiver.decode()) {

    IrReceiver.printIRResultShort(&Serial);

    if (IrReceiver.decodedIRData.protocol == UNKNOWN) {

           IrReceiver.printIRResultRawFormatted(&Serial, true);

    }

    if (IrReceiver.decodedIRData.protocol == NEC) {

      received = IrReceiver.decodedIRData.command;

      Serial.print(“Command: 0x”);

      Serial.println(received, HEX);

    }

    IrReceiver.resume();

  }

  return received;

}

void setup()

{

  Serial.begin(9600);

  pinMode (LED, OUTPUT);

  digitalWrite (LED, HIGH);

  IrReceiver.begin(RECV_PIN);

  Serial.print(F(“Ready to receive IR signals at pin “));

  Serial.println(RECV_PIN);

}

void loop()

{

   if (irReceive() == S1) { digitalWrite(LED,!digitalRead(LED)); }

}

Protocol=NEC Address=0x0, Command=0x18, Raw-Data=0xE718FF00, 32 bits, LSB first, Gap=3276750us, Duration=72500us
Command: 0x18
Protocol=NEC Address=0x0, Command=0x18, Repeat, Gap=95400us, Duration=13400us
Command: 0x18