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.
Tags:
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;
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 ()
{
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?
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por