Skip to main content

3.5 Temperatura y humedad

Vamos a utilizar dos sensores para medir estas variables: # DHT12 y su hermano pequeño DHT11. Aunque lo vamos a contar brevemente, te recomendamos esta página para saber más de estos dos sensores.

Medida de la temperatura y la humedad ambiente.

Realizar un montaje que mida temperatura y humedad mediante el sensor DHT11.

Para ello tendrás que realizar las conexiones necesarias para poder obtener los datos desde Arduino. Se trata de un sensor digital que utiliza 3 pines: Alimentación +5V, tierra/GND (-) y pin de datos (out) por donde se envían los datos de humedad y temperatura. A veces el sensor viene sobre 4 pines, en este caso uno de ellos no se conecta. Como las medidas de humedad y temperatura van por un solo pin, la información se transmite como un tren de pulsos en serie, por lo tanto, necesitamos un programa que "extraiga" eso dos datos de forma diferenciada. Para ello vamos a usar una librería referenciada por DHT11.h que se explica en la siguiente página. A través del monitor serie del IDE de Arduino podremos ver las medidas obtenidas.

ESQUEMA DHT11 :

Es un modelo "conectar y listo" que ya vienen con los cables preparados, pero si te fijas son en este orden : GND - 5V -NC - D2 donde NC significa NO CONECTADO y D2 son los datos

Lo conectamos en el Arduino sin necesidad de placa Protoboard:

utilizando cables macho-macho

Esquema de conexión:

Esquema DHT12

Es un sensor que necesita 3.3V pero si trabajas con 5V necesitas hacer este puente con una resistencia de más o menos 10K

O con la placa Protoboard

Fuente Cactus.io CC BY-NC-SA 3.0

Libreria DHT11.h

Para poder utilizar este dispositivo, necesitas esta librería, lo primero que tienes que hacerlo es descargarlo, puedes hacerlo desde este enlace de Drive, o desde este de CATEDU (zip - 4,29 KB), o simplemente buscando DHT11 libraryen Internet.

Una vez descargado, tienes que incorporarlo en tu librería, aquí tienes cómo hacerlo

Libreria DHT12.h

Para poder utilizar este dispositivo, necesitas esta librería, lo primero que tienes que hacerlo es descargarlo, puedes hacerlo desde este enlace, o desde este de CATEDU (zip - 4,49 KB) (zip - 4,29 KB), o simplemente buscando DHT12 library en Internet.

Una vez descargado, tienes que incorporarlo en tu librería, aquí tienes cómo hacerlo

Montaje 9 Medición T y H por puerto serie

Programa con DHT11:

Te proponemos este programa:

#include "DHT.h"
#define DHTPIN 2   
#define DHTTYPE DHT11   // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  dht.begin();
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Fallo al leer el sensor DHT11");
    return;
  }
  Serial.print("Humedad: "); 
  Serial.print(h);
  Serial.print(" \t");
  Serial.print("Temperatura: "); 
  Serial.print(t);
  Serial.println(" ºC ");
}

El resultado se puede ver en este vídeo, simplemente soplando nuestro vaho pasamos de 20% de humedad y 22ºC a 93% y 24ºC.

_Advertencia: Si lo hacéis con niños, enseguida se les ocurre ponerlo en el sobaco, menos mal que solo son 5V ;) _

Programa con DHT12

La librería de este sensor es más potente y nos puede decir la sensación térmica:

// Example sketch for DHT22 humidity - temperature sensor
// Written by cactus.io, with thanks to Adafruit for bits of their library. public domain

#include "cactus_io_DHT22.h"

#define DHT22_PIN 2     // what pin on the arduino is the DHT22 data line connected to

// For details on how to hookup the DHT22 sensor to the Arduino then checkout this page
// http://cactus.io/hookups/sensors/temperature-humidity/dht22/hookup-arduino-to-dht22-temp-humidity-sensor

// Initialize DHT sensor for normal 16mhz Arduino. 
DHT22 dht(DHT22_PIN);
// Note: If you are using a board with a faster processor than 16MHz then you need
// to declare an instance of the DHT22 using 
// DHT22 dht(DHT22_DATA_PIN, 30);
// The additional parameter, in this case here is 30 is used to increase the number of
// cycles transitioning between bits on the data and clock lines. For the
// Arduino boards that run at 84MHz the value of 30 should be about right.

void setup() {
  Serial.begin(9600); 
  Serial.println("DHT22 Humidity - Temperature Sensor");
  Serial.println("RH\t\tTemp (C)\tTemp (F)\tHeat Index (C)\t Heat Index (F)");

  dht.begin();
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  dht.readHumidity();
  dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(dht.humidity) || isnan(dht.temperature_C)) {
    Serial.println("DHT sensor read failure!");
    return;
  }

  Serial.print(dht.humidity); Serial.print(" %\t\t");
  Serial.print(dht.temperature_C); Serial.print(" *C\t");
  Serial.print(dht.temperature_F); Serial.print(" *F\t");
  Serial.print(dht.computeHeatIndex_C()); Serial.print(" *C\t");
  Serial.print(dht.computeHeatIndex_F()); Serial.println(" *F");

  // Wait a few seconds between measurements. The DHT22 should not be read at a higher frequency of
  // about once every 2 seconds. So we add a 3 second delay to cover this.
  delay(3000);
}

El resultado es:

Montaje por LCD

Ahora vamos a conectarlo por LCD :

{% youtube %} https://www.youtube.com/watch?v=6J8PKruEcD4 {% endyoutube %}

Conexiones

Si tienes el DHT11 o si tienes el DH12 lo has visto ya Ahora añade el LCD con el I2C

Programa

En este caso lo hacemos con el DHT12 ya sabes que si utilizas DHT11 no mide la humedad y la sensación térmica

```cpp+lineNumbers:true

include

include

include "cactus_io_DHT22.h"

define DHT22_PIN 2 // what pin on the arduino is the DHT22 data line connected to

DHT22 dht(DHT22_PIN); LiquidCrystal_I2C lcd(0x3F,16,2); ////Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas

int trigPin = 8; int echoPin = 9; float duration; //tiempo de ida/vuelta float cm=0; //Para almacenar el valor obtenido en cm valor=0

void setup() {

// Inicializar el LCD lcd.init(); lcd.backlight(); //Encender la luz de fondo.

} void loop(){

dht.readHumidity(); dht.readTemperature();

lcd.setCursor(0, 0); // Escribimos el Mensaje en el LCD en una posición 1,0 lcd.print("H="); lcd.print(dht.humidity,0); lcd.print("% T="); lcd.print(dht.temperature_C,2); lcd.print("C"); lcd.setCursor(0, 1); // Escribimos el Mensaje en el LCD en una posición 1,0 lcd.print("SEN= "); lcd.print(dht.computeHeatIndex_C()); lcd.print(" C"); delay(3000); } ```

Processing

Es un programa similar al IDE de Arduino que has estado manejando hasta ahora, sólo cambia en un botón de PLAY y en otro de STOP. Es software abierto desarrollado en Java por Ben Fry y Casey Reas a raiz de una reflexiones en un congreso donde se detecto esta necesidad. Te lo puedes descargar de http://processing.org 

¿Para qué sirve?

Es muy común tener la necesidad te representar los datos que nos da Arduino en un entorno visual mucho más atractivo que el monitor serie que nos ofrece IDE Arduino. Si quieres saber las instrucciones que tiene y más información consulta esta página.

Saber el puerto de conexión

Para empezar a utilizar Processing con nuestro Arduino necesitamos saber en qué puerto se conecta, una forma fácil es cargar y ejecutar este código con el Arduino conectado y que liste los puerto, esta instrucción printArray(Serial.list()); nos lo puede decir 

Y el resultado puedes ver que sale abajo en la consola [0] "COM4" luego es el 0 en mi caso