Tramite Arduino è possibile leggere i codici inviati da in telecomando infrarossi e, ad esempio, pilotare dei relè per accendere o spegnere una lampada.
comando rele con infrarossocomando rele con infrarosso
Lo sketch è molto semplice, apri l'IDE di Arduino e inserisci questo codice:
#include <IRremote.h>

int IRPIN = 2;
int RELE_PIN = 4;

IRrecv irrecv(IRPIN);

decode_results result;

void setup()
{
  Serial.begin(9600);

  pinMode(RELE_PIN, OUTPUT);

  Serial.println("Enabling IRin ...");
  irrecv.enableIRIn();
  Serial.println("Enabled IRin");
  digitalWrite(RELE_PIN, HIGH);
}

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

    //comando il relè
    if (result.value == 0x4BB640BF) {
      //Volume+ accendo il relè
      digitalWrite(RELE_PIN, LOW);
      Serial.println("ON");
    } else if (result.value == 0x4BB6C03F) {
      //Volume- spengo il relè
      digitalWrite(RELE_PIN, HIGH);
      Serial.println("OFF");
    }
  }
  delay(500);
}
l'esempio usa la libreria IRremote.
Assicurati che la board sia Arduino, che la porta COM sia quella giusta e la velocità sia 9600 baud
fai l'upload del codice e apri il Serial monitor per vedere i codici ricevuti:
Serial monitorSerial monitor
quando premi il pulsante Volume+ il relè si attiva (eccita) quando premi il pulsante Volume- il relè si spenge (diseccita).
I codici 0x4BB640BF e 0x4BB6C03F sono validi per un Telecomando LG.
Se usi un altro telecomando, o vuoi usare altri pulsanti, sostituisci i valori con i relativi codici visualizzati nel serial monitor

Per avere un azione di on/off (toggle) con lo stesso pulsante:
#include <IRremote.h>

int IRPIN = 2;
int RELE_PIN = 4;

//memorizza lo stato del relè
int releStatus = HIGH;

IRrecv irrecv(IRPIN);

decode_results result;

void setup()
{
  Serial.begin(9600);

  pinMode(RELE_PIN, OUTPUT);

  Serial.println("Enabling IRin ...");
  irrecv.enableIRIn();
  Serial.println("Enabled IRin");
  digitalWrite(RELE_PIN, releStatus);
}

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

    //comando il relè on/off
    if (result.value == 0x4BB640BF) {
      //Volume+ inverto lo stato del relè
      releStatus = releStatus==LOW ? HIGH : LOW;
      digitalWrite(RELE_PIN, releStatus);
      Serial.println(releStatus==LOW ? "ON" : "OFF");
    } 
  }
  delay(500);
}