Bom dia a todos

Estou com uma dúvida e espero que consigam me ajudar.

Estou fazendo a leitura de um potenciômetro, de 0 a 1023 bits. Utilizo também uma bomba e um sensor de fluxo. Então quando o potenciômetro estiver entre as posições 0 e 256, a bomba irá ligar e o sensor de fluxo irá contar quanto de água passou por ali. Mas não estou conseguindo programar para que o monitor serial me informe a quantidade de água assim que minha bomba desligar.

meu programa está mais ou menos assim:

-lê o potenciometro

while ((potenciometro>=0) && (potenciometro<256){

-liga bomba...

-liga sensor de fluxo...

}

if ((potenciometro>256){

calculo de vazao

}

Nesta minha lógica o problema é que quando o potenciometro estiver maior que 256, irá sempre mostrar o total de água enviado, porém quero que este calculo apareça apenas uma vez, quando eu "desvirar" o potenciômetro.

Exibições: 229

Responder esta

Respostas a este tópico

Bom dia , 

Informe por favor mais detalhes do seu projeto. Diagramas, fotos, etc. 

Que potenciômetro é esse ? 0-256 corresponde à qual quantidade de água na caixa dagua ?

Qual sensor de fluxo estará usando (envie link, fotos,etc) ?

Sugestão para estudo ( faça as montagens, rode e teste os programas) 

https://www.arduino.cc/en/Tutorial/AnalogInput

https://www.arduino.cc/reference/en/language/functions/analog-io/an...

Potenciômetro de 10k. O potenciômetro serve para eu ativar a minha bomba, então se a variável de leitura estiver entre 0 e 256 bits, a minha bomba será ativada, se for um valor maior a 256, a bomba fica desligada.

Utilizei este mesmo exemplo abaixo, em negrito está as mudanças que fiz.

---------------------------------------------------------------------------------------------------------------------------------------------------------

const int potenciometro = 0;

int valor = 0;

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 ()
{

valor = analogRead(potenciometro);

 while((valor>=0) && (valor<256){
  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(valor>256)
  {
    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
 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Conseguiu entender? Quando potenciômetro estiver entre 0 e 256 ficará contando o tempo e informando o quanto de água está passando pelo sensor, quando a leitura do potenciômetro for maior que 256, quero que ele me informe a média. Girando o potenciômetro de volta entre 0 e 256, deve retomar o processo.

Sei que falei em acionar bomba, calcular total de água e etc. Mas acho que desta forma da para entender também.

Qual é o problema no seu programa ?

O que esta errado ?

bom dia ,

É sempre bom descrever o significado de cada linha - fica mais fácil para entender o programa.

bool flag = false;      // flag esta na condição inicial de Falso 

setup{}

loop{
//seu código
if(valor>256) && (flag = false){        // se o valor for maior do que 256 e o flag for falso 

                                                        // faltou o maior igual >=
//executa bloco do if
flag = true;                                       // mude a condição do flag para verdadeiro 

                                                        // onde esta a função que desliga a bomba ? 

                                                        // onde esta a função que calcula a vazão ?:
}

//condição que habilita a variável flag
if (valor < 256){                                // se o valor for menor do que 256 
flag = false;                                     // mude a condição do flag para falso 

                                                       // onde esta a função que liga a bomba?
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço