Grande parte dos equipamentos eletrônicos residenciais, utilizam transmissão e recepção de dados infravermelho, nesse repositório, demonstro a construção de um receptor que decodifica e interpreta esses dados utilizando o microcontrolador PIC16F877A.
O protocolo NEC, define um formato padrão para a comunicação entre um transmissor (como um controle remoto) e um receptor (como um dispositivo eletrônico que está sendo controlado, por exemplo, uma TV), quando você pressiona um botão em um controle remoto, ele emite pulsos de luz infravermelha. Cada botão pressionado gera uma sequência específica de pulsos, os pulsos infravermelhos são codificados de acordo com o protocolo NEC. Este protocolo organiza os pulsos em grupos de dados que representam informações como o comando pressionado, o dispositivo alvo e verificações de erro para garantir a precisão da comunicação. O protocolo NEC também inclui sinais de sincronização para garantir que o transmissor e o receptor estejam em sintonia. Além disso, ele permite a repetição de sinais para garantir que o comando seja recebido mesmo em condições adversas, como obstruções entre o controle remoto e o dispositivo, o dispositivo receptor, como a TV, possui um receptor infravermelho que decodifica os pulsos de acordo com o protocolo NEC. Ele então executa a ação correspondente ao comando recebido, como alterar o volume, mudar de canal ou ligar/desligar.
Este componente se trata de um circuito foto-receptor da série TSOP18XX, capaz de detectar sinais modulados em 38KHz, muito utilizado nos receptores de televisão, DVDs e outros dispositivos residenciais.
Figura 1 - Foto-receptor TSOP1838
Verificando o Datasheet, temos acesso ao pinout e o circuito recomendado:
Figura 2 - Circuito recomendado
Figura 3 - Pinout
O resistor de 100R e o capacitor de 4,7uF são recomendados como um filtro contra espúrios indesejados.
Utilizando o foto-receptor em uma protoboard, foi possível aquisitar com o circuito recomendado e um osciloscópio o sinal LIGA/DESLIGA de um controle remoto convencional.
Figura 4 - Sinal completo
Figura 5 - Largura do pulso inicial
Figura 6 - Largura do pulso valor
Figura 7 - Largura do pulso valor 1
Com os valores coletados é possível estabelecer a rotina do código para a decodificação desse sinal.
Para essa experiência, foi utilizado o microcontrolador 16F877A, o mesmo utilizará um cristal externo de 20MHz e o código foi desenvolvido no MPLABX utilizando o compilador XC8 V2.46. A estratégia utilizada para a captação eficiente desse sinal, foi o uso da interrupção externa do INT0 localizado no pino RB0, isso garante que a captação desse sinal seja tratada com alta prioridade pelo microcontrolador, evitando erros de pulling com o aumento do código. O sinal decodificado é enviado via serial (UART), o sinal é convertido para USB pelo CI CH340C e recebido por qualquer computador que possua algum monitor serial instalado (por exemplo o PUTTY).
Abaixo é possível ver alguns códigos interpretados no PUTTY, os 3 primeiros se tratam do código LIGA/DESLIGA, os 3 últimos são o botão OK do controle remoto:
Figura 8 - códigos recebidos pela serial
Com essa implementação, o sinal de controles remotos de padrão NEC foi decodificado, consequentemente, com alterações nesse código, é possível obter os valores e acionar os pinos do microcontrolador, o que por sua vez pode acionar Relés, enviar mensagens específicas para um barramento SPI ou o que for necessário para aplicações que necessitem do uso de controles remotos, vale destacar que o exemplo demonstrado não está interpretando o sinal REPEAT.