sábado, 2 de marzo de 2019

Sensor de humedad y temperatura DHT-22, DHT-11


Los DHT22 y DHT11 son elementos que nos permiten detectar tanto la humedad como la temperatura, su popularidad es indiscutible y son muy empleados en el mundo de Arduino.




El DHT22 es el hermano mayor del DHT11 se dice por ahí que es mas preciso, con rangos de lectura mas amplios y algunas cosas mas... en mi experiencia lo que puedo decir es que los DHT22 tienen una vida media de 6 meses, mientras que los DHT11 que compre hace alrededor de 4 ó 5 años siguen funcionando.

Por su parte el precio de estos sensores oscila entre los 0,40€ para el DHT11 y los 3€ para los DHT22

Arduino cuenta con librerías para hacer uso de ellos con mucha comodidad. Hay que descargarla!!!

Por su parte la conexión es idéntica en ambos casos y sería algo así:


El valor de la resistencia puede oscilar entre 2,2KΩ y 10KΩ


Para mayor comodidad este sensor se suele vender con su shield, que nos va facilitar la conexión:




El de la izquierda cuenta con tres pines para la conexión directa a la Arduino: Positivo - señal - negativo.

Vamos a ver un código para comprobar su funcionamiento a través del serial:


/* ESQUEMA DE CONEXIONES - Compilación Arduino 1.8.1 14/03/2019
         
                      7-14v.                  +-----+ 
                  ____[PWR]___________________| USB |__
                 |                            +-----+  |
                 |         GND/RST2  [ ][ ]            |
                 |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |
                 |          5V/MISO2 [ ][ ]  A4/SDA[ ] | 
                 |                             AREF[ ] |
                 |                              GND[ ] |
                 | [ ]N/C                    SCK/13[ ] |
                 | [ ]IOREF                 MISO/12[ ] |
                 | [ ]RST                   MOSI/11[ ]~| 
                 | [ ]3V3    +---+               10[ ]~|   
    + DHT -----> | [ ]5v    -| A |-               9[ ]~| 
    - DHT -----> | [ ]GND   -| R |-               8[ ] |  
                 | [ ]GND   -| D |-                    |
                 | [ ]Vin   -| U |-               7[ ] |<-- Señal DHT
                 |          -| I |-               6[ ]~|   
                 | [ ]A0    -| N |-               5[ ]~|   
                 | [ ]A1    -| 0 |-               4[ ] |                  
                 | [ ]A2     +---+           INT1/3[ ]~| 
                 | [ ]A3                     INT0/2[ ] |
                 | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |   
                 | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |   
                 |            [ ] [ ] [ ]              |
                 |  UNO_R3    GND MOSI 5V  ____________/
                  \_______________________/
*/
#include "DHT.h" // Incluimos la libreria DHT
#define DHTPIN 7 // Conectado al pin de datos del sensor

//#define DHTTYPE DHT11 // descomentar para emplear DHT 11 
#define DHTTYPE DHT22 // comentar para emplear el DHT11
DHT dht(DHTPIN, DHTTYPE);

void setup() {
 Serial.begin(9600); 
 Serial.println("Iniciando DHT");
 dht.begin(); // Inicializa el sensor
}

void loop() {
   float hum = dht.readHumidity(); // asignamos el valor de humedad a nuestra variable hum
   float temp = dht.readTemperature();// asignamos el valor de temperatura a nuesta variable temp
   if (isnan(temp) || isnan(hum)) { // la funcion boolena isnan (isnotanumber), devuelve true si lo leido no es un numero
      Serial.println("ERROR al leer DHT");
   } else {
       Serial.print("Humedad: "); 
       Serial.print(hum);
       Serial.print(" %\t");
       Serial.print("Temperatura: "); 
       Serial.print(temp);
       Serial.println(" C");
      }
      delay(500);
}

La salida por Serial ...


y el conexionado ...



Como podemos ver, es de lo mas sencillo gracias a la librería DHT de Adafruit que podéis descargar AQUÍ MISMO