starter_para_grupo_de_presion
Diferencias
Muestra las diferencias entre dos versiones de la página.
| starter_para_grupo_de_presion [2025/11/16 13:47] – 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}} | ||
