Descobrindo Códigos IR (discrete codes) com o Arduino

Baseado na biblioteca IRremote do arduino e seguindo o tutorial do video abaixo sobre clonagem de IR com arduino,

Percebi que as Grandes marcas de aparelhos seguem um padrão e normalmente existem 256 possibilidades de códigos IR para um determinado dispositivo.


Vamos aos Procedimentos:

Para ler o código usei sensor VS1838 e o Scketch IRrecvDump como no vídeo. E analisei o monitor serial para ver como eram os códigos dos controles remotos

sensor VS1838:

Percebi um padrão em algumas marcas (podem ser diferentes para outra marcas , TV Panasonic é diferente).
O código IR é formado por:
código do Dispositivo (4 dígitos ou 2 dígitos depende da marca) + código IR (4 dígitos)

  • NET Digital HD
    botão Power: E17A48B7
    botão Mute: E17AF807

  • LG TV
    botão Power: 20DF10EF
    botão Mute: 20DF906F

  • Satbox Duosat Next UHD
    botão Power: EF3AC5
    botão Mute: EF7887

Na verdade o código do Dispositivo é formado pelo código do Dispositivo propriamente dito em Hexadecimal (2 dígitos) + o Hexadecimal inverso desse valor

exemplo TV LG - botão Power (20DF 10EF):
hexdecimal “20” => binário 00100000
o inverso binário de 00100000 é => 11011111

onde existe 0 muda para 1, onde existe 1 muda para zero

binário 11011111 => hexdecimal “DF”

Por isso o código do Dispositivo da TV LG é “20DF”

==========================

Mas os Satbox aqui do Brasil normalmente só tem os 2 primeiros digitos do código do Dispositivo, eles não fazer a verificação do código de complemento inverso.
Por isso Duosat Next UHD - botão Power, o código ficou apenas “EF”.


====================================================

Agora vamos para o código IR, nos meus estudos vi que as grandes marcas usam 2 dígitos para o comando IR propriamente dito + 2 dígitos para verificação do complemento que é o inverso Hexadecimal do código IR

exemplo TV LG - botão Power (20DF 10EF):
hexdecimal “10” => binário 00010000

o inverso binário de 00010000 é => 11101111

onde existe 0 muda para 1, onde existe 1 muda para zero

binário 11101111 => hexdecimal “EF”



Então como existem 16 algarismos hexadecimais (0123456789ABCDEF), e são dois dígitos para um comando IR. Temos 16x16 = 256 possibilidades de comandos IR para cada Dispositivo.

Dessa forma eu criei uma planilha no Libreoffice Calc para escrever o código do Arduino com todas os 256 comandos possíveis.

É só colocar na célula D1, o valor do código do Dispositivo que nós lemos com o Scketch IRrecvDump. Exemplo TV LG: “20DF” ou Satbox Duosat Next UHD: “EF”


Arquivo do Calc que cria os comandos - "IR codes.ods"


Assim é só usar o scketch IRsendDemo modificado, logo abaixo, com um Led Emissor IR

/*
 * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to Arduino PWM pin 3.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */


#include <IRremote.h>

IRsend irsend;

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  int val = Serial.parseInt();
  
//===================
//Colar aqui o código da coluna N4 até N259 que foi gerado no arquivo "IR codes.ods"
//===================

}

Assim é possível abrir o monitor serial do arduino e digitar de 1 a 256 e ver o que cada código faz e anotar logo após o “//” no final da linha.

Com isso conseguimos descobrir os códigos Discretos, que são aqueles códigos IR que fazem funções mas não estão presentes fisicamente no controle remoto.

Pra mim foi útil na tv LG LM6400 pois descobri os seguintes comados que facilitam a automação:

Power ON: 20DF23DC
Power OFF: 20DFA35C
Entrada HDMI 1: 20DF738C
Entrada HDMI 2: 20DF33CC
Entrada HDMI 3: 20DF9768
Entrada HDMI 4: 20DF5BA4
Alternar entre todas as entradas: 20DF19E6
Alternar entre as 4 entradas HDMI: 20DF639C


aqui os códigos da minha antiga TV LG LM6400 com sistema operacional NetCast (onde coloquei *cuidado são comandos de configurações, só execute se tiver certeza do que está fazendo.)

http://www.mediafire.com/file/dn1tymdxjij4v69/IRsendLGTV.ino/file


Quem quiser testar os comandos da minha TV LG é só procurar no IHC do broadlink por:
“47LM6400” Os botões personalizados estão em “User-Defined”

1 Like

Obrigado pela partilha :slight_smile: