UNIVERSIDAD NACIONAL DE INGENIERIA FACULTAD DE TECNOLOGIA DE LA INDUSTRIA INGENIERIA MECÁNICA Proyecto de Sistema de Control Automático. Medición de Nivel y Caudal de agua a través de arduino.
AUTORES Br.
Kenneth Steven Pérez.
Br.
Carlos Elías Gaitán Hernández.
Br.
Juan Carlos Jarquín Ortega.
DOCENTE Ing.
Silvio Ramón Solorzano Moody.
GRUPO 4M1-MEC
Managua, 27 de Nobiembre de 2017
SENSOR DE FLUJO YF-S201 Este sensor se acopla muy bien a la tubería tuber ía de agua de cualquier edificio o casa ca sa y contiene un sensor de molino para medir la cantidad de líquido que ha pasado a través de él. También tiene un sensor magnético de efecto Hall que emite un impulso eléctrico con cada revolución. El sensor de efecto Hall está sellado para permanecer seguro y seco. El sensor viene con tres cables: rojo (energía 5-24VDC), negro (tierra) y amarillo (salida de pulsos de efecto Hall). Al contar los pulsos de la salida del sensor, se puede calcular fácilmente el flujo de agua. Cada pulso es de aproximadamente 2.25 mililitros. Tenga en cuenta que esto no es un sensor de precisión, y la frecuencia del pulso varía un poco dependiendo de la velocidad de flujo, presión del fluido y la orientación del sensor. Si se necesita más del 10% de precisión se tendrá que hacer la calibración adecuada. Sin embargo, es genial para las tareas diarias cotidianas. La señal de pulso es una simple onda cuadrada así que es bastante fácil de registrar y convertir en litros por minuto utilizando la siguiente fórmula. Frecuencia de pulsos (Hz) / 7 = caudal en L / min
CARACTERÍSTICAS DEL SENSOR DE FLUJO YF-S201
Modelo: YF-S201
Precisión: ±10%
Tipo de Sensor: Efecto Hall
Máxima Presión de Agua: 2.0 MPa
Voltaje Nominal: 5 to 18V DC
Salida del Ciclo de Trabajo: 50% +-
(Voltaje Mínimo Requerido 4.5V)
10%
Máxima Corriente de operación:
Pulsos por Litro: 450
15mA @ 5V
Durabilidad: Mínimo 300,000 ciclos
Voltaje de Salida: 5V TTL
Largo del Cable: 15cm
Velocidad
Conectores nominales tubería de
de
Flujo:
1
a
30
Litros/Minuto
1/2″
Rango de Temperatura: -25 a
Diámetro externo de 0.78″
+80℃
Rosca de 1/2″
Rango de Humedad: 35%-80% RH
Tamaño: 2.5″ x 1.4″ x 1.4″
COMPONENTES PARA LA CONECCIÓN DE UN SENSOR DE FLUJO YF-S201
Arduino Uno
Sensor de Flujo YF-S201
2 conectores de ½ pulgada
1 pedazo de manguera de ½ pulgada
1 embudo
Teflón para evitar fugas en los conectores
DESCRIPCIÓN DE APLICACIÓN EN EL PROYECTO En este proyecto se realizará la medición del flujo de agua en L/min así como el volumen total de agua que pasa por el sensor.
Pin de salida (pinOUT) Cable Rojo: +5V – Proveniente del arduino. Cable Negro: GND- se deriva del arduino como alimentación negativa al sensor . Cable Amarillo: PWM output – Se conecta al pin N° 2 debido a que es el único pin del arduino capaz de aceptar interrupciones en el arduino UNO
Hardware del proyecto (Sensor de flujo)
CALIBRACIÓN DEL SENSOR DE FLUJO YF-S201 Procedimiento de Calibración: Si se requiere más de 10% de precisión recomendamos hacer el proceso de calibración. Incluso si no se requiere es buena práctica realizarlo para mejorar el desempeño y revisar que todo se encuentre funcionando correctamente. Además de que no requiere de mucho tiempo. Lo que haremos es conseguir una tasa de medición y realizar pruebas para ver cuántos pulsos se miden con cierto volumen de agua. Esto se repite varias veces y se obtiene un promedio. Para obtener los pulsos simplemente podemos cargar este programa al Arduino: 1
volatile int pulsos; // Cantidad de pulsos del sensor. Como se usa dentro de una interrupcion debe ser volatile 3 #define sensorDeFlujo 2 //Pin al que se conecta el sensor. DEBE ser 2 porque 4 es unico que acepta interrpciones en el Arduino UNO 5 6 void flujo () // Funcion de interrupcion 2
7 8 { pulsos++; // Simplemente sumar el número de pulsos 9 10 11
}
12 void setup() 13 14 { 15 pinMode(sensorDeFlujo, INPUT); Serial.begin(9600); 16 attachInterrupt(0, flujo, RISING); 17 interrupts(); 18 } 19 20 void loop () 21 { Serial.print("Pulsos: "); 22 Serial.println(pulsos); 23 } 24
Lo que hará el programa es simplemente desplegar la cantidad de pulsos en el Serial Monitor. Corremos el programa y se vierte el agua para que pase completamente por el sensor y anotamos la cantidad de pulsos. Esto se puede repetir varias veces con distintas cantidades de agua. Nosotros realizamos 3 pruebas con 500ml ( ½ LITRO) y 3 pruebas con 1000ml ( 1
LITRO) y los resultados son bastante evidentes. Pr ueba No.
C antidad
Puls os
1 2 3 4 5 6
500 ml 500 ml 500 ml 1000 ml 1000 ml 1000 ml
120 126 135 310 306 290
Podemos entonces inferir que por cada litro de agua que pasa por el sensor obtenemos aproximadamente 302 pulsos. Lo redondeamos por simplicidad pero se puede repetir la prueba cuantas veces sea necesario y obtener un valor más preciso. Si se requiere mucha precisión es importante cuidar que la cantidad de agua vertida sea siempre la misma. Por lo tanto concluimos que: 302 pulsos = 1 Litro Para calcular el flujo requerimos entonces cuantos Litros/seg están pasando por el sensor. Tomando en cuenta lo que determinamos anteriormente entonces sabemos que si pasa 1 Litro en 1 minuto tendíamos 302 pulsos/min. Lo dividimos entre 60 para convertirlo a segundos y tenemos 5 pulsos / seg. Entonces: 302 pulsos/min = 1 Litro / min 5 pulsos/seg = 1 Litro /min 5 Hz = 1 L/min
Esto quiere decir que si tenemos el número de Hz simplemente lo dividimos entre 5 para obtener el número de L/min. Q (L/min) = f / 5 Si revisamos la hoja de datos vemos que estamos bastante cerca de lo que menciona. Este número puede variar dependiendo de cada sensor y se recomienda hacer la calibración.
CÓDIGO A INTRODUCIR AL EL ARDUINO PARA MEDIR FLUJO DE AGUA 1 2 3
/* YF-S201 Hall Effect Water Flow Meter / Sensor http://www.hobbytronics.co.uk/yf-s201-water-flow-meter Read Water Flow Meter and output reading in litres/hour
4
*/ 5 6
volatile int pulsos; // Cantidad de pulsos del sensor. Como se usa dentro de 7 una interrupcion debe ser volatile 8 9
unsigned int litrosPorHora; // Calculated litres/hour
10 11
unsigned char sensorDeFlujo = 2; // Pin al que esta conectado el sensor
12
unsigned long tiempoAnterior; // Para calcular el tiempo 13 14
unsigned long pulsosAcumulados; // Pulsos acumulados 15 16
float litros; // Litros acumulados 17
void flujo () // Funcion de interrupcion
18 19
{
20 pulsos++;
// Simplemente sumar el numero de pulsos
21 } 22 23 24 25
void setup() { pinMode(sensorDeFlujo, INPUT); Serial.begin(9600);
26
attachInterrupt(0, flujo, RISING); // Setup Interrupt 27 28
// see http://arduino.cc/en/Reference/attachInterrupt 29
interrupts(); // Habilitar interrupciones
30 tiempoAnterior
= millis();
31 } 32 33 void 34 35 36
loop ()
{ // Cada segundo calcular e imprimir Litros/seg if( millis() - tiempoAnterior > 1000) {
37
tiempoAnterior = millis(); // Updates cloopTime 38
// Pulse frequency (Hz) = 6.67 Q, Q is flow rate in L/min. (Results in +/- 3% 39 range) 40 41
// Q = frecuencia / 6.67 (L/min) // Q = (frecuencia * 60) / 6.67 (L/hora) pulsosAcumulados += pulsos;
42
litrosPorHora = (pulsos * 60 / 6.67); // (Pulse frequency x 60 min) / 7.5Q = 43 flow rate in L/hour 44 pulsos 45 46
= 0; // Reset Counter
Serial.print(litrosPorHora, DEC); // Print litres/hour Serial.print(" L/hour"); Serial.print(" Pulsos totales: ");
47
Serial.print(pulsosAcumulados); 48
49 litros 50 51 52
Serial.print(" Litros: "); Serial.println(litros); } }
53 54 55 56
= pulsosAcumulados*1.0/400; //Cada 400 pulsos = 1 litro
SENSOR DE NIVEL DE AGUA CON ARDUINO El sensor de nivel de agua con Arduino nos permite medir cualquier líquido gracias al sensor de ultrasonidos. La pieza más importante en este proyecto será el Arduino. En este caso podemos utilizar cualquier modelo que tenga como mínimo 8 entradas digitales. En este tutorial trabajaré con la placa más famosa de Arduino, la UNO. El proyecto va a constar de diferentes fases donde iremos avanzando para conseguir nuestro objetivo.
Circuito eléctrico, conectando los componentes Probar todos los componentes y conexiones Montando el sensor en la cubeta Calibrando el sensor de nivel de agua con Arduino Mostrando los datos en el LCD
Componentes necesarios para el sensor de nivel de agua con Arduino Lo primero que debemos hacer si queremos crear un sensor de nivel de agua con Arduino, es conocer los componentes que vamos a utilizar. Por supuesto que esto es solo una idea, de todos los componentes que voy a detallar a continuación, alguno es prescindible.
Arduino UNO
Será el cerebro de la aplicación y el encargado de gestionar todos los sensores a través de las entradas y salidas digitales. En la programación reside su potencia. Veremos que código debemos implementar para poder medir el nivel en un recipiente.
Sensor ultrasonidos HC-SR04 El funcionamiento es simple, envía una señal ultrasónica inaudible y nos entrega el tiempo que demoro en ir y venir hasta el obstáculo más cercano que detecto. Generalmente están conformados por dos cilindros puestos uno al lado del otro, uno de ellos es quien emite la señal ultrasónica, mientras que el otro es quien la recibe, es un sistema muy simple pero no por eso deja de ser efectivo. El sensor hc-sr04 en particular tiene una sensibilidad muy buena del orden de los 3mm, teniendo en cuenta que la mayoría de las aplicaciones donde este sensor es utilizado es para medir o detectar obstáculos o distancias mayores a varios cen tímetros, podemos decir que su sensibilidad es muy buena.
Obviamente el sensor por si solo no sirve de mucho, necesitamos algun micro controlador para leer los datos que nos entrega, si lo que queremos desarrollar es de carácter personal y no tiene que cumplir estrictos requisitos comerciales, sin duda que la mejor opción que podemos elegir es arduino. Su infinidad de librerías y contenido disponible en la web nos facilita muchísimo el trabajo y nos acorta los tiempos de desarrollo. Dicho esto podemos comentar que es lo que el sensor nos entrega y que tenemos que hacer para interpretarlo correctamente con nuestra placa arduino.
¿Que nos entrega el sensor hc-sr04? Nos entrega tiempo, como dijimos al comienzo el sensor hc-sr04 cuenta el tiempo que transcurre entre la emisión y la recepción de la señal ultrasónica, claramente podemos deducir que el tiempo es dependiente de la distancia, la señal tardara más en ir y volver si el objeto está lejos que si está cerca. Recordando algunas ecuaciones básicas de física sabemos que d = v.t (la distancia recorrida es igual a la velocidad del objeto en movimiento por el tiempo que transcurre en llegar).
Tenemos el tiempo, pero ¿cuál es la velocidad de la señal? Para responder esa pregunta tenemos que tener en claro que el sensor emite una señal ultrasónica y esta viaja a la velocidad del sonido, aproximadamente a 340 m/s. Ya tenemos todo listo, si el sensor hc-sr04 nos entrega una lectura de de 1,47 mili segundos y aplicamos la formula anterior nos queda d = 340 x 1,47 = 341 milímetros, pero como este tiempo es el de ida y vuelta, la distancia real al objeto sera la mitad, por eso es que dividimos el resultado por dos, lo que nos da un resultado final de 170 milímetros (17 centimetros)
Diagrama de conexión El sensor tiene 4 pines, uno es VCC otro GND un pin de triger donde enviamos un pulso al sensor para inicializarlo y de alguna manera decirle (comenzar a enviar información) y otro pin mas Echo donde nos viene el resultado final a la placa de arduino.
Diagrama de conexión sensor ultrasonido hc-sr04
Pantalla LCD 16×2
Este componente también lo hemos visto en varios artículos. Mostrando texto en
movimiento y mos trando la temperatura de un sensor. Consiste en una pantalla de cristal líquido de 16 columnas y 2 filas. En ella iremos escribiendo los resultados obtenidos de las mediciones así como alguna otra información útil en este proyecto.
Circuito elétrico Con todos los componentes en nuestro poder, ya podemos empezar a montar el circuito. Como ya he comentado al principio del artículo, vamos a necesitar 8 entradas y salidas digitales. Además utilizaremos el pin de 5V y el GND (toma de tierra). El circuito sería el siguiente.
Montando el sensor en la cubeta Ya hemos montado todo el circuito, hemos comprobado que todo funciona correctamente y ahora vamos a montar el sensor encima del recipiente o cubeta donde vamos a tener el líquido. Lo podemos hacer de muchas formas, yo te voy a mostrar una muy sencilla utilizando dos palos de madera que se utilizan para cocinar. Son los típicos para saber si el bizcocho está hecho o para hacer brochetas.
Además, he utilizado dos alambres de los típicos que vienen en cualquier embalaje para sujetar cables. Suelo recolectar este tipo de agarres ya que son muy útiles en muchas ocasiones. El resultado lo puedes ver en las siguientes imagenes.
Gracias a estos dos palos podemos situar el ultrasonido boca abajo encima de cualquier recipiente o cubeta. En la siguiente imagen te muestro un ejemplo de cómo quedaría.
Esto también nos puede servir de sujeción con alguna goma elástica u otro método para que no se mueva.
Calibrando el sensor de nivel de agua con Arduino Ha llegado la hora de empezar a programar. Lo primero que debemos hacer es calibrar el sensor de nivel de agua con Arduino. Para ello voy a utilizar un vaso medidor es decir, un vaso que tiene marcadas las medidas. Así podremos asignar una medida del sensor de ultrasonidos a una cantidad de líquido. Esto nos permitirá saber que cantidad de líquido tenemos en el recipiente.
Algo que tienes que tener en cuenta es que el sensor de ultrasonidos mide la cantidad de espacio vacío en el recipiente. Por lo tanto, si conocemos la capacidad total del recipiente,al restar la cantidad de espacio vacío sabremos cuánto líquido hay. Mira el esquema general.
Entonces, según este esquema general debemos conocer que valor obtenemos con el sensor de ultrasonidos cuando está vacío, cuando está lleno y una medida conocida. Esta última medida la haremos con vaso medidor calculando el valor para 100 ml.
Antes de comenzar con las medidas, debemos de tener en cuenta que el vaso debe ser cilíndrico es decir, la base debe ser del mismo diámetro que la parte de arriba. Si intentamos medir en un recipiente que no es cilíndrico, en forma de cono, las medidas no serán proporcionales.
Calcular la media para eliminar el ruido En todos los sistemas electrónicos se genera un ruido debido al movimiento de los electrones, al propio sensor, la placa de Arduino, etc… Esto se traduce en una variación o
fluctuación en las medidas que vamos obteniendo a través del sensor. Para eliminar este tipo de ruido se suele aplicar un filtro paso bajo que elimina las frecuencias bajas, justo donde se encuentra el ruido. La forma más sencilla de aplicarl o a través de la programación es hacer una media de los valores que se van obteniendo.
Pero no solo para eliminar el ruido, calculando la media podemos eliminar las fluctuaciones debidas al movimiento del recipiente. Imagínate un deposito de gasolina de un coche.
Cuando va en marcha el combustible no está quieto, se va moviendo. Si se quiere medir con un sensor de ultrasonidos sería complicado si no se utiliza alguna técnica como esta.
Dependiendo del número de muestras que utilicemos para obtener la media, podremos tener un valor más preciso o menos preciso. Pero esto también influye en cuánto tarda en estabilizarse la medida cuando se produce un cambio. Por lo tanto, si cogemos un número
alto de muestras, la media será más precisa pero tardará más tiempo en reflejar los cambios. Por el contrario, si cogemos un número bajo de muestras, la media será menos precisa pero veremos reflejados más rápidos los cambios . Elegir uno u otro dependerá de lo que queramos conseguir, rapidez o precisión. Otro factor a tener en cuenta es el tamaño del tipo de dato que vamos a almacenar. Debemos de tener mucho ojo ya que podemos provocar un desbordamiento. Todas las muestras se irán almacenando en una variable para luego calcular la media, por lo tanto si elegimos un número alto de muestras debemos asegurarnos que no nos saldremos de rango. En este caso yo voy a elegir precisión, voy a coger un rango de muestras de 100. El código es muy parecido al que hemos utilizado para probar el sensor de ultrasonidos al que he añadido el cálculo de la media cada 100 valores.
Estos son los datos que yo he obtenido, seguramente tu hayas obtenido otros valores, dependerá del recipiente y de la cantidad de líquido que entre en dicho recipiente.
VACÍO
LLENO
1L
33 cm
3 cm
2 cm
En este proyecto empleamos la combinación de ambos sensores tanto el ultrasónico como el medidor de flujo en el cual el código que se estableció para poder obtener medidas de caudal y de volumen, el cual debe de introducirse en el software arduino es el siguiente: