Ir ao conteúdo

Medição de volume de água utilizando sensor de vazão P/ Arduino (Dúvida)


Ir à solução Resolvido por Bruno Heringer,

Posts recomendados

Postado

Olá pessoal, sou iniciante no Arduino e me deparei com algumas dificuldades durante meu projeto de medição de entrada e saída de um volume d'água em um reservatório.

 

Comprei os sensores de vazão como os do link: http://produto.mercadolivre.com.br/MLB-718298692-sensor-fluxo-agua-12-p-arduino-pic-novolondrina-_JM e utilizo uma placa Arduino UNO.

 

Gostaria de usar 2 sensores desses simultaneamente, um contabilizando o volume de entrada e o outro de saída, calcular a diferença entre eles para saber o valor armazenado.

 

Alguém poderia me dar uma luz, alguma programação parecida ou me indicar uma boa fonte para que eu aprenda como fazer tal programação?

 

desde já agradeço.

Postado

Olha, não programo para arduino, mas pelo que li sobre esse sensor, ele é tipo efeito hall... será gerado pulsos na saida.. que será ligada a uma entrada do arduino..

 

Assim pelo manual( datasheet) ele deva falar quantos pulsos equivalem a um litro por exemplo..

 

achei um exemplo que talvez ajude:

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

Postado

Obrigado Rodrigo, eu até encontrei uma relação de litros/pulso para o sensor de 1/2 polegada, o problema é que eu não consegui programar pra contar os pulsos e posteriormente multiplicar por esse valor.

 

Se alguém pudesse me ajudar na programação eu seria eternamente grato!

Postado

amigo você realmente pesquisou na intenet??

 

3 min de pesquisa:

float vazao; //Variável para armazenar o valor em L/minfloat mediaVazao=0; //Variável para tirar a média a cada 1 minutoint contaPulso; //Variável para a quantidade de pulsosint index=0; //Variável para contagem dentro do intervalo void setup(){ Serial.begin(9600); //Inicia a serial com um baud rate de 9600pinMode(3, INPUT);attachInterrupt(1, incrementopulso, RISING); //Configura o pino 3(Interrupção 1) para trabalhar como interrupção//Para Arduino Uno usa-se 0 para o pino 2 e 1 para o pino 3Serial.println("Inicia Contagem"); //Imprime Inicio na serial} void loop (){contaPulso = 0; //Zera a variável para contar os giros por segundos do rotorsei(); //Habilita interrupçãodelay (1000); //Aguarda 1 segundocli(); //Desabilita interrupçãovazao = contaPulso / 5.5; //Converte para L/minmediaVazao=mediaVazao+vazao; //Soma a vazão para o calculo da mediaindex++; //incrementa contadorSerial.print(vazao); //Imprime na serial o valor da vazão em L/minSerial.print(" L/min - "); Serial.print(index); //Imprime a contagem do indice (segundos)Serial.println("s"); //Imprime s indicando que está em segundosif(index==60){mediaVazao = mediaVazao/60; //Tira a media dividindo por 60Serial.print("Media por minuto = "); //Imprime a frase Media por minuto =Serial.print(mediaVazao); //Imprime o valor da mediaSerial.println(" L/min - "); //Imprime L/minmediaVazao = 0; //Zera a variável media para uma nova contagemindex=0; //Zera a variável i para uma nova contagemSerial.println("Inicio"); //Imprime Inicio indicando que a contagem iniciou}}void incrementopulso (){ contaPulso++; //Incrementa a variável de contagem dos pulsos}  
Postado

Ô moço, eu procurei sim, achei dezenas de programações similares a essa

 

Acontece que eu não preciso medir vazão (L/Min), e sim volume (Litros) e eu não entendo o suficiente para modificar esse programa de forma que ele fizesse isso com 2 sensores e ainda subtraísse os valores de 1 pro outro, entende?

 

Desculpe a minha ignorância, só pensei que pra quem entendesse, tais funções seriam simples de serem feitas e por isso decidi perguntar

 

De qualquer forma, agradeço muito a sua boa vontade.

Postado

Olha, como falei nao manjo de arduino,  mas sei lá, tem um jeito meio tosco meio na unha que dá pra você fazer o que quer..

 

programe seu arduino para injcrementar a cada pulso uma variavel e exibir em um lcd (( ou na serial ligado ao pc) acho que arduino faz isso direto.. )  e faça 1 litro de agua atravessar seu sensor e veja quantos pulsos mediu, nao faço ideia mas digamos que para 1 litro foram 1000 pulsos,

 

abre a torneira e conta 20000 pulsos, 20000/1000 = 20 litros.. você sabe que entrou 20 litros, no outro sensor ligado a outra porta, você contou 10000 pulsos então sabe que saiu 10 litros,  o que entrou menos o que saiu = 10L

 

seria mais ou menos isso!!

Postado

É, eu tenho a relação pulso por litro. é de aproximadamente 2,25 ml para o de 1/2"

 

eu adaptei o programa de forma que ele contasse apenas o volume e somasse ao longo do tempo, me exibindo a cada 10 segundos.

float volume; //Variável para armazenar o valor em mlint contaPulso; //Variável para a quantidade de pulsosint i=0; //Variável para contagemfloat mediatotal= 0; //Média Acumuladafloat media= 0; //Médiavoid 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    volume = contaPulso * 2.25; //Converte para ml  media=media+volume; //Soma a volume para o calculo da media  mediatotal=media+volume;  i++;    Serial.print(volume); //Imprime na serial o valor da vazão  Serial.print(" ml "); //Imprime ml  Serial.print(i); //Imprime a contagem i (segundos)  Serial.println("s"); //Imprime s indicando que está em segundos    if(i==10)  {     Serial.print("\nPulsos = ");    Serial.print(contaPulso);    Serial.print("\nVolume Total = "); // Imprime a frase Volume Total =    Serial.print(mediatotal); //Imprime o valor da media acumulada    Serial.println(" ml - "); //Imprime ml    i=0;    mediatotal = mediatotal;  }  }  void incpulso (){   contaPulso++; //Incrementa a variável de contagem dos pulsos} 

Não mudei os nomes das variáveis, mas até então já consegui fazer funcionar pra 1 sensor, só falta saber como inserir um segundo.

  • Solução
Postado

Código finalizado e funcionando perfeitamente para um futuro necessitado como eu fui.

//Código para utilização de 2 sensores de fluxo de efeito Hall para medição de volume em reservatório  float volume_in; //Variável para armazenar o valor em ml instantâneo  float volume_out; //Variável para armazenar o valor em ml instantâneo  int contapulso_in; //Variável para a quantidade de pulsos de entrada  int contapulso_out; //Variável para a quantidade de pulsos de saída  int contapulsototal_in; //Variável que registra o total de pulsos de entrada  int contapulsototal_out;  //Variável que registra o total de pulsos de saída  int i=0; //Variável para contagem  float volumetotal_in= 0; //Variável para armazenar o valor em ml total de entrada  float volumetotal_out= 0; //Variável para armazenar o valor em ml total de entrada  float resultante; //Variável para armazenar o volume em ml armazenado no reservatório//-----------------------------------------------------  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    attachInterrupt(1, decpulso, RISING); //Configura o pino 3(Interrupção 1) para trabalhar como interrupção    Serial.println("\n\nInicio\n\n"); //Imprime Inicio na serial  }//-----------------------------------------------------    void loop ()  {    contapulso_in = 0; //Zera a variável para contar os giros por segundo    contapulso_out = 0; //Zera a variável para contar os giros por segundo    sei(); //Habilita interrupção    delay (1000); //Aguarda 1 segundo    cli(); //Desabilita interrupção        // Volume in        volume_in = contapulso_in * 2.25; //Converte para ml    contapulsototal_in = contapulsototal_in+contapulso_in;    volumetotal_in=volumetotal_in+volume_in; //Soma a volume para o calculo da media       // Volume out        volume_out = contapulso_out * 2.25; //Converte para ml    contapulsototal_out = contapulsototal_out+contapulso_out;    volumetotal_out=volumetotal_out+volume_out; //Soma a volume para o calculo da media    i++;    resultante = volumetotal_in-volumetotal_out;    Serial.print("\nVolume de Entrada = "); //Imprime Volume de Entrada =    Serial.print(volume_in); //Imprime na serial o valor da vazão    Serial.print(" ml "); //Imprime ml    Serial.print(i); //Imprime a contagem i (segundos)    Serial.println("s"); //Imprime s indicando que está em segundos    Serial.print("Volume de Saida = "); //Imprime Volume de Saida =     Serial.print(volume_out); //Imprime na serial o valor da vazão    Serial.print(" ml "); //Imprime ml    Serial.print(i); //Imprime a contagem i (segundos)    Serial.println("s"); //Imprime s indicando que está em segundos    if(i==10)    {       Serial.print("\n\n\nPulsos de Entrada = "); // Imprime a frase Pulsos de Entrada =       Serial.print(contapulsototal_in); //Imprime a quantidade de pulsos      Serial.print("\nVolume Total de Entrada = "); // Imprime a frase Volume Total de entrada =      Serial.print(volumetotal_in); //Imprime o valor do volume total      Serial.println(" ml "); //Imprime ml      Serial.print("\nPulsos de Saida = "); // Imprime a frase Pulsos de Saida =       Serial.print(contapulsototal_out); //Imprime a quantidade de pulsos      Serial.print("\nVolume Total de Saida = "); // Imprime a frase Volume Total de saida =      Serial.print(volumetotal_out); //Imprime o valor do volume total      Serial.println(" ml "); //Imprime ml      Serial.print("\n\nVolume no Tanque = "); // Imprime a frase Volume no Tanque =        Serial.print(resultante); //Imprime o volume contido no tanque      Serial.println(" ml \n\n"); //Imprime ml      i=0;      volumetotal_in = volumetotal_in;      volumetotal_out = volumetotal_out;    }  } //-------------------------------------------------------------   void incpulso ()  {     contapulso_in++; //Incrementa a variável de contagem dos pulsos  }//----------------------------------------------------------------  void decpulso ()  {     contapulso_out++; //Incrementa a variável de contagem dos pulsos  }

Agradeço a todos que me ajudaram e ou tentaram, rs

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!