TUTORIAL SENSOR DE FLUJO YF-S201

Paso #1 Descripción

Este sensor se acopla muy bien a la tubería de agua de cualquier edificio o casa 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.

Paso #2 Características

  • Modelo: YF-S201
  • Tipo de Sensor: Efecto Hall
  • Voltaje Nominal: 5 to 18V DC (Voltaje Mínimo Requerido 4.5V)
  • Máxima Corriente de operación: 15mA @ 5V
  • Voltaje de Salida: 5V TTL
  • Velocidad de Flujo: 1 a 30 Litros/Minuto
  • Rango de Temperatura: -25 a +80℃
  • Rango de Humedad: 35%-80% RH
  • Precisión: ±10%
  • Máxima Presión de Agua: 2.0 MPa
  • Salida del Ciclo de Trabajo: 50% +-10%
  • Pulsos por Litro: 450
  • Durabilidad: Mínimo 300,000 ciclos
  • Largo del Cable: 15cm
  • Conectores nominales tubería de 1/2″
  • Diámetro externo de 0.78″
  • Rosca de 1/2″
  • Tamaño: 2.5″ x 1.4″ x 1.4″

Paso #3 Componentes

  • 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

Paso #4 Descripción del Tutorial

En este tutorial se realizará la medición del flujo de agua en L/min asi como el volumen total de agua que pasa por el sensor.

Paso #5 PinOut

  • Cable Rojo: +5V
  • Cable Negro: GND
  • Cable Amarillo: Salida de pulsos

Paso #6 Hardware

 

Paso #7 Calibración

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:


volatile int pulsos; // Cantidad de pulsos del sensor. Como se usa dentro de una interrupcion debe ser volatile
#define sensorDeFlujo 2 //Pin al que se conecta el sensor. DEBE ser 2 porque es unico que acepta interrpciones en el Arduino UNO

void flujo () // Funcion de interrupcion

{
pulsos++; // Simplemente sumar el numero de pulsos

}

void setup()

{
pinMode(sensorDeFlujo, INPUT);
Serial.begin(9600);
attachInterrupt(0, flujo, RISING);
interrupts();
}

void loop ()
{
Serial.print("Pulsos: ");
Serial.println(pulsos);
}

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 realiamos 3 pruebas con 500ml y 3 pruebas con 1000ml y los resultados son bastante evidentes.

Prueba No. Cantidad Pulsos
1 500 ml 209
2 500 ml 196
3 500 ml 199
4 1000 ml 385
5 1000 ml 390
6 1000 ml 398

 

Podemos entonces inferir que por cada litro de agua que pasa por el sensor obtenemos aproximadamente 400 pulsos. Lo redondeamos por simplicidad pero puedes 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:

400 pulsos = 1 Litro

Para calcular el flujo requermos 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 400 pulsos/min. Lo dividimos entre 60 para convertirlo a segundos y tenemos 6.67 pulsos / seg.

Entonces:

400 pulsos/min = 1 Litro / min

6.67 pulsos/seg = 1 Litro /min

6.67 Hz = 1 L/min

Esto quiere decir que si tenemos el número de Hz simplemente lo dividimos entre 6.67 para obtener el número de L/min.

Q (L/min) = f / 6.67

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 te recomendamos que hagas

 

Paso #8 Software

/*
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
*/

volatile int pulsos; // Cantidad de pulsos del sensor. Como se usa dentro de una interrupcion debe ser volatile

unsigned int litrosPorHora; // Calculated litres/hour

unsigned char sensorDeFlujo = 2; // Pin al que esta conectado el sensor

unsigned long tiempoAnterior; // Para calcular el tiempo

unsigned long pulsosAcumulados; // Pulsos acumulados

float litros; // Litros acumulados
void flujo () // Funcion de interrupcion

{
pulsos++; // Simplemente sumar el numero de pulsos
}

void setup()
{
pinMode(sensorDeFlujo, INPUT);
Serial.begin(9600);
attachInterrupt(0, flujo, RISING); // Setup Interrupt

// see http://arduino.cc/en/Reference/attachInterrupt
interrupts(); // Habilitar interrupciones
tiempoAnterior = millis();
}

void loop ()
{
// Cada segundo calcular e imprimir Litros/seg
if( millis() - tiempoAnterior > 1000)
{
tiempoAnterior = millis(); // Updates cloopTime
// Pulse frequency (Hz) = 6.67 Q, Q is flow rate in L/min. (Results in +/- 3% range)
// Q = frecuencia / 6.67 (L/min)
// Q = (frecuencia * 60) / 6.67 (L/hora)
pulsosAcumulados += pulsos;
litrosPorHora = (pulsos * 60 / 6.67); // (Pulse frequency x 60 min) / 7.5Q = flow rate in L/hour
pulsos = 0; // Reset Counter
Serial.print(litrosPorHora, DEC); // Print litres/hour
Serial.print(" L/hour");
Serial.print(" Pulsos totales: ");
Serial.print(pulsosAcumulados);

litros = pulsosAcumulados*1.0/400; //Cada 400 pulsos = 1 litro
Serial.print(" Litros: ");
Serial.println(litros);
}
}