Proyecto pecera: duda flujo agua

Hola a todos:
De cara al verano, por fin con tiempo, me propongo a realizar un proyecto.
Posteo aquí porque está más a la vista,luego ya me gustaría llevar este tema a su sitio(proyectos).

El proyecto es un control totalmente automático de una pecera de agua caliente.
Por ahora mi primera duda, es respecto al vaciado- llenado automático del 30% de la pecera. Ésto es cada mes.
He visto eta válvula que controla el flujo:Technolifeandmore: Sensor de Flujo de Agua (sale el código en la web)

Éste es el programa de vaciado-llenado

1 mes->inicio proceso->saca 30% de agua-> agua fuera-> llena otra vez 30%-> fin proceso

Mi duda es,¿que programación habría que llevar a cabo, para ir almacenando los litros que ha succionado?
Es decir, porque cuando lleva el 30% de 100 litros(por ejemplo) debe parar de sacar agua para volver a meterla.

Gracias por su atención!
=)

En el ejemplo de la válvula que pones calculan el flujo de agua (Litros/hora).

http://www.seeedstudio.com/wiki/index.php?title=G1/2_Water_Flow_sensor

Con ese ejemplo y un timer puedes saber que cantidad de agua estás desalojando (Litros/hora * horas = Litros)

Cuando llegues al 30% de la capacidad de la pecera (Pecera de x litros --> Cuando llegues a x * 0.30 litros) paras la válvula.

Gracias por tu respuesta.Pero eso ya estaba pensado, el problema que tengo es interpretar en código los litros que llevo sacados.

Cuando llegues al 30% de la capacidad de la pecera (Pecera de x litros --> Cuando llegues a x * 0.30 litros) paras la válvula.

Exactamente, esto busco.
No se con que estructura de código se hace(while...do, if..)
Gracias de nuevo, y a ver si puedes ayudarme.
=)

Realmente se pueden utilizar varias estructuras de control como el if, while, do...while o incluso for. Todo depende de como plantees la cuenta de los litros que llevas sacados y de tu estilo programando.

Te puedo de ir como lo haría yo. Lo primero no usaría interrupciones, pues va a ser un proceso totalmente controlado. Contaría los pulsos del caudalimetro y los almacenaría en una variable (sabiendo cuantos litros corresponden a cada pulso). Por ultimo compararía los pulsos contados con un valor de referencia, el que correspondería a ese 30%, y seguramente lo haría con un if (si el numero de pulsos es mayor que el numero de referencia para la bomba y termina)... aunque tambien se puede hacer con un while (mientras el numero de pulsos sea menor que el numero de referencia mantén la bomba conectada).

En cualquier caso mi consejo es que antes de lanzarte a realizar el proyecto practiques algunos ejercicios de programación.

Claro! Eso siempre.. Cuando hago algún proyecto siempre practico por separado.
Ok muchas gracias. Creo que lo haré con while. Ya iré comentando mas cosas.

Haber que te parece, podrías añadir algún sensor de ultrasonidos para medir el nivel de la pecera así junto al flujo tendrías más precisión en la medida, o incluso solo utilizar el ultrasonidos y no tienes que ir guardando los litros que llevas que seguramente tendrías que utilizar alguna EEPROM por si se resetea no perder la cuenta.

Un saludo!

Como ya te he dicho, en el ejemplo del sensor, se calcula el caudal. Solo necesitas saber el tiempo que ha pasado desde que empezaste a desalojar agua para calcular cuánta agua has sacado.

Para el caudal, utiliza el ejemplo (como te han comentado, yo tampoco lo haría por interrupción). Para el tiempo la función millis(). No necesitas ningún bucle para ello, ya tienes el loop(). "If's", por supuesto, es la única manera de comparar valores (tienes que comparar el tiempo que ha pasado con el necesario para sacar el 30% del agua, este valor lo calculas tu antes con la capacidad de tu pecera).

Si suponemos que el caudal que saca la válvula es más o menos constante (esto tendrías que probarlo, aunque supongo que sí) no necesitarías calcularlo en el código, sino comprobarlo antes en otro programa y en el tuyo utilizar el valor obtenido. De esta manera el código sería muy sencillo, un primer esquema podría ser:

loop()
{
  if(Ha_pasado_un_mes())
  {
    Inicio = millis();
    Poner_en_marcha_valvula();  
  }
  if(millis()-Inicio >= TIEMPO_EN_VACIAR_30%)
  {
    Parar_valvula();
  }
}

En principio, no es necesario ningún sensor más, ya que con la válvula puedes obtener una lectura correcta del caudal.

En definitiva, prácticamente como te ha comentado josemanu

JRodrigo:
Haber que te parece, podrías añadir algún sensor de ultrasonidos para medir el nivel de la pecera así junto al flujo tendrías más precisión en la medida, o incluso solo utilizar el ultrasonidos y no tienes que ir guardando los litros que llevas que seguramente tendrías que utilizar alguna EEPROM por si se resetea no perder la cuenta.

Un saludo!

Está bien pensado pero no me parece buena idea. Lo veo más profesional haciéndolo con el sensor de caudal. Gracias

jorgepl:
Como ya te he dicho, en el ejemplo del sensor, se calcula el caudal. Solo necesitas saber el tiempo que ha pasado desde que empezaste a desalojar agua para calcular cuánta agua has sacado.

Para el caudal, utiliza el ejemplo (como te han comentado, yo tampoco lo haría por interrupción). Para el tiempo la función millis(). No necesitas ningún bucle para ello, ya tienes el loop(). "If's", por supuesto, es la única manera de comparar valores (tienes que comparar el tiempo que ha pasado con el necesario para sacar el 30% del agua, este valor lo calculas tu antes con la capacidad de tu pecera).

Si suponemos que el caudal que saca la válvula es más o menos constante (esto tendrías que probarlo, aunque supongo que sí) no necesitarías calcularlo en el código, sino comprobarlo antes en otro programa y en el tuyo utilizar el valor obtenido. De esta manera el código sería muy sencillo, un primer esquema podría ser:

loop()

{
  if(Ha_pasado_un_mes())
  {
    Inicio = millis();
    Poner_en_marcha_valvula(); 
  }
  if(millis()-Inicio >= TIEMPO_EN_VACIAR_30%)
  {
    Parar_valvula();
  }
}




En principio, no es necesario ningún sensor más, ya que con la válvula puedes obtener una lectura correcta del caudal.

En definitiva, prácticamente como te ha comentado josemanu

Perfecto. Aunque creo que no hacen falta ni millis. Todo funcionará en torno al if,es decir, hasta que no se cumpla el 30% no para y no vuelve a llenar.¿ No?
Gracias de nuevo =)

Hola,
yo también usaría millis(), porque en el ejemplo
http://www.seeedstudio.com/wiki/index.php?title=G1/2_Water_Flow_sensor se calcula el flujo (litros/hora), pero necesitas ir contando los litros que se van vaciando, y para eso lo más cómodo, como indica jorgepl, creo que es ir contando el tiempo.

Hola.

En mi opinión yo no haría el cambio parcial por medio de caudalímetro, mejor por sensores de nivel (boyas). No sé, no lo veo claro.
Pero por ejemplo sí lo utilizaría para que me avise de que hay poco caudal en el filtro y así sé que toca limpieza.
Pero es mi opinión, jeje.

Salu2.
Uraken.

PascuaL:

JRodrigo:
Haber que te parece, podrías añadir algún sensor de ultrasonidos para medir el nivel de la pecera así junto al flujo tendrías más precisión en la medida, o incluso solo utilizar el ultrasonidos y no tienes que ir guardando los litros que llevas que seguramente tendrías que utilizar alguna EEPROM por si se resetea no perder la cuenta.

Un saludo!

Está bien pensado pero no me parece buena idea. Lo veo más profesional haciéndolo con el sensor de caudal. Gracias

pues yo veo mas profesional poder medir en cualquier instante el nivel de agua, a depender de un valor que ha sido medido con anterioridad y que podria corromperse o borrarse. vamos es que creo que cualquier sistema industrial vas a encontrar esta configuración. no entiendo que ves mas profesional en tu opción.

Intentar controlar el nivel mediante caudalímetro es lo que se llama un sistema inestable. Un pequeño error o cualquier influencia externa serán acumulativos y hará que con el tiempo el nivel vaya bajando o subiendo.

Como dicen Sergegsx y Cheyenne, hacerlo así es un problema ya que estás midiendo indirectamente la variable.
Para hallar el volumen de agua conociendo el caudal hay que integrar, y todo lo que sea integrar tiene imprecisiones, a parte de las ya dadas por las medidas del caudalímetro y estos errores, como dice Cheyenne, son acumulativos en el tiempo.

Mucho mejor un sensor capacitivo, ultrasonidos o cualquier cosa que mida directamente la altura.