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
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
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
Parabéns pelo projeto, consigo utilizar para acionar uma solenoide? no acionamento de um chuveiro?
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.
To procurando informações e gostei do conteúdo, passando pelo seu blog para conhecer mais seu trabalho, muito obrigado por compartilhar.
Ficamos felizes em saber que gostou do conteúdo do nosso blog!
Caso queria contribuir pode nos enviar um email: contato@portaldoarduino.com.br
Abraço!
gostaria de saber como posso esta comp´rando esse produto nº do telefone
Olá, você pode entrar em contato conosco pelo telefone: 31-98385-0408, que é WhatsApp também!