domingo, 26 de março de 2017

Decifrando o controle remoto da TV

Para receber comandos de um controle remoto de TV é necessário um receptor de IR (infra vermelho). A figura abaixo mostra um módulo sensor IR para Arduino que é um receptor infravermelho.

Módulo sensor de infravermelho


Hardware: É relativamente fácil conectar o receptor de IR com o Arduino. Este experimento mostra a montagem de um protótipo com Arduino Uno. A montagem do hardware é conforme a figura abaixo. Verifique se os três pinos de Vcc, GND e sinal do seu módulo são iguais a este módulo usado na figura)





Sketch:  A sketch abaixo decifra as teclas de um controle remoto de TV,  apresentando o código da tecla apertada no controle remoto na tela do monitor da IDE do Arduino. Observe que a sketch usa a biblioteca IRremote que pode ser obtida aqui.

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);
decode_results resultado;

unsigned long last = millis();


void setup()
{
  irrecv.enableIRIn(); // Inicia recepção
  Serial.begin(9600);
  Serial.println("Decodificador de Controle Remoto");
}


void loop() {
  if (irrecv.decode(&resultado)) {
    if (millis() - last > 250) {
      mostra(&resultado);
    }
    last = millis();      
    irrecv.resume(); // proximo valor
  }
}

void mostra(decode_results *resultado) {
  if (resultado->decode_type == UNKNOWN) {
    Serial.println("Controle não identificado.");
  } 
  else {
    if (resultado->decode_type == NEC) {
      Serial.print("Identificado  NEC: ");
    } else if (resultado->decode_type == SONY) {
      Serial.print("Identificado  SONY: ");
    } else if (resultado->decode_type == RC5) {
      Serial.print("Identificado  RC5: ");
    } else if (resultado->decode_type == RC6) {
      Serial.print("Identificado  RC6: ");
    } else if (resultado->decode_type == DISH) {
      Serial.print("Identificado  Dish: ");
    } else if (resultado->decode_type == SHARP) {
      Serial.print("Identificado  Sharp: ");
    } else if (resultado->decode_type == PANASONIC) {
      Serial.print("Identificado  Panasonic: ");
    } else if (resultado->decode_type == JVC) {
      Serial.print("Identificado  JVC: ");
    } else if (resultado->decode_type == SANYO) {
      Serial.print("Identificado  Sanyo: ");
    } else if (resultado->decode_type == MITSUBISHI) {
      Serial.print("Mistubishi: ");
    } else if (resultado->decode_type == SAMSUNG) {
      Serial.print("Identificado  Samsung: ");
    } else if (resultado->decode_type == LG) {
      Serial.print("Identificado  LG: ");
    }

    Serial.print(resultado->value, HEX);
    Serial.print(" (");
    Serial.print(resultado->bits, DEC);
    Serial.println(" bits)");
  }
}

Visualização do resultado: Quando a sketch foi testada com dois controles remotos diferentes intercalados o monitor apresentou os resultado abaixo:




O que você pode fazer agora: Você gostaria de incluir o controle remoto em um projeto seu? Então, anote os códigos das teclas que seriam úteis para construir o seu projeto com controle remoto e faça uma sketch que interprete e execute os comandos de controle.