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.
1 x Uno R3 SMD CH340 + Cabo Usb para Arduino
1 x Mini Protoboard 170 pontos
1 x Sensor de Movimento Presença PIR HC-SR501
1 x Suporte de Acrílico para Sensor de Presença PIR
1 x Módulo Relé de Estado Sólido SSR 1 Canal
1 x Válvula Solenoide de Entrada de Água – 90° 3/4″ x Mangueira 3/8 127V – Nascimetal
1 x Potenciômetro Linear 10KΩ
1 x Conector Borne KRE 3 Vias
1 x Jumpers – Macho/Macho – 20 Unidades de 20cm
1 x Base Acrílica Para Fixar Placa Arduino Uno E Protodoard
Opcionais para PCB ao invés de Protoboard
1 x Placa Circuito Impresso Ilhada 4x6cm (Dupla Face)
1 x Barra de Pinos Fêmea Torneada 1×40 – 180º
1 x Barra de Pinos Fêmea Soquete 1×40 – 180°
Opcionais Arduino Nano
1 x Nano V3.0 + Cabo Usb para Arduino
1 x Protoboard 400 Pontos
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.

Figura 1 – Válvula Solenoide

Figura 2 – Relé de Estado Sólido

Figura 3 – Sensor de Presença PIR
| Placa | Dormindo | Ativado |
|---|---|---|
| Uno | ~0,02 A | ~ 0,05 A |
| Nano | ~ 0.01 A | ~ 0,02 A |

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
//-----------------------------------------------------------------------------
// 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();
}
}
//-----------------------------------------------------------------------------
// 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");
}
}
}
Parte 1
Parte 2
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.
A modularização adotada permite diversas melhorias e variações, que podem ser implementadas conforme a necessidade da aplicação:
|
|
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!