Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Caudalímetro con sensor de flujo YF-S201 y LCD 2004.
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: marianodc83@gmail.com
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa vamos a poder medir el caudal de agua en L/hora, así como el volumen total en litros
- que pasa por el sensor, visualizando los valores a través de un LCD 2004.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | SCL del módulo I2C del LCD 2004
- | 5V/MISO2 [ ][ ] A4/SDA[ ] | SDA del módulo I2C del LCD 2004
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] |
- | [ ]IOREF MISO/12[ ] |
- | [ ]RST MOSI/11[ ]~|
- | [ ]3V3 +---+ 10[ ]~|
- | [ ]5v -| A |- 9[ ]~|
- | [ ]GND -| R |- 8[ ] |
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] |
- | -| I |- 6[ ]~|
- | [ ]A0 -| N |- 5[ ]~|
- | [ ]A1 -| O |- 4[ ] |
- | [ ]A2 +---+ INT1/3[ ]~|
- | [ ]A3 INT0/2[ ] | Cable Amarillo del sensor de flujo YF-S201
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - La alimentación y la masa del módulo LCM 2004 I2C V1 van directamente conectadas a VCC (+5V) y GND
- respectivamente.
- - Conexiones del sensor de flujo YF-S201:
- - Cable Rojo -> +5V de Arduino.
- - Cable Negro -> GND de Arduino.
- */
- // Importar librerías
- #include <Wire.h> // Librería comunicación I2C
- #include <LiquidCrystal_I2C.h> // Librería LCD I2C
- // Declaración del objeto para el LCD
- // Poner la dirección del LCD a 0x20 para display 20x4 (A0=0, A1=0, A2=0)
- // Terminales de conexión del LCD
- // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
- LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
- const int sensor = 2; // Pin digital para el sensor de flujo YF-S201
- int litros_Hora; // Variable que almacena el caudal (L/hora)
- volatile int pulsos = 0; // Variable que almacena el número de pulsos
- unsigned long tiempoAnterior = 0; // Variable para calcular el tiempo transcurrido
- unsigned long pulsos_Acumulados = 0; // Variable que almacena el número de pulsos acumulados
- float litros; // // Variable que almacena el número de litros acumulados
- // Rutina de servicio de la interrupción (ISR)
- void flujo()
- {
- pulsos++; // Incrementa en una unidad el número de pulsos
- }
- void setup()
- {
- pinMode(sensor, INPUT_PULLUP); // Pin digital como entrada con conexión PULL-UP interna
- lcd.begin(20,4); // Inicializo el LCD 2004
- interrupts(); // Habilito las interrupciones
- // Interrupción INT0, llama a la ISR llamada "flujo" en cada flanco de subida en el pin digital 2
- attachInterrupt(digitalPinToInterrupt(sensor), flujo, RISING);
- tiempoAnterior = millis(); // Guardo el tiempo que tarda el ejecutarse el setup
- }
- void loop ()
- {
- // Cada segundo calculamos e imprimimos el caudal y el número de litros consumidos
- if(millis() - tiempoAnterior > 1000)
- {
- // Realizo los cálculos
- tiempoAnterior = millis(); // Actualizo el nuevo tiempo
- pulsos_Acumulados += pulsos; // Número de pulsos acumulados
- litros_Hora = (pulsos * 60 / 7.5); // Q = frecuencia * 60/ 7.5 (L/Hora)
- litros = pulsos_Acumulados*1.0/450; // Cada 450 pulsos son un litro
- pulsos = 0; // Pongo nuevamente el número de pulsos a cero
- // Llamada a la función que muestra los resultados en el LCD 2004
- LCD_2004();
- }
- }
- // Función que muestra los resultados en el LCD 2004
- void LCD_2004()
- {
- // Imprimo la cabecera del sistema
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(">CAUDALIMETRO YF-S201");
- lcd.setCursor(0,1);
- lcd.print("********************");
- // Presento los valores a través del LCD 2004
- lcd.setCursor(0,2);
- // Imprimo el caudal en L/hora
- lcd.print("-> ");
- lcd.print(litros_Hora, DEC);
- lcd.print(" L/Hora");
- lcd.setCursor(0,3);
- // Imprimo el número de litros acumulados
- lcd.print("-> ");
- lcd.print(litros);
- lcd.print(" Litros");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement