Automação Residencial – Bebedouro Automático

Mais uma aplicação para você que curte automação, temos neste tutorial um bebedouro automático capaz de encher um copo
por completo, através de sensores que captam a presença do copo e o microcontrolador que controla toda ação.

Montando o projeto

Para o desenvolvimento do nosso projeto será necessária uma placa de desenvolvimento Arduino Uno. O Arduino irá controlar os sinais vindos do Sensor Ultrassónico HC-SR04 que por sua vez determinará a ativação da Bomba D’agua 127V por um Módulo Relé 1 Canal 5v.

Abaixo temos o esboço do circuito básico para o funcionamento do nosso microcontrolador:

Componentes Utilizados:

 
 

 

 
 

 

 
 

 

 
 

 

 
 

 

 
 

Não utilizaremos protoboard neste projeto, portanto vamos conectar o Sensor Ultrassónico diretamente na placa Arduino Uno, determinamos no código o Pino 11 em constante nível Alto para simular o VCC do Sensor.

O Modulo Relé é alimentado pelos mesmos 5V fornecido pelo Arduino e seu sinal para ativação será recebido pelo Pino A0.

A Bomba D’agua utilizada nesse projeto é de 127Vac, portanto siga a montagem conforme imagem anterior nos contatos do relé e em sua rede 127V.

A Bomba fica submersa e utilizamos uma mangueira para guiar a água para fora do recipiente.

Abaixo vemos na prática o protótipo montado:

O vídeo demonstrando o funcionamento desse projeto pode ser acessado pela página no Instagram:

Laboratório dos Fundos

https://www.instagram.com/laboratorio_dosfundos/

Desenvolvendo o código

Após montagem inicial, vamos para o código onde controlará todo sistema.

O Código como pode ser observado abaixo, será carregado para o microcontrolador ATMEGA328p da placa Arduino:

#define trigPin 12 // define pino 12 com nome trigPin
#define echoPin 13 // define pino 12 com nome echoPin
#define fakevcc 11 // define pino 11 com nome fakevcc
#define rele A0 // define pino A0 com nome rele

int count = 0; // cria variavel
int i;

void setup() {
  Serial.begin (9600); // inicia comunicação serial
  pinMode(fakevcc, OUTPUT); // define fakevcc como saida digital
  pinMode(trigPin, OUTPUT); // define trigPin como saida digital
  pinMode(echoPin, INPUT); // define echoPin como entrada digital
  pinMode(rele, OUTPUT);  // define rele como saida digital
  digitalWrite(fakevcc, HIGH); // deixa fakevcc em nivel alto constante
  digitalWrite(rele,HIGH); // inicia relé desativado (modulo relé ativo em nivel baixo)
}

void loop() {
  long duration, distance;  // rotina de medição do sensor ultrassonico
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

 if (distance <= 20) { // se distancia medida for menor ou igual a 20 cm, executa codigo abaixo

for (i=0;i<=3;i++) // laço FOR de 3 repetições

  digitalWrite(trigPin, LOW);  // rotina de medição do sensor ultrassonico
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

count++;
delay(1000); // atraso em 1 segundo
if(distance >= 21){ // se distancia for maior ou igual a 21 cm programa sai do FOR
  count = 0; // zera contagem
  return 0; // retorna ao inicio
  }

if(count==3){ // se em 3 segundos permanecer distancia inferior a 20 cm executa codigo abaixo
    digitalWrite(rele,LOW); // ativa relé
    delay(3000); // atraso de 3 segundos
    digitalWrite(rele,HIGH); // desliga relé
    count = 0;   // zera contador

         digitalWrite(trigPin, LOW);  // rotina de medição do sensor ultrassonico
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
       
       while (distance<=20){ // determina ficar dentro do laço while enquanto distancia permanecer menor que 20 cm
        
  digitalWrite(trigPin, LOW);  // rotina de medição do sensor ultrassonico
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

  delay(300);}
}}
   
  if (distance >= 21){ // se distancia for maior ou igual a 21 cm executa abaixo
    Serial.println("sem copo"); // escreve no monitor serial
    digitalWrite(rele,HIGH); // deixa relé desabilitado
  }
  else {
    Serial.print(distance); // escreve a distancia lida pelo sensor no monitor serial
    Serial.println(" cm");  // escreve no monitor serial
  }
  delay(100); // atraso 0.1 segundos
}

Você pode consultar, baixar, modificar e compartilhar o código deste tutorial em nosso repositório do GitHub! E lá você encontra todos os códigos já publicados aqui no blog! Venha compartilhar conhecimento com toda a comunidade maker!

Mergulhando no projeto

Software

Função Setup

Na função setup iremos definir as portas como entradas e saídas

pinMode(fakevcc, OUTPUT); 
pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
pinMode(rele, OUTPUT);

Também, criamos o fakevcc para alimentação do Sensor Ultrassónico HC-SR04, deixando o pino em estado Alto constante:

digitalWrite(fakevcc, HIGH);

Função Loop

A função Loop inicia com a rotina padrão de leitura do sensor ultrassónico, enviado um sinal, recebendo e fazendo os cálculos e entregando em centímetros a distância do obstáculo detectado:

long duration, distance;  
digitalWrite(trigPin, LOW);  
delayMicroseconds(2); 
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); 
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;

Se a distancia dectada for iguak ou inferior a 20cm o sistema entra em uma contagem de 3 segundos, onde que se completar este estado durante os 3 segundos garante que o objeto é um copo.

for (i=0;i<=3;i++)
count++;
delay(1000);

Se if(count==3) , O relé é ativado por 3 segundos também, tempo que na prática comprovamos que dura
para encher o copo:

digitalWrite(rele,LOW); 
delay(3000); 
digitalWrite(rele,HIGH); 
count = 0;

No fim da ação o contador é zerado.

Após encher o copo a bomba entra no laço While onde protege caso o copo permaneça no local mesmo depois
de encher e evite que transborde de água com outro enchimento.

while (distance<=20)

Assim que o copo é retirado do local cheio de água que o sistema volta para o início, aguardando para o próximo
enchimento.

Hardware

Módulo Relé 1 Canal 5v

O Módulo Relé 1 Canal 5v é composto por um relé de 5v com contatos NA /NF e um foto acoplador, afim de isolar os
circuitos internos. O Relé fecha seu contato COMUM/NA quando recebe no seu pino de IN um nível de baixo LOW.

Pinagem:

– VCC: 3 – 5V

– GND: GND

– IN: Entrada Digital de Sinal

Sensor Ultrassónico HC-SR04

O Sensor de Distância Ultrassônico HC-SR04 é capaz de medir distâncias de 2cm a 4m com ótima precisão e baixo preço. Este módulo possui um circuito pronto com emissor e receptor acoplados.

Para começar a medição é necessário alimentar o módulo e colocar o pino Trigger em nível alto por mais de 10us. Assim o sensor emitirá uma onda sonora que ao encontrar um obstáculo rebaterá de volta em direção ao módulo, sendo que o neste tempo de emissão e recebimento do sinal o pino ECHO ficará em nível alto. Logo o calcula da distância pode ser feito de acordo com o tempo em que o pino ECHO permaneceu em nível alto após o pino Trigger ter sido colocado em nível alto.

Distância = [Tempo ECHO em nível alto * Velocidade do Som] / 2

Pinagem:

1 -VCC 2- TRIGGER 3 – ECHO 4 – GND

Bomba D’agua 127V

Conclusão

Por esse projeto trabalhamos e conhecemos um pouco mais sobre o sensor ultrassónico e aplicações alternativas com bombas d’agua. Essa bomba foi de um antigo aquário meu, hoje já não tenho mais, como sobrou a bomba, eu a reutilizei nesse projeto.

Talvez você também tenha uma peça elétrica/eletrônica descartada em casa que possa também ser implementada em seus projetos, pense nisso. Deixem suas sugestões e perguntas, compartilhe conhecimento!

Referências

Data Sheet Sensor Ultrassônico SR04

https://www.mouser.com/ds/2/813/HCSR04-1022824.pdf

Avatar
Sobre Pedro Pereira 8 artigos
Engenheiro Eletricista, Técnico em Eletrônica e Entusiasta na área de Sistemas Embarcados. https://www.instagram.com/laboratorio_dosfundos/

6 Comentários

    • Olá Luiz.
      No caso de um chuveiro elétrico os valores de tensão são substancialmente maiores, e isto modificaria o projeto completamente, podemos dizer que seria um projeto completamente diferente.
      Abraço.

Deixe uma resposta

O seu endereço de email não será publicado.


*