04 outubro 2013

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 :

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

Tabela codigos controle remoto IR
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.

  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
 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
 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
// 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 no início deste artigo, teste o programa acionando o botão vermelho do controle remoto para acender o led vermelho, amarelo para o amarelo e assim por diante. 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.


66 comentários:

  1. Boa tarde, tenho um projeto semelhante ao seu, só que o meu eu utilizo um Ethernet-shild, os dois primeiros relés funcionam perfeitamente, o problema está no terceiro e o quarto que quando eu coloco eles em HIGH ele volta para LOW acendendo novamente, acredito que seja algo com a energia do arduino, você já passou por algo parecido?

    Desde já agradeço

    ResponderExcluir
    Respostas
    1. Boa noite Bruno, ainda não tive esse problema, mas pelo que andei lendo, talvez seja interessante você utilizar uma fonte externa para alimentar essa placa de relés. A sua placa é igualzinha à placa que eu usei nesse artigo ? Abraço.

      Excluir
  2. por favor me ajude, toda vez que tento compilar esse programa , sem para nessa linha ( IRrecv irrecv(RECV_PIN); ) ,

    controlando_as_saidas:17: error: 'IRrecv' does not name a type
    controlando_as_saidas:18: error: 'decode_results' does not name a type
    controlando_as_saidas.ino: In function 'void setup()':
    controlando_as_saidas:32: error: 'irrecv' was not declared in this scope
    controlando_as_saidas.ino: In function 'void loop()':
    controlando_as_saidas:37: error: 'irrecv' was not declared in this scope
    controlando_as_saidas:37: error: 'results' was not declared in this scope

    alguem poderia me ajudar ?

    ResponderExcluir
    Respostas
    1. Bom dia Rodrigo ! Você instalou a biblioteca IRremote ?

      Excluir
  3. ola amigo trabalho com automacao residencial e gostei muito do arduino preciso exatamente deste projeto seu para acionar o led igualzinho pois tenho problema no sistema original das fitas para a automacao so que preciso acionar duas fitas separadas ou seja 8 reles tem como me ajudar queria alem diste projeto aprender mais sobre o arduino e acresentar nos projetos meus abracos camil camilsat@ig.com.br

    ResponderExcluir
    Respostas
    1. Boa noite ! Podemos conversar sim. Por favor utilize o formulário de contato no lado direito da página. Abraço !

      Excluir
  4. Boa noite, Gostaria de saber porque que em alguns módulos de relé ela é ativada quando em HIGH. No seu caso ela é ativada quando está em LOW, porque?

    ResponderExcluir
    Respostas
    1. Boa tarde, isso depende do fabricante e da construção do módulo. Abraço.

      Excluir
  5. cara se no lugar das leds eu colocasse luzes ou outros objetos daria certo ?
    com esse codico de fonte

    ResponderExcluir
    Respostas
    1. Bom dia Danilo,

      Daria sim, tudo vai depender do relé que você estiver usando, mas dê uma olhadinha nesse outro artigo, em que eu uso o relé ligado em 110 V. Você pode usar a mesma idéia para outros módulos :

      http://www.arduinoecia.com.br/2013/02/ligando-uma-lampada-com-rele.html

      Você pode usar o mesmo código fonte, o que mudaria seria a alimentação dos objetos ligados ao relé. Se tiver dúvida, volte aqui que ajudamos você.

      Abraço !

      Excluir
    2. Obrigado , meu relé e igual o seu "!

      Excluir
    3. Opa. Legal. aí fica mais fácil ! :-)

      Excluir
    4. mas eu queria a sim que nem o seu , mas no lugar das ledes luzes > como faço ?

      Excluir
    5. Entendi. Qual a voltagem das luzes que você vai usar ?

      Excluir
    6. Vou fazer igual ao nosso amigo ai em cima


      Uma pergunta: Eu acendo uma lampada com o botão vermelho do controle remoto

      Se eu apertar o botão de novo ele vai apagar a lampada acesa?????

      Excluir
    7. Oi Samuel,

      Exato, esse comando é o que inverte o estado do led/lampada (no caso do rele 3):

      estadorele3 = !estadorele3;

      Abraço !

      Excluir
  6. Bom dia, eu sou novo no mundo arduino ,eu fiz seu projeto e deu certo ,eu também dupliquei os códigos para 8 reles e aparentemente deu certo,gostaria de saber se essa e a forma correta de aumentar os reles e se posso aumentar para 16 reles,gostaria de controlar todas as luzes da minha casa com o controle remoto .obrigado.

    ResponderExcluir
    Respostas
    1. Boa tarde Edvando,

      A princípio, não há problemas em ligar mais módulos. Penso que no seu projeto você não irá acionar um grande número de relés ao mesmo tempo, e por isso não haverá sobrecarga no Arduino.

      De qualquer forma, se você verificar que o Arduino está se comportando de maneira estranha com tantos módulos, existe a opção de usar alimentação externa para essas placas de relé, ok ?

      Abraço e obrigado !

      Excluir
  7. boa noite amigo,no meu projeto estou usando reles com transistor e fonte externa a carga pro arduino e aproximadamente 14 micro amper por rele ,mais minha duvida principal e sobre o código
    eu apena dobrei seu código,posso ir dobrando o código? e posso acrescentar outros códigos por exemplo um LCD 16x2 ou tem que fazer o código do inicio,eu entendo um pouco de eletrônica mais de programação não entendo nada.obrigado.

    ResponderExcluir
    Respostas
    1. Oi Edvando,

      Pode ir dobrando o código sim, sem problemas. Incluir outras bibliotecas também é relativamente simples, coloque o "INCLUDE" no início do programa, e depois vá adicionando os comandos necessários para inicializar o display.

      Eu tenho vários artigos aqui no site em que uso o display LCD 16x2. Peço que dê uma olhadinha e, se precisar de ajuda, entre em contato.

      Abraço !

      Excluir
  8. boa tarde Amigo

    teria como eu guardar os valores dos reles se estão liga ou desligado e informar em um numero binario para pegar este codigo na serial e mostrar qual esta liga ou desligado

    ResponderExcluir
  9. Boa tarde,

    Tem sim, você pode guardar esses valores em variáveis e mandar isso pela serial, ou , se precisar de um histórico de acionamentos, armazenar em cartão SD, por exemplo.

    Abraço !

    ResponderExcluir
  10. É possível com qualquer controle remoto?

    ResponderExcluir
    Respostas
    1. Boa noite Daniel,

      Com alguns controles mais simples, sim. Com o Arduino você pode montar circuitos para "aprender" os códigos de algum controle remoto, e depois usar esses códigos para acionar as portas do Arduino.

      Abraço !

      Excluir
  11. Ola Amigo sou novo na parte automação, e estou fazendo um projeto no meu curso e estou com algumas duvidas, vou fazer duas lampadas acender por controle remoto estou usando uma placa arduino uno, um controle remoto e um rele de dois canais. minha duvida eh se posso fazer um jumper do rele 1 para o rele 2, no caso seria a entrada de energia.no causo da NA do rele e a NA do rele 2.

    ResponderExcluir
    Respostas
    1. Boa noite Cristiano,

      Eu precisaria ver o circuito para analisar exatamente a ligação que você está pensando em fazer. De qualquer forma, é melhor fazer uma ligação separada para cada lâmpada.

      Abraço !

      Excluir
  12. Matheus Ferreira Costa18 de julho de 2014 16:14

    Amigo,

    Comprei um módulo relé de 4 canais, mas nao tenho a referência do fabricante se ele liga em LOW ou HIGH. Se eu fizer o teste em LOW ou HIGH, tem perigo de queimar algum componente ?

    Abraço !

    ResponderExcluir
    Respostas
    1. Boa tarde Matheus,

      Não tem problema. A única coisa que pode acontecer é ele ligar na ordem inversa que você precisa. Aí vc vai saber se ele aciona em LOW ou em HIGH.

      A única coisa que eu recomendo não inverter é a alimentação do módulo.

      Abraço !

      Excluir
  13. ola amigo. Fiz o codigo invertendo o estado do rele a cada toque na mesma tecla , usando : estadorele1 = !estadorele1 ..e um delay... porem, se manter a tecla pressionada , o estado fica invertendo sem parar. Ou seja , teria que ler apenas UMA UNICA vez o hexadecimal que o controle manda, mesmo mantendo pressionada a tecla. pode me ajudar?? alguma dica?? tentei usar um while mas nao dai trava . obrigado . meu email :
    avshomeassistencia@gmail.com

    ResponderExcluir
    Respostas
    1. Boa noite Roberto,

      Nesse artigo eu uso um while justamente pra não acontecer esse tipo de coisas, mas no caso, estou usando um push-button :

      http://www.arduinoecia.com.br/2013/08/ligando-uma-lampada-com-rele-e-push.html

      Tente adaptar para o seu programa, por favor.

      Abraço !

      Excluir
  14. Prezado;
    Cada vez que pressiono a mesma tecla do controle remoto aparece um código diferente. O que deve estar acontecendo?

    ResponderExcluir
    Respostas
    1. Bom dia Jorge,

      Isso eu nunca vi. você está usando o controle remoto do próprio kit ?

      Excluir
  15. Mesmo os exemplos da biblioteca IRremote não conseguem ser compilados...

    C:\Program Files (x86)\Arduino\libraries\RobotIRremote\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope

    alguém sabe o que pode ser?

    ResponderExcluir
    Respostas
    1. Boa noite Flavio,

      Eu tive esse mesmo problema. Parece que há um conflito entre a biblioteca IRremote e a RobotIRremote, já que as duas utilizam o mesmo nome. Experimente remover temporariamente a pasta RobotIRremote da pasta Libraries e compilar novamente.

      Abraço !

      Excluir
  16. Olá!!Tudo bem? Primeiro parabéns pelo ótimo trabalho e por poder compartilhar seu conhecimento. Eu venho aqui pedir uma ajuda, quando ao carregando da sketcher IRremote.h, dá esse seguinte erro:
    C:\Arduino\libraries\RobotIRremote\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope
    E a algum tempo não consigo resolver. Já desinstalei o programa arduino e instalei, de IDE 1.0.6, instalei as bibliotecas e IRremote e desinstalei, enfim, não sei o porque dessa mensagem sempre aparecer falando que não é declarado escopo. Poderia me ajudar? Serei muito grato por isso.
    Um grande abraço.Sucesso!!

    ResponderExcluir
    Respostas
    1. Boa tarde Leopoldo !

      Pelos testes que eu fiz aqui, há um conflito entre a biblioteca IRremote e a RobotIRremote. Experimente remover temporariamente a pasta RobotIRremote da pasta libraries, reinicie a IDE e teste o programa novamente.

      Se puder retornar aqui para falar se deu certo, agradeço.

      Abraço !

      Excluir
    2. Tem que abrir o arquivo IRremoteInt.h e alterar a biblioteca WProgram.h para Arduino.h.

      Na linha 13 deve estar escrito : #include < Arduino.h >, no lugar de: #include < WProgram.h >.

      orlsalomao@yahoo.com.br

      Excluir
  17. Boa tarde a todos, parabens pelo codigo, eu dupliquei ele, liguei 8 reles e funciona perfeitamente, Na automação, o importante é a alimentação dos equipamentos. Os reles alimentados pelo arduino Uno funcionam perfeitamente. Sem erros. Parabens de novo. detalhe estou sando um controle de tv normal , as teclas de 1 a 8 a, a 9 e o power, muito legal.

    ResponderExcluir
  18. Quando tento compilar dá esse erro:

    In file included from C:\Users\Pedro\Documents\Arduino\libraries\IRremote\IRremote.cpp:15:
    C:\Users\Pedro\Documents\Arduino\libraries\IRremote\/IRremoteInt.h:292:2: error: #error "Please add OC4A pin number here\n"
    C:\Users\Pedro\Documents\Arduino\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::enableIROut(int)':
    C:\Users\Pedro\Documents\Arduino\libraries\IRremote\IRremote.cpp:202: error: 'TIMER_PWM_PIN' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você instalou a IDE recentemente ? Pode ser um conflito entre a biblioteca IR desse post e a biblioteca IR que já vem com a IDE. Tente retirar essa última temporariamente e veja se o programa compila normalmente.

      Abraço!

      Excluir
  19. Fiz como mandado aqui e está tudo certinho e funcionando, mas eu queria implementar um pouco mais usando um DSC1307 para acionar, além do controle remoto, também por tempo: X hora liga, Y hora desliga, vc tem algum tutorial para isso?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Ainda não tenho nenhum tutorial sobre isso, mas é uma boa sugestão de post. :)

      Abraço!

      Excluir
  20. Boa tarde, é possível controlar um servo utilizando um arduino e o controle IR sem relé?

    ResponderExcluir
    Respostas
    1. Boa noite,

      É possível sim, vc não precisa obrigatoriamente do relé.

      Abraço!

      Excluir
    2. Alguém poderia me ajudar com esse erro, estou começando agora e não muito.

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino: In function 'void loop()':

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:45:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFF22DD: //Verifica se a tecla vermelha foi acionada

      ^

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:51:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFFE01F: //Verifica se a tecla amarela foi acionada

      ^

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:57:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFF02FD: //Verifica se a tecla verde foi acionada

      ^

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:63:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFF906F: //Verifica se a tecla azul foi acionada

      ^

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:69:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFFE21D: //Verifica se a tecla OFF foi acionada

      ^

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:82:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFFA25D: //Verifica se a tecla ON foi acionada

      ^

      C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:95:11: warning: overflow in implicit constant conversion [-Woverflow]

      case 0xFF42BD: //Verifica se a tecla 7 foi acionada

      ^

      D:\Arduino\arduino-1.6.7\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope

      int RECV_PIN = TKD2; // the pin the IR receiver is connected to

      ^

      Foram encontradas múltiplas bibliotecas para "IRremote.h"
      Usado: D:\Arduino\arduino-1.6.7\libraries\RobotIRremote
      Não usado: D:\Arduino\arduino-1.6.7\libraries\Arduino-IRremote-master
      exit status 1
      Erro compilando.

      Excluir
  21. Olá, primeiramente parabens pelos conteudos exelentes, estao me ajudando muito. Estou fazendo um alarme com arduino uno, dois sensores pir, um relé e uma sirene. Só que só funciona um sensor mandando sinal de uns 3V, o outro manda um sinal baixo de aproximadamente 1,4V e nao esta acionando o relé, ja inverti os pirs e as portas, com funciona mas 2 nao vai, vc teria uma ideia do que pode ser? Obrigado

    ResponderExcluir
    Respostas
    1. Oi Danilo,

      você consegue identificar se o problema está nos sensores PIR ou no circuito ?

      Abraço!

      Excluir
  22. Óla,
    boa noite, sou novo em programação e estou tendo problema.
    Esta ocorrendo esse erro, poria me ajudar. Talvez eu esteja fazendo algo errado, ficaria muito abradecido.

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino: In function 'void loop()':

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:45:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFF22DD: //Verifica se a tecla vermelha foi acionada

    ^

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:51:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFFE01F: //Verifica se a tecla amarela foi acionada

    ^

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:57:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFF02FD: //Verifica se a tecla verde foi acionada

    ^

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:63:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFF906F: //Verifica se a tecla azul foi acionada

    ^

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:69:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFFE21D: //Verifica se a tecla OFF foi acionada

    ^

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:82:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFFA25D: //Verifica se a tecla ON foi acionada

    ^

    C:\Users\DOUGLAS\AppData\Local\Temp\arduino_27418ce7b2d723f6907706f1b0597416\sketch_jan06a.ino:95:11: warning: overflow in implicit constant conversion [-Woverflow]

    case 0xFF42BD: //Verifica se a tecla 7 foi acionada

    ^

    D:\Arduino\arduino-1.6.7\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope

    int RECV_PIN = TKD2; // the pin the IR receiver is connected to

    ^

    Foram encontradas múltiplas bibliotecas para "IRremote.h"
    Usado: D:\Arduino\arduino-1.6.7\libraries\RobotIRremote
    Não usado: D:\Arduino\arduino-1.6.7\libraries\Arduino-IRremote-master
    exit status 1
    Erro compilando.

    ResponderExcluir
    Respostas
    1. Oi Douglas,

      Há um conflito de bibliotecas na sua IDE, tente remover a biblioteca RobotIRremote

      Abraço!

      Excluir
  23. Olá, o código funcionou 100%, agora pensando em um modo econômico porque não usar uma mesma tecla para ligar e desligar o mesmo relé, imaginam quantas teclas vão sobrar para aproveitar.

    ResponderExcluir
    Respostas
    1. Oi Anderson!

      Boa ideia. Na verdade tinha tanta tecla disponível que eu nem pensei nessa economia, mas é uma ótima sugestão. :)

      Abraço!

      Excluir
  24. MUITO BOM ESSE FORUM.GOSTARIA DE SABER PARA QUE SERVE O JUMPER DO MODULO RELE,E COMO LIGAR UMA FONTE EXTERNA NO MODULO

    ResponderExcluir
    Respostas
    1. Oi Marcus,

      O jumper serve para selecionar a alimentação pelo Arduino ou a alimentação externa. Vou publicar um pequeno tutorial de como utilizar o relé com fonte externa.

      Abraço!

      Excluir
  25. Não estou conseguindo fazer funcionar o receptor 433 com o led Ir, pois o receptor recebe a informação de uma central para trocar de canal da tv. A recepção funciona perfeitamente, mas quando envio o código do controle a informação não está correta emite somente "0". Quando testo sem o receptor para o Arduíno ficar emitindo p código do controle em loop funciona perfeitamente. O que pode estar acontecendo?

    ResponderExcluir
  26. Olá, queria saber se eu poderia utilizar este projeto para ao invés de controlar um relê, conseguir acionar um servo motor - como um sistema de desbloqueio para uma porta via controle remoto - teria possibilidade? Sou iniciante em Arduíno, mas estou interessado com a plataforma.

    ResponderExcluir
    Respostas
    1. Bom dia Lucas,

      Pode sim. Nesse caso você nem precisa da placa de relés, dependendo do servo motor que vc utilizar. Dê uma olhada nesse post também:

      http://www.arduinoecia.com.br/2013/06/controlando-um-servo.html

      Abraço!

      Excluir
  27. Bom Dia.
    Parabéns pelo trabalho. Tenho uma duvida, eu queria que o mesmo botão que eu apertasse no controle, ligaria e desligaria o mesmo relé, eu posso só duplicar a parte que ele ira funcionar? Pois além dessa parte com o controle, irei colocar interruptor de luz também.
    Se puder postar um exemplo, ficarei agradecido.

    Abraço, e obrigado

    ResponderExcluir
    Respostas
    1. Oi Pedro,

      Você pode criar uma variável e inverter esse valor a cada acionamento do botão. Eu uso esse princípio no programa deste post:

      http://www.arduinoecia.com.br/2013/08/ligando-uma-lampada-com-rele-e-push.html

      Abraço!

      Excluir
  28. Boa tarde ,galerinha!
    Estou começando programar e me apareceu um problema no qual não consigo resolver,alguem poderia me ajudar ,por favor?

    libraries\IRremote\IRremote.cpp.o: In function `MATCH(int, int)':

    C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:176: multiple definition of `MATCH(int, int)'

    sketch\IRsendDemo.ino.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:176: first defined here

    libraries\IRremote\IRremote.cpp.o: In function `MATCH(int, int)':

    C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:176: multiple definition of `MATCH_MARK(int, int)'

    sketch\IRsendDemo.ino.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:176: first defined here

    libraries\IRremote\IRremote.cpp.o: In function `MATCH(int, int)':

    C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:176: multiple definition of `MATCH_SPACE(int, int)'

    sketch\IRsendDemo.ino.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:176: first defined here

    collect2.exe: error: ld returned 1 exit status

    Foram encontradas múltiplas bibliotecas para "IRremote.h"
    Usado: C:\Program Files (x86)\Arduino\libraries\IRremote
    Não usado: C:\Program Files (x86)\Arduino\libraries\RobotIRremote
    exit status 1
    Erro compilando.

    ResponderExcluir
  29. Olá boa tarde... quando Ligo o arduino já aciona os Reles, teria como desabilitar isso?

    ResponderExcluir
    Respostas
    1. Oi Flávio,

      Eu ainda não testei essa solução, mas tente colocar um resistor no circuito, conforme o link abaixo:

      https://forum.arduino.cc/index.php?topic=274215.15

      Abraço!

      Excluir
  30. boa tarde gostei muito do seu post.
    Estou com um problema no arduino, e gostaria de sua ajuda.
    Gostaria de controlar as luzes do meu quarto com o arduino são 6 circuitos com interruptor simples e quero fazer o paralelo com o controle remoto, pois não consigo passar mais fios e minha mulher não que usar o sistema pelo celular que ficaria bem mais facil. ja procurei varios posts mas só acho com pulsador e a linha de interruptor que uso não tem botão pulsador.teria de ser usando o simples e mudar o estado de 0 para 1 ou de 1 para 0 com o controle e a alimentação dos circuitos ja esta feita com relé modulo de 8 .

    ResponderExcluir
    Respostas
    1. Boa noite,

      Obrigado. Preciso entender melhor o que vc precisa. Pode me passar o link dos posts que vc viu ? Quem sabe não podemos ter alguma outra ideia de circuito...

      Abraço!

      Excluir
  31. Olá, primeiramente muito obrigado por compartilhar o circuito.
    Estou utilizando o mesmo programa para fazer acionar válvulas eletropneuáticas com os relès.
    Já alterei os códigos para os do meu controle e agora gostaria de saber qual comando utilizar para executar uma sequencia repetidamente até que o botão off seja pressionado. Seria mais ou menos como a sequencia que você utilizou na tecla 7.
    Aguardo

    ResponderExcluir
    Respostas
    1. Oi Pedro,

      Obrigado. Faça um loop que fique sempre testando se a tecla 7 foi pressionada.. acho que é relativamente simples de fazer, pq pelo que eu entendi você vai manter essa sequencia de comandos sempre ativa, correto ?

      Abraço!

      Excluir