Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Sistema corte de agua por fuga
#1
Hola a todos,
Me gustaría hacer un sistema de corte de agua por fuga(la zona donde vivo el agua es muy muy muy cara), en la actualidad estoy utilizando este sistema(http://www.ydroteq.be/en/products/ydrostop-water-control-valve/), pero he tenido algún problema.

El funcionamiento es muy sencillo, cuando detecta el movimiento del agua se activa un reloj (de puede regular de 15 min a 2 horas), si se sobrepasa el tiempo el sistema se cierra automáticamente ( se puede rearmar automáticamente cuando no detecta ningún movimiento de agua(reparar fuga) o se puede rearmar manual.

Mi idea es instalar un detector de flujo y una electroválvula (se puede instalar una de riego y ponerle un solenoide Lach tienen un rango de trabajo de 9 a 12V DC, para abrirlos se les manda corriente + ó - y se quedan enclavados y para cerrarlos se invierte la polaridad)

Al detectarse el movimiento del agua se activará el reloj( el tiempo se podrá modificar desde la app) y cuando llegue al tiempo seleccionado activara la electrovalvula( sería aconsejable que se pudiese activar el solenoide(en una hora que no utilicemos el agua) como min una vez al año para que no se bloquee)

Yo de programación estoy muy verde, he encontrado este código(http://www.naylampmechatronics.com/blog/47_tutorial-sensor-de-flujo-de-agua.html)

volatile int NumPulsos; //variable para la cantidad de pulsos recibidos
int PinSensor = 2; //Sensor conectado en el pin 2
float factor_conversion=7.11; //para convertir de frecuencia a caudal
float volumen=0;
long dt=0; //variación de tiempo por cada bucle
long t0=0; //millis() del bucle anterior

//---Función que se ejecuta en interrupción---------------
void ContarPulsos ()
{
NumPulsos++; //incrementamos la variable de pulsos
}

//---Función para obtener frecuencia de los pulsos--------
int ObtenerFrecuecia()
{
int frecuencia;
NumPulsos = 0; //Ponemos a 0 el número de pulsos
interrupts(); //Habilitamos las interrupciones
delay(1000); //muestra de 1 segundo
noInterrupts(); //Deshabilitamos las interrupciones
frecuencia=NumPulsos; //Hz(pulsos por segundo)
return frecuencia;
}

void setup()
{
Serial.begin(9600);
pinMode(PinSensor, INPUT);
attachInterrupt(0,ContarPulsos,RISING);//(Interrupción 0(Pin2),función,Flanco de subida)
Serial.println ("Envie 'r' para restablecer el volumen a 0 Litros");
t0=millis();
}

void loop ()
{
if (Serial.available()) {
if(Serial.read()=='r')volumen=0;//restablecemos el volumen si recibimos 'r'
}
float frecuencia=ObtenerFrecuecia(); //obtenemos la frecuencia de los pulsos en Hz
float caudal_L_m=frecuencia/factor_conversion; //calculamos el caudal en L/m
dt=millis()-t0; //calculamos la variación de tiempo
t0=millis();
volumen=volumen+(caudal_L_m/60)*(dt/1000); // volumen(L)=caudal(L/s)*tiempo(s)

//-----Enviamos por el puerto serie---------------
Serial.print ("Caudal: ");
Serial.print (caudal_L_m,3);
Serial.print ("L/min\tVolumen: ");
Serial.print (volumen,3);
Serial.println (" L");
}

Un saludo y espero que os guste la idea

"Un hombre con una idea nueva es un loco hasta que la idea triunfa"
— Mark Twain
Reply
#2
Me parece muy interesante..!! Yo tengo una bomba de agua que me da el suministro desde un depósito ,el control del agua, lo hago con un enchufe de 433Mhz, que enciendo y apago según las circunstancias, he añadido un sensor de inundación que ya me ha salvado 1 vez de liarla..

Existen sensores de flujo para gasoil...?
Un saludo.
Reply
#3
Chorro porque no aplicas este sistema?

quiero decir, puedes coger el configurador, decir si detecto flujo de agua voy contando los minutos...

Cuando supere el valor de una consigna pues cortas la valvula.

Con un comando rearmar el sistema...

Y aun te queda mucho para poder meter...
Donde Buscar:    
Manual     Tutorial      Tienda
Reply
#4
Sin un pantallazo del serial es difícil ver nada...

Para que en la app se vea el valor del circuito tienes que modificar la propiedad value del circuito que gestiona la salida...

Mira esto.

http://domotica-arduino.es/2016/04/28/el-objeto-circuit-y-el-array-circuits/
Donde Buscar:    
Manual     Tutorial      Tienda
Reply
#5
Posiblemente lo tengas mal puesto en el configurador, cada cosa tiene que ir en el sitio correcto.

No entiendo mucho, pero ésto, debería de ir en USERS FUNCTIONS..?
Code:
//---Función que se ejecuta en interrupción---------------
void ContarPulsos ()  
{
 NumPulsos++;  //incrementamos la variable de pulsos
}


Y esto, le quitamos el delay y lo ponemos en Void LoopNewSecond:
Code:
int ObtenerFrecuecia()
{
 int frecuencia;
 NumPulsos = 0;   //Ponemos a 0 el número de pulsos
 interrupts();    //Habilitamos las interrupciones
 delay(1000);   //muestra de 1 segundo
 noInterrupts(); //Deshabilitamos  las interrupciones
 frecuencia=NumPulsos; //Hz(pulsos por segundo)
 return frecuencia;
}



Y en VOID USER SETUP, quitaría esto: (ya lo lleva incorporado el configurador y lo estaríamos metiendo 2 veces)
Code:
Serial.begin(9600);
Reply
#6
que error te sale?
Donde Buscar:    
Manual     Tutorial      Tienda
Reply
#7
Todo lo que te han comentado esta bien.....pero tu tienes que rumiarlo un poco.....
Para declarar una variable en Global Variables Zone, pues tienes que declarar la variable y NO meter todo el programa.
tal que así : int frecuencia=0;

Luego el programita irá donde tu creas que tiene que ir, 30sg/NewSecond, etc ....

Como dice nuestro Sensei a veces tienes que separarte del código y pensar como lo quieres y como lo tienes que hacer.
Te recomiendo manuales básicos de programación Arduino ( tienes varios en el foro ).
Y después leerte el que te recomendó Roberto, después de asimilarlos, esto es muy fácil.
Config V5 y app ExControl Arduino Free 2017 Big Grin
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)