Advertisement
Villalba2006

POST_22

Nov 24th, 2016
3,463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.49 KB | None | 0 0
  1. /*  TITULO: Medir humedad y temperatura con sensor DHT11.
  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 obtenemos la humedad y la temperatura ambientes, a través del monitor serie
  14.     del IDE de Arduino y también a través de un LCD 1602 mediante comunicación I2C. Además también
  15.     se obtiene un pequeño historial de los valores máximos y mínimos tanto de humedad como temperatura,
  16.     aunque estos desaparezcan cuando desconectamos la alimentación de la placa o presionamos el botón
  17.     de reset.
  18.    
  19.  
  20.     ESQUEMA DE CONEXION
  21.    
  22.                                       +-----+
  23.          +----[PWR]-------------------| USB |--+
  24.          |                            +-----+  |
  25.          |         GND/RST2  [ ][ ]            |
  26.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   SCL del módulo I2C conectado al LCD 1602
  27.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   SDA del módulo I2C conectado al LCD 1602
  28.          |                             AREF[ ] |
  29.          |                              GND[ ] |
  30.          | [ ]N/C                    SCK/13[ ] |  
  31.          | [ ]IOREF                 MISO/12[ ] |  
  32.          | [ ]RST                   MOSI/11[ ]~|  
  33.          | [ ]3V3    +---+               10[ ]~|  
  34.          | [ ]5v    -| A |-               9[ ]~|  
  35.          | [ ]GND   -| R |-               8[ ] |  
  36.          | [ ]GND   -| D |-                    |
  37.          | [ ]Vin   -| U |-               7[ ] |   Terminal "S" del sensor DHT11 (izquierda)
  38.          |          -| I |-               6[ ]~|  
  39.          | [ ]A0    -| N |-               5[ ]~|  
  40.          | [ ]A1    -| O |-               4[ ] |  
  41.          | [ ]A2     +---+           INT1/3[ ]~|  
  42.          | [ ]A3                     INT0/2[ ] |  
  43.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  44.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  45.          |            [ ] [ ] [ ]              |
  46.          |  UNO_R3    GND MOSI 5V  ____________/
  47.           \_______________________/
  48.  
  49.   NOTAS:
  50.    - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND
  51.      respectivamente.  
  52.    - Alimentación y masa del módulo sensor DHT11.
  53.      - Terminal "+" (central) --> VCC (3,3-5V).  
  54.      - Terminal "-" (derecho) --> GND.
  55. */
  56.  
  57.   // sensor DHT11 de humedad y temperatura
  58.   #include <Wire.h> // Librería para la comunicación I2C
  59.   #include <LiquidCrystal_I2C.h> // Librería LCD I2C
  60.   #include "DHT.h"  // Librería para el sensor DHT
  61.    
  62.   #define DHTPIN 7  // Pin digital para la señal del sensor DHT11
  63.    
  64.   // Tipo de sensor DHT que vamos a utilizar (DHT11, DHT21, DHT22)
  65.   #define DHTTYPE DHT11   // Tipo DHT11
  66.  
  67.   // Declaración del objeto para el sensor DHT11
  68.   DHT dht(DHTPIN, DHTTYPE);  //Indica el pin con el que trabajamos y el tipo de sensor
  69.  
  70.   // Variables para el funcionamiento interno del programa
  71.   int maxh=0, minh=100, maxt=0, mint=100;
  72.  
  73.   // Declaración del objeto para el LCD
  74.   // Terminales de conexión del LCD
  75.   //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  76.   LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  77.    
  78.   void setup()
  79.   {
  80.    
  81.     Serial.begin(9600);  // Configura la velocidad de la comunicación serie
  82.     lcd.begin(16,2);   // Inicializa el LCD para 16x2
  83.     lcd.backlight(); // Enciende la luz de fondo del LCD (BackLight)  
  84.     dht.begin();  // Iniciamos la comunicación con el sensor  
  85.    
  86.     Serial.println("< Comprobando el funcionamiento del Sensor DHT11 >"); // Mensaje de inicio para el monitor serie.
  87.     lcd.setCursor(0,0);
  88.     lcd.print("< Sensor DHT11 >"); // Mensaje de inicio para el LCD
  89.     delay(2000);
  90.   }
  91.    
  92.   void loop()
  93.   {
  94.     // La lectura de la temperatura o de la humedad lleva sobre 250 milisegundos  
  95.     // La lectura del sensor tambien puede estar sobre los 2 segundos (es un sensor muy lento)
  96.     int h = dht.readHumidity();  //Guarda la lectura de la humedad en la variable "h"
  97.     int t = dht.readTemperature();  //Guarda la lectura de la temperatura en la variable "t"
  98.    
  99.     // Comprobamos si lo que devuelve el sensor es valido, si no son numeros algo esta fallando
  100.     if (isnan(t) || isnan(h)) // funcion que comprueba si son numeros las variables indicadas
  101.     {
  102.       Serial.println("Fallo al leer del sensor DHT"); // Mostramos mensaje de fallo si no son numeros
  103.       lcd.print("Fallo sensor DHT");
  104.     }
  105.    
  106.     else
  107.     {
  108.       // Mostramos mensaje con valores actuales de humedad y temperatura, asi como maximos y minimos de cada uno de ellos
  109.      
  110.       // Presentamos la humedad y temperatura a través del monitor serie
  111.       Serial.print("\nTemperatura: ");
  112.       Serial.print(t);
  113.       Serial.println("C\t");
  114.       Serial.print("Humedad relativa: ");
  115.       Serial.print(h);
  116.       Serial.print("%\n");
  117.      
  118.       // Presentamos la humedad y temperatura en el LCD 1602
  119.       lcd.clear();
  120.       lcd.setCursor(0,0);
  121.       lcd.print(">Temperatura ");
  122.       lcd.print(t);
  123.       lcd.print("C");
  124.       lcd.setCursor(0,1);
  125.       lcd.print(">Humedad ");
  126.       lcd.print(h);
  127.       lcd.print("%");
  128.      
  129.       delay(2000);
  130.      
  131.       // Comprobacion de maximos y minimos de temperatura y humedad    
  132.       if (maxt<t)
  133.         maxt=t;
  134.       if (t<mint)
  135.         mint=t;
  136.       if (maxh<h)
  137.         maxh=h;
  138.       if (h<minh)
  139.         minh=h;
  140.      
  141.       // Presentamos los máximos y mínimos a través del monitor serie
  142.       Serial.print("Max T: ");
  143.       Serial.print(maxt);
  144.       Serial.print("C  ");
  145.       Serial.print("Min T: ");
  146.       Serial.print(mint);
  147.       Serial.println("C\t");
  148.       Serial.print("Max H: ");
  149.       Serial.print(maxh);
  150.       Serial.print("%  ");
  151.       Serial.print("Min H: ");
  152.       Serial.print(minh);
  153.       Serial.print("%\n");
  154.      
  155.        // Presentamos los máximos y mínimos en el LCD 1602
  156.       lcd.clear();
  157.       lcd.setCursor(0,0);
  158.       lcd.print(">TM:");
  159.       lcd.print(maxt);
  160.       lcd.print("C  ");  
  161.       lcd.print(">tm:");
  162.       lcd.print(mint);
  163.       lcd.print("C");
  164.       lcd.setCursor(0,1);
  165.       lcd.print(">HM:");
  166.       lcd.print(maxh);
  167.       lcd.print("%  ");  
  168.       lcd.print(">hm:");
  169.       lcd.print(minh);
  170.       lcd.print("%");
  171.      
  172.       delay(2000);
  173.     }
  174.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement