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:
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.
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.
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!