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
}
}