starter_para_grupo_de_presion
Diferencias
Muestra las diferencias entre dos versiones de la página.
starter_para_grupo_de_presion [2025/04/04 14:39] – creado hispa | starter_para_grupo_de_presion [Fecha desconocida] (actual) – editor externo (Fecha desconocida) 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | <WRAP round box> | ||
+ | ====== Starter para grupo de presión ====== | ||
+ | </ | ||
+ | <WRAP tabs> | ||
+ | * [[Arduino]] | ||
+ | </ | ||
+ | <WRAP collarge justify> | ||
+ | === 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:// | ||
+ | - Relé con optoacoplador de 5V | ||
+ | - Alimentador de 9V | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | <WRAP half column> | ||
+ | </ | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | <WRAP half column> | ||
+ | </ | ||
+ | |||
+ | La bomba de presión es un modelo «Alpha1» de Novelec, sin presostato ni depósito, por lo que, o bien funcionará permanentemente, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === 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, | ||
+ | |||
+ | === Esquema === | ||
+ | |||
+ | {{ : | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Programa (Provisional) === | ||
+ | |||
+ | **Atención: | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | int sensor = 2; // Pin del caudalímetro | ||
+ | bool previo = false; | ||
+ | bool activo = false; | ||
+ | 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), | ||
+ | |||
+ | // Interrupción que activa la secuencia de apagado cuando se detecta bajada de nivel en el pin del caudalímetro | ||
+ | attachInterrupt(digitalPinToInterrupt(sensor), | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Test de prueba del caudalímetro === | ||
+ | |||
+ | <code c++> | ||
+ | int sensor = 2; // Pin del caudalímetro | ||
+ | bool previo = false; | ||
+ | bool activo = false; | ||
+ | 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(" | ||
+ | attachInterrupt(digitalPinToInterrupt(sensor), | ||
+ | } | ||
+ | |||
+ | 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(" | ||
+ | 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(" | ||
+ | Serial.println(millis()); | ||
+ | previo = true; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{tag> cacharreo electrónica arduino_uno}} |