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!