Ayuda proyecto - Detector Fuga de Agua por Caudal

Estoy intentando crear un dispositivo capaz de cortar el agua en caso de que quede un grifo abierto o se sufra una rotura de tubería. La idea es evitar sorpresas en la factura del agua porque se rompió una tubería de riego enterrada y me llego una factura brutal.

  • El Concepto
    En ciclos de 24 horas un contador de caudal mide el consumo de agua. Se establece una limitación de x metros cúbicos, si no se superan a las 24 horas se resetea y vuelve a empezar a contar.
    En caso de superarse el caudal se bloquea el paso de agua y queda en este estado hasta que manualmente hasta que se reinicia.
    Los metros cúbicos para considerar fuga serán a calcular con facturas y ajustes en función del gasto de agua de cada uno.

  • Material que considero necesario
    Arduino - para la programación
    Sensor de flujo para - Medir de caudal y el volumen
    Electroválvula - Para cortar el agua
    Relé 5v / 220V - Para activar la electroválvula

  • El código lo que tengo muy verde... no tengo muy claro si lo que estoy haciendo es correcto pero os pongo con lo que he empezado.

const int sensorPin = 2; // Pin digital para el sensor de flujo
const int measureInterval = 10000; // Tiempo entre muestreo
volatile int pulseConter;
const float factorK = 7.5; // YF-S201
float volume = 0;
float volumenMaximo = 2000; //caudal máximo 2000 litros 2 metros cúbicos
unsigned long start = 100000;//Variable para el tiempo del relé
unsigned long time;
long t0 = 0;
int rele = 8;// Asignamos enl pin
byte estado = 0;

void ISRCountPulse()
{
pulseConter++;
}

float GetFrequency()
{
pulseConter = 0;
interrupts();
delay(measureInterval);
noInterrupts();
return (float)pulseConter * 1000 / measureInterval;
}

void SumVolume(float dV)
{
volume += dV / 60 * (millis() - t0) / 1000.0;
t0 = millis();
}

void setup()
{
Serial.begin(9600);
pinMode(sensorPin,INPUT);//Asignamos al pin que es entrada
pinMode(rele,OUTPUT);// Asignamos al pin que es salida
digitalWrite(rele, HIGH); //Activamos la bobina del relé
attachInterrupt(digitalPinToInterrupt(sensorPin), ISRCountPulse, RISING);
t0 = millis();
}

void loop()
{
float frequency = GetFrequency(); // obtener frecuencia en Hz
float flow_Lmin = frequency / factorK; // calcular caudal L/min
SumVolume(flow_Lmin);
time = millis();
Serial.print(" Caudal: ");
Serial.print(flow_Lmin, 3);
Serial.print(" (L/min)\tConsumo:");
Serial.print(volume, 1);
Serial.println(" (L)");
Serial.print("Time: ");
Serial.println(time); //prints time since program started
if (volume >volumenMaximo){
switch(estado) {
case 0: digitalWrite(rele, LOW); //Activamos la bobina del relé
delay(600000);
start = millis();
estado = 1;
Serial.println(time); //prints time since program started
break;
case 1: if (millis() - start > 1000UL) {
Serial.println("Cerrar válvula.");
digitalWrite(rele, HIGH); //Desactivamos la bobina del relé //
volume = 0.0;// Se resetea el volumen
estado = 0;
}
break;
}
}

if (currentMillis - previousMillis >= 1000){
previousMillis = currentMillis;// Se resetea tiempo
}
}

Empecé pensando el que el cierre del agua sea temporal pero creo que es mejor un bloqueo completo, si llegas y no hay agua es que hay una fuga. Si te pasas de consumo un día por que llenas la piscina o algo reseteas y punto.

Moderador:
En el título no debe usarse la palabra Ayuda. Edita el comentario "Ayuda Proyecto".

Los códigos debes postearse usando etiquetas.

Lee las Normas del foro

No he visto el código porque como te he pedido no esta con etiquetas, pero basado en tu explicación esperar 24 hs para tomar una decisión que te cuesta $$$ me parece un error.
Simplemente puedes hacer proyecciones de consumo basado en los momentos en los que sabes que no estas regando.
Claro que eso depende de que el riego no sea manual sino automático.

Si riegas manual no puedes discernir entre una fuga o algo que efectivamente estas haciendo para beneficio de las plantas. Entonces si resuelves eso puedes por ejemplo decir...
Estoy regando... ok no pasa nada, esto es agua debidamente consumidada.
En cambio si no lo estas haciendo,todo consumo es un gasto y ahi puedes medir caudal y proyectarlo a la medida que has establecido como límite o simplemente decir, esto no debería estar pasando y cortas.

Tal vez no lo pensaste pero de eso se trata el foro, y es que justamente todos tenemos diferentes soluciones para un problema dado, aunque coincidamos en que debes cortar el agua.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.