quarta-feira, julho 04, 2018

Franzininho: Timer para TV

Quem nunca acordou com a TV ligada? Você estava vendo aquele programa tão legal... e de repente descobre que dormiu e a TV ficou ligada por horas. Com este projeto o seu Franzininho pode desligar automaticamente a TV após um certo tempo.


O hardware final deste projeto é bastante simplista: um LED infra-vermelho para comandar a TV, um buzzer para avisar que o tempo está terminando e um botão para reiniciar a contagem:

Eu optei por deixar um tempo fixo de 30 minutos, mas você pode mudar isto no software ou implementar o ajuste do tempo por um potenciômetro.

O ponto crucial deste projeto é controlar a TV, simulando um controle remoto. Infelizmente, cada fabricante utiliza um protocolo próprio. Uma solução é fazer como o TV-B-Gone, que tenta um a um inúmeros comandos. No nosso caso, vamos sempre querer desligar a mesma TV, portanto podemos colocar apenas o comando apropriado no nosso código. O problema é como descobrir este código.

Nas minhas experiências anteriores, eu usei a biblioteca IRremote. A documentação está aqui e você pode baixar a biblioteca daqui. A biblioteca afirma suportar o ATtiny85, mas (depois de perder um bom tempo) descobri que não funciona. O problema está ligado a usar o Timer0 do ATtiny, que também é usado pela biblioteca padrão do Arduino.

Felizmente, alguém se deu ao trabalho de fazer uma versão que funciona para o ATtimy85 (tiny_IRremote), usando o Timer1 ao invés do Timer0. Uma desvantagem é que ela suporta menos protocolos. Eu fiz um fork do projeto acrescentando o protocolo LG e corrigindo um dos parâmetros do protocolo NEC (looonga história, tomei um baile do controle remoto que eu uso no vídeo abaixo).

Nas duas bibliotecas, a frequência transmitida é gerada por hardware (o timer do microcontrolador). Uma consequência disto é que não temos muitas opções quanto ao pino de transmissão. Na biblioteca tiny_IRremote, o pino tem que ser a saída digital 4.

Para descobrir o código de desligar da sua TV, o mais fácil seria carregar em um Arduino o exemplo IRrecvDump da IRremote, conectar um receptor IR no pino 11 (não esquecendo de alimentá-lo), apertar a tecla no controle remoto, ver o que é informado no monitor da IDE e programá-lo diretamente no código do Arduino. Mas não tem graça fazer o mais fácil...

Vamos usar o próprio Franzininho para aprender o código do controle. Devido ao tamanho do código da biblioteca (e para simplificar a aplicação), vamos fazer um programa separado para esta parte. Este programa salva o código descoberto na EEProm, para ser usado pela aplicação principal. A montagem é simples, basta conectar o receptor no pino P0 do Franzininho:

Montado o circuito e carregado o programa, aponte o controle remoto para o receptor e aperte algumas vezes  a tecla liga/desliga. O LED do Franzininho acenderá para indicar que o código foi reconhecido e salvo na EEProm. Se o LED não acender, experimente mudar a posição do controle remoto. Se o LED não acender de jeito nenhum, provavelmente a biblioteca não sabe decodificar o código.

Descoberto e gravado o código, é hora de fazer a montagem final e carregar a aplicação principal. Os programas podem ser baixados meu github.  O vídeo abaixo mostra o processo completo.





2 comentários:

inv disse...

Acho que não precisa ser um 2N2222, um mais barato como o BC337 dá conta do recado. Esse projeto não mandará nenhum sinal na faixa de 100 MHz.

Daniel Quadros disse...

Sim poderia ser qualquer transistor NPN de uso geral. Usei o 2N2222 porque era o que estava à mão.