Conexión de sensores DHT11 y DHT22 a Arduino

Los sensores DHT11 y DHT22 son herramientas esenciales para medir la temperatura y la humedad en proyectos de electrónica. En este artículo, aprenderás cómo conectar estos sensores a un Arduino para obtener lecturas precisas y utilizar esta información en tus propios proyectos. ¡Sigue leyendo para descubrir cómo aprovechar al máximo estas potentes herramientas de medición!

¿Quiere registrar el clima en su invernadero, construir un sistema de control de humidores o realizar un seguimiento de los datos de temperatura y humedad para un proyecto de estación meteorológica? ¡El sensor de temperatura y humedad DHT11 o DHT22 de AOSONG podría ser justo lo que necesita!

Estos sensores están calibrados de fábrica y no requieren ningún componente externo para funcionar. Con sólo unas pocas conexiones y algo de código Arduino, puedes empezar a medir la humedad relativa y la temperatura de inmediato.

Proporcionan lecturas de temperatura y humedad con una precisión de un decimal, lo cual es una ventaja. El único inconveniente es que sólo proporcionan datos nuevos cada uno o dos segundos, pero dado el precio y el rendimiento, es difícil quejarse.

DHT11 frente a DHT22

El DHT11 y el DHT22 son los dos sensores más utilizados de la serie DHTxx. Parecen iguales y tienen el mismo pinout, pero sus especificaciones son diferentes.

De los dos, el DHT22 es más caro y sin duda tiene mejores especificaciones. El DHT22 puede medir temperaturas de -40°C a +125°C con una precisión de ±0,5°C, mientras que el DHT11 puede medir temperaturas de 0°C a 50°C con una precisión de ±2°C. Además, el sensor DHT22 puede medir la humedad relativa del 0 al 100 % con una precisión del 2 al 5 %, mientras que el sensor DHT11 solo puede medir la humedad relativa del 20 al 80 % con una precisión del 5 %.

Aquí están las especificaciones:

Conexión de sensores DHT11 y DHT22 a Arduino
Conexión de sensores DHT11 y DHT22 a Arduino
DHT11 DHT22
Tensión de funcionamiento 3 a 5V 3 a 5V
Corriente máxima de funcionamiento 2,5 mA máx. 2,5 mA máx.
Rango de humedad 20-80% / 5% 0-100% / 2-5%
Rango de temperatura 0-50°C/±2°C -40 a 80°C / ± 0,5°C
tasa de muestreo 1Hz (lee cada segundo) 0,5Hz (Leyendo cada 2 segundos)
altura 15,5 mm x 12 mm x 5,5 mm 15,1 mm x 25 mm x 7,7 mm
Ventaja Costo extremadamente bajo Más preciso

A pesar de que el DHT22 es más exacto y preciso y puede funcionar en un rango más amplio de temperaturas y humedad, hay tres áreas en las que el DHT11 supera completamente al DHT22: es más barato, más compacto y tiene una frecuencia de muestreo más alta. DHT11 mide una vez por segundo (o frecuencia de muestreo de 1 Hz), mientras que DHT22 toma una medición cada dos segundos (o frecuencia de muestreo de 0,5 Hz).

A pesar de estas diferencias, el voltaje de funcionamiento de ambos sensores está entre 3 y 5 voltios, con una corriente máxima de 2,5 mA (durante la conversión). La mejor parte es que los sensores DHT11 y DHT22 son intercambiables. Entonces, si crea su proyecto con un sensor, simplemente puede desconectarlo y reemplazarlo por otro. Es posible que sea necesario ajustar ligeramente su código, ¡pero el cableado seguirá siendo el mismo!

En el sensor DHT

Si retira la carcasa del sensor, encontrará un termistor NTC y un componente del sensor de humedad en el interior.

Conexión de sensores DHT11 y DHT22 a Arduino

El componente del sensor de humedad tiene dos electrodos con un sustrato que retiene la humedad (generalmente una sal o un polímero plástico conductor) entre ellos. A medida que aumenta la humedad, el sustrato absorbe vapor de agua, lo que libera iones y reduce la resistencia entre los dos electrodos. Este cambio de resistencia es proporcional a la humedad, que se puede medir para estimar la humedad relativa.

Conexión de sensores DHT11 y DHT22 a Arduino
Estructura interna del sensor de humedad.

El sensor también contiene un termistor NTC para medir la temperatura. Un termistor es un tipo de resistencia cuyo valor de resistencia varía con la temperatura.

Técnicamente, todas las resistencias son termistores en el sentido de que su resistencia cambia ligeramente con la temperatura, pero el cambio suele ser muy pequeño y difícil de medir.

Los termistores están diseñados para que su resistencia varíe mucho con la temperatura (100 ohmios o más por grado). El término «NTC» significa «coeficiente de temperatura negativo» y significa que la resistencia disminuye a medida que aumenta la temperatura.

Conexión de sensores DHT11 y DHT22 a Arduino
Termistor NTC con curva característica

El sensor también contiene un IC de 8 bits en el paquete SOIC-14. Este IC mide y procesa la señal analógica utilizando coeficientes de calibración almacenados, convierte la señal analógica en digital y genera una señal digital que contiene la temperatura y la humedad.

Distribución de pines DHT11 y DHT22

Los sensores DHT11 y DHT22 son relativamente fáciles de conectar. Tienen cuatro pines:

Conexión de sensores DHT11 y DHT22 a Arduino

VCC El pin suministra energía al sensor. Aunque el voltaje de alimentación está entre 3,3 V y 5,5 V, se recomienda un suministro de 5 V. Con una fuente de alimentación de 5V, el sensor se puede colocar a una distancia de hasta 20 metros. Con una tensión de alimentación de 3,3V, el sensor se puede colocar a una distancia de hasta 1 metro; de lo contrario, la caída de tensión de la red provocará errores de medición.

Datos El pin se utiliza para la comunicación entre el sensor y el microcontrolador.

CAROLINA DEL NORTE No conectado

Tierra es el pin de tierra.

Cableado de los sensores DHT11 y DHT22 a un Arduino

¡Ahora es el momento de conectar el sensor al Arduino!

Conectar sensores DHT a Arduino es sencillo. Tienen clavijas bastante largas con un paso de 0,1'', por lo que se pueden conectar fácilmente a cualquier placa. Conecte el pin VCC a los 5V del Arduino y el pin GND a tierra. Finalmente, conecte el pin de datos al pin digital n.° 8.

Para garantizar una comunicación adecuada entre el sensor y la MCU, también necesita agregar una resistencia pull-up de 10K entre la línea de datos y VCC (para mantener la señal ALTA). Si tiene una placa de conexión para el sensor, no necesita agregar una resistencia pull-up externa, ya que ya incluye una.

Conexión de sensores DHT11 y DHT22 a Arduino
Cableado de DHT11 a Arduino UNO
Conexión de sensores DHT11 y DHT22 a Arduino
Cableado de DHT22 a Arduino UNO

Ahora puedes cargar el código y ponerlo en funcionamiento.

Instalación de biblioteca

Los sensores DHTxx tienen su propio protocolo de transmisión de datos de un solo cable. Este protocolo requiere una sincronización precisa. Sin embargo, no tenemos que preocuparnos demasiado por eso ya que eso es lo que vamos a utilizar. biblioteca DHTlibque se encarga de casi todo.

Para instalar la biblioteca, navegue hasta Bosquejo > Incluir biblioteca > Administrar bibliotecas… Espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.

Conexión de sensores DHT11 y DHT22 a Arduino

Filtra tu búsqueda escribiendo 'dhlib'.Solo debe haber una entrada. Haga clic en él y luego seleccione «Instalar».

Conexión de sensores DHT11 y DHT22 a Arduino

Ejemplo 1 de Arduino: visualización de lecturas en el monitor serie

Después de instalar la biblioteca, copie y pegue este boceto en el IDE de Arduino. El siguiente boceto de prueba imprime los valores de temperatura y humedad relativa en el monitor de serie. Pruebe el boceto y lo repasaremos con más detalle.

#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object

void setup() 
{
	Serial.begin(9600);
}
void loop() 
{
	//Uncomment whatever type you're using!
	int readData = DHT.read22(dataPin); // DHT22/AM2302
	//int readData = DHT.read11(dataPin); // DHT11

	float t = DHT.temperature; // Gets the values of the temperature
	float h = DHT.humidity; // Gets the values of the humidity

	// Printing the results on the serial monitor
	Serial.print("Temperature = ");
	Serial.print
	Serial.print(" ");
	Serial.print((char)176);//shows degrees character
	Serial.print("C | ");
	Serial.print((t * 9.0) / 5.0 + 32.0);//print the temperature in Fahrenheit
	Serial.print(" ");
	Serial.print((char)176);//shows degrees character
	Serial.println("F ");
	Serial.print("Humidity = ");
	Serial.print(h);
	Serial.println(" % ");
	Serial.println("");

	delay(2000); // Delays 2 secods
}

Después de cargar el boceto, debería ver el siguiente resultado en el monitor serie.

Conexión de sensores DHT11 y DHT22 a Arduino
Salida al monitor serie

Explicación del código:

El boceto comienza con la integración de la biblioteca DHT. Luego especificamos el número de pin Arduino al que está conectado el pin de datos de nuestro sensor y creamos un objeto DHT.

#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object

En la configuración inicializamos la comunicación serie.

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

En el bucle utilizamos el read22(dataPin) Función para leer el DHT22. Esta función utiliza el número de pin de datos del sensor como parámetro. Si está trabajando con DHT11, debe usarlo read11() Función; Todo lo que necesitas hacer es comentar la segunda línea.

//Uncomment whatever type you're using!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11

Ahora podemos obtener los valores de humedad y temperatura accediendo a las propiedades del objeto DHT mediante el punto . Notación.

float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity

El objeto DHT devuelve la temperatura en grados Celsius (°C). La conversión a Fahrenheit (°F) se puede convertir fácilmente usando la siguiente fórmula:

t(°F) =T(ºC) × 9/5 + 32

//print the temperature in Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);

Ejemplo 2 de Arduino: visualización de lecturas en la pantalla LCD

Si está construyendo su propia incubadora o un proyecto similar, necesitará una pantalla LCD de 16 × 2 caracteres en lugar de un monitor en serie para mostrar las lecturas actuales de temperatura y humedad. Entonces, en este ejemplo, además de los sensores DHT11 y DHT22, también conectamos la pantalla LCD al Arduino.

Así es como se ve el resultado.

Conexión de sensores DHT11 y DHT22 a Arduino
Mediciones de temperatura y humedad en LCD.

Si no está familiarizado con las pantallas LCD de 16×2 caracteres, debería leer el siguiente tutorial.

LECTURAS SUGERIDAS

Conexión de sensores DHT11 y DHT22 a Arduino
Conexión de un módulo LCD de 16 × 2 caracteres a Arduino
El Serial Monitor es una forma práctica de mostrar datos de un Arduino, pero ¿qué sucede si desea que su proyecto sea portátil y muestre…

alambrado

A continuación, conecte la pantalla LCD como se muestra a continuación.

Conexión de sensores DHT11 y DHT22 a Arduino
Cableado DHT11 y LCD de 16×2 caracteres con Arduino UNO
Conexión de sensores DHT11 y DHT22 a Arduino
Cableado DHT22 y LCD de 16×2 caracteres con Arduino UNO

código arduino

El siguiente boceto muestra los valores de temperatura y humedad relativa en la pantalla LCD de 16×2 caracteres. Este boceto es similar al anterior excepto que los valores están impresos en la pantalla LCD.

#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>
#define dataPin 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;

void setup() 
{
	lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
}

void loop() 
{
	int readData = DHT.read22(dataPin);
	float t = DHT.temperature;
	float h = DHT.humidity;
	lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
	lcd.print("Temp.: "); // Prints string "Temp." on the LCD

	//Print temperature value in Celcius and Fahrenheit every alternate cycle
	if(showcelciusorfarenheit)
	{
		lcd.print
		lcd.print(" ");
		lcd.print((char)223);//shows degrees character
		lcd.print("C");
		showcelciusorfarenheit = false;
	}
	else
	{
		lcd.print((t * 9.0) / 5.0 + 32.0); // print the temperature in Fahrenheit
		lcd.print(" ");
		lcd.print((char)223);//shows degrees character
		lcd.print("F");
		showcelciusorfarenheit = true;
	}
	
	lcd.setCursor(0,1);
	lcd.print("Humi.: ");
	lcd.print(h);
	lcd.print(" %");
	delay(5000);
}
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Conexión de sensores DHT11 y DHT22 a Arduino

¿Quieres llevar un registro del clima en tu invernadero, construir un sistema de control de humedad para un humidor, o seguir los datos de temperatura y humedad para un proyecto de estación meteorológica? El Sensor de Temperatura y Humedad DHT11 o DHT22 de AOSONG podría ser la elección perfecta para ti.

Diferencias entre DHT11 y DHT22

El DHT11 y el DHT22 son los dos sensores más utilizados en la serie DHTxx. Se ven algo iguales y tienen el mismo diseño de pines, pero sus especificaciones son diferentes.

En cuanto a especificaciones, el DHT22 es más caro y sin duda tiene mejores características. El DHT22 puede medir temperaturas de -40°C a +125°C con una precisión de ±0.5°C, mientras que el DHT11 puede medir temperaturas de 0°C a 50°C con una precisión de ±2°C. Además, el sensor DHT22 puede medir la humedad relativa de 0 a 100% con una precisión de 2-5%, mientras que el sensor DHT11 solo puede medir la humedad relativa de 20 a 80% con una precisión de 5%.

Especificaciones:

  • DHT11:
  • · Voltaje de Operación: 3 a 5V
  • · Corriente de Operación Máxima: 2.5mA máx.
  • · Rango de Humedad: 20-80% / 5%
  • · Rango de Temperatura: 0-50°C / ± 2°C
  • · Tasa de Muestreo: 1 Hz (muestra cada segundo)
  • DHT22:
  • · Voltaje de Operación: 3 a 5V
  • · Corriente de Operación Máxima: 2.5mA máx.
  • · Rango de Humedad: 0-100% / 2-5%
  • · Rango de Temperatura: -40 a 80°C / ± 0.5°C
  • · Tasa de Muestreo: 0.5Hz (muestra cada 2 segundos)

A pesar de que el DHT22 es más preciso, exacto y capaz de operar en un rango más amplio de temperatura y humedad, hay tres áreas donde elDHT11 supera por completo al DHT22: es más asequible, más compacto y tiene una tasa de muestreo más alta.

Estructura Interna del Sensor

Si quitas la carcasa del sensor, encontrarás un termistor NTC y un componente sensor de humedad en su interior.

El componente sensor de humedad tiene dos electrodos con un sustrato que retiene la humedad (generalmente sal o polímero conductor). A medida que la humedad aumenta, el sustrato absorbe el vapor de agua, lo que resulta en la liberación de iones y una disminución de la resistencia entre los dos electrodos. Este cambio en la resistencia es proporcional a la humedad, que puede medirse para estimar la humedad relativa.

El sensor también incluye un termistor NTC para medir la temperatura. Un termistor es un tipo de resistor cuya resistencia varía con la temperatura. Los termistores están diseñados para que su resistencia cambie drásticamente con la temperatura. El término «NTC» significa «Coeficiente de Temperatura Negativo», lo que significa que la resistencia disminuye a medida que la temperatura aumenta.

Esquema de Pines de DHT11 y DHT22

Los sensores DHT11 y DHT22 son bastante fáciles de conectar. Tienen cuatro pines:

  • VCC: proporciona alimentación al sensor.
  • Data: se utiliza para la comunicación entre el sensor y el microcontrolador.
  • NC: no se conecta.
  • GND: es el pin de tierra.

Conexión de Sensores DHT11 y DHT22 a Arduino

Conectar los sensores DHT a Arduino es sencillo. Tienen pines con una longitud razonable que permite conectarlos fácilmente a cualquier protoboard. Conecta el pin VCC a los 5V de Arduino y el pin GND a tierra. Finalmente, conecta el pin Data al pin digital #8.

Para garantizar una comunicación adecuada entre el sensor y el microcontrolador, debes agregar una resistencia pull-up de 10K entre la línea de datos y VCC (para mantener la señal en ALTO). Si tienes una placa de pruebas para el sensor, no necesitas agregar una resistencia pull-up externa, ya que ya contiene una.

Instalación de la Biblioteca

Los sensores DHTxx tienen su propio protocolo de transferencia de datos de un solo cable. Este protocolo requiere un temporizado preciso. Sin embargo, no tenemos que preocuparnos demasiado por esto, ya que utilizaremos la biblioteca DHTlib, que maneja casi todo.

Para instalar la biblioteca, ve a Sketch > Include Library > Manage Libraries… Espera a que el Administrador de Bibliotecas descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.

Filtra tu búsqueda ingresando ‘dhtlib’. Debería haber una única entrada. Haz clic en ella y elige Instalar.

Ejemplo de Arduino 1 – Mostrar Lecturas en el Monitor Serial

Después de instalar la biblioteca, copia y pega este sketch en el IDE de Arduino. Este sketch de prueba imprimirá los valores de temperatura y humedad relativa en el monitor serial. Prueba el sketch y luego lo revisaremos con más detalle.

«`cpp
#include
#define dataPin 8 // Define el número de pin al que está conectado el sensor
dht DHT; // Crea un objeto DHT

void setup()
{
Serial.begin(9600);
}
void loop()
{
//Elimina el comentario del tipo que estás usando!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11

float t = DHT.temperature; // Obtiene los valores de la temperatura
float h = DHT.humidity; // Obtiene los valores de la humedad

// Imprimiendo los resultados en el monitor serial
Serial.print(«Temperatura = «);
Serial.print(t);
Serial.print(» «);
Serial.print((char)176);//muestra el caracter de grados
Serial.print(«C | «);
Serial.print((t * 9.0) / 5.0 + 32.0);//muestra la temperatura en Fahrenheit
Serial.print(» «);
Serial.print((char)176);//muestra el caracter de grados
Serial.println(«F «);
Serial.print(«Humedad = «);
Serial.print(h);
Serial.println(» % «);
Serial.println(«»);

delay(2000); // Retrasa 2 segundos
}
«`

Después de subir el sketch, deberías ver la siguiente salida en el monitor serial.

Explicación del Código:

El sketch comienza incluyendo la biblioteca DHT. Luego, especificamos el número de pin de Arduino al que está conectado el pin Data de nuestro sensor y creamos un objeto DHT.

«`cpp
#include
#define dataPin 8 // Define el número de pin al que está conectado el sensor
dht DHT; // Crea un objeto DHT
«`

En la función setup, inicializamos la comunicación serial.

«`cpp
void setup() {
Serial.begin(9600);
}
«`

En el loop, usamos la función read22(dataPin) para leer el DHT22. Esta función toma como parámetro el número de pin Data del sensor. Cuando trabajamos con el DHT11, debes usar la función read11(); para hacerlo, solo debes quitar el comentario de la segunda línea.

«`cpp
//Elimina el comentario del tipo que estás usando!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
«`

Ahora podemos recuperar los valores de humedad y temperatura accediendo a las propiedades del objeto DHT utilizando la notación de punto.

«`cpp
float t = DHT.temperature; // Obtiene los valores de la temperatura
float h = DHT.humidity; // Obtiene los valores de la humedad
«`

El objeto DHT devuelve la temperatura en grados Celsius (°C). Es fácil convertirlo a Fahrenheit (°F) usando la siguiente fórmula:

T(°F) = T(°C) × 9/5 + 32

«`cpp
//muestra la temperatura en Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);
«`

Ejemplo de Arduino 2 – Mostrar Lecturas en un LCD

Si estás construyendo un incubador u un proyecto similar, necesitarás una pantalla LCD de caracteres 16×2 en lugar de un monitor serial para mostrar los niveles actuales de temperatura y humedad. Por lo tanto, en este ejemplo, conectaremos también el LCD a Arduino además de los sensores DHT11 y DHT22.

El resultado se ve así:

Si no estás familiarizado con las pantallas LCD de caracteres 16×2, considera leer el siguiente tutorial:

Interfaz de módulo LCD 16×2 con Arduino

El Monitor Serial es una forma conveniente de ver los datos de un Arduino, pero ¿qué pasa si quieres llevar tu proyecto contigo y ver…

Conexiones

A continuación, conecta el LCD como se muestra a continuación.

Código Arduino

La siguiente es una referencia sobre cómo se verá y se comportará el codigo Arduino con la finalidad de mostrar lecturas sobre la temperatura y la humedad en el LCD.

«`cpp
#include // incluye la biblioteca LiquidCrystal
#include
#define dataPin 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Crea un objeto LCD. Parámetros: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;

void setup()
{
lcd.begin(16,2); // Inicializa la interfaz con la pantalla LCD y especifica las dimensiones (ancho y alto) del display
}

void loop()
{
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // Establece la ubicación donde se mostrará el texto en la LCD
lcd.print(«Temp.: «); // Muestra el texto «Temp.» en el LCD

//Muestra el valor de temperatura en Celsius y Fahrenheit en ciclos alternados
if(showcelciusorfarenheit)
{
lcd.print(t); // Muestra el valor de temperatura del sensor
lcd.print(» «);
lcd.print((char)223);//muestra el caracter de grados
lcd.print(«C»);
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0); // Muestra la temperatura en Fahrenheit
lcd.print(» «);
lcd.print((char)223);//muestra el caracter de grados
lcd.print(«F»);
showcelciusorfarenheit = true;
}

lcd.setCursor(0,1);
lcd.print(«Humi.: «);
lcd.print(h);
lcd.print(» %»);
delay(5000);
}
«`

Este sketch mostrará los valores de temperatura y humedad relativa en la pantalla LCD de caracteres 16×2. Este sketch es similar al anterior, excepto que los valores se imprimen en el LCD.

4 comentarios en «Conexión de sensores DHT11 y DHT22 a Arduino»

Deja un comentario