Sensor de Temperatura Humedad DHT11.

Usando el Sensor de Temperatura Humedad DHT11.

DHT11_Pins

Este sensor permite tomar lecturas de temperatura y humedad.

Para su correcta utilización es necesario instalar la librería ubicada en el sitio “https://github.com/adafruit/DHT-sensor-library” o bien aqui.

La liga nos conduce a la página siguiente, bajamos la librería usando el boton Download Zip.

DHTSenLibraryDownload

Una vez descargado vamos a extraer su contenido y la carpeta generada se cambia el nombre de la carpeta a DHT y se copia y pega en el folder “/home/sketchbook/libraries“. (Nótese que no se uso la opción de “Add Lybraries” del menú “Tools” de Arduino)

Una vez en el folder la Interfase IDE reconoce la librería, para verificar seguimos la ruta Sketch->Import Library y en la ventana que se abre en la sección de Contributed aparece DHT.

En el menú File -> Examples -> DHT

Tomando el ejemplo DHTTest.

// Ejemplo de prueba del sensor de temperatura humedad DHT11
// Escrito por ladyada, public domain (traducido y adaptado por J. Herrera)

#include "DHT.h"
#define DHTPIN 2     // El pin 2 del sensor se conecta al pin 2 de las entradas digitales de Arduino uno.
#define DHTTYPE DHT11

// Conectar el  pin 1 (el primero de la izquierda) del sensor a +5V
// Conectar el  pin 2 del sensor al pin 2 del Arduino
// Conectar el pin 4 (el primero de la derecha) del sensor a GROUND
// Conectar una resistencia de 10K del pin 2 (datos) al pin 1 (power) del sensor.

// Inicializando el sensor DHT para 16mhz Arduino (Normal)
DHT dht(DHTPIN, DHTTYPE);

// NOTA: Si se quiere trabajar con un procesador mas rápido como el Arduino Due o //Teensy, es necesario incrementar el threshold.
// Esto se puede hacer usando un tercer parámetro para éste.
// El valor adecuado está en función de la rapidez del CPU pero en general  a mayor //rapidez mas grande el valor del parámetro. Por ejemplo un procesador a 84 Mhz
//DHT dht(DHTPIN, DHTTYPE, 30);

void setup()

{
Serial.begin(9600);
Serial.println("DHT11 test!");
dht.begin();
}

void loop()

{
// Espera unos segundos entre lecturas.
delay(2000);

// La lectura de la temperatura y humedad toma alrededor de 250 milisegundos!
// Las lecturas del sensor pueden estar el alto por 2 segundos ‘old’ (esto ya que es un //procesador muy lento)
float h = dht.readHumidity();
// Lectura de temperature en Celsius
float t = dht.readTemperature();
// Lectura de temperatura en Fahrenheit
float f = dht.readTemperature(true);
// Verifica si las lecturas fueron correctas o se dio un timeout (intenta nuevamente).

if (isnan(h) || isnan(t) || isnan(f))

{
Serial.println("No se obtuvieron valores adecuados del  sensor DHT!");
return;
}

// Calculando el índice de calor; es la relación Grados Farenheith / Grados Celcius

float hi = dht.computeHeatIndex(f, h);

Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t ");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Indice Calorifico: ");
Serial.print(hi);
Serial.println(" *F\ ");
}

Al abrir el Monitor serial se puede observar lo siguiente.

monitorserialresultados DHT

La interfase IDE para el DHT Modificado queda como:

Screenshot from 2015-01-10 19:27:56

y el alambrado de la siguiente manera:

y así

 Conectando el LCD2004 al proyecto anterior

Usaremos la librería para pantalla controlada por I2C de 20 x 4 sainsmart2004 desarrollada por Salvador Ruiz frostcode

Diagrama de bloque en el que se muestra el LCD y El controlador PCF8574A pero que en el caso de la tarjeta que compre es PCF8574T.

PCF8574 I2C schematic

El código (sketch) modificado usando el anterior y el propuesto por Salvador queda:

NOTA: En lugar de una Arduino uno se uso una Arduino Mega 2560.

// Ejemplo de prueba del sensor de temperatura humedad DHT11
// Escrito por ladyada, public domain (traducido y adaptado por J. Herrera)
// Modificado para mandar datos a pantalla LCD Seinsmart LCD2004

#include "DHT.h"
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x3F,20,4);

#define DHTPIN 2     // El pin 2 del sensor se conecta al pin 2 de las entradas digitales de Arduino uno.
#define DHTTYPE DHT11

// Conectar el  pin 1 (el primero de la izquierda) del sensor a +5V
// Conectar el  pin 2 del sensor al pin 2 del Arduino
// Conectar el pin 4 (el primero de la derecha) del sensor a GROUND
// Conectar una resistencia de 10K del pin 2 (datos) al pin 1 (power) del sensor.

// Inicializando el sensor DHT para 16mhz Arduino (Normal)
DHT dht(DHTPIN, DHTTYPE);

// NOTA: Si se quiere trabajar con un procesador mas rápido como el Arduino Due o //Teensy, es necesario incrementar el threshold.
// Esto se puede hacer usando un tercer parámetro para éste.
// El valor adecuado está en función de la rapidez del CPU pero en general  a mayor //rapidez mas grande el valor del parámetro. Por ejemplo un procesador a 84 Mhz
//DHT dht(DHTPIN, DHTTYPE, 30);

void setup()
{
lcd.backlight();
lcd.init();
dht.begin();
}

void loop()

{
 // Espera unos segundos entre lecturas.
 delay(3000);
 // La lectura de la temperatura y humedad toma alrededor de 250 milisegundos!
 // Las lecturas del sensor pueden estar el alto por 2 segundos ‘old’ (esto ya que es un //procesador muy lento)
 float h = dht.readHumidity();
 // Lectura de temperature en Celsius
 float t = dht.readTemperature();
 // Lectura de temperatura en Fahrenheit
 float f = dht.readTemperature(true);
 // Verifica si las lecturas fueron correctas o se dio un timeout (intenta nuevamente).

 if (isnan(h) || isnan(t) || isnan(f))
 {
  lcd.clear();
  lcd.print("No se obtuvieron valores adecuados del  sensor DHT!");
  return;
 }
 // Calculando el índice de calor; es la relación Grados Farenheith / Grados Celcius
 float hi = dht.computeHeatIndex(f, h);

 lcd.clear();
 lcd.print("Humedad: ");
 lcd.print(h);
 lcd.print(" %");
 lcd.setCursor(0,1);
 lcd.print("Temp: ");
 lcd.setCursor(9,1);
 lcd.print(t);
 lcd.print(" *C ");
 lcd.setCursor(9,2);
 lcd.print(f);
 lcd.print(" *F");
 lcd.setCursor(0,3);
 lcd.print("Ind Cal: ");
 lcd.print(hi);
 lcd.print(" *F");
}
Sensor DHT11, MEGA 2560, LCD2004 Sainsmart

En el código anterior se utilizo una tarjeta Arduino Mega 2560, la cual tiene definidas entradas para SDA y SCL, para Uno también se encuentran definidas las entradas de acuerdo al siguiente diagrama

LCD to A1 wiring