Usando el Sensor de Temperatura Humedad DHT11.
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.
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.
La interfase IDE para el DHT Modificado queda como:
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.
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"); }
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