Tutorial: Como utilizar o Sensor de Fluxo de Água - G 3/4 com Arduino

Adquira estes componentes na Loja do Lab de Garagem

Olá Garagista! Neste tutorial mostraremos como utilizar o Sensor de Fluxo de Água. Como demonstração, iremos controlar o fluxo de água através de um gatilho de mangueira e mostrar no Serial Monitor a vazão em L/min.

Material Utilizado:

1x Sensor Fluxo de Água - G 3/4

1x ArduinoAlguns Jumpers

2x Mangueira de 1 metro

2x Conexão para mangueira

1x Gatilho para mangueira

1. Sensor de Fluxo de Água

Imagem 1 - Sensor de Fluxo de Água (G 3/4)

O Sensor de fluxo de água é constituído por um corpo de plástico, um rotor , e um sensor de efeito Hall. Quando a água fluir através do rotor, ele irá girar que influenciará diretamente na frequência de pulsos, e através desses pulsos que são entregues pelo sensor de efeito hall é possível saber qual a sua vazão.

2. Montagem

Figura 1 - Montagem e conexões

3. Sketch

float vazao; //Variável para armazenar o valor em L/min
float media=0; //Variável para tirar a média a cada 1 minuto
int contaPulso; //Variável para a quantidade de pulsos
int i=0; //Variável para contagem


void setup()

  Serial.begin(9600); //Inicia a serial com um baud rate de 9600
  
  pinMode(2, INPUT);
  attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupção 0) para trabalhar como interrupção
  Serial.println("\n\nInicio\n\n"); //Imprime Inicio na serial



void loop ()
{
  contaPulso = 0;   //Zera a variável para contar os giros por segundos
  sei();      //Habilita interrupção
  delay (1000); //Aguarda 1 segundo
  cli();      //Desabilita interrupção
  
  vazao = contaPulso / 5.5; //Converte para L/min
  media=media+vazao; //Soma a vazão para o calculo da media
  i++;
  
  Serial.print(vazao); //Imprime na serial o valor da vazão
  Serial.print(" L/min - "); //Imprime L/min
  Serial.print(i); //Imprime a contagem i (segundos)
  Serial.println("s"); //Imprime s indicando que está em segundos
  
  if(i==60)
  {
    media = media/60; //Tira a media dividindo por 60
    Serial.print("\nMedia por minuto = "); //Imprime a frase Media por minuto =
    Serial.print(media); //Imprime o valor da media
    Serial.println(" L/min - "); //Imprime L/min
    media = 0; //Zera a variável media para uma nova contagem
    i=0; //Zera a variável i para uma nova contagem
    Serial.println("\n\nInicio\n\n"); //Imprime Inicio indicando que a contagem iniciou
  }
  
}
 
 
void incpulso ()

  contaPulso++; //Incrementa a variável de contagem dos pulsos

Referências:

http://www.seeedstudio.com/wiki/G3/4_Water_Flow_sensor

Exibições: 42059

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Marcelo Marino em 11 abril 2017 às 17:22

Noa consigo fazer funcionar meu sensor, alguém pode me ajudar??

Liguei o amarelo na entrada 10. vermelho do positivo e preto no GND, usei a mesma linha e comando da pagina, mas não conta o fluxo, comprei 2 sensor achando que poderia ser o defeito no primeiro e nada.

Ja fiz o teste com água e soprando também nada..

Se alguém ajudar me ajudar fico agradecido,

Comentário de Matheus Lorram Lima Dumont em 31 outubro 2016 às 19:16

Segue imagem da montagem :

Comentário de Matheus Lorram Lima Dumont em 31 outubro 2016 às 19:15
Boa noite prezados,  

Preciso de ajuda em um sketch do meu projeto e estou tendo problema com força e a movimentação do
motor utilizando as bibliotecas stepper e accelstepper.
O projeto está apresentando um delay antes de realizar a rotação do motor que não consegui
decifrar o porque ! Estou usando um motor de drive A4988, Motor NEMA 17 1,1Kgf, BlackBoard V1 que é idêntica ao
Arduino UNO, e um Ethernet Shield junto com um sensor de fluxo de 3/4.
Alguém tem alguma sugestão para resolver o problema de acionamento do motor após coleta
pelo sensor de fluxo sem que prejudique os valores da coleta ? Preciso de ajuda pra resolver esse problema ...
Se alguém puder dar uma força !

Segue código abaixo baseado na sketch acima de coleta de fluxo de água:
#include <Stepper.h>
#include <SPI.h>
#include <SD.h>
#include <AccelStepper.h>

float vazao; //Variavel para armazenar o valor em L/min
float media=0; //Variavel para tirar a media a cada 1 minuto
int contaPulso; //Variavel para a quantidade de pulsos
int i=0; //Variavel para contagem
File myFile;

int velocidade_motor = 500;
int aceleracao_motor = 500;
const int stepPin = 7;
const int dirPin = 3;

void setup()
{
Serial.begin(9600); //Inicia a serial com um baud rate de 9600

//Definindo variavel de interrupçao do sensor de fluxo
pinMode(2, INPUT);
attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupcao 0) para trabalhar como interrupcao

//gravação dos dados no MicroSD
Serial.println("Inicializando MicroSD para gravação das informações . . . ");
if (!SD.begin(4)){
Serial.println("Falha na inicialização do dispositivo . . . ");
return;
}
Serial.println("Inicialização realizada com sucesso");
Serial.println("\n\nInicio\n\n"); //Imprime Inicio na serial
}


void loop ()
{

contaPulso = 0; //Zera a variavel para contar os giros por segundos
sei(); //Habilita interrupcao
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupcao

//inicia a contabilização do fluxo
vazao = contaPulso / 5.5; //Converte para L/min
media=media+vazao; //Soma a vazao para o calculo da media
i++;

Serial.print(vazao); //Imprime na serial o valor da vazao
Serial.print(" L/min - "); //Imprime L/min
Serial.print(i); //Imprime a contagem i (segundos)
Serial.println("s"); //Imprime s indicando que esta em segundos

if(i==60)
{
media = media/60; //Tira a media dividindo por 60
Serial.print("\nMedia por minuto = "); //Imprime a frase Media por minuto =
Serial.print(media); //Imprime o valor da media
Serial.println(" L/min - "); //Imprime L/min

movimenta();

if (!SD.exists("dados.txt")){
myFile=SD.open("dados.txt", FILE_WRITE);
if (myFile) {

myFile.print("Media por minuto : ");
myFile.print(media);
myFile.println(" L/min ");

// Read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
}
} else {
// if the file didn't open, print an error:
Serial.println("Error ao abrir dados.txt");
}
}

media = 0; //Zera a variavel media para uma nova contagem
i=0; //Zera a variavel i para uma nova contagem
}

void incpulso ()
{
contaPulso++; //Incrementa a variavel de contagem dos pulsos
}

void movimenta()
{
if ((media > 0) && (media<4.8) )
{
Serial.println("Abrindo valvula 100 percent ! ");
digitalWrite(dirPin,HIGH);
for(int x = 0; x < 50; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(500);
}
else if ((media>=4.8) && (media<=5.5))
{
Serial.println("Abrindo valvula 30 percent");
digitalWrite(dirPin,HIGH);
for(int x = 0; x < 50*(0.30); x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
delay(500);
}
else if (media>5.5)
{
Serial.println("Fechando valvula 100 percent");
digitalWrite(dirPin,LOW); //Changes the rotations direction
// Makes 400 pulses for making two full cycle rotation
for(int x = 0; x < 50; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
delay(1000);
}
}

Abs. e Obrigado !
Comentário de Adriano Furlaneto Mateus em 9 agosto 2016 às 23:58

Boa noite moçada...

Seguinte, copiei o projeto e blz.. funcionou... Mas adaptei no meu projetinho aqui um LCD 16x2 I2C, e ai só funciona se eu comentar a linha 

cli(); //Desabilita interrupção

Mas teoricamente funciona normal... Alguem saberia me ajudar com este problema?

Grato.

Comentário de Caio César Pereira da Silva em 31 março 2016 às 13:05

Este sensor precisa de uma pressão mínima de trabalho?? qual a precisão??

Se passar 0,01L/min ele irá registrar?

Comentário de OtyRS em 6 dezembro 2015 às 9:58

show o artigo! parabéns.

Comentário de matheus callegari portela em 11 novembro 2015 às 9:12

alguém sabe e pode me dizer porque o "contapulso" é dividido por "5.5" na quinta linha do "void loop"?

o porque do 5.5 ?

Comentário de marcelo lino silva em 12 agosto 2015 às 0:30

boa noite eu gostaria de usar este sensor  , não para fazer contagem de litros mas gostaria de usar para acender um led ao invés de contar a passagem de litros de agua,  desde já agradeço pela ajuda ,linosilva1975@hotmail.com

Comentário de Victor Baiochi Riboldi em 14 junho 2015 às 22:00

Comentário de marcos eduardo de mello torrico em 24 julho 2014 às 22:35

Boa noite. Caros tenho tido muita dificuldade para fazer a leitura de mais de um sensor. Poderiam me ajudar?

Boa Noite Marcos, para utilizar mais de um sensor, tive que verificar quais portas do arduino possuem a função de interrupção, no caso do Arduino UNO, as portas 2 e 3. Ai para o restante é só fazer os devidos ajustes.

Comentário de Giovane Bianquini Martos em 1 junho 2015 às 17:53

Olá pessoal. Comprei um sensor deste só que as conexões são de 1/2. Gostaria de saber onde é que eu acho a relação entre numero de pulsos e litros de água. Exemplo: 200 pulsos = 1 litro. Alguém pode ajudar??

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço