Capteur de température et d'humidité DHT22 AM2302
Derrière la 15ème porte du calendrier de l'avent AZ, vous trouverez le DHT22 et ceci en trois versions. Avec ce capteur, il est possible de mesurer l'humidité et la température de l'air ambiant. Il dispose de quatre contacts, qui sont utilisés pour l'alimentation électrique de 3,3V à 6V et pour la transmission de données. La répartition des broches se présente comme suit, si vous regardez le capteur avec le côté de la grille marquée:
La répartition des broches est la suivante :
Code PIN |
fonction |
1 |
VDD (tension +) |
2 |
Signal de données |
3 |
non utilisé |
4 |
GND (tension -) |
Vous connaissez peut-être déjà le capteur DHT11, qui est similaire. Cependant, ce capteur offre une précision moindre (pas de nombres à virgule flottante) et des plages de mesure plus petites.
Pour plus de détails, veuillez vous référer à la fiche technique. Une description de la manière de connecter le capteur à un microcontrôleur Uno peut être trouvée ici ou ici (les liens sont également disponibles sur la page du magasin).
Dans le calendrier de l'avent de AZ, il y avait déjà le microcontrôleur Uno et Nano, ainsi que l'écran LCD avec un compartiment I²C. Je veux leur montrer comment on peut lire trois capteurs DHT ensemble et les afficher sur l'écran.
Vous pouvez gérer plusieurs niveaux de terrariums ou vouloir afficher de façon centralisée les valeurs de plusieurs pièces. Pour plus d'informations sur l'utilisation des composants, consultez les messages de l'Avent pour les portes 3, 4 et 5.
Remarque : la longueur maximale des câbles entre le capteur et le microcontrôleur n'est pas spécifiée dans les fiches techniques. L'utilisation de longueurs de câble supérieures à 15 m devrait être possible sans problème. Des informations sur le bus de données 1-Wire peuvent être trouvées par exemple ici.
Les capteurs, l'écran et le microcontrôleur sont reliés comme suit :
Des résistances de tirage (pll-up) sont nécessaires pour les connexions aux broches de données afin de fournir un niveau de tension unique. La bibliothèque que je montre ci-dessous met en marche les résistances internes de pull-up. La bibliothèque DHT d'Adafruit fonctionne également de cette manière. Si vous utilisez une autre bibliothèque qui ne repose pas sur les pull-ups internes, vous devez alors utiliser des résistances externes. Habituellement, on utilise 4,7 kOhm ou, comme ici sur la photo, 10 kOhm.
Selon la fiche technique, un condensateur de 100 nF est recommandé entre le VDD et le GND au niveau des capteurs, qui n'ont pas été utilisés ici. J'ai choisi la grille de ce schéma de friction délibérément pour souligner une fois de plus que les voies extérieures sont peut-être interrompues au milieu. Pour cela, regardez encore le poste de l'Avent pour la porte numéro 1.
Pour utiliser l'affichage via l'interface I²C, j'utilise la bibliothèque LiquidCrystal_I2C, que vous pouvez installer via la gestion de la bibliothèque. Il s'agit d'une variante étendue de la bibliothèque LiquidCrystal :
Pour la DHT22, vous pouvez trouver différentes bibliothèques si vous entrez DHT dans la recherche. J'ai choisi DHTNEW parce qu'il peut distinguer automatiquement les différentes variantes de capteurs.
Des informations sur la bibliothèque peuvent être trouvées ici.
Après l'installation, il y a de nouveau quelques exemples de croquis disponibles. Je recommande le croquis HelloWorld pour l'affichage I²C et le croquis dhtnew_minimum pour le capteur DHT. Je les ai utilisés comme base. Les exemples pour l'exposition ne sont pas très détaillés. Mais comme la bibliothèque est fortement basée sur la bibliothèque "normale" de LiquidCrystal, vous pouvez jeter un coup d'œil aux exemples qui s'y trouvent. À l'exception de l'initialisation, tout devrait fonctionner de la même manière.
Voici le code source que j'ai créé pour afficher l'humidité (en %) et la température (en °C) sur l'écran à deux lignes. Le caractère pour °C que j'ai créé en ligne avec le générateur de caractères personnalisés LCD. Cela m'a permis d'utiliser °C comme un seul caractère et d'économiser de l'espace sur l'écran. C'est aussi une autre façon de vous montrer comment utiliser des caractères personnalisés.
Voici le code source:
#include
#include
#include
#if défini (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;
non signé long changeIntervall = 2000;
unsigned long changeTime = 0;
String line_1;
String line_2;
LCD LiquidCrystal_I2C (0x27,16,2); // définit l'adresse LCD sur 0x27 pour un affichage de 16 caractères et 2 lignes
// https://maxpromer.github.io/LCD-Character-Creator/
// Définition des propres caractères pour l'affichage
degré d'octet [] = {
B11000,
B11011,
B00100,
B00100,
B00100,
B00100,
B00100,
B00011
};
void setup ()
{
Serial.begin (115200);
lcd.init ();
LCD rétro-éclairage ();
lcd.createChar (0, degré);
}
boucle vide ()
{
// intervalle non bloquant
if (millis () - changeTime> changeIntervall) {
// Lire les valeurs des capteurs
mySensor_A.read ();
mySensor_B.read ();
mySensor_C.read ();
// Sortie moniteur série
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 en ° 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");
// sortie LCD
// créer des lignes formatées:
line_1 = ("%") + String (mySensor_A.getHumidity (), 1) + ("")
+ Chaîne (mySensor_B.getHumidity (), 1) + ("")
+ Chaîne (mySensor_C.getHumidity (), 1);
line_2 = ("") + String (mySensor_A.getTemperature (), 1) + ("")
+ Chaîne (mySensor_B.getTemperature (), 1) + ("")
+ Chaîne (mySensor_C.getTemperature (), 1);
// sortie sur l'écran:
lcd.setCursor (0,0);
lcd.print (ligne_1);
lcd.setCursor (0,1);
// Caractère personnalisé:
lcd.printByte (0);
lcd.setCursor (1,1);
lcd.print (ligne_2);
changeTime = millis ();
}
}
Les trois capteurs sont lus et émis sur le moniteur série et sur l'écran LCD. Cela se passe "sans interruption" dans un cycle de 2 secondes. Cela signifie que vous pouvez insérer un autre code de programme qui peut fonctionner de telle sorte qu'il ne doit pas attendre que les capteurs soient lus.
Note : Les capteurs DHT doivent être actionnés à une fréquence d'au moins deux secondes.
Vous pouvez également télécharger le code source ici
Nous vous souhaitons une bonne saison de l'Avent.
Andreas Wolter
pour AZ-Delivery Blog