Como fazer um controle remoto de TV com arduino

Olá, amantes de robótica!
Quer sacanear sua família trocando de canal com um controle feito de arduino?
Então veja como faze-lo!



Veja o vídeo do controle remoto com arduino em funcionamento:





Vamos ao material que precisamos: 



Qtd     Itens:
1      -  Arduino UNO ou qualquer outra versão;
1      -  LED Infravermelho;
1      -  LED verde ou vermelho;
6      -  Resistor 300 ohms;
4      -  Botões;
1      -  Protoboard;
1      -  Controle da TV que você quer "hackear";
16     -  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:
(clique na imagem pra ampliá-la)

Atenção:
Agora pegue o controle normal da TV que você quer sabotar. Veja esse tutorial: Como receber sinal de um controle remoto com infravermelho (TV, DVD, outros) com o arduino
Nesse outro tutorial você pegará o código das 4 teclas que iremos clonar. Após pegar o código, altere-o no código:

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 fazer um controle remoto de TV com arduino    
  ---------------------------------------------------------------------------------------------------  
 */    
  #include <IRremote.h> // Biblioteca para controlar o led infravermelho   
  IRsend irsend; //variável para poder enviar o código a TV   
  //variáveis constantes para o controle remoto   
  const int maisvolume = 9;     
  const int menosvolume = 10;   
  const int maiscanal = 11;   
  const int menoscanal = 12;   
  const int led = 8;    
  const int ledIR = 3;   
  //inicia o botão com o status 0    
  int buttonState = 0;      
  void setup() {   
  pinMode(led, OUTPUT); // saida led     
  pinMode(ledIR ,OUTPUT); // saída do infravermelho   
  Serial.begin(9600);   
  //configurando a entrada dos botoes   
  pinMode(maisvolume, INPUT);    
  pinMode(menosvolume, INPUT);    
  pinMode(maiscanal, INPUT);    
  pinMode(menoscanal, INPUT);    
  }   
  void loop(){   
  //se o botão maisvolume for pressionado ele ira enviar o código para aumentar o volume na tv   
  if (digitalRead(maisvolume) == HIGH) {     
   digitalWrite(led, HIGH);    
   irsend.sendNEC(0x39C600FF, 32);// código que sera enviado a tv para aumentar o volume    
  }   
  else {   
   digitalWrite(led, LOW);    
  }    
  //se o botão menosvolume for pressionado ele irá enviar o código para diminuir o volume na tv   
  if (digitalRead(menosvolume) == HIGH) {     
   digitalWrite(led, HIGH);    
   irsend.sendNEC(0x39C6807F, 32);// código que sera enviado a tv para diminuir o volume    
  }    
  else {   
   digitalWrite(led, LOW);    
  }   
  //se o botão maiscanal for pressionado ele ira enviar o código para aumentar o canal na tv   
  if (digitalRead(maiscanal) == HIGH) {     
   digitalWrite(led, HIGH);   
   irsend.sendNEC(0x39C6E817, 32); // código que sera enviado a tv para aumentar o canal    
  }    
  else {   
   digitalWrite(led, LOW);    
  }   
  //se o botão menoscanal for pressionado ele irá enviar o código para diminuir o canal na tv   
  if (digitalRead(menoscanal) == HIGH) {     
   digitalWrite(led, HIGH);    
   irsend.sendNEC(0x39C6C837, 32); // código que sera enviado a tv para diminuir o canal    
  }   
  else {   
   digitalWrite(led, LOW);    
  }    
  }   
 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
   >>>>> 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  
   :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/  


Atenção:
Quem ira utilizar o arduino MEGA 2560, tem que inverter os pinos e o código fonte.
o pino do led IR tem que ser o 9 e o do volume pode ser no 7, igual na imagem:




Pronto, qualquer duvida é só deixar nos comentários ou entrar em Contato 

Quer ajuda ou quer ajudar? Clique em Ajuda e veja como você pode ajudar ou ser ajudado.



46 comentários:

  1. muito emocionante o projeto!, eu tenho o arduino mega2560 e acho que o codigo naum funciona para ele, a compilacao da certo tudo (pq ja instale as livrarias) mas logo no osciloscopio nao sai a sinal pelo pino 3.... x( ...eu to usando o mesmo codigo que vocë postou só pra testar se ta saindo sinal no pino 3. mas naum da , sera que tenho q modificar alguns parametros para o meu arduino?

    ResponderExcluir
    Respostas
    1. Para saber se está queimado basta alimentá-lo e ver se ligou com um camera de celular.

      Excluir
  2. Gosto de todos seus projetos!.. Obrigado pela ajuda... eu retirei o infravermelho e analizei no osciloscopio, naum tem sinal nehuma no pino 3 por isso nao faz o led infravermelho fazer a "magia" xD... mesmo que presiono o controle que já "fiz um hack nele foi legal" mas.... eu copie o codigo de voce com seus parametros para testar a saida digital e so da cero volts constante... acho que se naum for o codigo pro meu arduino o meu arduino poderia estar malfuncionando seria uma pena

    ResponderExcluir
  3. eu tenho um receptor infravermelho só são com duas pernas,queria saber se tem alguma diferença entre o duas e três pernas ?
    abraços

    ResponderExcluir
    Respostas
    1. Olá, infelizmente eu não sei responder ao certo sua pergunta.
      Acho que tem , pois o de três pinos tem toda uma questão técnica da recepção do sinal.

      Excluir
    2. Você talvez esteja confundindo o IR emissor (2 pernas) com o IR receptor (3 pernas), onde este último é um sensor com dois pinos para alimentação e um de sinal. Se for um preto de duas pernas talvez seja um fototransistor.

      Excluir
  4. quando vai sair o proximo projeto?

    ResponderExcluir
    Respostas
    1. Olá, para saber qual projeto estou fazendo por favor acesse: http://www.TestCriandoRoboComArduino.com/

      Atualmente, estou melhorando o site, melhorando as fotos e videos.
      Também estou fazendo um robô controlado por controle remoto de tv.

      Caso queira receber os novos projetos e robôs no seu email, envie um email para: CriandoRoboComArduino@gmail.com com isso eu de cadastro no grupo aonde envio as atualizações do site.

      Abraço

      Excluir
  5. procurei na internet.. mas não achei,um projeto de Robô R2-D2 com Arduino...da pra fazer?

    ResponderExcluir
    Respostas
    1. Olá, sim!
      Obrigado pela dica, daqui um tempo irei ver se faço um robô parecido com o R2-D2

      Excluir
  6. Olá! Gostei bastante do tutorial, montei no meu Mega 2560 e funcionou perfeitamente, porém com aquela troca de pinos indicada ali no final do tutorial. Não entendi o porque do não funcionamento com o mais volume no 9 e o LED IR no 3, uma vez que os 2 pinos são PWM em ambas as placas UNO e Mega 2560. A pergunta é mais por curiosidade mesmo: porque essa troca dos pinos é necessária para o funcionamento com o Mega 2560?
    Desde já, obrigado pelo tutorial.

    ResponderExcluir
    Respostas
    1. Olá, que bom que gostou amigo.
      Algum Mega 2560 tem o microcontrolador diferente, nesses ele pode não funcionar nessas portas.
      Nós que agradecemos sua visita!

      Excluir
  7. ola tudo bem,vc poderia me falar como eu faço para o Arduíno receber o sinal de um controle e transmitir o codigo de um controle de outra marca? ex:minha tv é sony quero que o Arduíno recebe o sinal de um controle semp toshiba e transmita os comados da tv sony? assim posso fazer minha tv funcionar com qualquer controle

    ResponderExcluir
    Respostas
    1. Olá, tudo bem e você? com o mesmo botão não tem como, mais tem como colocar outros botões no mesmo "controle" assim fazendo os dois funcionar em um.
      Abraço

      Excluir
    2. não amigo o que eu quero fazer é sem os botoes usado o receptor IR para receber uma tecla de um controle sony, e enviar pelo led IR codigo de outra marca de controle como fosse um conversor

      Excluir
    3. Compreendi agora, amigo.
      Infelizmente não tem uma biblioteca que faça isso, infelizmente tem que pegar os códigos de todos os controles que deseja para poder fazer esse projeto.

      Excluir
    4. bem amigo eu modifiquei seu codigo e fiz isso que eu falei deu certo só que o arduino só manda o codigo uma vez e não manda mas veja codigo e mediga oq eu tenho que muda para ele manda o codigo sempre que eu aperta a tecla do controle
      #include // incluindo a biblioteca do infravermelho
      const int RECEBE_PINO = 2; // pino 6 no arduino
      IRsend irsend; //variável para poder enviar o código para o deco ou tv
      const int ledIR = 3;
      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(ledIR ,OUTPUT); // saída do infravermelho
      }
      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 == 0xEFD02F)){// verifica se foi pressionado o numero 1 dos controles
      irsend.sendNEC(0xEFBA45, 32);// código que sera enviado a tv para aumentar o volume

      Excluir
    5. Olá, amigo, desculpe a demora na resposta.
      Gostaria que você false mais sobre o que quer porem de preferencia por email, por favor Clique aqui para entrar em contato e me informe os códigos dos controles, de responderei por email.
      Um grande abraço!

      Excluir
  8. Boa tarde.realizei a leitura utilizando o IRM 2638 e depois utilizei os codigos obtidos pra emitir com o emissor de infra-vermelho. Só que não está funcionando. Eu quero fazer da seguinte maneira: Eu envio uma mensagem por uma conexão serial(no exemplo bluetooth) faço uma comparação e então utilizo o emissor de infravermelho.
    char c = Serial.read();
    if (c == 'a') {
    irsend.sendNEC(0x2FD48B7, 32);// código que sera enviado a tv
    }

    ResponderExcluir
    Respostas
    1. Este comentário foi removido pelo autor.

      Excluir
    2. Consegui encontrar meu erro.
      Obrigado e parabéns pelo tutorial.

      Excluir
    3. Oi Talyson, porfavor qual era o erro que voce teve, para eu verificar se eu estou fazendo o mesmo ^^

      Excluir
    4. Oi Kézia. O meu erro era que eu enviava o comando e era como se apertasse um botão e segurasse, então o receptor n conseguia ler. Para arrumar eu mandava o comando via celular e então o emissor emitia o codigo e logo em seguida o emissor n mandava mais nada... por exemplo:
      char c = Serial.read();
      if (c == 'a') {
      irsend.sendNEC(0x2FD48B7, 32);// código que sera enviado a tv
      delay(50)
      irsend.sendNEC(0x0, 32);
      }

      Excluir
  9. oi coloquei o IR na porta 3 mas ele pisca mas nao envia dado ou não sei se é algo na frequencia ou como estou enviando dado pq ele simplesmente não envia dado, voce poderia me dar uma elp pr favor?

    ResponderExcluir
    Respostas
    1. Olá, para saber se ele esta enviando algum código, com o seu celular use a câmera frontal, coloque em frente ao IR e veja se esta saindo uma luz, se sim ele esta enviando o código, ai pode ser algum erro no código que você obteve, se não pode ser alguma montagem errada.

      Excluir
  10. sim ele acende a uz, estu usando o send RC6, é para interagir com um setup box. Fiz um esquema de receber infra e reenviar apertando um push button... Tudo está funcionando exceto a transmissao de infra

    ResponderExcluir
    Respostas
    1. Olá, pode ser o resistor que esta alta, confirme se ele é de 300ohm por favor

      Excluir
  11. ja nao sei mais oq pode estar errado. Já tentei enviar em hexa e decimal, tentei fazer por sendRaw mudando frequencia e repetindo ate mais vezes o comando... eu vejo que o infra esta piscando mas parece que não sai dado '-', tem aguma ideia do que posso tentar ainda?

    ResponderExcluir
    Respostas
    1. Olá, Kezia, talvez você não captou o sinal correto do controle, por favor verifique novamente.

      Excluir
  12. Este comentário foi removido pelo autor.

    ResponderExcluir
  13. Este comentário foi removido pelo autor.

    ResponderExcluir
  14. Hélio Baldutti15/09/2015 03:15

    Antes de mais nada, obrigado pelo desenvolvimento do tutorial.

    Eu tenho uma dúvida e gostaria de ajuda. Exemplo: Se eu ligar 2 leds emissores IR no Arduíno, levando cada um para uma TV (1 na sala e 1 no quarto), sendo estas da mesma marca (logo mesmo código do Controle Remoto), entendo que o mesmo sinal será aplicado as duas.

    Como posso fazer para que esse sinal seja enviado a somente uma TV? Há alguma maneira de separar para qual TV eu desejo controlar?

    Obrigado!

    ResponderExcluir
    Respostas
    1. Olá, Helio. Tem como sim, porem as duas Tvs tem que esta no rumo do infra ao contrário a tv não ira captar o sinal.
      Tem como separa sim, basta fazer um código para a tv e usar o outra parte do código com outra porta para a outra tv.

      Obrigado pelos elogios!

      Excluir
  15. olá alguém poderia tirar uma duvida minha?
    no codigo usamos sendNEC, porem o meu controle e identificado como Unknown encoding que alteração eu preciso fazer?

    ResponderExcluir
    Respostas
    1. Olá Felipepm, não tem problema, ele só esta de informando que não reconheceu a codificação do seu controle.

      Excluir
  16. Cara, de verdade, muito bons seus projetos!! me ajudam muito! estou começando com o arduino. Estou tentando fazer uma adaptação neste código, para funcionar com um encoder rotativo. Onde, girando no sentido horario, enviaria um sinal para + volume e no sentido anti-horário para - volume, Pressionando ele o IR enviaria um sinal de mute e teria mais 3 switchers (canal +; canal -; power). estou tentando fazer, assim que obtiver um resultado posto aqui. Ou, se não conseguir, venho pedir ajuda! kkkk
    Parabéns pelos projetos!

    ResponderExcluir
    Respostas
    1. Que bom que os nossos projetos estão de ajudando e que legal saber que você ira melhorar esse projeto!
      Obrigado pelos elogios!

      Excluir
  17. Boa tarde, o resistor do led IR tem que ser de 300ohms?
    Não pode ser 220? como a resistência influência?

    ResponderExcluir
  18. Boa tarde ! Preciso de um help!
    Fiz todas as configurações acima! Mas antes capturei os codigos dos botoes da TV.
    Minha TV é uma samsung e não funciona! Peguei outro arduino e montei o receptor e tanto o controle arduino e o controle da TV transmite o mesmo codigo para os botões que preciso.
    O controle arduino com a TV não funciona!
    Tem algum ajuste para as TV Samsung?

    Obrigado

    ResponderExcluir
    Respostas
    1. Boa noite,

      Estou com o mesmo problema, consegui controlar o aparelho de tv a cabo, mas não consegui controlar o TV Samsung.

      Alguém conseguiu?

      Obrigado

      Excluir
  19. Boa tarde, também não consegui funcionar a televisão Samsung, Alguem sabe me dizer porque, fiz testes em três marcas diferentes e todas funcionaram. Obrigado

    ResponderExcluir
  20. Para que serve aquele numero 32 (irsend.sendNEC(0x39C600FF, 32)) ?

    ResponderExcluir
    Respostas
    1. Matheus, esse numero representa a quantidades de bits que ira receber de informação.
      Agradeço o contato!
      Acesse: SeuRobo.com.br

      Excluir
  21. Olá, ótimo blog e tutoriais
    Gostaria de saber como prossigo com a programação e pinagens se quiser 6 botões?

    ResponderExcluir
    Respostas
    1. Agradecemos os elogios.
      Já foi respondido por email a sua duvida, Bianca.

      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

      Excluir

O seu comentário estará aguardando aprovação.