Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
/
/
Sistema Automatizado de Jato D’Água com Sensor PIR e Modo Deep Sleep

Sistema Automatizado de Jato D’Água com Sensor PIR e Modo Deep Sleep

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

Introdução

Este projeto procura implementar o acionamento automático de uma válvula solenoide que libera um jato de água ao detectar a presença de seres vivos em determinada área externa. A proposta pode ser aplicada em locais onde não se deseja o trânsito frequente de animais ou pessoas, como hortas, jardins ou áreas sensíveis.A implementação adota o modo DEEP SLEEP para economia de energia, ativando o sistema apenas no momento da detecção.

Princípio de Funcionamento

O programa permanece em DEEP SLEEP MODE. Quando o sensor detecta a presença de um ser vivo, o microcontrolador é acordado e aciona o relé que, por sua vez, ativa a válvula solenoide por um tempo configurável (entre 0 e 5 segundos). Nesse intervalo, a válvula libera o fluxo de água por meio de um sprinkler, criando um efeito dissuasivo. Após o tempo decorrido, o sistema é desativado e volta ao estado de baixo consumo.

Detalhes da Implementação

  • Utilizamos uma válvula solenoide de 127V com consumo aproximado de 0,05A. Existem no mercado outras opções em 12V DC, mas optamos por utilizar um modelo AC já disponível. Esse tipo de válvula é normalmente fechada e permite o fluxo de água apenas enquanto estiver energizada. Caso a vazão seja crítica para sua aplicação, existem modelos com diferentes capacidades, pressões, conexões e tensões.

Figura 1 - Válvula Solenoide

  • Usamos um relé de estado sólido de um canal, capaz de acionar cargas de até 2A. Alternativamente, pode-se utilizar um relé mecânico convencional. Esse relé será responsável por liberar a corrente que energiza a válvula durante o tempo desejado.

Figura 2 - Relé de Estado Sólido

  • O sensor de movimento PIR HC-SR501 possui dois trimpots de cor laranja: o da esquerda ajusta o tempo de manutenção do sinal HIGH após detecção, e o da direita regula a sensibilidade de distância. Ambos foram ajustados para o mínimo, pois o tempo será controlado via código, e queremos minimizar disparos por movimentos irrelevantes. O sensor foi instalado com um cabo de 3 vias para permitir seu posicionamento próximo à área de interesse, e foi protegido por uma cápsula plástica translúcida, para evitar danos causados por umidade. Materiais como acrílico fino ou garrafas PET podem funcionar como CASEs simples e eficazes.

Figura 3 - Sensor de Presença PIR

  • Durante a maior parte do tempo, o sistema permanece em DEEP SLEEP, com consumo muito reduzido. Quando o sensor PIR detecta movimento, ele envia um sinal de 5V ao pino digital 2, ativando uma interrupção e acordando o Arduino. O código inclui proteção contra múltiplas interrupções (reentrância). Nos modelos UNO e NANO, apenas os pinos 2 e 3 suportam interrupções. A economia de energia no modo sleep é significativa, reduzindo o consumo em mais de 60%. A seguir apresentamos a tabela comparativa do consumo de energia entre o UNO e NANO nos modos DEEP SLEEP e ATIVO. Observem que o NANO é cerca de 50% mais eficiente no consumo de energia do que o UNO.
PlacaDormindoAtivado
Uno ~0,02 A~ 0,05 A
Nano ~ 0.01 A~ 0,02 A
  • Uma vez acordado, o sistema aciona o relé e libera o fluxo de água por tempo determinado (configurável via potenciômetro). Durante esse tempo, os LEDs do relé e do Arduino indicam visualmente a atividade do circuito.
  • Embora seja possível restringir o funcionamento ao período noturno usando um sensor de luminosidade (LDR), optamos por manter o sistema ativo durante o dia e a noite, já que a aplicação pode ser necessária em ambos os períodos. A lógica pode ser facilmente adaptada, caso o uso noturno seja desejado.
  • Um potenciômetro foi adicionado para permitir o ajuste fino do tempo de acionamento da válvula, dentro de um intervalo entre 0 e TEMPO_MAX_MS.

Figura 4 - Potenciômetro

Figura 5 - Diagrama do Circuito para o Uno

Figura 6 - Circuito em Bancada para o Uno

Figura 7 - Diagrama do Circuito para o Nano

Figura 8 - Circuito em Bancada para o Nano

 

Código Fonte com DEEP SLEEP

//-----------------------------------------------------------------------------
// Função : Este projeto tem como objetivo implementar o acionamento automático 
//          de uma válvula solenoide que libera um jato de água ao detectar a 
//          presença de seres vivos em determinada área externa. A proposta pode 
//          ser aplicada em locais onde não se deseja o trânsito frequente de 
//          animais ou pessoas, como hortas, jardins ou áreas sensíveis
//
// Componentes usados
//
//      1) 1x Arduino UNO ou NANO
//      2) 1x Sensor de Presença PIR HC-SR501
//      3) 1x Relé de Estado Sólido de 5V 1 canal
//      4) 1x Válvula Solenoide de 127V 3/4" 
//      5) 1x Potenciòmetro de 10K
//
// Princípio de Funcionamento
//
//    O programa permanece em DEEP SLEEP MODE. Quando o sensor detecta a presença 
//    de um ser vivo, o microcontrolador é acordado e aciona o relé que, por sua 
//    vez, ativa a válvula solenoide por um tempo configurável (entre 0 e 5 segundos). 
//    Nesse intervalo, a válvula libera o fluxo de água por meio de um sprinkler, 
//    criando um efeito dissuasivo. Após o tempo decorrido, o sistema é desativado 
//    e volta ao estado de baixo consumo.
//
// Versão : 1.0 Abr/2025 COM DEEP SLEEP
//
// Autores:  Alberto Menezes de Almeida
//           Dailton de OLiveira Menezes
//------------------------------------------------------------------------------

#include <avr/sleep.h>           // Biblioteca para o Deep Sleep Mode

//--------------------------------
// Definição de Constantes e Pinos
//--------------------------------

#define POT_PIN      A0          // Pino do potenciometro do intervalo
#define PIR_PIN      2           // Entrada do sensor PIR
#define RELE_PIN     7           // Saída para o relé de estado sólido
#define TEMPO_MAX_MS 5000        // Tempo máximo em milissegundos
#define RELE_ON      LOW         // Para Ligar o Relé
#define RELE_OFF     HIGH        // Para desligar o Relé

//--------------------------------
// Definição Variáveis de Controle
//--------------------------------

bool ativado = false;            // Se o Relé está ativado liberando a válvula
unsigned long tempoAtivacao = 0; // Tempo em que o Relé está ativado
bool sleeping = false;           // Flag para informar se está dormindo ou não
int intervalo = 0;               // Intervalo de tempo para ficar ativado

//--------------------------------
// Prototipação de Rotinas
//--------------------------------

void enterDeepSleep();           // Para entrar em Deep Sleep Mode 
void wakeup();                   // Para tratar o evento de acordar

//----------------------------------
// Rotina de Inicialização Aplicação
//----------------------------------

void setup() 
{

  // Inicializa a Serial

  Serial.begin(115200);
  while(!Serial);

  // Define o Led interno

  pinMode(LED_BUILTIN,OUTPUT);

  // Hello na Console

  Serial.println(F("Espanta Gato - V1.0 Abr/2025"));  

  // Define como os pinos que serão usados

  pinMode(PIR_PIN, INPUT);
  pinMode(RELE_PIN, OUTPUT);

  // Relé começa desativado
   
  digitalWrite(RELE_PIN, RELE_OFF);

}

//--------------------------------
// Loop Principal da Aplicação
//--------------------------------

void loop() 
{
  // Verifica se está ativado para tentar saber se já expirou o tempo ativado

  if (ativado) 
  {
    // Verifica se expirou o tempo para desligar

    if (millis() - tempoAtivacao >= intervalo) 
    {
      // Expirou, temos que desligar
      digitalWrite(RELE_PIN, RELE_OFF);
      digitalWrite(LED_BUILTIN,LOW);
      ativado = false;
      Serial.print(F("Válvula desativada depois de "));
      Serial.print(intervalo);
      Serial.println(" ms");
    }
  }
  else
  {
     enterDeepSleep();  // nada a fazer senão dormir para economizar energia...
  }

}

//---------------------------------------
// Rotina para entrar no Deep Sleep Mode
//---------------------------------------

void enterDeepSleep() 
{
   // Habilita a interrupção no pino do PIR para acordar

   attachInterrupt(digitalPinToInterrupt(PIR_PIN), wakeup, HIGH);

   // Mostra status na Serial

   Serial.println(F("Dormindo..."));
   Serial.flush();

   // Entrada no Deep Sleep propriamente dito

   set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Configura o modo Power Down
   sleep_enable();                      // Habilita o modo sleep
  
   noInterrupts();                      // Desativa interrupções momentaneamente
   sleep_bod_disable();                 // Desativa o BOD para economia extra de energia
   interrupts();                        // Reativa interrupções
  
   sleeping = true;                     // Seta o flag do estado dormindo  
   sleep_cpu();                         // Entra no modo sleep

}

//---------------------------------------
// Rotina para acordar do Deep Sleep Mode
//---------------------------------------

void wakeup()
{  

  // Só aceita UM evento se estava dormindo por causa da reentrância
  // Múltiplos eventos podem ocorrer durante a mudança de estado para HIGH

  if (sleeping)
  {
    // Após acordar

    sleeping = false;                    // Seta a flag que acordou    
    sleep_disable();                     // Desabilita o modo sleep  

    // Desabilita a interrupção do PIR

    detachInterrupt(digitalPinToInterrupt(PIR_PIN));

    // Ativa Relé pois houve detecção de Presença

    intervalo = map(analogRead(POT_PIN),0,1023,0,TEMPO_MAX_MS);
    ativado = true;                      
    tempoAtivacao = millis();
    digitalWrite(RELE_PIN, RELE_ON);
    digitalWrite(LED_BUILTIN,HIGH);
    Serial.println(F("Acordando com Movimento detectado: válvula ativada")); 
    Serial.flush(); 
  
  }

}
 

Código Fonte sem DEEP SLEEP

//-----------------------------------------------------------------------------
// Função : Este projeto tem como objetivo implementar o acionamento automático 
//          de uma válvula solenoide que libera um jato de água ao detectar a 
//          presença de seres vivos em determinada área externa. A proposta pode 
//          ser aplicada em locais onde não se deseja o trânsito frequente de 
//          animais ou pessoas, como hortas, jardins ou áreas sensíveis
//
// Componentes usados
//
//      1) 1x Arduino UNO ou NANO
//      2) 1x Sensor de Presença PIR HC-SR501
//      3) 1x Relé de Estado Sólido de 5V 1 canal
//      4) 1x Válvula Solenoide de 127V 3/4" 
//      5) 1x Potenciòmetro de 10K
//
// Princípio de Funcionamento
//
//    O programa permanece em DEEP SLEEP MODE. Quando o sensor detecta a presença 
//    de um ser vivo, o microcontrolador é acordado e aciona o relé que, por sua 
//    vez, ativa a válvula solenoide por um tempo configurável (entre 0 e 5 segundos). 
//    Nesse intervalo, a válvula libera o fluxo de água por meio de um sprinkler, 
//    criando um efeito dissuasivo. Após o tempo decorrido, o sistema é desativado 
//    e volta ao estado de baixo consumo.
//
// Versão : 1.0 Abr/2025 SEM DEEP SLEEP
//
// Autores: Alberto Menezes de Almeida
//           Dailton de Oliveira Menezes
//------------------------------------------------------------------------------

//--------------------------------
// Definição de Constantes e Pinos
//--------------------------------

#define POT_PIN      A0          // Pino do potenciometro do intervalo
#define PIR_PIN      2           // Entrada do sensor PIR
#define RELE_PIN     7           // Saída para o relé de estado sólido
#define TEMPO_MAX_MS 5000        // Tempo máximo em milissegundos
#define RELE_ON      LOW         // Para Ligar o Relé
#define RELE_OFF     HIGH        // Para desligar o Relé

//--------------------------------
// Definição Variáveis de Controle
//--------------------------------

bool ativado = false;            // Se o Relé está ativado liberando a válvula
unsigned long tempoAtivacao = 0; // Tempo em que o Relé está ativado
int intervalo = 0;               // Intervalo de tempo para ficar ativado

//----------------------------------
// Rotina de Inicialização Aplicação
//----------------------------------

void setup() 
{

  // Inicializa a Serial

  Serial.begin(115200);
  while(!Serial);

  // Define o Led interno

  pinMode(LED_BUILTIN,OUTPUT);

  // Hello na Console

  Serial.println(F("Espanta Gato - V1.0 Abr/2025"));  

  // Define como os pinos serão usados

  pinMode(PIR_PIN, INPUT);
  pinMode(RELE_PIN, OUTPUT);

  // Relé começa desativado
   
  digitalWrite(RELE_PIN, RELE_OFF);

}

//--------------------------------
// Loop Principal da Aplicação
//--------------------------------

void loop() 
{

  // Lê o status do sensor

  int movimento = digitalRead(PIR_PIN);

  // Verifica se o sensor captou alguma presença

  if (movimento == HIGH && !ativado) 
  {
    // Detecção de movimento e ainda não ativado. 
    // Liga Relé e começa contar o tempo
    intervalo = map(analogRead(POT_PIN),0,1023,0,TEMPO_MAX_MS);
    ativado = true;
    tempoAtivacao = millis();
    digitalWrite(RELE_PIN, RELE_ON);
    digitalWrite(LED_BUILTIN,HIGH);
    Serial.println(F("Movimento detectado: válvula ativada"));
  }

  // Verifica se está ativado para tentar saber se já expirou o tempo ativado

  if (ativado) 
  {
    // Verifica se expirou o tempo para desligar

    if (millis() - tempoAtivacao >= intervalo) 
    {
      // Expirou, temos que desligar
      digitalWrite(RELE_PIN, RELE_OFF);
      digitalWrite(LED_BUILTIN,LOW);
      ativado = false;
      Serial.print(F("Válvula desativada depois de "));
      Serial.print(intervalo);
      Serial.println(" ms");
    }
  }
}
 

Conclusão

O projeto apresentado buscou demonstrar como utilizar um sensor de presença PIR em conjunto com um Arduino e uma válvula solenoide para controlar o fluxo de água em resposta à detecção de movimento. A adoção do modo DEEP SLEEP contribuiu significativamente para a economia de energia, tornando o sistema adequado para aplicações de longa duração em ambientes externos.No assunto apresentado sobre sensores, atuadores e gerenciamento de energia, o projeto pode ser adaptado para diversas finalidades, como sistemas de irrigação pontual, controle de presença em áreas restritas ou como mecanismo dissuasivo em áreas sensíveis ao trânsito de seres vivos. A solução permite personalizações tanto no tempo de acionamento quanto nos componentes utilizados, como o tipo de válvula e a alimentação do sistema.

Possíveis Expansões

A modularização adotada permite diversas melhorias e variações, que podem ser implementadas conforme a necessidade da aplicação:

  • Sensor de Luminosidade (LDR): Adicionar um sensor de luz ambiente para limitar o funcionamento apenas durante o período noturno, quando há maior probabilidade de presença indesejada ou quando se deseja evitar desperdício de água em horários sem necessidade.
  • Controle por Horário: Integrar um RTC (Relógio de Tempo Real) como o DS3231 para definir janelas de funcionamento (por exemplo, somente entre 22h e 6h).
  • Alimentação Solar: Utilizar um pequeno painel solar com bateria recarregável e circuito de carga para tornar o sistema completamente autônomo, ideal para locais remotos ou sem acesso à energia elétrica constante.
  • Integração com Comunicação Wireless: Usar módulos como o ESP32 ou ESP8266 para monitorar remotamente os acionamentos via Wi-Fi ou enviar alertas para o celular. Isso pode ser estendido com dashboards ou integração com Blynk, Node-RED, entre outros.
  • Registro de Eventos em SD Card ou EEPROM: Armazenar localmente a quantidade e o horário dos acionamentos, útil para análise posterior e estatísticas de presença no local.
  • Acionamento por múltiplos sensores PIR em paralelo: Expandir a área de cobertura utilizando mais sensores PIR conectados em paralelo ou com lógica OR, para monitorar áreas maiores.
  • Detecção por Câmera + IA (Visão Computacional): Em versões mais avançadas, é possível integrar câmeras com reconhecimento de movimento ou classificação de objetos para acionar somente diante de presenças específicas.

Sobre o Autor


Alberto de Almeida Menezes
[email protected]

Bacharel em Engenharia de Áudio e Produção Musical pela Berklee College of Music.

Dailton de Oliveira Menezes
[email protected]

Bacharel em Ciência da Computação pela Universidade Federal de Minas Gerais.

Este projeto procura implementar o acionamento automático de uma válvula solenoide que libera um jato de água ao detectar a presença de seres vivos em determinada área externa.

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200