Arduino não desliga o rele com carga

Olá Pessoal, tudo bem?

Seguinte, tenho uma dúvida de iniciante.

Eu estou fazendo um projeto que consiste no seguinte:

recebo mensagens de sensores e controles por RAIO FREQUÊNCIA. Dependendo da lógica, liga uma sirene por meio de um RELE, ou desliga a sirene.

Acontece que, SEM A CARGA (SIRENE) o relé funciona NORMALMENTE, desliga quando tem que desligar, e liga quando tem que ligar.

Quando coloco a carga, ele NÃO DESLIGA, parece que ele TRAVA.

O que pode ser?

Meu codigo:

//----------- Adiciona as bibliotecas do projeto ----------
#include <VirtualWire.h>
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();                 //Define a função para recepção dos dados do controle e dos sensores


//Definindo as variáveis de controle de estado dos sensores e botões
char A = 0;
char B = 0; 
char C = 0;
char O = 0;  
char I = 0;
char C_1 = 0;
char D = 0;


//----------- Declarações para Acionar a sirene ----------
const  byte rele = 8;        
int val, i=1;                    
boolean ligado=false;



//----------- Abre função de configuração do arduino ----------
void setup()
{
 Serial.begin(9600);                           //Define Baudrate
 mySwitch.enableReceive(0);                    //Receiver on interrupt 0 => that is pin #2
 
 vw_set_tx_pin(3);                             //Define o botão 3 como botão de envio para o arduino
 vw_setup(9600);                               //Bits per sec

//----------- CONFIGURAÇÃO DO RELÉ PARA ACIONAR SIRENE ----------
 pinMode(rele,OUTPUT);   
 digitalWrite(8, HIGH);    
}


//----------- FUNÇÃO PRINCIPAL ----------
void loop()
{
 
 //Caso tenha algum dado na porta de recepção serial, entra
 if (mySwitch.available())
 {
   Serial.println(mySwitch.getReceivedValue());//Imprime no monitor serial os dados recebidos   
   if (mySwitch.getReceivedValue()==1638818)   //Se for o Botão A do controle, entra
     {
     send("a");                                //Envia "a" para o ARM para avisar que o alarme está ligado
     A=1;                                      //Estado lógico do botão A é ativo, entra em modo ativo o alarme
     B=0;                                      //Botão B está desabilitado
     delay(1000);                              //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()==16736113)    //Se for o botão B do controle, entra
     {
     send("b");                                //Envia "b" para o ARM para avisar que o alarme está desligado
     B=1;                                      //Estado Lógico do botão B é ativo, entra em modo repouso o alarme
     A=0;                                      //Botão A está desabilitado
     delay(1000);                              //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()==21631301)    //Se a porta estiver aberta, entra
     {
     send("o");                                //Envia "o" para o ARM para avisar que a porta está aberta 
     O=1;                                      //Estado lógico é confirmado para que a porta está aberta
     C=0;                                      //se a porta está aberta, não está fechada
     delay(1000);                              //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()==21631317)     //Se a porta estiver fechada entra
     {
     if(A==0)
       {
       send("c");                                //Envia "c" para o ARM para avisar que a porta está fechada
       C=1;                                      //Estado lógico é confirmado para que a porta está fechada
       O=0;                                      //se a porta está fechada, não está aberta
       }
       delay(1000);                              //Aguarda 1 segundo dentro do loop
       mySwitch.resetAvailable();                //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()==191424437)     //Se o sensor infravermelho tiver ativo, entra
     {
     send("i");                    //Envia "i" para o ARM para avisar que alguem esta no ambiente
     I=1;                          //Estado lógico é confirmado para que tem alguém no ambiente
     delay(1000);                  //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();    //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()=='d')           //Se receber "desliga" do ARM, entra
     {
     B=1;                                        //Estado Lógico do botão B é ativo, entra em modo repouso o alarme
     A=0;                                        //Botão A está desabilitado
     delay(1000);                                //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                  //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()=='l')           //Se receber "liga" do ARM, entra
     {
     B=0;                                        //Botão B está desabilitado
     A=1;                                        //Estado lógico do botão A é ativo, entra em modo ativo o alarme
     delay(1000);                                //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                  //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()=='p')           //Se receber "porta aberta" do ARM, entra
     {
     O=1;                                        //Estado lógico é confirmado para que a porta está aberta
     C=0;                                        //se a porta está aberta, não está fechada
     delay(1000);                                //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                  //Reinicia a função de entrada
     }       
  else
  if(mySwitch.getReceivedValue()=='i')           //Se receber "infravermelho" do ARM, entra
     {
      if(A==1)
      {
       if(C_1!=1)
       {
         send("i");
         I=1;                                        //Estado lógico é confirmado para que tem alguém no ambiente
         delay(1000);                                //Aguarda 1 segundo dentro do loop
         C_1 = 0;
       }
      }
      mySwitch.resetAvailable();                  //Reinicia a função de entrada
     }
  else
  if(mySwitch.getReceivedValue()==16736120)      //Se receber "infravermelho" do ARM, entra
     {
     C_1=1;                                      //Botão C pressionado, nao ativa alarme infravermelho
     delay(1000);                                //Aguarda 1 segundo dentro do loop
     mySwitch.resetAvailable();                  //Reinicia a função de entrada
     }             
 }

//----------- CONDIÇÃO PARA LIGAR SIRENE  ----------

 if(A==1)                                        //Se o alarme está ligado, começa o monitoramento
 {
   if(O==1)                                      //Porta aberta enquanto o monitoramento está ativo, então aciona a sirene
   {
//----------- LIGA A SIRENE DO ALARME  ----------     
       digitalWrite(rele,LOW);                  //Liga a Sirene 
       delay(2000);                             //Depois de 2 segundos       
       A=0;
       O=0;     
   }
   else
   if(I==1)                                    //Sensor infravermelho viu alguem
   {
     if(C_1==0)
     {
//----------- LIGA A SIRENE DO ALARME  ----------   
       digitalWrite(rele,LOW);                 //Liga a Sirene 
       delay(2000);                            //Depois de 2 segundos 
       I=0;
       A=0;
     }        
   }
 }
 else
 if(B==1)                                     //Botão B ativo, desliga tudo
 {
       O=0;
       I=0;                                   //Garante que o infravermelho está em estado lógico desligado 
       C_1=0;
       digitalWrite(rele,HIGH);               //Desliga a Sirene
       delay(2000);                           //Espera 2 segundos para o próximo LOOP      
 }
} 



//----------- FUNÇÃO PARA ENVIAR OS DADOS PARA O ARM  ----------  
void send (char *message)
{
 vw_send((uint8_t *)message, strlen(message));
 vw_wait_tx(); // Aguarda o envio de dados
}

Olá,
Podes indicar as especificações (tensões e correntes) de funcionamento do relé e da sirene? Como está ligado o relé ao Arduino? A sirene usa a mesma alimentação do Arduino? Um esquema ajudava muito...

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.