Sensores DHTxx

5
218
Sensores de la familia DTH.
Una de las experiencias más gratificantes de viajar, es notar el cambio de temperatura y humedad que existe entre un lugar y otro. La temperatura hace referencia a la sensación que tiene el cuerpo humano con el calor, mientras que la humedad se denomina como la cantidad de agua adherida al cuerpo. Como en Panama Hitek somos ingenieros con sed de curiosidad y nos encanta aprender cómo funcionan diversos sensores y componentes electrónicos, en este caso les compartiré muchos de los conocimientos que he adquirido al utilizar los sensores de temperatura y humedad de la familia DHT, ampliamente utilizados en sistemas embebidos.

Panama Hitek, ya les ha traído algunos artículos relacionados con los sensores DHT. Si aún no los has visto, te invito a que le des un vistazo a la siguiente lista.

El objetivo principal de este artículo es enseñarles cómo establecer la comunicación con cualquier sensor de la familia DHT obteniendo así, los valores de temperatura y humedad correspondientes. Los sensores DHT son considerablemene utilizados en aplicaciones de electrónica casera debido a su bajo costo económico. No obstante, en términos de respuesta, son lentos. El ¿por qué? lo explicaré en el siguiente artículo.

Actualmente, la familia DHT cuenta con dos tipos de sensores: el DHT11 y DHT22. Estos dispositivos, poseen en su interior, un sensor capacitivo y un termistor, para medir la humedad y temperatura respectivamente. Una de las ventajas de los sensores DHT, es que a diferencia del común LM335, el tipo de comunicación es digital, es decir, la señal que proporcionan consiste en la transmisión de impulsos eléctricos que pueden ser leídos por medio de una entrada digital en un microcontrolador en vez de una entrada analógica.

El DHT11 y el DHT22 poseen ciertas diferencias las cuales listo a continuación:

DHT11

  • Super barato
  • Margen de error de 5% para lecturas de humedad relativa entre 20 y 80%
  • Margen de error de ± 2 C para temperaturas entre 0 y 50 C.
  • Lecturas de temperatura y humedad enteras.
  • Frecuencia máxima de muestreo: 1 Hz.
  • Tamaño: 15.5mm x 12mm x 5.5mm

DHT22

  • Es barato
  • Recomendable para mediciones de humedad desde 0 a 100 % con un mergen de error de 2-5%
  • Recomendable para lecturas de temperaturas desde -40 a 125 C con un margen de error de ± 0.5
  • Lecturas de temperatura y humedad decimales.
  • Frecuencia máxima de muestreo: 0.5 Hz
  • Tamaño: 15.1mm x 25mm x 7.7mm

A pesar de tener varias diferencias, ambos sensores trabajan a voltajes de operación en el rango de 3 a 5 V, y necesitan una corriente máxima de operación de 2.5 mA. Dentro de las diferencias listadas, se observa que el DHT22 al ser un sensor más preciso, es un poco más caro que el DHT11. Los niveles de voltaje y corriente de operación pueden ser fácilmente suministrable por un microcontrolador, de allí su facilidad de implementación.

Una vez que has conocido las diferencias entre estos dos sensores. Daré paso a conocer la asignación de pines en estos sensores. El DHT11 y DHT22, cada uno cuenta con cuatro patas, como se presenta a continuación:

Pinaje de la familia de sensores DTHxx
Pinaje de la familia de sensores DTHxx

La asignación de pines es la siguiente:

  • Vcc (Conectado al voltaje de alimentación)
  • Data out (Pin donde se establece la comunicación con el sensor y el MCU)
  • Sin conexión
  • Tierra

Un esquemático de cómo debe ir conectado este sensor con una placa arduino es presentado a continuación:

Circuito con DTH11 y Arduino.

Este momento es propicio para indicar que independientemente de cualquier modelo que vayas a utilizar, ya sea el DHT11 o DHT22, la conexión no varía.

Después de conocer la asignación de pines y el funcionamiento de cada uno de ellos, procedo entonces a explicar cómo se establece la comunicación para la adquisición de los datos de temperatura y humedad. Para ello, es necesario buscar, leer la hoja del fabricante y analizar el proceso para la petición de datos. Para explicar esta fase, he decidido utilizar la data del fabricante del sensor DHT11. El diagrama de tiempo para la petición de datos se presenta en la siguiente Figura:

Diagrama de datos para el sensor DHT11

Como primer punto, quiero destacar que cada proceso de comunicación durará al menos 4 ms. Las líneas de color negro indican que la señal es proveniente del MCU, mientras que las grises son procedentes del sensor DHT11. Se observa primeramente que el MCU debe estar en un estado lógico alto. Se recomienda el uso de una resistencia de pull-up entre 4,7k a 10k. El inicio de la comunicación se da cuando hay una transición del estado lógico alto a bajo con una duración de al menos 18 ms. Este proceso se conoce como “señal de inicio” y es la forma que utiliza el sensor para saber cuándo el MCU desea obtener los datos. Una vez se da esta transición, el MCU debe cambiar al estado lógico alto y esperar la respuesta del sensor. Para esto hay que dejar el último estado entre 20 a 40 us. Cuando el sensor DHT está listo para responder, éste mandará una señal en estado lógico bajo al MCU que durará al menos 80 us. Cuando se haya enviado la señal de respuesta al MCU, entonces esté procederá a enviar secuencialmente los datos de temperatura y humedad. El orden en el cual el sensor DHT11 envía los datos es el siguiente:

  • 8 bits que representan la parte entera de la humedad
  • 8 bits que representan la parte decimal de la humedad
  • 8 bits que representan la parte entera de la temperatura
  • 8 bits que representan la parte decimal de la temperatura
  • 8 bits de checksum como bit de paridad

Los ocho bits de checksum se utilizan como un mecanismo de detección de errores (FEC – Forward Error Detection). Este byte representará la suma de cada uno de los valores de temperatura y humedad enviados por el sensor. Si aún no queda claro, haré un ejemplo. Imagina que el sensor DHT11 registró una temperatura de 31 C y 79% de humedad. Los bits que éste debería enviar al MCU serán los siguientes:

0b01011010 | 0b00000000 | 0b00011111 | 0b00000000 | 0b01111001

Como observas, el sensor envía un total de 40 bits, es decir, 5 bytes. El último byte indica el checksum y debe coincidir con la suma de los cuatro bytes anteriores:

0b01011010 + 0b00000000 + 0b00011111 + 0b00000000 = 0b01111001.

La sumatoria la hemos hecho en binario, pero también se puede hacer en hexadecimal:

5A + 1F = 79

A pesar que esto ya se había mencionado, es preciso comentar acerca de los dos bytes que representan la parte decimal de la temperatura y humedad. Al tomar como ejemplo el sensor DHT11, éste únicamente proporcionará valores enteros. Por tal razón se dice que el DHT22 es más preciso ya que éste utilizará estos dos bytes para representar la parte decimal de cada una de las medidas.

El siguiente paso es identificar cómo el sensor le comunica al MCU cuándo se ha enviado un dígito binario ya sea uno ó cero.

Para enviar un dígito binario uno, el sensor presentará a su salida digital la siguiente señal:

Envío de dígito binario 1 en DHT11

En tal caso, que el sensor desee transmitir un dígito binario cero, la señal proveniente de su salida digital será:

Envío de dígito binario 0 en DHT11

Lo que se ha visto en las gráficas, se puede resumir en una tabla, la cual presento a continuación:

Primer intervalo Segundo intervalo
Dígito binario ‘1’ 50 us en estado bajo 70 us en estado alto
Dígita binario ‘0’ 50 us en estado bajo 26-28 us en estado alto

En base a las figuras mostradas y la tabla presentada, cada transisión de bit empezará con un estado bajo de 50 us, y terminará con un estado alto. En donde la duración de este estado, dependerá si el bit enviado es un uno ó un cero. Para finalizar la comunicación, es necesario esperar a que el sensor envíe al menos 50 us un estado lógico bajo, para después liberar el bus.

Como has leído, establecer la comunicación con el sensor DHT11 a través de cualquier MCU es bastante sencillo. Muchos de los sensores a la venta para la medición de cualquier tipo de variables, utilizados en aplicaciones con Arduino poseen características similares. Espero que les haya gustado este primer artículo. En el segundo, les mostraré cómo crear un código de programación que permitirá la comunicación con este sensor utilizando Python o C++.

Artículos que dieron paso a mi inspiración:

  • Gerardo Sanchez

    El DHT22 aguanta altas temperaturas? no se desintegra al ponerlo en un secador con 70°C

    • El DHT22 es un sensor que personalmente no he utilizado a temperaturas por encima de los 40 C. Éste debería soportar temperaturas de hasta 150 C. Pero como ya te digo, no lo he probado. Faltaría probar :D.

    • Antony García González

      La hoja de datos del fabricante recomienda que no se superen los 60ºC y que por cada 2 horas a dicha temperatura se mantenga el sensor 5 horas a temperatura ambiente. Ver: http://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

  • Buen tutorial y gracias por mencionarnos en tu inspiración, Saludos desde Internetdelascosas.cl

    • Muchas gracias. Lo he preparado con mucho cariño. Su artículo ha sido bastante bueno, por tal razón hay que colocarlo en las fuentes.