Sensor DHT11 con Arduino

Sensor DHT11.

El sensor DHT11 permite la medición simultánea de temperatura y humedad. Su procesador interno facilita el proceso de medición al proporcionar resultados digitales, lo que lo hace compatible con microcontroladores como el que se encuentra en cualquier placa de Arduino. Este sensor se distingue por su encapsulado de plástico azul y sus limitadas especificaciones, particularmente en cuanto a rango y precisión de medición.

En este artículo te mostraré cómo utilizar el sensor DHT11 en conjunto con Arduino. Comenzaremos explorando sus características fundamentales y luego desarrollaremos un proyecto simple de Arduino que involucra este sensor.

¿Qué mide el sensor DHT11?

Como se adelantó anteriormente, el sensor DHT11 permite la medición simultánea de temperatura y humedad. La temperatura puede medirse en un rango de 0 a 50 grados Celsius, con una precisión de 2 grados Celsius, mientras que la humedad puede medirse en un rango de 20 a 80%, con una precisión del 5%. Su frecuencia de muestreo es de 1 muestra por segundo (1 Hz).

El DHT11 se considera un sensor bastante básico y se recomienda su uso en proyectos educativos, de prueba o en aplicaciones donde no se requiera una precisión extrema en las mediciones.

Ejemplo de utilización del DHT11 con Arduino

Este sensor lo podemos adquirir de dos formas distintas. De manera individual, que incluye únicamente el sensor DHT11, o integrado en una placa de circuito impreso (PCB). En el caso de que sólo tengamos el sensor este tiene 4 pines.

Los pines de la versión individual del DHT11 son:

  • VCC: Alimentación
  • I/O: Transmisión de datos
  • NC: No conectado, pin sin uso
  • GND: Conexión a tierra

En este caso en el que sólo tenemos el sensor, el fabricante especifica que se debe incorporar una resistencia de pull-up entre la alimentación y el pin de datos.

Cableado típico para utilizar el sensor DHT11.

De esta forma la conexión con Arduino quedaría como se muestra a continuación.

Montaje de un sensor DHT11 con Arduino.

En el caso de que el sensor se encuentre en un PCB, este ya incluye la resistencia de pull-up. En esta versión del sensor, los pines son:

  • GND: Conexión a tierra
  • DATA: Transmisión de datos
  • VCC: Alimentación

Por tanto, en este caso, la conexión con Arduino quedaría como se muestra a continuación.

Montaje de un sensor DHT11 en PCB con Arduino.

El sensor DHT11 utiliza un sistema de comunicación bidireccional propio a través de un solo conductor, utilizando señales temporizadas.

En cada transmisión de datos, el sensor envía un total de 40 bits en un intervalo de 4 milisegundos. Estos 40 bits corresponden a 2 bytes para la medición de humedad, 2 bytes para la medición de temperatura, y un byte adicional para la comprobación de errores (8 bits de datos integrales de humedad, 8 bits de datos decimales de humedad, 8 bits de datos integrales de temperatura, 8 bits de datos decimales de temperatura, y 8 bits para la suma de verificación).

Para hacer la lectura podemos tener en cuenta el funcionamiento del sensor y leer directamente los datos. Sin embargo, lo más común es utilizar alguna librería que ya esté implementada para leer este tipo de sensor. Una muy utilizada es la de Adafruit. Para instalarla lo más sencillo es utilizar el propio Ide de Arduino como se muestra en la imagen siguiente.

Instalación de librería DHT sensor library con Arduino IDE.

Una vez que tenemos la librería instalada podemos leer los datos obtenidos con el sensor conectado como se explicó anteriormente. Para esto se puede utilizar el siguiente código.

 1// Ejemplo de Arduino para utilizar el sensor DHT11
 2// Más información: https://www.3dpellet.com
 3// incluimos la librería 
 4#include "DHT.h"
 5
 6
 7// definimos el pin de Arduino que vamos a utilizar
 8const int DHTPin = 5;
 9
10// Creamos el objeto dht con el que vamos a medir
11// la temperatura y la humedad
12DHT dht(DHTPin, DHT11);
13
14void setup() {
15  Serial.begin(9600);
16  // Iniciamos el objeto dht
17  dht.begin();
18}
19
20void loop() {
21  // Esperamos algunos segundos entre mediciones
22  delay(2000);
23
24  // Leemos la humedad y la temperatura
25  float h = dht.readHumidity();
26  float t = dht.readTemperature();
27
28  // Si alguna de las variables no se ha leído
29  // correctamente imprimimos un error de lectura
30  if (isnan(h) || isnan(t)) {
31    Serial.println("Error al leer el sensor DHT11");
32    return;
33  }
34
35  Serial.print("Humedad: ");
36  Serial.print(h);
37  Serial.print(" % ");
38  Serial.print("Temperatura: ");
39  Serial.print(t);
40  Serial.println(" *C");
41}

Si te ha gustado nuestro contenido ayúdanos suscribiéndote o dejando tu like en nuestro canal de YouTube.

Play Video: Keynote (Google I/O '18)