DHT22 AM2302 Sensor de temperatura y humedad
Encontrará el DHT22 detrás de la puerta 15 del calendario de adviento de AZ DHT22 y en la versión de tres unidades. Con este sensor es posible medir la humedad y la temperatura del aire ambiente. Tiene cuatro contactos que se utilizan para suministrar energía de 3.3V a 6V y para transmisión de datos. La asignación de pines se ve así si observa el sensor con el lado etiquetado de la cuadrícula:
La asignación de pines es la siguiente:
Código PIN |
función |
1 |
VDD (voltaje +) |
2 |
Señal de datos |
3 |
no utilizado |
4 |
GND (voltaje -) |
Es posible que ya conozca el sensor DHT11, que es muy parecido. Sin embargo, este proporciona una precisión menor (sin números de coma flotante), así como rangos de valores de medición más pequeños.
Consulte la ficha de datos para obtener más detalles. Se puede encontrar una descripción de cómo conectar el sensor a un microcontrolador Uno aquí o aquí (los enlaces también están en la Página de la tienda disponible).
El calendario de adviento AZ ya contenía los microcontroladores Uno y Nano, así como la pantalla LCD con I²C-Backpack. Quiero mostrarle cómo puede leer tres sensores DHT juntos y mostrarlos en la pantalla.
Puede tener varios terrarios o querer mostrar los valores de varias habitaciones de forma centralizada. Eche otro vistazo a las contribuciones de Adviento a las puertas tres, cuatro y cinco para obtener información sobre el uso de los componentes.
Nota: la longitud máxima del cable entre el sensor y el microcontrolador no se especifica en las hojas de datos. Debería ser posible utilizar cables de más de 15 m sin ningún problema. Se puede encontrar información sobre el bus de datos de 1-Wire, p. Ej. aquí.
Los sensores, la pantalla y el microcontrolador están conectados de la siguiente manera:
Se requieren resistencias pull-up para las conexiones a los pines de datos con el fin de obtener un nivel de voltaje claro. La biblioteca, cuya instalación mostraré a continuación, enciende las resistencias pull-up internas. La biblioteca Adafruit DHT también funciona de esta manera. Si está usando una biblioteca diferente que no usa los pull-ups internos, debe usar resistencias externas. Como regla general, se utilizan 4,7 kOhms o 10 kOhms como se muestra aquí.
Según la hoja de datos, se recomienda un condensador de 100 nF entre VDD y GND en los sensores, que no se utilizaron aquí. Elegí deliberadamente el tablero en este diagrama de circuito de Fritzing para señalar nuevamente que las pistas externas pueden estar interrumpidas en el medio. Para ello, vuelva a consultar la contribución de Adviento a la puerta número uno.
Para poder utilizar la pantalla a través de la interfaz I²C, utilizo la biblioteca LiquidCrystal_I2Cque puede instalar a través de la gestión de la biblioteca. Esta es una variante extendida de la biblioteca LiquidCrystal:
Puede encontrar varias bibliotecas para DHT22 ingresando DHT en la búsqueda. Elegí DHTNEW porque puede diferenciar automáticamente entre las variantes de sensor.
Se puede encontrar información sobre la biblioteca aquí.
Después de la instalación, algunos bocetos de muestra están disponibles nuevamente. Le recomiendo HelloWorld-Sketch para la pantalla I²C y el dhtnew_minimum-Sketch para el sensor DHT. Usé esto como base. Los ejemplos de la pantalla no son muy extensos. Dado que la biblioteca es muy similar a la biblioteca "normal" LiquidCrystal , puede echar un vistazo a los ejemplos allí. Excepto por la inicialización, todo debería funcionar de la misma manera.
Aquí sigue el código fuente que creé para mostrar la humedad (en%) y la temperatura (en ° C) en la pantalla de dos líneas. Obtuve el símbolo de ° C en línea con el Generador de caracteres personalizados LCD . Esto me permitió usar ° C como símbolo y me ahorró espacio en la pantalla. Además, puedo mostrarle una vez más cómo puede usar sus propios personajes.
Aquí está el código fuente:
#include <dhtnew.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
DHTNEW mySensor_A(6);
DHTNEW mySensor_B(7);
DHTNEW mySensor_C(8);
const int maxSensors = 3;
unsigned long changeIntervall = 2000;
unsigned long changeTime = 0;
String line_1;
String line_2;
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
// https://maxpromer.github.io/LCD-Character-Creator/
// Definition eigenes Zeichen fuer das Display
byte grad[] = {
B11000,
B11011,
B00100,
B00100,
B00100,
B00100,
B00100,
B00011
};
void setup()
{
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.createChar(0, grad);
}
void loop()
{
// nicht-blockierendes Intervall
if (millis() - changeTime > changeIntervall) {
// Sensorwerte auslesen
mySensor_A.read();
mySensor_B.read();
mySensor_C.read();
// Ausgabe Serieller Monitor
Serial.println(" \t 1\t 2\t 3");
Serial.print("HUM in %: \t");
Serial.print(mySensor_A.getHumidity(), 1);
Serial.print("\t");
Serial.print(mySensor_B.getHumidity(), 1);
Serial.print("\t");
Serial.println(mySensor_C.getHumidity(), 1);
Serial.print("TEM in °C: \t");
Serial.print(mySensor_A.getTemperature(), 1);
Serial.print("\t");
Serial.print(mySensor_B.getTemperature(), 1);
Serial.print("\t");
Serial.println(mySensor_C.getTemperature(), 1);
Serial.print("\n");
// Ausgabe LCD
// formatierte Zeilen erzeugen:
line_1 = ("% ") + String(mySensor_A.getHumidity(), 1) + (" ")
+ String(mySensor_B.getHumidity(), 1) + (" ")
+ String(mySensor_C.getHumidity(), 1);
line_2 = (" ") + String(mySensor_A.getTemperature(), 1) + (" ")
+ String(mySensor_B.getTemperature(), 1) + (" ")
+ String(mySensor_C.getTemperature(), 1);
// auf dem Display ausgeben:
lcd.setCursor(0,0);
lcd.print(line_1);
lcd.setCursor(0,1);
// Custom character:
lcd.printByte(0);
lcd.setCursor(1,1);
lcd.print(line_2);
changeTime = millis ();
}
}
Los tres sensores se leen y se muestran en el monitor en serie y en la pantalla LCD. Esto sucede "sin interrupción" en intervalos de 2 segundos. Esto significa que puede insertar código de programa adicional que puede ejecutarse de tal manera que no tenga que esperar a que se lean los sensores.
Nota: Los sensores DHT deben consultarse en un ciclo de no menos de dos segundos.
También puede encontrar el código fuente aquí como descarga
Le deseamos un Feliz Adviento.
Andreas Wolter
para Blog AZ-Delivery