Ir ao conteúdo
  • Cadastre-se

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


Ir à solução Resolvido por Bruno Heringer,

Posts recomendados

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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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!

Link para o comentário
Compartilhar em outros sites

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}  
Link para o comentário
Compartilhar em outros sites

Ô 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.

Link para o comentário
Compartilhar em outros sites

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!!

Link para o comentário
Compartilhar em outros sites

É, 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.

Link para o comentário
Compartilhar em outros sites

  • Solução

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

Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!