Escolha uma Página

Controle qualquer dispositivo com controle IR através do Arduino

18 ago - 2020

Neste artigo, vamos aprender a controlar, a partir do Arduino, qualquer dispositivo que use um controle remoto infravermelho, como por exemplo, TV, ar condicionado e etc. A partir disto, você poderá implementar uma lógica de controle a fim de automatizar algumas atividades do dia-a-dia, como por exemplo, ligar automaticamente o seu ar condicionado quando a temperatura atingir um valor preestabelecido.

 

Lista de Materiais

1x Arduino UNO R3.

10 x jumpers macho-macho.

1x modulo controle remoto + LED IR.

1X transistor de sinal NPN BC337.

1x resistor de 1kΩ.

1x resistor de 220Ω.

 

Os materiais acima podem ser substituídos por similares, como, por exemplo, o Arduino NANO pode ser substituído pelo Arduino UNO R3.

 

Entenda como funciona o protótipo

Os eletrodomésticos que usam um controle infravermelho (IR), em sua grande maioria, utilizam um protocolo de comunicação via IR. Isto é, para cada tecla do controle, que exerce uma função especifica, há uma codificação correspondente.

Observe que, um protocolo é uma convenção que possibilita a comunicação entre dois dispositivos. Para os controles remotos que funcionam com IR, existem quatro protocolos, que são os mais difundidos na indústria de eletrônicos, sendo eles, protocolo NEC, Phillips, Sharp e Sony.

Hoje, não iremos nos aprofundar na maneira com que cada protocolo de comunicação funciona. Inicialmente, iremos aprender como clonar cada comando de um controle remoto, por exemplo, o controle da sua TV, e então iremos aprender a reproduzir esse comando com um Arduino, usando um LED IR para transmitir os dados.

Observe que, essa técnica é muito interessante, para uma automação não invasiva. Ou seja, não há a necessidade de modificar ou abrir o aparelho que se deseja controlar. Basta, simplesmente, clonar as teclas do controle remoto do seu disposto alvo e implementar a sua lógica de controle. Como sugestões de controle, podemos indicar:

  • Ligar o ar condicionado em um determinado horário, por exemplo, minutos antes de chegar do seu trabalho.
  • Desligar a TV em um horário programado.
  • Diminuir ou aumentar a temperatura do ar-condicionado.

 

Primeiro passo: clonando as teclas do controle remoto

Vamos aprender como clonar as teclas do controle remoto IR do seu eletrodoméstico de interesse. Em primeiro lugar, é necessário entender que, na grande maioria dos casos, não há a necessidade de clonar todas as teclas, clone apenas aquelas que te interessam. Com essa atitude, você irá poupar a memória do seu Arduino e ganhará tempo.

Observe a figura 1 com a montagem do protótipo de clonagem. Essa parte é bem simples, basta fazer as conexões conforme indicado na tabela 1.

PINO DO ARDUINO UNO OU NANOPINO DO MÓDULO RECEPTOR DE IR
5V5V
GNDGND
D2SINAL

Tabela 1: descrição de conexões entre o módulo IR e o Arduino.

 

img 1 do post IR

Figura 1: Diagrama de montagem em protoboard do módulo receptor de sinais IR.

 

O site AnalysIR desenvolveu um sketch, muito útil para capturar a codificação de teclas de controle remoto IR. A vantagem deste sketch é que, ele é capaz de fornecer o código de tecla de praticamente qualquer controle remoto, e de nos fornecer o código de tecla no monitor serial da IDE do Arduino. A grande vantagem disto é, que podemos criar um banco de dados das teclas do seu controle e então, posteriormente poder aplicar esses códigos em diversos projetos de automação residencial. Como por exemplo, utilizar o módulo de desenvolvimento ESP32, um poderoso modulo, para IoT, que possuí interface wi-fi e bluetooth nativos.

Copie e cole o sketch abaixo na IDE do Arduino, e então compile e carregue para a placa.


/*
Author: AnalysIR
Revision: 1.0

This code is provided to overcome an issue with Arduino IR libraries
It allows you to capture raw timings for signals longer than 255 marks & spaces.
Typical use case is for long Air conditioner signals.

You can use the output to plug back into IRremote, to resend the signal.

This Software was written by AnalysIR.

Usage: Free to use, subject to conditions posted on blog below.
Please credit AnalysIR and provide a link to our website/blog, where possible.

Copyright AnalysIR 2014

Please refer to the blog posting for conditions associated with use.
Air Conditioners: Recording long Infrared Remote control signals with Arduino
Connections: IR Receiver Arduino V+ -> +5v GND -> GND Signal Out -> Digital Pin 2 (If using a 3V Arduino, you may connect V+ to +3V) */ #define LEDPIN 13 //you may increase this value on Arduinos with greater than 2k SRAM #define maxLen 650 volatile unsigned int irBuffer[maxLen]; //stores timings - volatile because changed by ISR volatile unsigned int x = 0; //Pointer thru irBuffer - volatile because changed by ISR void setup() { Serial.begin(115200); //change BAUD rate as required attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//set up ISR for receiving IR signal } void loop() { // put your main code here, to run repeatedly: Serial.println(F("Press the button on the remote now - once only")); delay(5000); // pause 5 secs if (x) { //if a signal is captured digitalWrite(LEDPIN, HIGH);//visual indicator that signal received Serial.println(); Serial.print(F("Raw: (")); //dump raw header format - for library Serial.print((x - 1)); Serial.print(F(") ")); detachInterrupt(0);//stop interrupts & capture until finshed here for (int i = 1; i < x; i++) { //now dump the times //if (!(i & 0x1)) Serial.print(F("-")); //comentar aqui aparentemente remove o sinal negativo do nmrs do array!! Serial.print(irBuffer[i] - irBuffer[i - 1]); Serial.print(F(", ")); } x = 0; Serial.println(); Serial.println(); digitalWrite(LEDPIN, LOW);//end of visual indicator, for this time attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal } } void rxIR_Interrupt_Handler() { if (x > maxLen) return; //ignore if irBuffer is already full irBuffer[x++] = micros(); //just continually record the time-stamp of signal transitions }

Feito isso, abra o monitor serial, e então com o controle remoto que você deseja clonar, aperte a tecla de interesse e aguarde o código aparecer no monitor serial. Guarde esse código num documento de texto, faça essa operação para quantas teclas forem necessárias para o seu projeto.

Atenção, os módulos receptores de IR são muito sensíveis a luz, seja ela solar ou iluminação artificial de lâmpadas. Portanto, para a correta aquisição dos códigos do seu controle remoto, faça essa operação em um ambiente escuro, até mesmo a luz da tela do seu PC ou notebook deve interferir significativamente. Como dica, esconda o receptor atrás da tela do PC ou notebook e faça a clonagem das teclas.

 

Reproduzindo as teclas clonadas no Arduino

Agora, vamos reproduzir, através do Arduino, as teclas clonadas. Por meio de comandos no serial monitor seremos capazes de controlar o dispositivo alvo. Observe a figura 2 com a montagem do protótipo que envia os sinais clonados ao seu dispositivo.

Figura 2: Diagrama de montagem do transmissor de IR com Arduino.

 

Feita a montagem, é hora de carregar o sketch responsável por enviar os comandos clonados para o seu dispositivo. Lembre-se de que cada comando possuí um código em formato RAW, que foi obtido anteriormente no primeiro passo. Em posse desse código RAW copie e cole toda a sequência de números dentro do vetor indicado no código, essa informação foi obtida no primeiro passo do artigo, clonando as teclas do controle remoto.

Observe o seguinte trecho do código onde você deve inserir os seus dados da tecla clonada anteriormente.

unsigned int MeuComando1 [] = {INSERIR AQUI A SEQUENCIA DE NUMEROS};

Atenção, insira os números no espaço indicado, cada número deve estar separado por virgula.

Sequência de números obtida primeiro passo através do monitor serial:

Raw: (11) 216, 32732, 240, 35936, 236, 32728, 268, 124, 240, 572, 260,

O número em parênteses indica apenas o comprimento da sequência, neste exemplo não iremos fazer uso desta informação, apenas da sequência numérica.

unsigned int MeuComando1[] = {216, 32732, 240, 35936, 236, 32728, 268, 124, 240, 572, 260, };

Agora, basta copiar o sketch para a IDE do Arduino com a sua sequência de números.


/* DIREITOS AUTORAIS RESERVADO A:
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 * IRsendRawDemo - added by AnalysIR (via www.AnalysIR.com), 24 August 2015
*/


#include <IRremote.h>
IRsend irsend; // ligar led IR no pino 3 do arduino

int khz = 38; // 38kHz freq do protocolo NEC
int incomingByte = 0; // variável para o dado recebido

//insira neste vetor o seus dados do retirados do primeiro sketch que le o codigo IR da tecla que voce escolheu.
unsigned int meuSinalIR[] = {9032, 4460, 580, 1664, 580, 1668, 576, 532, 580, 528, 584, 528, 584, 524, 576, 1668, 580, 1664, 592, 1656, 588, 1656, 588, 1656, 592, 520, 580, 1664, 580, 1664, 580, 1664, 580, 532, 580, 528, 584, 524, 588, 524, 576, 532, 580, 528, 584, 1660, 584, 1660, 588, 1660, 584, 524, 588, 520, 580, 532, 580, 528, 584, 524, 588, 520, 580, 532, 580, 528, 584, 524, 588, 524, 576, 532, 580, 528, 584, 524, 588, 1660, 584, 524, 576, 532, 580, 528, 584, 528, 584, 524, 588, 520, 580, 528, 584, 528, 588, 1656, 584, 524, 588, 520, 580, 532, 584, 524, 584, 524, 588, 520, 580, 1668, 580, 528, 584, 524, 584, 524, 588, 524, 580, 528, 584, 524, 588, 520, 592, 520, 580, 528, 584, 524, 588, 520, 580, 532, 580, 528, 584, 524, 588, 520, 580, 528, 584, 528, 584, 524, 588, 520, 580, 528, 584, 528, 584, 524, 588, 520, 580, 528, 584, 528, 584, 524, 588, 520, 580, 528, 584, 524, 588, 524, 588, 520, 580, 528, 584, 524, 588, 520, 580, 1664, 580, 532, 580, 1664, 580, 528, 584, 524, 588, 524, 580, 528, 580, 528, 584, 1660, 584, 1660, 588, 1656, 588, 1660, 584, 1660, 584, 524, 588, 520, 584, 1664, 580, 
};



void setup()
{
Serial.begin(9600); // abre a porta serial, configura a taxa de transferência para 9600 bps
Serial.print("Digite a letra l para enviar o sinal IR");
}

void loop() {
// apenas responde quando dados são recebidos:
  if (Serial.available() > 0) {
    // lê do buffer o dado recebido:
    incomingByte = Serial.read();

   
   
    
  }
  
    if(incomingByte==108) // numero 108 corresponde a letra l
    {
       // responde com o dado recebido:
       Serial.println("Recebi o comando, enviando sinal");
       irsend.sendRaw(meuSinalIR, sizeof(meuSinalIR) / sizeof(meuSinalIR[0]), khz);
      }
     incomingByte=0;
}

Após compilar e carregar o código na sua placa Arduino, faça o teste, aponte o LED infravermelho para o dispositivo que deseja controlar e envie o comando  no monitor serial. Para enviar o comando basta digitar 1. Você pode aumentar o número de comandos apenas replicando a lógica usada no sketch acima.

Espero que tenham gostado desse post e o utilizam como base para uma infinidade de possibilidades de controle de dispositivos que podem ser feita a partir dele.

Não deixem de seguir a modulo eletrônica no Instagram para acompanhar não só os posts novos como também as diversas promoções de produtos. Gostaríamos também de conhecer as montagens feitas por você leitor, marque a modulo eletrônica nos seus posts do Instagram relacionados a robótica, Arduino e eletrônica.

 

Rafael Valsani Leme Passos

Rafael Valsani Leme Passos

Sobre o autor: Rafael Valsani Leme Passos é técnico em eletrônica pela ETEC Bento Quirino e graduando em Engenharia de Alimentos pela Universidade Estadual de Campinas. 

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Facebook

VEJA TAMBÉM

Regador automático de plantas com Arduino

Aprenda neste artigo, como automatizar a rega de suas plantas, utilizando o Arduino NANO. Este projeto, além do baixo custo, pode ser montado em menos de uma hora e irá garantir que as suas plantas sempre tenham água disponível, garantido um crescimento adequado e...

Fita de LEDs RGB endereçáveis WS2812B e a biblioteca fastLED

No post de hoje, vamos conhecer a fita de LEDs WS2812B endereçáveis e como utilizá-la com o Arduino UNO.  Essa fita de LEDs se destaca, em relação as outras do mercado, pelo fato de que seus LEDs podem ser controlados de maneira individual, permitindo que o...

NEWSLETTER

Assine nossa newsletter e receba as novidades.

ATENDIMENTO

(19) 3579-7189