Dessa vez coloquei as mãos na massa e com o material que já tenho, pude dar o primeiro passo para montagem do Módulo Controlador Secundário, mais precisamente, a parte que envia comandos infravermelhos para as TV's.
O controle remoto manda esses comandos através de pulsos de luz infravermelha (invisíveis aos nossos olhos) que são decodificados pela sua TV seguindo protocolos específicos. Isso significa dizer que, dependendo do aparelho, existem formas diferentes de tratar esses pulsos. Para quem tiver interesse em saber mais alguns detalhes sobre esse assunto, pode dar uma olhadinha em http://eletronicos.hsw.uol.com.br/controle-remoto2.htm
Lidar com envio/recebimento infravermelho de um controle remoto de maneira crua (raw data) foi algo que descartei de imediato.
Graças a abençoada abstração nossa de cada dia, foi possível tratar tudo isso de forma tranquila. Utilizando a biblioteca IRRemote (https://github.com/shirriff/Arduino-IRremote), pude descobrir os códigos, o protocolo e o número de bits dos comandos enviados por vários controles.
Graças a abençoada abstração nossa de cada dia, foi possível tratar tudo isso de forma tranquila. Utilizando a biblioteca IRRemote (https://github.com/shirriff/Arduino-IRremote), pude descobrir os códigos, o protocolo e o número de bits dos comandos enviados por vários controles.
Baixei a biblioteca, copiei para a pasta libraries onde está instalada a minha IDE Arduíno e dessa forma ficou pronta para uso.
MATERIAL - Módulo receptor infravermelho
- Placa Arduíno Uno R3
- Fios jumpers
- Cabo USB
- Controle Remoto
Material para decodificação |
Utilizei o Fritzing (http://fritzing.org) para elaborar o esquema da montagem na protoboard. Esse software também será importante para desenhar a placa de circuito impresso, portanto, se você tem interesse em fazer essas montagens virtuais e ainda não conhece nenhuma ferramenta, recomendo fortemente o Fritzing.
Receptor IR - Esquema de montagem na protoboard |
Montar esse esquema foi bastante simples. Dois fios saindo dos pinos GND e 5V da placa Arduíno para compor a alimentação na protoboard e mais um fio saindo do pino 11 para ser conectado ao pino de sinal do receptor IR.
Receptor IR - Visão frontal da placa Arduíno |
Receptor IR - Ligação dos fios entre a placa e a protoboard |
Feita a conexão dos fios, pluguei o receptor IR, composto por três pinos, conforme a associação abaixo:
Pino "-": fio vindo do GND
Pino "+": fio vindo do 5V
Pino "S": fio vindo do pino 11
Associação do receptor IR aos fios jumpers |
Resultado final do circuito montado |
O sketch que utilizei para receber os sinais infravermelhos, decodificar e mostrar na tela para o usuário, acompanha a biblioteca IRRemote, o IRRecvDump:
Não foi necessário fazer nenhuma modificação no código original. Destaquei os pontos importantes onde a biblioteca faz a sua parte.
#include <IRremote.h>
int RECV_PIN = 11;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); //Inicializa o receptor IR
}
//Identifica o protocolo utilizado e imprime o código enviado
}
//Identifica o protocolo utilizado e imprime o código enviado
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.println("Could not decode message");
}
else {
if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6) {
Serial.print("Decoded RC6: ");
}
Serial.print(results->value, HEX);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
void loop() {
if (results->decode_type == UNKNOWN) {
Serial.println("Could not decode message");
}
else {
if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6) {
Serial.print("Decoded RC6: ");
}
Serial.print(results->value, HEX);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
void loop() {
if (irrecv.decode(&results)) { // Aqui a MÁGICA acontece.
Serial.println(results.value, HEX);
dump(&results);
irrecv.resume(); // Lê mais valores caso existam
}
}
Serial.println(results.value, HEX);
dump(&results);
irrecv.resume(); // Lê mais valores caso existam
}
}
Após a protoboard montada e sketch codificado, conectei o cabo USB ligando a placa ao computador e fiz o upload desse sketch, em seguida abri a console serial da IDE Arduíno e começei os testes. Veja alguns resultados obtidos:
Dispositivo: Controle remoto do kit infravermelho
Botão: 0
Protocolo: NEC
Código: FF6897
Bits: 32
Dispositivo: Controle remoto da TV da sala
Botão: Baixar volume
Protocolo: NEC
Código: 20DFC03F
Bits: 32
Botão: Subir volume
Protocolo: NEC
Código: E17AB04F
Bits: 32
Botão: Desligar
Protocolo: SONY
Código: B
Bits: 15
Após receber cada código, fiz anotação de todos os valores, conforme estes mostrados acima, pois precisarei deles para substituir os controles remotos e poder controlar tudo a partir do meu tablet.
No próximo post, farei testes com esses códigos obtidos, enviando comandos para ligar e desligar minha TV à partir do meu notebook. Até breve...
Muito bom. Post muito rico de informações.
ResponderExcluirObrigado David, pretendo enriquecer ao máximo e deixar em forma de links o que é comum e fácil de encontrar.
ExcluirHelinho você está demais. Vai dar aula rapá. Parabéns.
ResponderExcluirObrigado Leal. Blog do Leal ? Hummmm, quero ver esse blog !!! :-)
Excluirbom dia, vc conseguiu decodificar o controle da sansung?
ResponderExcluirOlá Gabriel.
ExcluirApenas dados crus (raw data).
Bom dia não consigo decodificar controle da samsung só aparece 0 alguém sabe o porque?
ResponderExcluirBom dia não consigo decodificar controle da samsung só aparece 0 alguém sabe o porque?
ResponderExcluirBom dia pra codificar um controle remoto 433,92 seria possivel alterando o receptor IR pra um 433,92 com o mesmo codigo?
ResponderExcluirBom dia Echo, não entendi muito bem o que você quiz dizer com codificar controle remoto. Sei que alguns controles RF 433Mhz possuem um chip responsável pela codificação que deve estar presente também no receptor para que a comunicação seja completa. Em outra postagem minha eu utilizo um controle desses RF 433, mas eles não são utilizados em equipamentos eletrônicos como TV, ar condicionado, etc, eu sempre vejo em portões eletrônicos.
ResponderExcluirEu tenho uma tv a cabo comunitário com 32 canais analogico. Quero que me ajudam
ResponderExcluira criar um concetrador para ficar na minha central e um receptor para ficar nos meus clientes, eu so quero um receptor no cliente para desligar quando o cliente nao paga, para não esta sempre a subir no posto para liga e desligar.por por favor me ajudem.
E isso é legal?!
Excluir