====== Starter para grupo de presión ======
* [[Arduino]]
=== 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 [[https://www.amazon.es/Medidor-medidor-interruptor-calentador-tratamiento/dp/B07YX37WVV?|DN50 G2]]
- Relé con optoacoplador de 5V
- Alimentador de 9V
{{ :71z22crpeel.jpg?200 |Arduino UNO}}
{{ :shopping.webp?200 |Caudalímetro DN50}}
{{ :51huw4p0iil._ac_sl1000_.jpg?200 |Relé con octoacoplador}}
{{ :alimentador-9v-negro-2a.jpg?200 |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.
{{ :0373010382-b8a3-md01_500.jpg?200 |}}
=== 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 ===
{{ :starter_grupo_presion_bb_completo.jpg?400 |}}
----
=== 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;
}
}
{{tag> cacharreo electrónica arduino_uno}}