You are on page 1of 4

Módulo relé 4 canais e controle remoto IR

Dias atrás um colega 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 consiste em utilizar o Arduino Uno, uma placa com 4 relés e um controle remoto IR da
marca/fornecedor Open Jumper, para o controle de 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, a
tecla ON acende todas as lâmpadas de uma vez, e a tecla OFF apaga todas, como mostrado nesse vídeo, utilizando
leds no lugar das lâmpadas :
Na foto abaixo, a placa de relés utilizada :

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. Montei uma tabela mostrando o controle remoto utilizado, e seus
respectivos códigos :

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á

mas também tornar qualquer modificação mais tranquila. digitalWrite(pinorele1. São várias as opções. // Inicializa o receptor IR } . OUTPUT).enableIRIn(). digitalWrite(pinorele4. //Armazena o estado do relé 1 estadorele2 = HIGH. //Coloca os pinos dos reles em digitalWrite(pinorele2. Se necessário. ou use o comando IF no lugar de SWITCH. //Armazena o estado do relé 2 estadorele3 = HIGH. //Armazena o estado do relé 3 estadorele4 = HIGH. estadorele2). o programa. OUTPUT). por exemplo. troque algumas definições e acionamento de portas por rotinas utilizando FOR. OUTPUT).begin(9600). //Pino do Arduino ligado ao IN4 da placa estadorele1 = HIGH. //Inicializa a serial irrecv. OUTPUT). estadorele4). //Ligado ao pino do receptor IR (pino S) armazenavalor = 0. //Pino do Arduino ligado ao IN2 da placa pinorele3 = 4. 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 // Programa : Relé 4 Canais com controle IR // Autor : Arduino e Cia #include <IRremote. //Armazena o estado do relé 4 de de de de relés relés relés relés IRrecv irrecv(RECV_PIN). não só para facilitar o entendimento. //Pino do Arduino ligado ao IN1 da placa pinorele2 = 3. mantenha o jumper na placa. Por fim. //estado alto (rele desligado) digitalWrite(pinorele3. estadorele3). pinorele1 = 2. Serial. estadorele1). //Pino do Arduino ligado ao IN3 da placa pinorele4 = 5.h> int int int int int int int int int int RECV_PIN = 11. void setup() { pinMode(pinorele1. Como vamos utilizar os 5 volts do próprio Arduino. //Define os pino dos reles como saída pinMode(pinorele2.necessidade de uma fonte externa para ativar os relés. que eu tentei manter o mais simples possível. decode_results results. pinMode(pinorele3. pinMode(pinorele4.

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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 void loop() { //Verifica se o sensor IR recebeu algum sinal if (irrecv. case 0xFFA25D: //Verifica se a tecla ON foi acionada //Liga todos os reles.decode(&results)) { //Mostra na serial o valor lido pelo sensor IR Serial. //Seta o estado de todos os reles para alto (desligados) estadorele1 = HIGH. HIGH). colocando as portas em nivel alto digitalWrite(pinorele1. . estadorele4 = HIGH.print("Valor lido : "). case 0xFFE21D: //Verifica se a tecla OFF foi acionada //Desliga todos os reles. HIGH). HIGH). LOW). estadorele3). //Armazena o sinal recebido pelo sensor IR armazenavalor = (results. //Aciona rele 4 e liga led azul digitalWrite(pinorele4. LOW). digitalWrite(pinorele3. //Aciona rele 1 e liga led vermelho digitalWrite(pinorele1. estadorele2). //Aciona rele 2 e liga led amarelo digitalWrite(pinorele2. HEX). digitalWrite(pinorele4. colocando as portas em nivel baixo digitalWrite(pinorele1. digitalWrite(pinorele2. break. estadorele2 = LOW. estadorele2 = HIGH. //Aciona rele 3 e liga led Verde digitalWrite(pinorele3. digitalWrite(pinorele3. break.println(results.value. LOW). break. case 0xFF906F: //Verifica se a tecla azul foi acionada estadorele4 = !estadorele4. estadorele3 = HIGH. Serial. digitalWrite(pinorele2. break. estadorele3 = LOW. switch (armazenavalor) { case 0xFF22DD: //Verifica se a tecla vermelha foi acionada estadorele1 = !estadorele1. digitalWrite(pinorele4. estadorele4 = LOW. estadorele4). //Seta o estado de todos os reles para baixo (ligados) estadorele1 = LOW. estadorele1). break.value). LOW). HIGH). break. case 0xFF02FD: //Verifica se a tecla verde foi acionada estadorele3 = !estadorele3. case 0xFFE01F: //Verifica se a tecla amarela foi acionada estadorele2 = !estadorele2.

//Seta o estado de todos os reles para alto (desligados) estadorele1 = HIGH. digitalWrite(pinorele4. //Aguarda 500 ms digitalWrite(pinorele2. digitalWrite(pinorele3. colocando as portas em nivel alto digitalWrite(pinorele1.96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 case 0xFF42BD: //Verifica se a tecla 7 foi acionada //Desliga todos os reles. digitalWrite(pinorele2. amarelo para o amarelo e assim por diante. //Aciona o rele 1 delay(500). O programa ainda exibe no Serial Monitor o valor em hexadecimal das teclas que foram acionadas. //Aciona o rele 3 delay(500). apenas alterando esses valores. você consegue adaptar o programa ao seu controle remoto (dependendo do modelo). HIGH).resume(). e para desligar. //Aciona o rele 2 delay(500). delay(1000). break. estadorele3 = HIGH. estadorele4 = HIGH. . //Le o próximo valor } } Como mostrado no vídeo no início deste artigo. HIGH). A tecla com o número 7 do controle remoto apaga todos os leds. LOW). HIGH). //Aguarda 2 segundos //Desliga todos os reles. estadorele2 = HIGH. Para acender todos os leds de uma vez utilize a tecla ON. HIGH). //Aguarda 1 segundo digitalWrite(pinorele1. depois os acende em sequencia. LOW). //Aguarda 500 ms digitalWrite(pinorele3. HIGH). colocando as portas em nivel alto digitalWrite(pinorele1. digitalWrite(pinorele3. LOW). HIGH). digitalWrite(pinorele2. digitalWrite(pinorele4. LOW). teste o programa acionando o botão vermelho do controle remoto para acender o led vermelho. //Aguarda 500 ms digitalWrite(pinorele4. HIGH). a tecla OFF. HIGH). //Aciona o rele 4 delay(2000). Desta forma. } irrecv.