Neste projeto vamos utilizar o componente eletrônico receptor de infravermelho (IR) para controlar 3 LEDs com um controle remoto comum. Vamos LIGAR e DESLIGAR os LEDs pressionando alguns dos botões do controle remoto. Este é um projeto bacana para nos familiarizarmos com o componente: receptor infravermelho.
Nosso projeto ficou dividido em duas partes, onde:
- Na primeira parte iremos decodificar os sinais IR transmitidos pelo controle remoto em uso;
- Na segunda e última parte do projeto, com os dados já decodificados que obtivemos no passo anterior, utilizaremos essa informação para executar a tarefa final com o apoio do Arduino: o controle dos 3 LEDs. 😉
O componente Receptor Infravermelho (IR = infra-red):
O componente que utilizaremos é um receptor de infravermelho como o mostrado na figura abaixo. O modelo é o TSOP4838. (gostaria de deixar como Dica 💡 que nos meus testes utilizei vários sensores infravermelhos e mesmo não sendo o TSOP4838, todos funcionaram igualmente, então, não esquenta a cabeça caso não disponha deste modelo específico, mas tente montar o circuito e testá-lo utilizando o receptor IR que você tenha em mãos). 🙂
Como podemos ver, o receptor IR tem três pinos (e cada um deles com uma específica finalidade)
- OUT (SAÍDA, ou como também chamada, SIGNAL = SINAL)
- GND (TERRA)
- VCC (FONTE DE TENSÃO)
Quando pressionamos algum botão do controle remoto, ele envia sinais modulados infravermelhos. Estes sinais contêm informações, que no caso, o nosso receptor IR, coleta (e nós vamos saber que dados são estes e como são, utilizando o Monitor Serial da nossa IDE Arduino). 💡
Como já sabemos, cada botão de um controle remoto, tem uma função específica, e sendo assim, cada um deles, quando pressionados, enviam suas informações também específicas. Desta forma, podemos atribuir “uma função específica” para cada uma das teclas que escolhermos trabalhar (decodificar).
Componentes Necessários para montagem:
Para este projeto precisaremos de um controle remoto.
Qualquer controle remoto vai funcionar bacana, mesmo que seja um velho que não utilizamos mais por estar obsoleto ou porque o aparelho controlado por ele, quebrou. Na realidade, se for um velho que não usamos mais, é perfeito, pois ele voltará “a ter uso“! 😀
Figura | Nome |
---|---|
Protoboard | |
Arduino UNO | |
Receptor de Infravermelho (TSOP4838 ou equivalente) | |
3x LED | |
3x 220Ohm Resistor | |
Jumpers | |
1x Controle Remoto |
1ª Parte: DECODIFICAR OS SINAIS INFRAVERMELHOS (IR)
Nesta primeira parte do projeto, como mencionei algumas linhas acima, precisaremos decodificar os sinais IR associados a cada botão que vamos utilizar do controle remoto (adiantando um pouco o tema, utilizaremos apenas 6 botões/teclas do nosso controle remoto).
Esquemático: CIRCUITO DECODIFICADOR DE IR
O CÓDIGO (sketch):
Para controlar o receptor infravermelho, neste projeto precisamos instalar uma biblioteca externa à lista de “libraries” da nossa IDE Arduino. A biblioteca é a IRremote.
INSTALANDO A BIBLIOTECA “IRremote”:
- Clique aqui para baixar a biblioteca IRremote . (normalmente obteremos um arquivo .zip em downloads);
- Descompactamos o arquivo .zip e devemos obter uma pasta chamada IRremote-master;
- Renomeamos a pasta de
IRremote-masterpara IRremote;
- Movemos a pasta IRremote para a pasta “libraries” (bibliotecas) da nossa IDE Arduino;
- Finalmente, reabrimos a IDE do Arduino para iniciar a programação.
Atenção ❗ : A biblioteca que estamos utilizando em nosso projeto (a IRremote) gera conflitos com uma outra biblioteca chamada: RobotIRremote. Então, para que possamos seguir com nosso projeto sem ter “dor-de-cabeça” tentando descobrir onde está aquele “bug” que não nos permite rodar nosso código, nem mesmo compilar, recomendo que se você tiver estas duas bibliotecas instaladas em sua IDE do Arduino, então mova temporariamente a RobotIRremote para um outro local e desta forma libere o funcionamento normal da nossa atual e necessária biblioteca – IRremote. Se não fizermos isso, nosso código não irá compilar! 😡
Faça o download ou copie o código abaixo para a IDE do seu Arduino e envie para sua placa Arduino. Certifique-se de que você tenha a placa correta selecionada na IDE assim como a respectiva porta COM selecionada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * http://arcfn.com */ #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } delay(100); } |
Uma vez que tenhamos subido o código acima para nossa placa Arduino, então abrimos o Monitor Serial da IDE a uma taxa de transmissão de 9600 baud rate.
Neste projeto desejamos controlar 3 LEDs via controle remoto certo? Então temos que escolher 6 botões em nosso controle para que realizem as seguintes tarefas:
- LED(1) – ON
- LED(1) – OFF
- LED(2) – ON
- LED(2) – OFF
- LED(3) – ON
- LED(3) – OFF
💡 Pressione, por exemplo, o botão de número 1 (ou qualquer outro botão que você tenha disponível no seu controle remoto e deseje utilizar). Veremos “aparecer” um determinado código no Monitor Serial. Recomendo pressionar o mesmo botão várias vezes, isto serve para nos certificar de que estamos obtendo o código correto para esse botão no monitor serial do Arduino. No caso de pressionarmos o botão e vermos aparecer algo como FFFFFFFF, podemos ignorar, esse código em Hexadecimal pra gente neste caso, é lixo. ❗
Realizamos o mesmo procedimento para os outros botões do controle que desejamos utilizar.
Atenção! Devemos anotar o código associado a cada botão/tecla, porque vamos precisar dessa informação mais tarde na hora de finalizar o nosso código (e projeto). Para melhor compreensão: basta montar o circuito e apontar seu controle remoto para o receptor infravermelho que vai estar em sua protoboard, então, pressione qualquer botão e veja na tela do seu computador (monitor serial da IDE Arduino) o respectivo código emitido pelo botão pressionado (que vai ser um número em formato hexadecimal), o qual mais tarde neste mesmo projeto vamos “transformar em decimal” e finalizar o projeto, então como boa dica, deixe estas anotações em mãos. 😉
MONTANDO O CIRCUITO FINAL:
Nesta parte do projeto, vamos montar o circuito final, que utiliza os nossos três LEDs que serão controlados usando o controle remoto. 😉
ESQUEMÁTICO:
FINALIZANDO NOSSO CÓDIGO:
Chegou o momento de utilizar aqueles códigos hexadecimais obtidos na etapa número 1 do nosso projeto. Precisamos converter estes códigos de formato hexadecimal para decimal.
Para realizar as conversões de forma mais rápida e “não manual”, podemos utilizar o conversor do seguinte website: www.binaryhexconverter.com/hex-to-decimal-converter
Segue abaixo um simples exemplo da conversão que realizei para um dos meus códigos (aqueles obtidos na etapa anterior, ao pressionar as teclas do controle remoto pessoal):
Vamos repetir este mesmo processo para todos os valores hexadecimais obtidos através do “pressionar” dos botões do controle remoto e vamos salvar os valores decimais convertidos. Estes serão os valores que utilizaremos para substituir os atuais (os que utilizei no meu próprio circuito) no código (sketch) que vem a seguir.
Faça o download ou copie o código abaixo para a IDE do seu Arduino e envie para sua placa Arduino. Neste passo devemos digitar os valores decimais (que obtivemos na etapa acima) no nosso código (na parte das linhas “SWITCH >> CASE) e fazer o “upload” do código atualizado com nossos próprios valores decimais para a placa Arduino. Neste momento, uma vez mais, certifique-se de que tenha a placa correta selecionada na IDE assim como a respectiva porta COM selecionada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
/* * Modified by Rui Santos, http://randomnerdtutorialscom * based on IRremote Library - Ken Shirriff * * Adaptado e Modificado por Rodrigo Costa * Blog: https://eletronicaparatodos.com * http://eletronicaparatodos.net * * Rev.01: 28/03/2017 * Rev.02: 30/03/2017 * */ #include <IRremote.h> int IR_Recv = 11; //Pino OUT do Receptor Infravermelho (IR) int ledVermelho = 10; int ledAmarelo = 9; int ledVerde = 8; IRrecv irrecv(IR_Recv); decode_results results; void setup(){ Serial.begin(9600); //iniciamos a comunicacao serial irrecv.enableIRIn(); //inicia o receptor infravermelho (IR) pinMode(ledVermelho, OUTPUT); // configuramos o pino digital como saída pinMode(ledAmarelo, OUTPUT); // configuramos o pino digital como saída pinMode(ledVerde, OUTPUT); // configuramos o pino digital como saída } void loop(){ //decodificamos a entrada do receptor infravermelho if (irrecv.decode(&results)){ long int decCode = results.value; Serial.println(results.value); //SWITCH CASE para usar o botão pressionado do controle remoto switch (results.value){ case 551520375: //quando pressiono o botao 1 do meu controle remoto digitalWrite(ledVermelho, HIGH); break; case 551495895: //quando pressiono o botao 4 do meu controle remoto digitalWrite(ledVermelho, LOW); break; case 551504055: //quando pressiono o botao 2 do meu controle remoto digitalWrite(ledAmarelo, HIGH); break; case 551528535: //quando pressiono o botao 5 do meu controle remoto digitalWrite(ledAmarelo, LOW); break; case 551536695: //quando pressiono o botao 3 do meu controle remoto digitalWrite(ledVerde, HIGH); break; case 551512215: //quando pressiono o botao 6 do meu controle remoto digitalWrite(ledVerde, LOW); break; } irrecv.resume(); // Recebe o próximo valor do botão que pressionamos } delay(10); } |
DEMONSTRAÇÃO:
Com o circuito final montado, poderemos controlar cada LED individualmente através dos botões do controle remoto que escolhemos.
Veja o mini-vídeo abaixo, para ter uma ideia sobre o que nosso circuito será capaz de realizar no final da montagem:
PARA FINALIZAR:
Este é “um exemplo” de um projeto utilizando Arduino UNO, que nos faz aprender algo mais também sobre o componente eletrônico – receptor infravermelho (IR). Existem infinitas possibilidades de projetos e circuitos que podemos realizar com este componente.
Por exemplo: poderíamos substituir os LEDs por um relé para controlar cargas bem maiores que os LEDs.
Algo também interessante sobre os controles, é que alguns, ou quase todos, atualmente, têm um monte de botões que nunca utilizamos (e/ou utilizaremos). Então, a pergunta que fica é: por que não utilizá-los para realizar alguma coisa?
PS: também preciso te avisar, que, encontrei alguns problemas com a biblioteca IRremote (mas que estão “aquém” dos nossos propósitos para estes projetos). Por exemplo: descobri que esta biblioteca gera conflitos utilizando o comando/instrução: analogWrite() – que como sabemos, é uma função do próprio Arduino.
- Medindo e Monitorando a Temperatura com Arduino (Sensor LM35) - 5 de setembro de 2021
- Controle de Cargas através de Entrada Analógica com Arduino - 30 de agosto de 2021
- REVIEW E DICAS – ALICATE AMPERÍMETRO (UNI-T UT210E PRO) - 28 de agosto de 2021
Olá. Gostaria de saber se dá pra fazer com MÓDULO infravermelho tbm?
Olá Dora! Tudo Bom?!
Primeiramente seja muito bem-vinda e obrigado pela sua mensagem!
Olha só, se estamos falando “do mesmo módulo receptor IR”, creio ser completamente possível você substituir um pelo outro caso queira.
Observando o módulo, ele possui os mesmos 3 respectivos pinos que o receptor sozinho (OUT, GND e VCC), então creio eu que você não terá qualquer problema! 🙂
Qualquer dúvida é só falar.
Um Abraço,
Rodrigo Costa do Blog,
https://EletronicaParaTodos.com