Olá, amantes de robótica!
Como ler o sensor de infra vermelho de controle remoto.
Com o receptor infravermelho você poder receber o código do controle remoto da tv, dvd e outros.
Neste post irei falar como receber os dados do controle.
Qtd Itens:
1 - Arduino UNO ou qualquer outra versão;
1 - Receptor de infravermelho;
1 - Controle remoto pode ser de tv, dvd, mp3;
1 - Resistor 20 ohms (para usar no receptor);
1 - Led vermelho;
1 - Led verde;
1 - Led Amarelo;
3 - Resistor 200 ohms (para o led);
6 - Jumpers (Fios).
Não sabe onde comprar as peças, confira esse post: onde comprar arduino e componentes
Basta fazer as mesmas conexões da imagem abaixo:

(clique na imagem pra ampliá-la)
Atenção:
Cuidado com o ligamento do infravermelho, porque você pode ligar errado e esquentá-lo até que ele queime.
Não sabe programar? Então acesse: Como programar em Arduíno, fazer robôs e projetos diversos
Se você é iniciante veja:Como enviar (upload) o programa pronto para a placa do arduino uno, mega entre outros
Atenção:
Para o código fonte funcionar é necessário baixar as bibliotecas: Baixar Library.
Código Atualizado!
Atenção:
Nos ifs do código, coloquei duas comparações, porque usei dois controles diferentes.
Pronto, qualquer duvida é só deixar nos comentários ou entrar em Contato
Como ler o sensor de infra vermelho de controle remoto.
Com o receptor infravermelho você poder receber o código do controle remoto da tv, dvd e outros.
Neste post irei falar como receber os dados do controle.
Veja o vídeo do receptor de infravermelho em funcionamento:
Vamos ao material que precisamos:
Qtd Itens:
1 - Arduino UNO ou qualquer outra versão;
1 - Receptor de infravermelho;
1 - Controle remoto pode ser de tv, dvd, mp3;
1 - Resistor 20 ohms (para usar no receptor);
1 - Led vermelho;
1 - Led verde;
1 - Led Amarelo;
3 - Resistor 200 ohms (para o led);
6 - Jumpers (Fios).
Não sabe onde comprar as peças, confira esse post: onde comprar arduino e componentes
Vamos à montagem:
Basta fazer as mesmas conexões da imagem abaixo:

Atenção:
Cuidado com o ligamento do infravermelho, porque você pode ligar errado e esquentá-lo até que ele queime.
Veja as fotos do projeto:
O mais importante, o código fonte:
Não sabe programar? Então acesse: Como programar em Arduíno, fazer robôs e projetos diversos
Se você é iniciante veja:Como enviar (upload) o programa pronto para a placa do arduino uno, mega entre outros
Atenção:
Para o código fonte funcionar é necessário baixar as bibliotecas: Baixar Library.
/*
>>>>> Criando Robô Com Arduino <<<<<
##### Robôs, Projetos e Tutoriais! #####
.:: Site principal: http://www.CriandoRoboComArduino.com/
.:: Site secundário: http://www.TestCriandoRoboComArduino.com/
========== IMPORTANTE ==========
O código está livre para usar, citar, alterar e compartilhar,
desde que mantenha o site como referência.
Obrigado.
--------------------------------------------------------------------------------------------------
Projeto: Como receber sinal de um controle remoto com infravermelho (TV, DVD, outros) com o arduino
---------------------------------------------------------------------------------------------------
*/
#include <IRremote.h>// incluindo a biblioteca do infravermelho
const int RECEBE_PINO = 2; // pino 6 no arduino
int ledverde = 7;// led no pino 10
int ledamarelo = 6;
int ledvermelho = 5;
IRrecv ir_recebe(RECEBE_PINO); // declarando a variável do sensor
decode_results codigo_recebido; // resultado
void setup()
{
Serial.begin(9600); //mostra o resultado no computador
ir_recebe.enableIRIn(); // inicia a recepção
pinMode(ledverde, OUTPUT); //defini led como saída
pinMode(ledamarelo, OUTPUT);
pinMode(ledvermelho, OUTPUT);
}
void loop() {
if (ir_recebe.decode(&codigo_recebido)) {//verifica se um codigo foi recebido
if (codigo_recebido.value != 0 ){
Serial.println(codigo_recebido.value, HEX); //mostra no serial o resultado
}
//tem que colocar o 0x antes do numero hexadecimal, pois só assim para poder comparar no if
//liga led verde
if ((codigo_recebido.value == 0x39C618E7) || (codigo_recebido.value == 0xFF30CF)){// verifica se foi pressionado o numero 1 dos controles
digitalWrite(ledverde, HIGH);
delay(500);
}
//desliga led verde
if ((codigo_recebido.value == 0x39C658A7) || (codigo_recebido.value == 0xFF10EF)){// verifica se foi pressionado o numero 4 dos controles
digitalWrite(ledverde, LOW);
delay(500);
}
//liga led amarelo
if ((codigo_recebido.value == 0x39C69867) || (codigo_recebido.value == 0xFF18E7)){// verifica se foi pressionado o numero 2 dos controles
digitalWrite(ledamarelo, HIGH);
delay(500);
}
//desliga led amarelo
if ((codigo_recebido.value == 0x39C628D7) || (codigo_recebido.value == 0xFF38C7)){// verifica se foi pressionado o numero 5 dos controles
digitalWrite(ledamarelo, LOW);
delay(500);
}
//liga led vermelho
if ((codigo_recebido.value == 0x39C6D02F) || (codigo_recebido.value == 0xFF7A85)){// verifica se foi pressionado o numero 3 dos controles
digitalWrite(ledvermelho, HIGH);
delay(500);
}
//desliga led vermelho
if ((codigo_recebido.value == 0x39C6E01F) || (codigo_recebido.value == 0xFF5AA5)){// verifica se foi pressionado o numero 6 dos controles
digitalWrite(ledvermelho, LOW);
delay(500);
}
ir_recebe.resume(); // recebe o próximo código
delay(200);
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>>>>> Acesse os sites: <<<<<
.:: Robôs, Projetos e Tutoriais
http://www.CriandoRoboComArduino.com/
.:: Testes dos robôs, noticias sobre robótica e muito mais
http://www.TestCriandoRoboComArduino.com/
>>>>> Inscreva-se nos canais no Youtube: <<<<<
.:: Vídeos dos robôs, projetos e tutoriais
Criando Robô Com Arduino
https://www.youtube.com/CriandoRoboComArduin
.:: Mostrando os testes dos robôs e projetos
Test Criando Robô Com Arduino
https://www.youtube.com/TestCriandoRoboComAr
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
Código Atualizado!
Atenção:
Nos ifs do código, coloquei duas comparações, porque usei dois controles diferentes.
Pronto, qualquer duvida é só deixar nos comentários ou entrar em Contato
O meu controle estava recebendo o próprio código e mais uma sequência de "FFFFFFFF", coloquei um delay de 200 e ficou normal. =D
ResponderExcluiramigo como eu faço para mover 2 servos motor hackeado com este codigo?
ResponderExcluirOlá, veja o código desse post: http://www.criandorobocomarduino.com/2013/10/caraut-v1-criando-um-carrinho-autonomo.html , é só pegar as funções do servo motor e adaptar ao seu código.
Excluircara estou tentado fazer essa biblioteca rodar mas não dá certo já instalei desinstalei e nada dá esses erros..!!
ResponderExcluirC:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:70: error: 'IRsend' has not been declared
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp: In function 'void sendNEC(long unsigned int, int)':
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:72: error: 'enableIROut' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:73: error: 'mark' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:74: error: 'space' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp: At global scope:
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:90: error: 'IRsend' has not been declared
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp: In function 'void sendSony(long unsigned int, int)':
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:91: error: 'enableIROut' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:92: error: 'mark' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:93: error: 'space' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp: At global scope:
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:108: error: 'IRsend' has not been declared
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp: In function 'void sendRaw(unsigned int*, int, int)':
C:\Program Files (x86)\Arduino\libraries\RobotIRremote\src\IRremote.cpp:110:
Cara, você esta testando os exemplos que vem na biblioteca, certo?
Excluirse sim, infelizmente da erros mesmo, porem se você testar com o meu código, ele funciona de boa.
Caros colegas, como faço para ele reconhecer a tecla pressionada. pois quando pressiono o codigo da tecla correspondente aparece mas se permaneço com a tecla pressionada o codigo fica fffffff. e eu queria manter a tecla pressionada e ele executando a açao repetidas vezes.
ExcluirBoa noite,gostaria de saber como fazer para funcionar com qualquer controle remoto,pois só consegui acender os leds com um controle menor semelhante ao seu,controle de tv,dvd...não acende,poderia me ajudar?
ResponderExcluirParabéns pelo trabalho!
Filipe, para fazer ele funcionar com um controle diferente, basta você abrir o serial monitor apertar a tecla do controle copiar o código que apareceu e alterar no código fonte.
ExcluirPorem controle de ar condicionado acho não funciona.
obrigado!
Boa noite,obrigado pelo retorno.
ExcluirPoderia me dizer como substituir os leds por lampadas ?
Procurei como usar lampada 110 V no arduino,mas não consegui juntar ao circuito
Boa noite, por nada.
ExcluirPara você usar qualquer equipamento elétrico de mais de 5v basta usar um relé.
Faça uma busca com: como usar rele com arduino
vai aparecer muitas resultados, ai é só adaptar na pratica pois no código não precisa alterar nada.
abraços
Olaa no meu arduino esta dando o erro:
ExcluirIRrecv ir_recebe(RECEBE_PINO);
ERRO:
ir_1_exemplo:5: error: 'IRrecv' does not name a type
ir_1_exemplo:6: error: 'decode_results' does not name a type
ir_1_exemplo:10: error: 'ir_recebe' was not declared in this scope
Olá , Anônimo. Você já baixou a biblioteca do site e instalou como esta no post http://www.criandorobocomarduino.com/p/bibliotecas-do-arduino.html
ExcluirCaso já tenha instalada, desinstale e instale novamente, pro favor.
Olá amigo, o meu está a mesma coisa quando pressiono e solto a tecla on/off
ResponderExcluiraparece no serial "FFFFFF" quando eu pressiono a mesma tecla duas vezes rápido ai aparece o código correto FFA25D na tecla no serial, vc pode me explicar onde vc colocou esse delay para ficar normal? joneppa@yahoo.com.br
Olá Jone, o código já esta com alteração feita.
ExcluirFaça o seguinte: aonde no código tem "delay(500);" altere para "delay(250);" e veja se resolveu. se não me avisa que eu entro em contato por e-mail para mais detalhes.
Abraço
ola não estou conseguindo copilar o Arduíno com o seu código sempre da estes erros
ResponderExcluirIn file included from F:\arduino-1.5.7\libraries\IRremote\IRremote.cpp:15:0:
F:\arduino-1.5.7\libraries\IRremote\IRremoteInt.h:292:2: error: #error "Please add OC4A pin number here\n"
#error "Please add OC4A pin number here\n"
^
F:\arduino-1.5.7\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::enableIROut(int)':
F:\arduino-1.5.7\libraries\IRremote\IRremote.cpp:202:11: error: 'TIMER_PWM_PIN' was not declared in this scope
pinMode(TIMER_PWM_PIN, OUTPUT);
Olá Jonas, o erro acontece pois você não instalou a biblioteca IRremote, faça o download e veja como instalar nesse link: http://www.criandorobocomarduino.com/p/bibliotecas-do-arduino.html
Excluircontrole de ar funciona sim, tem amigo postou video you... e automatizou ap dele, inclusive liga ar. parabens pelos exemplos e dicas a todos . cada um coopera pouquinho final temos bastante. Deus continue nos abençoando. abç´s
ResponderExcluirQue bom Reinaldo!
ExcluirObrigado, é assim que funciona se cada um cooperar, tudo fica bem melhor!
TCM bravissimo olha amigo eu consegui fiz um robo ir com asseguintes funções IR - FRENTE
ResponderExcluirIR - TRAS
GIRAR HORARIO
GIRAR ANTI-HORARIO
Liga Buzzer
Desliga Buzzer
acende os Faroes
Desliga os Faroes
liga a seta direita
Desliga a seta direita
liga a seta esquerda
Desliga a seta esquerda
Parada Total
obrigado grato.
Que bom Jonas!
ExcluirParabéns!
Caso queira compartilhar o código fonte com todos, entre em contato conosco.
Obrigado
passo sim amigio aqui esta
ResponderExcluir#include
int receiver = 2;
int motor1pin1 = 3;
int motor1pin2 = 4;
int motor2pin1 = 5;
int motor2pin2 = 6;
int Farol = 8;
int setadireita = 9;
int setaesquerda = 10;
int buzzer = 11;
IRrecv irrecv(receiver);
decode_results results;
void setup() {
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(Farol, OUTPUT);
pinMode(setadireita, OUTPUT);
pinMode(setaesquerda, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(receiver, INPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
switch (results.value) {
//CONTROLE
case 0XB54A02FD: { // seta cima
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
Serial.println("IR - FRENTE");
break;
}
case 0XB54AC23D: { // seta direita
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
Serial.println(" GIRAR HORARIO ");
break;
}
case 0XB54A42BD: { // seta esquerda
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
Serial.println("GIRAR ANTI-HORARIO");
break;
}
case 0XB54A827D: { // seta para baixo
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
Serial.println("IR - TRAS");
break;
}
case 0XB54A28D7: { // acende os Faroes
digitalWrite(Farol, HIGH);
Serial.println("acende os Faroes");
break;
}
case 0XB54A48B7: { // Desliga os Faroes
digitalWrite(Farol, LOW);
Serial.println("Desliga os Faroes");
break;
}
case 0XB54A50AF: { // liga a seta direita
digitalWrite(setadireita, HIGH);
Serial.println("liga a seta direita");
delay(5000);
digitalWrite(setadireita, LOW);
Serial.println("Desliga a seta direita");
break;
}
case 0XB54AD02F: { // liga a seta esquerda
digitalWrite(setaesquerda, HIGH);
Serial.println("liga a seta esquerda");
delay(5000);
digitalWrite(setaesquerda, LOW);
Serial.println("Desliga a seta esquerda");
break;
}
case 0XB54A7887: { // liga Buzzer
digitalWrite(buzzer, HIGH);
Serial.println("Liga Buzzer");
delay(5000);
digitalWrite(buzzer, LOW);
Serial.println("Desliga Buzzer");
break;
}
case 0XB54A38C7: { // parada total
digitalWrite(Farol, LOW);
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
digitalWrite(buzzer, LOW);
Serial.println("Parada Total");
break;
}
}
delay(100);
irrecv.resume();
}
}
este codigo e de um rogo ir com as funcoes
ResponderExcluirFRENTE
IR - TRAS
GIRAR HORARIO
GIRAR ANTI-HORARIO
Liga Buzzer
Desliga Buzzer
acende os Faroes
Desliga os Faroes
liga a seta direita
Desliga a seta direita
liga a seta esquerda
Desliga a seta esquerda
Parada Total
eles esta a disposição de todos
ele controla duas ponte h 3 tres ociladores digitais
ate mais amigos
Parabens, este codigo me ajudou bastante a controlar minha junkbox com um controle IR. No entanto ao inves de IF eu utilizei Switch case para o codigo não ficar muito extenso. Ficou show de bola! eu pressiono uma tecla do controle e o arduino envia uma combinacão de caracteres que é interpretada pelo computador atraves da serial como se fosse uma determinada tecla do teclado sendo pressionada. valeu pela ajuda.
ResponderExcluirSerá que há um outro modo de fazer esta operação sem usar Arduíno ou PIC?
ResponderExcluirSempre que tento abrir o monitor serial para adicionar novos códigos aparece a msg: "Board at COM7 is not available". O Arduíno realmente está conectado à esta porta e com outros códigos consigo fazer o monitor serial funcionar normalmente. Oque pode estar havendo?
ResponderExcluirBruno, provavelmente você ligou o fio do receptor infravermelho no pino 2(TX) e não no 3 que é o correto, se você ligar no pino 2 ele fica ocupando a saída de informações e com isso o monitor não abre.
ExcluirJá troquei o delay e nada! qualquer tecla pressionada só aparece FFFFF algúem pode ajudar??
ResponderExcluirBoa tarde, estou fazendo um projeto onde tenho 04 servos (cintura, cabeça, braço 1 e braço 2) de um robozinho controlados por IR.
ResponderExcluirO IR funciona perfeitamente, lendo o número do controle, mas quando adiciono os servos e leitura do IR fica louca, o mesmo botão do controle gera códigos diferentes a cada clique.
O que pode estar acontecendo? Os servos (MG995) estão ligados diretamente ao arduino - alimentação).
Olá, pode ser por causa da alimentação dos motores, alimente o motor externamente e veja se funciona.
ExcluirBoa Noite Amigos!
ResponderExcluirTenho uma Duvida...
CONSIGO LIGAR MAIS DE "1" SENSOR NO MESMO "ARDUINO"?
Pois quero deixar o "ARDUINO COMO CENTRAL".... e mandar outros sensores para outros cômodos...
Por gentileza...Alguem poderia me explicar se é Possível..?
Obrigado!
Boa tarde, Daniel.
ExcluirTem como sim, é só fazer o mesmo processo porem alterando a porta e o nome do IR.
o meu da um erro no rawbuf
ResponderExcluirPreciso de juntar dois valores do controle, exemplo, quero acender um led com o botão 59, então preciso preciosas o botão 5 e o 9 no controle, como eu faço isso?
ResponderExcluirOlá Julio. pegue o resultado em HEX do numero 5 e do numero 9 e faça:
Excluirif ((codigo_recebido.value == 0xHEXA NUMERO 5) &&(codigo_recebido.value == 0xHEXA NUMERO 9)){
...
esper der ajudado
Teria alguma forma de identificar os controles? Digo tenho 20 controles da mesma marca e modelo, eles tem os mesmo códigos infravermelhos, existe algum jeito que eu consiga pegar alguma númeraçao única de cada controle? como por exemplo um ID?
ResponderExcluirOlá, Herbert. Infelizmente não, só através do comentário na frete do código mesmo.
ExcluirOi pessoal, montei esse ir. Mas quando liguei ele com um resistor de 100ohms no 5 v ele nao parava de receber codigos... Dai coloquei um resistor de 1k, melhorou. Mas quando eu pressiono uma tecla, ele me da um codio e se eu pressiono essa mesma tecla ele da outro codigo. O que pode ser?
ResponderExcluirOlá Mateus, tudo bem?
ExcluirIsso acontece por causa do resistor que esta cortando o sinal, o idela é você usar um Resistor 20 ohms para resolver esse problema.
Sucesso no projeto!
Boa noite, li o tutorial e os comentários e achei bem interessante e agradavel a presteza que vocês respondem as questões. Parabéns e sucesso a todos. Vanerson Mendes
ResponderExcluirOlá, Obrigado Vanerson por acessar e comentar!
ExcluirFazemos o possível para poder resolver os problemas de nossos visitantes.
Acesse o nosso novo site: SeuRobo.com.br
Boa noite amigos, segui a explicaçao abaixo mas para de responer.
ResponderExcluir"Preciso de juntar dois valores do controle, exemplo, quero acender um led com o botão 59, então preciso preciosas o botão 5 e o 9 no controle, como eu faço isso?
Criando Robô Com Arduino29/01/2016 20:54
Olá Julio. pegue o resultado em HEX do numero 5 e do numero 9 e faça:
if ((codigo_recebido.value == 0xHEXA NUMERO 5) &&(codigo_recebido.value == 0xHEXA NUMERO 9)){
...
COMO FAÇO PARA CONSEGUIR ACIONAR O LED COM DOIS NUMEROS COMO POR EXEMPLO 59?
GRATO
Olá Vanerson.
ExcluirNão tem como fazer uma comparação com o numero 59, e sim como falado no código acima, tem como comprar se apertou o 5 e logo em sequencia o 9 isso ira resulta no 59 e ira fazer o que você quer.
Caso tenha mais duvidas pode nos contatar pelo email: Contato@SeuRobo.com.br
Acesse o nosso novo site: SeuRobo.com.br
Acesse nossa loja virtual também: Loja.SeuRobo.com.br
E veja os serviços que prestamos: SeuRobo.com.br/servicos
Só um comentário simples: parabéns pelo site, pelo esforço e pela gentileza em compartilhar seu conhecimento e permitir que pessoas também façam o mesmo. Aprendo muito com seu site. Você faz a diferença. Obrigado.
ResponderExcluirOlá, Tulio.
ExcluirMuito obrigado!
A intensão da nossa empresa é essa mesmo, ajudar a todos a der mais conhecimento e conseguir fazer seu próprio robô!
Muito obrigado mesmo, e agradeço muito a você por ser nosso usuário e gostar do nosso conteúdo!
Acesse o nosso novo site: SeuRobo.com.br
Acesse nossa loja virtual também: Loja.SeuRobo.com.br
E veja os serviços que prestamos: SeuRobo.com.br/servicos
Boa tarde, estou querendo clonar o controle da minha TV para um projeto. Quero apenas receber o código e armazenar. Como devo proceder?
ResponderExcluirImageHOLDERS customized betting kiosk was recently acquired by Best Gaming Technology for installation in 200 Coral betting retailers nationwide, with potential for further deployment sooner or later. The gambling kiosk consists of a Shell+ 15 pill kiosk 코인카지노 encasing a Flytech touchscreen pill and barcode scanner with an under counter unit housing contactless card reader, coin acceptor and receipt printer. The technology in betting stores advanced when further gambling laws allowed the retailers to offer hot drinks and televisions level out|to indicate} the races.
ResponderExcluir