A ideia deste post de módulo relé 4 canais com Arduino surgiu a alguns dias atrás quando um leitor do blog escreveu com dúvidas sobre como programar o Arduino para utilizar um controle remoto IR e acionar relés.

O projeto dele é de automação residencial e consiste em utilizar o Arduino Uno, uma placa com 4 relés e controle remoto IR para acionar 4 lâmpadas.

São lâmpadas de cores diferentes: vermelha, amarela, verde e azul, que devem ser acionadas ao apertar o botão correspondente no controle remoto. Por fim, as teclas ON e OFF acendem e apagam todas as lâmpadas de uma vez, como mostrado nesse vídeo utilizando leds no lugar das lâmpadas:


Na foto abaixo, a placa de relés utilizada no projeto:

Módulo relé 4 canais Arduino

Eu já havia escrito um artigo sobre Controle Remoto IR aqui no site, e apesar do controle IR da Open Jumper ser um pouco diferente, podemos usar a mesma biblioteca IRremote que usamos no outro artigo. O que muda são apenas alguns códigos hexadecimais das teclas.

Tabela codigos controle remoto IR

Na imagem acima a tabela que montei mostrando o controle remoto utilizado, e seus respectivos códigos.

Circuito arduino e módulo relé 4 canais

Para testar o programa, montei um circuito com leds no lugar das lâmpadas. O comum de cada relé (pino central) eu liguei em 5 Volts, e o contato NO (Normal Open/Normal Aberto) de cada relê, eu liguei no anodo do led correspondente.

Note que na placa há um jumper entre o pino JD-Vcc e Vcc. O JD-Vcc é utilizado quando há necessidade de uma fonte externa para ativar os relés. Como vamos utilizar os 5 volts do próprio Arduino, mantenha o jumper na placa.

Circuito modulo rele 4 canais e controle remoto IR

Por fim, o programa, que eu tentei manter o mais simples possível, não só para facilitar o entendimento, mas também tornar qualquer modificação mais tranquila. Se necessário, troque algumas definições e acionamento de portas por rotinas utilizando FOR, por exemplo, ou use o comando IF no lugar de SWITCH. São várias as opções.

// Programa : Relé 4 Canais com controle IR  
// Autor : Arduino e Cia  
  
#include <IRremote.h>  
   
int RECV_PIN = 11; //Ligado ao pino do receptor IR (pino S)  
int armazenavalor = 0;  
int pinorele1 = 2; //Pino do Arduino ligado ao IN1 da placa de relés  
int pinorele2 = 3; //Pino do Arduino ligado ao IN2 da placa de relés  
int pinorele3 = 4; //Pino do Arduino ligado ao IN3 da placa de relés  
int pinorele4 = 5; //Pino do Arduino ligado ao IN4 da placa de relés  
int estadorele1 = HIGH; //Armazena o estado do relé 1  
int estadorele2 = HIGH; //Armazena o estado do relé 2  
int estadorele3 = HIGH; //Armazena o estado do relé 3  
int estadorele4 = HIGH; //Armazena o estado do relé 4  
  
IRrecv irrecv(RECV_PIN);  
decode_results results;  
  
void setup()  
{  
  pinMode(pinorele1, OUTPUT);  //Define os pino dos reles como saída  
  pinMode(pinorele2, OUTPUT);    
  pinMode(pinorele3, OUTPUT);  
  pinMode(pinorele4, OUTPUT);  
  digitalWrite(pinorele1, estadorele1); //Coloca os pinos dos reles em
  digitalWrite(pinorele2, estadorele2); //estado alto (rele desligado)  
  digitalWrite(pinorele3, estadorele3);  
  digitalWrite(pinorele4, estadorele4);  
    
  Serial.begin(9600); //Inicializa a serial  
  irrecv.enableIRIn(); // Inicializa o receptor IR  
}  
   
void loop()  
{  
  //Verifica se o sensor IR recebeu algum sinal
  if (irrecv.decode(&results))   
  {  
    //Mostra na serial o valor lido pelo sensor IR
    Serial.print("Valor lido : "); 
    Serial.println(results.value, HEX);
    //Armazena o sinal recebido pelo sensor IR  
    armazenavalor = (results.value);   
    switch (armazenavalor)  
    {  
     case 0xFF22DD: //Verifica se a tecla vermelha foi acionada  
      estadorele1 = !estadorele1;  
      //Aciona rele 1 e liga led vermelho
      digitalWrite(pinorele1, estadorele1);   
      break;  
      
     case 0xFFE01F: //Verifica se a tecla amarela foi acionada  
      estadorele2 = !estadorele2;  
      //Aciona rele 2 e liga led amarelo  
      digitalWrite(pinorele2, estadorele2); 
      break;  
      
     case 0xFF02FD: //Verifica se a tecla verde foi acionada  
      estadorele3 = !estadorele3;  
      //Aciona rele 3 e liga led Verde  
      digitalWrite(pinorele3, estadorele3); 
      break;  
      
     case 0xFF906F: //Verifica se a tecla azul foi acionada  
      estadorele4 = !estadorele4;  
      //Aciona rele 4 e liga led azul  
      digitalWrite(pinorele4, estadorele4); 
      break;  
      
     case 0xFFE21D: //Verifica se a tecla OFF foi acionada  
      //Desliga todos os reles, colocando as portas em nivel alto  
      digitalWrite(pinorele1, HIGH);   
      digitalWrite(pinorele2, HIGH);  
      digitalWrite(pinorele3, HIGH);  
      digitalWrite(pinorele4, HIGH);  
      //Seta o estado de todos os reles para alto (desligados)  
      estadorele1 = HIGH;  
      estadorele2 = HIGH;  
      estadorele3 = HIGH;  
      estadorele4 = HIGH;  
      break;  
     
     case 0xFFA25D: //Verifica se a tecla ON foi acionada  
      //Liga todos os reles, colocando as portas em nivel baixo  
      digitalWrite(pinorele1, LOW);  
      digitalWrite(pinorele2, LOW);  
      digitalWrite(pinorele3, LOW);  
      digitalWrite(pinorele4, LOW);  
      //Seta o estado de todos os reles para baixo (ligados)  
      estadorele1 = LOW;  
      estadorele2 = LOW;  
      estadorele3 = LOW;  
      estadorele4 = LOW;  
      break;  

     case 0xFF42BD: //Verifica se a tecla 7 foi acionada  
      //Desliga todos os reles, colocando as portas em nivel alto  
      digitalWrite(pinorele1, HIGH);  
      digitalWrite(pinorele2, HIGH);  
      digitalWrite(pinorele3, HIGH);  
      digitalWrite(pinorele4, HIGH);  
      delay(1000); //Aguarda 1 segundo   
      digitalWrite(pinorele1, LOW); //Aciona o rele 1   
      delay(500); //Aguarda 500 ms   
      digitalWrite(pinorele2, LOW); //Aciona o rele 2  
      delay(500); //Aguarda 500 ms  
      digitalWrite(pinorele3, LOW); //Aciona o rele 3  
      delay(500); //Aguarda 500 ms   
      digitalWrite(pinorele4, LOW); //Aciona o rele 4  
      delay(2000); //Aguarda 2 segundos  
      //Desliga todos os reles, colocando as portas em nivel alto  
      digitalWrite(pinorele1, HIGH);  
      digitalWrite(pinorele2, HIGH);  
      digitalWrite(pinorele3, HIGH);  
      digitalWrite(pinorele4, HIGH);  
      //Seta o estado de todos os reles para alto (desligados)   
      estadorele1 = HIGH;  
      estadorele2 = HIGH;  
      estadorele3 = HIGH;  
      estadorele4 = HIGH;  
      break;  
    }  
  irrecv.resume(); //Le o próximo valor  
  }  
} 

Como mostrado no vídeo, teste o programa acionando o botão vermelho do controle remoto para acender o led vermelho, amarelo para o amarelo, etc.

Para acender todos os leds de uma vez utilize a tecla ON, e para desligar, a tecla OFF.  A tecla com o número 7 do controle remoto apaga todos os leds, depois os acende em sequencia.

O programa ainda exibe no Serial Monitor o valor em hexadecimal das teclas que foram acionadas. Desta forma, você consegue adaptar o programa ao seu controle remoto (dependendo do modelo), apenas alterando esses valores.

Gostou? Confira outros posts usando relé aqui mesmo no Arduino e Cia!

5/5 - (1 voto)