Advertisement
Villalba2006

POST_59

Nov 28th, 2016
28,900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.05 KB | None | 0 0
  1. /*  TITULO: Caudalímetro con sensor de flujo YF-S201 y LCD 2004.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa vamos a poder medir el caudal de agua en L/hora, así como el volumen total en litros
  14.     que pasa por el sensor, visualizando los valores a través de un LCD 2004.
  15.    
  16.  
  17.     ESQUEMA DE CONEXION
  18.    
  19.                                       +-----+
  20.          +----[PWR]-------------------| USB |--+
  21.          |                            +-----+  |
  22.          |         GND/RST2  [ ][ ]            |
  23.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   SCL del módulo I2C del LCD 2004
  24.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   SDA del módulo I2C del LCD 2004
  25.          |                             AREF[ ] |
  26.          |                              GND[ ] |
  27.          | [ ]N/C                    SCK/13[ ] |  
  28.          | [ ]IOREF                 MISO/12[ ] |  
  29.          | [ ]RST                   MOSI/11[ ]~|  
  30.          | [ ]3V3    +---+               10[ ]~|  
  31.          | [ ]5v    -| A |-               9[ ]~|  
  32.          | [ ]GND   -| R |-               8[ ] |  
  33.          | [ ]GND   -| D |-                    |
  34.          | [ ]Vin   -| U |-               7[ ] |  
  35.          |          -| I |-               6[ ]~|  
  36.          | [ ]A0    -| N |-               5[ ]~|  
  37.          | [ ]A1    -| O |-               4[ ] |  
  38.          | [ ]A2     +---+           INT1/3[ ]~|  
  39.          | [ ]A3                     INT0/2[ ] |   Cable Amarillo del sensor de flujo YF-S201
  40.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  41.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  42.          |            [ ] [ ] [ ]              |
  43.          |  UNO_R3    GND MOSI 5V  ____________/
  44.           \_______________________/
  45.  
  46.   NOTAS:
  47.  
  48.    - La alimentación y la masa del módulo LCM 2004 I2C V1 van directamente conectadas a VCC (+5V) y GND
  49.      respectivamente.
  50.    - Conexiones del sensor de flujo YF-S201:
  51.      - Cable Rojo -> +5V de Arduino.
  52.      - Cable Negro -> GND de Arduino.
  53. */
  54.  
  55.   // Importar librerías
  56.   #include <Wire.h> // Librería comunicación I2C
  57.   #include <LiquidCrystal_I2C.h> // Librería LCD I2C
  58.  
  59.   // Declaración del objeto para el LCD
  60.   // Poner la dirección del LCD a 0x20 para display 20x4 (A0=0, A1=0, A2=0)
  61.   // Terminales de conexión del LCD
  62.   //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  63.   LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  64.    
  65.   const int sensor = 2; // Pin digital para el sensor de flujo YF-S201
  66.   int litros_Hora; // Variable que almacena el caudal (L/hora)
  67.   volatile int pulsos = 0; // Variable que almacena el número de pulsos
  68.   unsigned long tiempoAnterior = 0; // Variable para calcular el tiempo transcurrido
  69.   unsigned long pulsos_Acumulados = 0; // Variable que almacena el número de pulsos acumulados
  70.   float litros; // // Variable que almacena el número de litros acumulados
  71.  
  72.   // Rutina de servicio de la interrupción (ISR)
  73.   void flujo()
  74.   {
  75.     pulsos++; // Incrementa en una unidad el número de pulsos
  76.   }
  77.    
  78.   void setup()
  79.   {
  80.     pinMode(sensor, INPUT_PULLUP); // Pin digital como entrada con conexión PULL-UP interna
  81.     lcd.begin(20,4); // Inicializo el LCD 2004
  82.     interrupts(); // Habilito las interrupciones
  83.     // Interrupción INT0, llama a la ISR llamada "flujo" en cada flanco de subida en el pin digital 2
  84.     attachInterrupt(digitalPinToInterrupt(sensor), flujo, RISING);  
  85.     tiempoAnterior = millis(); // Guardo el tiempo que tarda el ejecutarse el setup
  86.   }
  87.    
  88.   void loop ()
  89.   {
  90.     // Cada segundo calculamos e imprimimos el caudal y el número de litros consumidos
  91.     if(millis() - tiempoAnterior > 1000)
  92.     {
  93.       // Realizo los cálculos
  94.       tiempoAnterior = millis(); // Actualizo el nuevo tiempo
  95.       pulsos_Acumulados += pulsos; // Número de pulsos acumulados
  96.       litros_Hora = (pulsos * 60 / 7.5); // Q = frecuencia * 60/ 7.5 (L/Hora)
  97.       litros = pulsos_Acumulados*1.0/450; // Cada 450 pulsos son un litro
  98.       pulsos = 0; // Pongo nuevamente el número de pulsos a cero
  99.      
  100.       // Llamada a la función que muestra los resultados en el LCD 2004
  101.       LCD_2004();      
  102.     }
  103.   }
  104.  
  105.   // Función que muestra los resultados en el LCD 2004
  106.   void LCD_2004()
  107.   {
  108.     // Imprimo la cabecera del sistema
  109.     lcd.clear();
  110.     lcd.setCursor(0,0);
  111.     lcd.print(">CAUDALIMETRO YF-S201");        
  112.     lcd.setCursor(0,1);    
  113.     lcd.print("********************");  
  114.     // Presento los valores a través del LCD 2004
  115.     lcd.setCursor(0,2);
  116.     // Imprimo el caudal en L/hora
  117.     lcd.print("-> ");
  118.     lcd.print(litros_Hora, DEC);
  119.     lcd.print(" L/Hora");
  120.     lcd.setCursor(0,3);
  121.     // Imprimo el número de litros acumulados
  122.     lcd.print("-> ");
  123.     lcd.print(litros);    
  124.     lcd.print(" Litros");  
  125.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement