Starter para grupo de presión
Objetivo
Montar un dispositivo capaz de detectar el flujo de agua por una tubería y arrancar un grupo de presión sólo cuando éste sea necesario.
Componentes necesarios
- Arduino UNO
- Caudalímetro o sensor de flujo DN50 G2
- Relé con optoacoplador de 5V
- Alimentador de 9V
La bomba de presión es un modelo «Alpha1» de Novelec, sin presostato ni depósito, por lo que, o bien funcionará permanentemente, con el consiguiente gasto, o bien habría que encenderla y apagarla manualmente cuando fuera necesario. Este proyecto pretende evitar estas dos inconveniencias.
Descripción del funcionamiento
El grupo de presión deberá encenderse a los tres segundos de haber detectado un flujo ininterrumpido de agua, y apagarse tres segundos después de que este flujo haya quedado interrumpido, para evitar encendidos demasiado breves que no servirán para aumentar la presión y podrían ser perjudiciales para el motor.
Esquema
Programa (Provisional)
Atención: No usar este sketch mientras se encuentre en estado “Provisional”.
int sensor = 2; // Pin del caudalímetro bool previo = false; // Estado previo del sistema bool activo = false; // Estado del sensor unsigned long con_inicio = 0; // Marca temporal de inicio del cambio de secuencia unsigned long contador = 0; // Marca temporal actual del cambio de secuencia void activar() { activo = true; con_inicio = millis(); // Capturamos el momento del cambio de secuencia } void desactivar() { activo = false; con_inicio = millis(); // Capturamos el momento del cambio de secuencia } void setup() { // Interrupción que activa la secuencia de encendido cuando se detecta subida de nivel en el pin del caudalímetro attachInterrupt(digitalPinToInterrupt(sensor), activar, HIGH); // Interrupción que activa la secuencia de apagado cuando se detecta bajada de nivel en el pin del caudalímetro attachInterrupt(digitalPinToInterrupt(sensor), desactivar, LOW); } void loop() { }
Test de prueba del caudalímetro
int sensor = 2; // Pin del caudalímetro bool previo = false; // Estado previo del sistema bool activo = false; // Estado del sensor unsigned long con_final = 0; // Marca temporal de inicio del cambio de secuencia unsigned long con_inicio = 0; // Función llamada por la interrupción del pin del caudalímetro que pone el estado en true y reinicia el contador de inactividad void activar() { // Reseteamos el contador de apagado con_final = millis(); activo = true; // Si el estado anterior era false, reiniciamos el contador de encendido y ponemos el estado anterior en true if (!previo) { con_inicio = millis(); } } void setup() { con_inicio = millis(); Serial.begin(9600); Serial.println("Iniciando..."); attachInterrupt(digitalPinToInterrupt(sensor), activar, HIGH); } void loop() { // A los cinco segundos el estado pasa a false, a menos que la interrupción lo ponga en true y reinicie el contador if (previo && millis()-con_final > 3000) { Serial.println("Inactivo"); Serial.println(millis()); activo = false; previo = false; } // Si el estado es activo y pasan cinco segundos sin que se reinicie el contador, activamos el motor if (activo && !previo && millis()-con_inicio > 3000) { Serial.println("Activo"); Serial.println(millis()); previo = true; } }