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