viernes, 15 de abril de 2016

Caudalímetro con sensor de flujo YF-S201 y LCD 2004


En el POST de hoy os voy a enseñar cómo medir el caudal de agua en L/hora que atraviesa la alcachofa de nuestra ducha, así como la cantidad de agua que gastamos cada vez que nos duchamos, para ello, vamos a montar y programar un sencillo caudalímetro basado en el sensor de flujo YF-S201, un display LCD 2004 para poder visualizar los valores a tiempo real y una serie de elementos auxiliares necesarios para que le llegue el caudal de agua a nuestro sensor.


Sensor de flujo YF-S201

El sensor de flujo YF-S201 está constituido por una carcasa de plástico, un rotor de agua y un sensor de efecto Hall. El funcionamiento de este sensor es muy simple, es decir, en el rotor tiene un pequeño imán adherido para poder registrar una vuelta cada vez que pasa por el sensor magnético de efecto Hall que hay en el otro lado del tubo, generándose pulsos de salida a una velocidad proporcional a la del flujo. En la parte posterior del sensor hay una flecha para indicar la dirección del flujo. Cada pulso en la salida del sensor equivale aproximadamente a 2,25 mililitros. Una de las cosas a tener en cuenta es que no es un sensor de precisión, por lo que la frecuencia del pulso varía un poco dependiendo de la velocidad de flujo, la presión del fluido y la orientación del sensor,  necesitándose una cuidadosa calibración si se requiere más que un 10% de precisión. A continuación os muestro algunas de las características más relevantes de este sensor.

Tabla de características del sensor de flujo YF-S201

La salida del sensor (cable amarillo) la vamos a conectar a nuestro Arduino para que mediante una correcta programación podamos visualizar a través del LCD 2004 el caudal que sale por nuestra ducha en L/hora, además del consumo de agua en litros que hemos realizado en un determinado espacio de tiempo, por ejemplo, mientras nos duchamos (el cable rojo a +5V y el negro a GND de nuestro Arduino). Como la señal del pulso de salida es una simple onda cuadrada es muy fácil de registrar mediante interrupciones, para posteriormente convertir los pulsos en caudal. Según la hoja de datos del fabricante, por cada litro de agua que pasa por el sensor obtenemos aproximadamente 450 pulsos, entonces:


Esto quiere decir que si tenemos la frecuencia (pulsos por segundo), simplemente lo tenemos que dividir entre 7.5 para obtener el número de L/min. Para el caudal en L/hora tenemos que multiplicar la frecuencia por 60 minutos que tiene una hora.

  

La instalación del sensor a nuestra ducha es muy sencilla, lo primero que tenemos que hacer es dejar libre de conexiones el grifo de la ducha, para enroscar allí un extremo de la manguera con conexiones hembra de ½”, conectando el extremo libre de la manguera a la entrada del sensor. Por último en la salida del sensor conectaremos la manguera con la alcachofa que habíamos retirado anteriormente del grifo de la ducha. El sensor en ambos extremos tiene roscas macho estándar de ½”, lo que nos facilita la conexión. También es muy recomendable aplicar teflón en cada uno de los extremos del sensor para evitar posibles fugas de agua.


Caudalímetro con Arduino UNO


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Sensor de flujo YF-S201.

·         Manguera con conectores hembra de ½”.

·         Alcachofa de ducha con manguera y conector hembra de ½”.

·         Módulo LCM 2004 I2C V1.

·         Display 20x4 LCD 2004.

·         Teflón.

·         Batería de 12VDC/3000mAh (DC12300).

·         Protoboard.

·         Cables de conexión.



Código del programa:



Video:

79 comentarios:

  1. me parece un gran proyecto lo tendre en mente saludos

    ResponderEliminar
  2. HOLA MI ESTIMADO TENGO UNA CONSULTA, TENGO UN PROBLEMA CUANDO INCLUYO LA LCD_2004() ME DA UN ERROR QUE NO ESTA DECLARADA EN EL SCOPE

    ResponderEliminar
    Respuestas
    1. Revisa el ; del final de la función. Si utilizas el programa tal cual te tiene que funcionar perfectamente.

      Eliminar
    2. MUCHAS GRACIAS POR ESTE APORTE, ME AYUDADO MUCHO :)

      Eliminar
    3. ya que, las librerias antiguas que tiene en el blog, no reconcen las funciones "lcd.setCursor(0,0)" y "lcd.clear();"

      Eliminar
    4. Ademas, de que dice "no existing library wire.h"

      Eliminar
    5. Las librerias funcionan perfectamente en la version 1.6.4 del IDE de Arduino. Las tienes en uno de los primeros POST del BLOG. Saludos

      Eliminar
  3. Mchas gracias por el aporte.
    Te voy hacer un par de consultas como puedo hacer que cuando llegue una cantidad de litros x que pueda selecionar en una pantalla corte una electro valvula y mande a a una bomba de otro deposito que abra su electro valvula y eche x litros de ese liquido para que la mezcla salga a un % selecionado en la anterior pantalla o Menu.

    muchas gracias por tu ayuda

    te dejo mi correo si me quieres echar una mano fmartintornero@gmail.com

    ResponderEliminar
    Respuestas
    1. Con una serie de pulsadores puedes seleccionar el numero de litros. En uno de mis POST anteriores hay un contador que por medio de dos pulsadores aumentas o disminuyes el valor de una variable, que en tu caso serían los litros. Una vez seleccionada una cantidad de litros la tienes que evaluar mediante sentencias if para cada caso y dentro de las cuales activaras o no las diferentes electrovalvulas por medio de reles, puesto que estas suelen trabajar a 12V. Un saludo.

      Eliminar
    2. No lo encuentro como se llama el post??
      Muchas Gracias por la respuesta.

      un saludo

      Eliminar
  4. Podría por favor explicarme de qué frecuencia habla en esta parte? Me confunde un poco
    "Esto quiere decir que si tenemos la frecuencia (pulsos por segundo), simplemente lo tenemos que dividir entre 7.5 para obtener el número de L/min. Para el caudal en L/hora tenemos que multiplicar la frecuencia por 60 minutos que tiene una hora."

    ResponderEliminar
    Respuestas
    1. La frecuencia es el número de pulsos que nosotros obtenemos al moverse la turbina del caudalimetro. Si te fijas en la programacion se obtiene el numero de litros de consumo y la cantidad de litros por hora que atraviesan el caudalimetro. Símplemente montalo y obtendrás esos dos valores. Si quieres litros por minuto simplemente quita el 60 de la fórmula. Un saludo

      Eliminar
  5. Amigo disculpa una pregunta, esta parte: "Esto quiere decir que si tenemos la frecuencia (pulsos por segundo), simplemente lo tenemos que dividir entre 7.5 para obtener el número de L/min. Para el caudal en L/hora tenemos que multiplicar la frecuencia por 60 minutos que tiene una hora."
    En esa parte no entiendo de donde sale ese valor de 7,5, es lo que se obtiene al dividir los pulsos por litro: 450/60 = 7.5 pulsos/segundo = 7.5 Hz ? o es alguna constante? es que tengo un modelo de caudalimetro diferente, de 1/4" y quiero implementarlo en proyecto parecido al suyo, de antemano muchas gracias!

    ResponderEliminar
    Respuestas
    1. Simplemente es una constante a efectos de calculo que nos ofrece el fabricante del caudalimetro para poder transformar los pulsos de la salida del sensor en litros o litros/hora. Un saludo

      Eliminar
    2. Y como bien dices se obtiene de dividir 450/60 porque asi lo establece el fabricante para que atraviese el caudalimetro un litro en un minuto se producen 450 pulsos

      Eliminar
  6. hola, mire tengo una problema al compilar dice:C:\Users\Nataly\Desktop\Sensor_flujo_YFS210\Sensor_flujo_YFS210.ino:57:55: fatal error: LiquidCrystal_I2C.h: No such file or directory

    #include // Librería LCD I2C

    ResponderEliminar
    Respuestas
    1. Te falta la librería para el LCD I2C. La puedes encontrar en uno de los primeros POST del BLOG.

      Eliminar
  7. buenas tardes:
    si quisiera ocupar un display 16x2 que se tendria que cambiar aparte de la libreria??
    lo digo por que no tengo el l2c
    espero tu respuesta

    saludos

    ResponderEliminar
    Respuestas
    1. Tienes que modificar la programación en si del LCD. Aunque te recomiendo I2C por su sencillez.

      Eliminar
    2. que diferencia hace el l2C? osea puedo ocupar estos codigos con una pantalla 16x2 sin tener que modificarlos?

      Eliminar
  8. Hola! Lo de la vida útil está verificado? Porque si fuera cierto a los 600 litros ya se tendría que romper y eso es prácticamente un tanque de agua chico. Gracias!

    ResponderEliminar
  9. El fabricante hace referencia a 300.000 ciclos y no "pulsos". Realmente no se a que cantidad de litros equivale pero por supuesto que a una cifra elevadamente superior a la pequeña cantidad de la que me estás hablando. Saludos

    ResponderEliminar
    Respuestas
    1. Si, no me había dado cuenta que decía ciclos en vez de pulsos. Gracias por la respuesta y por toda la información del dispositivo!

      Eliminar
  10. Hola, en la lista de materiales dice : ''Módulo LCM 2004 I2C V1'' , esto seria el display 20*04 ?? o algun otro modulo adicional al display ?

    ResponderEliminar
    Respuestas
    1. Si quieres comunicar el LCD 2004 mediante I2C debes de tener soldado este modulo adicional a tu LCD. Algunas veces ya viene con el propio LCD y en otras ocasiones es necesario añadirlo. Saludos

      Eliminar
  11. Mariano gracias por este aporte me sirvio mucho para armar el caudalimetro y logre solucionar el problema con el lcd 20x4 pero tengo un problema con el medidor de flujo ya que si bien la pantalla me bota el print no me indica los datos que toma el flujometro asi que no se a que se puede deber?... gracias de antemano

    ResponderEliminar
  12. Revisa las conexiones del sensor de flujo y la alimentación. Saludos

    ResponderEliminar
  13. Como es que usas el "sda" y "scl" en otrospines distintos a los que marca la hoja de datos del aurduino uno (pines analogicos a5 y a4)?

    ResponderEliminar
    Respuestas
    1. Ya me fije bien, y se utilizan esos pines debido al modulo que controla el display de 20x4

      Eliminar
  14. Hola, hasta cuantos litros puede contar con esta configuracion ? 1000 , 10.000 , ?

    ResponderEliminar
  15. que tal una pregunta como le puedo hacer para leer varios caudalimetro a la vez?

    ResponderEliminar
  16. excelente me ayuda bastante para un proyecto, pero me esta presentando un error
    Usando librería Wire con versión 1.0 en la carpeta: C:\Users\Usuario1\Desktop\arduino-1.6.7\hardware\arduino\avr\libraries\Wire
    exit status 1
    Error de compilación

    ResponderEliminar
  17. Hola, Necesitaria saber si me podes ayudar con un codigo de que cuando llegue a ciertos litros corte la electrovalvula.

    ResponderEliminar
  18. Saludos Mariano. disculpa creo que tengo un problema en la conexión y no veo donde, tendrá de casualidad un esquema más detallado del circuito? Saludos, gracias por el aporte.

    ResponderEliminar
    Respuestas
    1. Dentro del código tienes la relación de conexión de los pines de todo el sistema en un diagrama. Un saludo

      Eliminar
  19. Hola, me ha gustado vuestro tutorial. Me pregunto si hay alguna forma de usar el sensor sin hechar mano de interrupciones ya que estoy haciendo un programa con varios sensores y un modulo sim900 y las interrupciones me afectan al correcto funcionamiento del programa. Queria hacer una funcion que simplemente contase un pulso y el tiempo que este tarda y asi traducirlo en litros pero no se como. He probado de todo y no hay manera.

    Gracias de antemano, saludos.

    ResponderEliminar
    Respuestas
    1. No se si existen más maneras de utilizar este sensor, pero yo solamente lo he hecho mediante interrupciones. Siento no poder ayudarte

      Eliminar
    2. al final he podido configurar el timer1 para que actue como contador de pulsos cuando llamo a la función, luego uso las ecuaciones que has indicado en este tutorial y parece que funciona bien.

      Eliminar
    3. Hola, podrías enviarme esa parte del codigo en la cuál lo has solucionado? Es muy interesante ya que tengo tu mismo problema y no he encontrado ningún tutorial para hacer la lectura del caudalimetro sin interrupciones.Saludos.

      copiademusica@gmail.com

      Eliminar
  20. buen dia me gustaria saber si este sensor tambien sirve para medir aire

    ResponderEliminar
  21. Si que te sirve para aire y para cualquier fluido que no sea corrosivo.

    ResponderEliminar
    Respuestas
    1. para poder medir aire que constante se utilizaria? disculpe o como se haria la adaptacion ?

      Eliminar
  22. Estoy utilizando un shield lcd sobre el Arduino, el mismo permite únicamente hacer conexiones sobre los pines analógicos. Se puede igual utilizar el sensor bajo el código?

    ResponderEliminar
  23. Lo tendría que investigar, pero si quedan libres los pines que utiliza el sensor no hay ningún problema. El LCD le tendrías que reprogramar dentro del código para que te funcione correctamente.

    ResponderEliminar
  24. estoy intentando programar el arduino con el mismo programa del tu proyecto, pero en la verificación me aparece "error copilando para la tarjeta arduino/genuino uno" ¿podrías ayudarme a solucionar esto?

    ResponderEliminar
    Respuestas
    1. Instala mis librerías y solucionado. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1

      Eliminar
  25. buen dia me puedes ayudar con las librerias y como lo puedo hacer para un diplay de 16x2

    ResponderEliminar
  26. Revisa los comentarios del POST que lo de las librerias esta mas que resuelto. En cuanto al LCD tengo varios POST donde trabajo con ese modeo para que te fijes

    ResponderEliminar
  27. Buenas, sale el siguiente error:
    Arduino:1.8.1 (Windows 7), Tarjeta:"Arduino/Genuino Uno"

    Sensor_flujo_YFS210:63: error: 'POSITIVE' was not declared in this scope

    LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    ^

    exit status 1
    'POSITIVE' was not declared in this scope

    A que se puede deber?? Gracias

    ResponderEliminar
    Respuestas
    1. Instala mis librerías y solucionado. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1

      Eliminar
  28. buenas noches, una consulta... necesito controlar el apagado de una bomba de agua de AC mediante el sensor. cuando pase la cantidad de litros deseados por el sensor, que este mande una señal para apagar la bomba. y el encendido que sea de manera manual. como si fuera una gasolinería

    quiero definir los litros que quiero que pasen y que cuando pasen por el sensor, que la bomba se apague

    ResponderEliminar
  29. Hola disculpa que agregarle que cuando empiese funcionar el audometro me prenda una bomba puede ser

    ResponderEliminar
  30. Cuando prenda el caudimetro puedo hacer que funcione una bomba

    ResponderEliminar
    Respuestas
    1. Claro que se puede. Con una sentencia if marcas el caudal a partir del cual quieres que la bomba se active, posteriormente dentro del if simplemente activa un RELE que es donde conectas la bomba. Fuera del if pon un else que te apague el RELE de la bomba. Pasate por el POST de encender un ventilador a través de un RELE, es básicamente copiar y pegar código....

      Eliminar
  31. Buenas noches, disculpa ya instale la versión 1.6.4 del IDE de Arduino con las librerías que tu proporcionaste del link y me sigue mandando el mismo error de 'POSITIVE' was not declared in this scope. ¿Podrías ayudarme?

    ResponderEliminar
    Respuestas
    1. Te da fallo la librería del LCD. Te recomiendo que las vuelvas a meter como explico en el BLOG y luego reinicies el IDE para que las pueda cargar.

      Eliminar
    2. Volví a instalar el programa y las librerías tal como indicas aquí https://miarduinounotieneunblog.blogspot.mx/2015/12/anadiendo-las-librerias.html?m=1

      Y me sigue saliendo el mismo error, corro un programa de ejemplo que tiene incluida la libreria LiquidCrystal_I2C y me compila muy bien

      Eliminar
    3. Algo estas haciendo mal. Revisa todo porque te garantizo que funciona.

      Eliminar
  32. una consulta don mariano, yo quiero hacer este proyecto pero tomando el consumo de toda la casa (pegado al medidor principal de agua) entonces para eso debo usar otro modelo de sensor que pueda medir mas litro por minuto ¿puedo usar los mismos codigos pero con otro modelo de sensor?¿que deberia cambiarle an caso de que no pueda? pienso usar el sensor FS400A de 60l/min
    desde ya gracias

    ResponderEliminar
    Respuestas
    1. Tendrías que cambiar la formula que calcula el caudal por la que refleje el fabricante en su hoja de datos.

      Eliminar
  33. buenos dias, como hago par que cuando se corte la energia el nocomience desde cero, sino que me inicie el el numero que iva

    ResponderEliminar
  34. No me funciona el programa se carga en el arduino pero no hace nada ni tira nada la pantalla. Ayudame por favor

    ResponderEliminar
  35. Buenas tardes, saludos Mariano, y gracias por tus aportaciones. Quiero consultarte la adaptación de tu código, a un sistema donde el sensor de flujo es de 3" y según el fabricante cada 33 pulsos es 1L. no me da l/min. como podría implementar en tu código este dato.
    Gracias de antemano,
    Te paso las características de dicho sensor:
    Función: Sensor, el flujo de control de velocidad
    Tamaño de la rosca: 3 "G3
    Tamaño: L 75mm
    Color: color dorado
    Caudal: 100-30000 (m3/h)
    Pulso de flujo: F (Hz) = (0.55xQ) +-3% Q = L/min
    1 L agua ~ = 33 pulso
    Max. trabajo actual: 15mA (DC5 V)
    Min. tensión de trabajo: DC 4,5 V
    Voltaje de funcionamiento: DC 5 V ~ 18 V
    Capacidad de carga: = 10 mA (DC 5 V)
    Resistencia de aislamiento:> 100 M OHM
    Funcionamiento temperatura de trabajo:
    -25 grados centígrados a 80 grados centígrados
    Temperatura del líquido: 80
    Precisión: +/-5% a (50 ~ 500L/min)
    Cable Conection: Rojo: positivo + (EN); negro: negativo (GND); amarillo: NPN señal de pulso (a)

    ResponderEliminar
  36. don mariano le comento que logre hacer que funcionaran los codigos con un lcd 16x2 y estoy muy feliz, ahora lo que quiero agregar es que una luz este prendida en todo momento y que cuando el valor de litros sobrepase un valor x, se apague esta luz y se prenda otra entonces como debería hacerlo? la verdad es que no entiendo aun como hacerlo ya que lo que estudio realmente es administración de empresas y esto es parte de un proyecto :(
    le agradecería mucho que me guiara un poco

    ResponderEliminar
  37. Gracias por el aporte :D

    ResponderEliminar
  38. no sabes cuanto te lo agradezco, estaba haciendo un proyecto similar, pero mi código se congelaba un momento antes de salir de la interrupción, me pase una semana entera viendo en foros hasta que llegue a tu proyecto, y es que yo no estaba usando el "digitalPinToInterrupt", yo lo quería generar con un interrupt general, te lo agradezco de nuevo, excelente aporte

    ResponderEliminar
  39. disculpa las molestias pero me gustaria saber xk multiplcas los pulsos_Acumulados por 1.0
    litros = pulsos_Acumulados*1.0/450;
    te agradeceria la ayuda

    ResponderEliminar
  40. Hola, quisiera saber como podría simplemente contar los pulsos, no se porque tienes en cuenta millis(), ni se donde viene. No sería suficiente cuentas veces se hace la interrupción para saber cuántos pulsos hay? Sabiendo los pulsos será suficiente para saber caudal?
    Lo quiero hacer es saber si ha estado pasando agua durante un minuto sin parar, de haber parado se reinicia en minuto de conteo. Podrías darme alguna idea? Gracias y un saludo

    ResponderEliminar
  41. Como sería si quiero poner una electrovalvula y condiciones, que a 0.5 litros encienda un led, a 0.75 encienda otro y a 1 litro se apague la eñlectrovalvula?

    ResponderEliminar
  42. Hola buenas noches, primero quiero agradecer el trabajo que realizado. Mi consulta es si podrían subir el código para poder usar dos caudalímetros iguales y poder leer en el display la diferencia entre ambos caudalímetros. Esto es algo que estoy necesitando para un proyecto que vengo desarrollando y ya lo estaría necesitando. Gracias por su tiempo. Saludos. Rolando.

    ResponderEliminar
  43. Hola, no se si sigue activo esto aun pero estoy tratando de hacerlo y CREO que en algun lado hay algun error en el codigo porque no trabaja como en el video.
    mi pregunta es si el codigo final de esto es el que tenes aca publicado o hay otra version que no subiste?

    saludos
    Hernan

    ResponderEliminar
  44. Tengo un problema con su programacion me marca Positive que no fue declarado
    Me podria decir como,lo declaro

    ResponderEliminar
  45. hola, soy nuevo en esto. Hice correr el programa y sin tener el sensor de flujo conectado me marca caudal y volumen en sentido creciente. El medidor de flujo aun no lo tengo pero quiero ocupar un interruptor. Gracias

    ResponderEliminar
  46. Interesante articulo lo tendremos en cuenta en Valvula mineras

    ResponderEliminar