Como hacer un sistema para corte de agua [SOLUCIONADO]

En un código que usas millis() e interrupciones no deberías usar delay()! Claro que no sabes hacerlo con millis() por eso creo haberte recomendado que leas/estudies, porque lo que estas intentando lo haces mal desde mi punto de vista.

Primero que una bobina de RELE se activa con LOW y se desactiva con HIGH asi que invierte tu control.
Habitualmente el módulo rele que se usa con Arduino funciona con lógica inversa. Para usarlo con lógica directa (HIGH para activar y LOW para desactivar) se debe conectar de otro modo.

Acá va el código a ver si ahora si satisface lo que buscas

float volumenMaximo            = 2.0; //caudal maximo 1000 litros
unsigned long tiempoMovimiento = 0; // Variable para el tiempo transcurridos
unsigned long tiempoFuga       = 5000; //Tiempo de fuga es de 5 segundos

const int sensorPin           = 3;    // Pin digital para el sensor de flujo
const int measureInterval     = 2000;
volatile int pulseConter;
 
// YF-S201
const float factorK = 5.5; 

float volume = 0.0;
unsigned long t0 = 0;
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);
   attachInterrupt(digitalPinToInterrupt(1), ISRCountPulse, RISING);
   t0 = millis();
}
 
void loop() {
   // obtener frecuencia en Hz
   float frequency = GetFrequency();
 
   // calcular caudal L/min
   float flow_Lmin = frequency / factorK;
   SumVolume(flow_Lmin);
 
   Serial.print(" Caudal: ");
   Serial.print(flow_Lmin, 3);
   Serial.print(" (L/min)\tConsumo:");
   Serial.print(volume, 1);
   Serial.println(" (L)");
   if (volumen >volumenMaximo){
       switch(estado) {
          case 0: digitalWrite(rele, LOW);  //Activamos la bobina del relé 
                  start = millis();
                  estado = 1;
                  break;
          case 1: if (millis() - start > 1000UL) {
                      digitalWrite(rele, HIGH);   //Desactivamos la bobina del relé // 
                      Serial.println("Cerrar valvula.");
                      Serial.print("Se ha alcanzado el limite de tiempo : ");   
                      volumen = 0.0;// Se resetea el volumen
                      estado = 0;
                  }
                  break;
       }
   }
   
   if (flow_Lmin == 0.0){
       volumen = 0.0;// Se resetea el volumen       
   } 
}

Muchas gracias Surbyte por tu paciencia, ya funciona, le faltaban 2 cositas. Lo he puesto en castellano para que sea mas fácil.

float volumenMaximo         = 2.0; //caudal maximo 2 litros
unsigned long start            = 0;//Variable para el tiempo del rele
int rele                      = 24;// Asignamos enl pin
const int sensorPin             = 3;    // Pin digital para el sensor de flujo
const int medirIntervalos    = 2000; // Tiempo entre muestreo
volatile int contadorPulsos;
 
// YF-S201
const float factorK = 5.5; 

float volumen = 0.0;
unsigned long t0 = 0;
byte estado = 0;
 
void ISRcontadorPulsos() {
   contadorPulsos++;
}
 
float obtenerFrecuencia() {
   contadorPulsos = 0;// Ponemos el contador de pulsos a cero
 
   interrupts(); // Habilitamos las interupciones
   delay(medirIntervalos);//tiempo entre muestreos
   noInterrupts();// Deshabilitamos las interupciones
 
   return (float)contadorPulsos * 1000 / medirIntervalos;
}
 
void SumaVolumen(float dV)
{
   volumen += 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), ISRcontadorPulsos, RISING);
   t0 = millis();
}
 
void loop() {
   // obtener frecuencia en Hz(pulsos x segundo)
   float Frecuencia = obtenerFrecuencia();
 
   // calcular caudal L/min
   float caudal_Lmin = Frecuencia / factorK;
   SumaVolumen(caudal_Lmin);
 
   Serial.print(" Caudal: ");
   Serial.print(caudal_Lmin, 3);
   Serial.print(" (L/min)\tConsumo:");
   Serial.print(volumen, 1);
   Serial.println(" (L)");
   if (volumen >volumenMaximo){
       switch(estado) {
          case 0: digitalWrite(rele, LOW);  //Activamos la bobina del relé 
                  start = millis();
                  estado = 1;
                  break;
          case 1: if (millis() - start > 1000UL) {
                      digitalWrite(rele, HIGH);   //Desactivamos la bobina del relé // 
                      Serial.println("Cerrar válvula.");
                      Serial.print("Se ha alcanzado el limite de tiempo : ");   
                      volumen = 0.0;// Se resetea el volumen
                      estado = 0;
                  }
                  break;
       }
   }
   
   if (caudal_Lmin == 0.0){
       volumen = 0.0;// Se resetea el volumen       
   } 
}

No se que le falta o te referías con dos cositas ?

en el setup le faltaba:

pinMode(rele,OUTPUT);// Asignamos al pin que es salida
digitalWrite(rele, HIGH);  //Activamos la bobina del relé (si no pongo el relé al inicio esta abierto

gracias