Necesito ayuda con un sensor de flujo. Tengo puesto que cuando fluye me activa un led (simula un relé). Necesito que, cuando el nivel de flujo sea decreciente, pare de darme señal digital el led.
Tampoco estoy segura si coger la señal de la lectura del serial es buena idea, pero no he conseguido cogerla directamente del analogread del sensor.
Os estoy muy agradecida.
volatile int Contador; //variable que cuenta los pulsos
int PinSensor = 2; // pin donde se conecta el sensor
// función a ejecutarse en cada interrupción
void pulso ()
{
Contador++;
}
long funcion(void)
{
long cantidad;
Contador = 0;
interrupts();
delay(100); //Se inician las interrupciones y se cuentan los pulsos
noInterrupts();//se suspenden las interrupciones
cantidad=10*Contador; // pulsos por segundo
return cantidad;
}
void setup()
{
pinMode(13, OUTPUT); //el led que simula el relé
Serial.begin(9600);
pinMode(PinSensor, INPUT);
attachInterrupt(0,pulso,RISING); // inicializamos las interupciones
}
void loop ()
{ if(Contador > 15.50) { // Si el flujo esta por encima del parámetro >
digitalWrite(13, HIGH); // Enciende el led o relé
} else { // De lo contrario, si el flujo está por debajo del parámetro
digitalWrite(13, LOW); // Apaga el led o relé
}
float frecuencia=funcion(); //frecuencia de los pulsos
float Caudal=frecuencia/7.5; //calculamos el caudal en L/m
Serial.print ("Flujo de agua: ");
Serial.println (Caudal);
}
Hola @albaaroiig, bienvenido al foro Arduino en Español. Te invito a que leas las normas del foro y en ellas encontrarás como se deben postear los códigos/errores. Así como lo has hecho esta mal presentado. Por favor, edita.
Primero algunas correcciones según lo que he leído en tu comentario.
Ese sensor no entrega datos analógicos asi que de ningún modo puedes leer algo proporcional al caudal de ese modo.
Si quieres establecer una secuencia decreciente, solo debes comparar valores actuales con el anterior.
Podríamos incluso asegurarnos que hay al menos 5 muestras decrecientes como para enviar un msg via LED de que el caudal decrece.
No esta probado así que ya me dirás si funciona o no
#define NUMDEC 10 // canitdad de valores decrecientes
int PinSensor = 2; // pin donde se conecta el sensor
volatile int Contador; //variable que cuenta los pulsos
long contadorAnt;
byte numDec = 0;
volatile bool flag = false; // se pone en true cuando la secuencia es decreciente en N grupos de números
// función a ejecutarse en cada interrupción
void pulso () {
Contador++;
}
long funcion(void) {
long cantidad;
Contador = 0;
interrupts();
delay(100); //Se inician las interrupciones y se cuentan los pulsos
noInterrupts();//se suspenden las interrupciones
cantidad = 10*Contador; // pulsos por segundo
if (contador < contadorAnt) {
contadorAnt = cantidad;
if (++numDec >= NUMDEC) // cuando se cuenten N valores decrecientes se activa el flag
flag = true;
}
else {
numDec = 0;
flag = false;
}
return cantidad;
}
void setup() {
pinMode(13, OUTPUT); //el led que simula el relé
pinMode(12, OUTPUT); // Led que indica secuencia descendente
Serial.begin(9600);
pinMode(PinSensor, INPUT);
attachInterrupt(0,pulso,RISING); // inicializamos las interupciones
}
void loop () {
if (Contador > 15.50) { // Si el flujo esta por encima del parámetro >
digitalWrite(13, HIGH); // Enciende el led o relé
} else { // De lo contrario, si el flujo está por debajo del parámetro
digitalWrite(13, LOW); // Apaga el led o relé
}
if (flag)
digitalWrite(12, HIGH); // secuencia decreciente
else
digitalWrite(12, LOW);
float frecuencia = funcion(); //frecuencia de los pulsos
float Caudal = frecuencia/7.5; //calculamos el caudal en L/m
Serial.print ("Flujo de agua: ");
Serial.println (Caudal);
}