Projetos

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

Eletrogate 23 de julho de 2025

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.
    Placa Dormindo Ativado
    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
    tinho.menezes@gmail.com

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


    Dailton de Oliveira Menezes
    dailton.menezes@gmail.com

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


    Eletrogate

    23 de julho de 2025

    A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

    Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

    Eletrogate Robô

    Assine nossa newsletter e
    receba  10% OFF  na sua
    primeira compra!