Quieres llevar un registro del clima en tu invernadero, construir un sistema de control de humedad 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 perfecto para tu proyecto!.

Estos sensores vienen calibrados de fábrica y no requieren ningún componente externo para funcionar. Con solo unas pocas conexiones y un poco de código Arduino, puede comenzar a medir la temperatura y la humedad relativa 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 solo proporcionan datos nuevos cada segundo o dos, pero por el precio y el rendimiento, es difícil quejarse.

DHT11 vs DHT22

El DHT11 y el DHT22 son los dos sensores más utilizados de la serie DHTxx. Se ven más o menos 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:

A pesar de que el DHT22 es más exacto, preciso y capaz de operar en un rango más amplio de temperatura y humedad, hay tres áreas en las que el DHT11 supera por completo al DHT22: es más económico, más compacto y tiene una tasa de muestreo más alta.  El DHT11 toma una lectura por segundo (o frecuencia de muestreo de 1 Hz), mientras que DHT22 toma una lectura cada dos segundos (o frecuencia de muestreo de 0,5 Hz).

A pesar de estas diferencias, la tensión (voltaje) de funcionamiento de ambos sensores oscila 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, lo que significa que, si construye su proyecto con uno, simplemente puede desconectarlo y reemplazarlo por otro. Es posible que su código deba modificarse ligeramente, ¡pero el cableado sigue siendo el mismo!

Dentro del sensor DHT

Si retiras la carcasa del sensor, encontrarás un termistor NTC y un componente de detección de humedad en el interior.

El componente de detección de humedad tiene dos electrodos con un sustrato que retiene la humedad (generalmente una sal o un polímero plástico conductor) en el medio. A medida que aumenta la humedad, el sustrato absorbe vapor de agua, lo que provoca 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 se puede medir para estimar la humedad relativa.

Estructura interna del sensor de humedad

El sensor también incluye un termistor NTC para medir la temperatura. Un termistor es un tipo de resistencia cuya 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 cambie drásticamente con la temperatura (en 100 ohmios o más por grado). El término “NTC” significa “Coeficiente de temperatura negativo”, lo que significa que la resistencia disminuye a medida que aumenta la temperatura.

Termistor NTC con curva característica

El sensor también incluye un IC empaquetado SOIC-14 de 8 bits. 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 emite una señal digital que contiene la temperatura y la humedad.

Configuración de pines DHT11 y DHT22

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

VCC : pin proporciona energía al sensor. A pesar de que la tensión de alimentación oscila entre 3,3 V y 5,5 V, se recomienda una alimentación de 5 V. Con una fuente de alimentación de 5V, el sensor se puede colocar hasta a 20 metros de distancia. Con tensión de alimentación de 3,3 V, el sensor se puede colocar hasta a 1 metro de distancia; de lo contrario, la caída de tensión de la línea provocará errores de medición.

Data : pin se utiliza para la comunicación entre el sensor y el microcontrolador.

NC : No conectar

GND : es el pin de tierra.

Cableado de sensores DHT11 y DHT22 a un Arduino

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

La conexión de sensores DHT a Arduino es sencilla. Tienen pines bastante largos de paso de 0.1′, lo que les permite conectarse fácilmente a cualquier placa de pruebas. Conecta el pin VCC a los 5V de Arduino y el pin GND a tierra. Finalmente, conecte el pin de datos al pin digital 8.

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

Cableado de DHT11 a Arduino UNO

Cableado de DHT22 a Arduino UNO

Ahora está listo para cargar algo de código y hacerlo funcionar.

Instalación de la biblioteca

Los sensores DHTxx tienen su propio protocolo de transferencia de datos de un solo cable. Este protocolo requiere una sincronización precisa. Sin embargo, no tenemos que preocuparnos demasiado por esto, porque usaremos la biblioteca DHTlib , que maneja casi todo.

Para instalar la biblioteca, ve a Sketch > Incluir biblioteca > Administrar bibliotecas… Espere a que el Administrador de bibliotecas descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.

Filtra tu búsqueda ingresando ‘dhtlib’. Solo debe haber una sola entrada. Haga clic en eso y luego elija Instalar.

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

Después de instalar la biblioteca, copia y pegua este ejemplo en el IDE de Arduino. El siguiente ejemplo de prueba imprimirá los valores de temperatura y humedad relativa en el monitor en serie. Prueba el ejemplo y luego lo repasaremos con más detalle.

#include <dht.h>
#define dataPin 8 Define el número de pin al que se encuentra el sensor conectado
dht DHT; // Crea un objeto DHT

void setup() 
{
	Serial.begin(9600);
}
void loop() 
{
	¡Descomenta cualquier 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

	// Impresión de los resultados en el monitor serie
	Serial.print("Temperature = ");
	Serial.print(t);
	Serial.print(" ");
	Serial.print((char)176);//Muestra el carácter de los grados
	Serial.print("C | ");
	Serial.print((t * 9.0) / 5.0 + 32.0);imprimir la temperatura en Fahrenheit
	Serial.print(" ");
	Serial.print((char)176);//Muestra el carácter de los grados
	Serial.println("F ");
	Serial.print("Humidity = ");
	Serial.print(h);
	Serial.println(" % ");
	Serial.println("");

	delay(2000); Retrasos 2 segundos
}

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

Salida en monitor serie

Explicación del código:

El ejemplo comienza incluyendo la biblioteca DHT. A continuación, especificamos el número de pin de Arduino al que está conectado el pin de datos de nuestro sensor y creamos un objeto DHT.

#include <dht.h>
#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);
}

En el bucle, usamos la read22(dataPin) función para leer el DHT22. Esta función toma como parámetro el número de pin de datos del sensor. Cuando trabaje con DHT11, debe usar la read11() función; para hacerlo, solo necesita descomentar la segunda línea.

¡Descomenta cualquier 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 usando la. notación de puntos.
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 convertir a Fahrenheit (°F) usando la siguiente fórmula:

imprimir la temperatura en Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);

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

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

Así es como se ve la salida.

Mediciones de temperatura y humedad en LCD

Si no estás familiarizado con las pantallas LCD de 16×2 caracteres, considera leer el tutorial a continuación Módulo LCD de 16 × 2 caracteres con Arduino

El Serial Monitor es una forma conveniente de ver datos de un Arduino, pero ¿qué sucede si desea que su proyecto sea portátil y ver…

Conexionado

A continuación, conecta la pantalla LCD como se muestra:

Cableado de DHT11 y LCD de 16×2 caracteres a Arduino UNO

Cableado de DHT22 y LCD de 16×2 caracteres a Arduino UNO

Código Arduino

El sketch a continuación mostrará los valores de temperatura y humedad relativa en la pantalla LCD de 16×2 caracteres. Este ejemplo es similar al anterior, excepto que los valores están impresos en la pantalla LCD.

#include <LiquidCrystal.h> incluye la biblioteca LiquidCrystal
#include <dht.h>
#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 de la pantalla LCD y especifica las dimensiones (anchura y altura) de la pantalla
}


void loop() 
{
	int readData = DHT.read22(dataPin);
	float t = DHT.temperature;
	float h = DHT.humidity;
	lcd.setCursor(0,0); Establece la ubicación en la que se mostrará el texto posterior escrito en la pantalla LCD
	lcd.print("Temp.: "); Imprime la cadena "Temp." en la pantalla LCD

	Imprimir el valor de temperatura en Celcius y Fahrenheit cada ciclo alternativo
	if(showcelciusorfarenheit)
	{
		lcd.print(t); Imprime el valor de temperatura del sensor
		lcd.print(" ");
		lcd.print((char)223);//Muestra el carácter de los grados
		lcd.print("C");
		showcelciusorfarenheit = false;
	}
	else
	{
lcd.print((t * 9.0) / 5.0 + 32.0);// imprimir la temperatura en Fahrenheit
		lcd.print(" ");
		lcd.print((char)223);//Muestra el carácter de los grados
		lcd.print("F");
		showcelciusorfarenheit = true;
	}
	
	lcd.setCursor(0,1);
	lcd.print("Humi.: ");
	lcd.print(h);
	lcd.print(" %");
	delay(5000);
}

Fuente: https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/