Herramientas de usuario

Herramientas del sitio


starter_para_grupo_de_presion

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

starter_para_grupo_de_presion [2025/04/04 14:39] – creado hispastarter_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>
 +<WRAP tabs>
 +  * [[Arduino]]
 +</WRAP>
 +<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://www.amazon.es/Medidor-medidor-interruptor-calentador-tratamiento/dp/B07YX37WVV?|DN50 G2]]
 +  - Relé con optoacoplador de 5V
 +  - Alimentador de 9V
 +
 +<WRAP group>
 +<WRAP half column>{{ :71z22crpeel.jpg?200 |Arduino UNO}}</WRAP>
 +<WRAP half column>{{ :shopping.webp?200 |Caudalímetro DN50}}</WRAP>
 +</WRAP>
 +<WRAP group>
 +<WRAP half column>{{ :51huw4p0iil._ac_sl1000_.jpg?200 |Relé con octoacoplador}}</WRAP>
 +<WRAP half column>{{ :alimentador-9v-negro-2a.jpg?200 |Alimentador de 9V}}</WRAP>
 +</WRAP>
 +
 +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 |}}
 +</WRAP>
 +
 +----
 +
 +=== Programa (Provisional) ===
 +
 +**Atención:** No usar este sketch mientras se encuentre en estado "Provisional".
 +
 +<code c++>
 +
 +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() {
 +}
 +</code>
 +
 +=== Test de prueba del caudalímetro ===
 +
 +<code c++>
 +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;
 +  }
 +}
 +</code>
 +
 +{{tag> cacharreo electrónica arduino_uno}}

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki