Uso del sensor de temperatura y humedad DHT11 con Arduino

DHT11 es un componente bastante simple de usar. Tiene baja precisión y es bastante lento para leer, pero es lo suficientemente bueno para la mayoría de las aplicaciones de control de ambiente. Se compone de un sensor de humedad resistivo y un termistor de coeficiente negativo de temperatura (NTC), ambos controlados a través de un chip de micro-controlador de 8 bits. Este transforma los valores medidos a números a través de una línea de comunicación en serie. El micro-controlador también tiene los parámetros de calibración programados. El componente tiene cuatro patas o pines.

El pin 1 es la fuente de alimentación VCC que va desde 3,5 a 5,5 V de CC. Nótese que no es posible alimentarlo con 3.3V. El pin 2 es el de datos en serie, un bus serie de única línea. Pin 3 No lleva conexión. Y el pin 4 es tierra GND, o pata de alimentación negativa. El pin de datos debe tener una resistencia de pull-up de unos 5.1k según lo sugerido por el fabricante. Sin embargo, cualquier valor entre 4K7 y 10K va a funcionar bien. El rango de humedad de va desde el 20% al 90% de humedad relativa (HR). La precisión de la Humedad  es de +/- 5% de humedad relativa. El rango de medición de temperatura va de 0 a 50 °C. La exactitud de la temperatura es de +/- 2% °C.

Ver:

http://www.aosong.com/en/products-21.html
https://akizukidenshi.com/download/ds/aosong/DHT11.pdf
http://www.micro4you.com/files/sensor/DHT11.pdf
See also http://playground.arduino.cc/Main/DHT11Lib

Se puede comprar solo o incluido en un ladrillo o shield. En este caso se utiliza un shield e incluye la resistencia de pull-up de 10K. El shield tiene sólo tres pines. El pin 1 es de señal/datos. El Pin 2 es VCC, y el pin 3 es GND.

Hay otros sensores con mayor precisión como el DHT21 y DHT22. Los valores se envían sobre una sola línea digital a través de un protocolo. El protocolo de comunicación para  las DHT21 /22 es idéntico al de DHT11, solo que el formato de datos es diferente. Vamos a utilizar el ejemplo CII-LCD para mostrar humedad y temperatura a través de una pantalla LCD. Y se utilizará la biblioteca de Rob Tillaart DHTstable

https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTstable 0.1.13.

Descargar y descomprimir en el directorio de bibliotecas de el Arduino IDE. En este caso utilizamos un Arduino UNO Rev.3


LCD-DHT11 Project layout

Ahora cree un sketch con el siguiente código:

 

/** * Enrique Latorres LCD Temp Humid Demo */ #include <Wire.h> #include <LCD.h>; #include <LiquidCrystal_I2C.h> #define I2C_ADDR 0x3F // 0x3F is the I2C bus address for my unmodified module LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTstable 0.1.13 #include &lt;dht.h&gt; dht DHT; #define DHT11_PIN 7   //Pin to connect signal pin of DHT11 void setup() { lcd.setBacklightPin(3,POSITIVE); lcd.begin(16, 2); lcd.setBacklight(HIGH); lcd.clear(); lcd.setCursor(0,0); lcd.print(«Enrique Latorres»); lcd.setCursor(0,1); lcd.print(«LCDTempHumidDemo»); delay(3000); //Make sure you read my banner } void loop() { int chk = DHT.read11(DHT11_PIN); //Read DHT11 through the right pin switch (chk) { case DHTLIB_OK: lcd.clear(); lcd.setCursor(0,0); lcd.print(«Temp=»); lcd.print(DHT.temperature); lcd.print((char)223); lcd.print(«C»); lcd.setCursor(0,1); lcd.print(«Hum=»); lcd.print(DHT.humidity); lcd.print(«%»); break; case DHTLIB_ERROR_CHECKSUM: lcd.setCursor(0,0); lcd.print(«Checksum error»); break; case DHTLIB_ERROR_TIMEOUT: lcd.setCursor(0,0); lcd.print(«Time out error»); break; default: lcd.setCursor(0,0); lcd.print(«Unknown error»); break; } delay(1000); }

 

 

/**
* Enrique Latorres LCD Temp Humid Demo
*/
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x3F // 0x3F is the I2C bus address for my unmodified module
LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTstable 0.1.13
#include  
dht DHT;
#define DHT11_PIN 7   //Pin to connect signal pin of DHT11

void setup()
{
lcd.setBacklightPin(3,POSITIVE);
lcd.begin(16, 2);
lcd.setBacklight(HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enrique Latorres");
lcd.setCursor(0,1);
lcd.print("LCDTempHumidDemo");
delay(3000); //Make sure you read my banner
}

void loop()
{ 
int chk = DHT.read11(DHT11_PIN); //Read DHT11 through the right pin
switch (chk)
{
case DHTLIB_OK: 
lcd.clear();

lcd.setCursor(0,0);
lcd.print("Temp=");
lcd.print(DHT.temperature);
lcd.print((char)223);
lcd.print("C");

lcd.setCursor(0,1);
lcd.print("Hum=");
lcd.print(DHT.humidity);
lcd.print("%");

break;
case DHTLIB_ERROR_CHECKSUM: 
lcd.setCursor(0,0);
lcd.print("Checksum error"); 
break;
case DHTLIB_ERROR_TIMEOUT:
lcd.setCursor(0,0);
lcd.print("Time out error"); 
break;
default: 
lcd.setCursor(0,0);
lcd.print("Unknown error"); 
break;
}
delay(1000);
}

Compile, verifique y cargue el programa. Su Arduino debiera estar mostrando dos líneas el el display LCD.

Temp=19.00ºC
Hum=58.00%

Hay algunas funciones para agregar, como Punto de Rocío e Indice de Calor, que pueden ser encontradas en Internet y se pueden agregar a un proyecto con LCD de 4 líneas de estación de tiempo y clima. ;

DHT11-LCD project on

Espero que haya sido de su agrado.

Entradas relacionadas