Le capteur de température et d'humidité DHT17 est un capteur populaire et bon marché qui peut être utilisé sur une plage assez large de températures et d'humidité relative. Voyons comment le connecter à l'Arduino et comment en lire les données.
Nécessaire
- -Arduino;
- - Capteur de température et d'humidité DHT17.
Instructions
Étape 1
Ainsi, le capteur DHT11 a les caractéristiques suivantes:
- plage d'humidité relative mesurée - 20..90% avec une erreur jusqu'à 5%, - plage de températures mesurées - 0..50 degrés Celsius avec une erreur allant jusqu'à 2 degrés;
- temps de réponse aux changements d'humidité - jusqu'à 15 secondes, température - jusqu'à 30 secondes;
- la période d'interrogation minimale est de 1 seconde.
Comme vous pouvez le constater, le capteur DHT11 n'est pas très précis, et la plage de température ne couvre pas les valeurs négatives, ce qui ne convient guère aux mesures en extérieur en saison froide sous notre climat. Cependant, son faible coût, sa petite taille et sa facilité d'utilisation compensent en partie ces inconvénients.
La figure montre l'aspect du capteur et ses dimensions en millimètres.
Étape 2
Considérez le schéma de connexion du capteur de température et d'humidité DHT11 au microcontrôleur, en particulier à l'Arduino. Sur l'image:
- MCU - microcontrôleur (par exemple, Arduino ou similaire) ou ordinateur monocarte (Raspberry Pi ou similaire);
- DHT11 - capteur de température et d'humidité;
- DATA - bus de données; si la longueur du câble de connexion du capteur au microcontrôleur ne dépasse pas 20 mètres, il est alors recommandé de tirer ce bus vers l'alimentation avec une résistance de 5, 1 kOhm; si plus de 20 mètres, alors une autre valeur appropriée (plus petite).
- VDD - alimentation du capteur; tensions admissibles de ~ 3,0 à ~ 5,5 volts CC; si une alimentation ~ 3,3 V est utilisée, il est conseillé d'utiliser un fil d'alimentation ne dépassant pas 20 cm.
L'un des fils du capteur - le troisième - n'est connecté à rien.
Le capteur DHT11 est souvent vendu comme un ensemble complet avec la tuyauterie nécessaire - résistance pull-up et condensateur de filtrage.
Étape 3
Mettons en place le schéma envisagé. Je vais également connecter un analyseur logique au circuit afin que je puisse étudier le chronogramme de la communication avec le capteur.
Étape 4
Allons-y en toute simplicité: téléchargez la bibliothèque du capteur DHT11 (lien dans la section "Sources"), installez-la de manière standard (en la décompressant dans le répertoire \bibliothèques\ de l'environnement de développement Arduino).
Écrivons un croquis si simple. Chargeons-le dans Arduino. Cette esquisse produira les messages RH et Température lus par le capteur DHT11 vers le port série de l'ordinateur toutes les 2 secondes.
Étape 5
Maintenant, à l'aide du chronogramme obtenu à partir de l'analyseur logique, voyons comment s'effectue l'échange d'informations.
Le capteur de température et d'humidité DHT11 utilise une interface série à fil unique pour communiquer avec le microcontrôleur. Un échange de données dure environ 40 ms et contient: 1 bit de requête du microcontrôleur, 1 bit de la réponse du capteur et 40 bits de données du capteur. Les données comprennent: 16 bits d'informations sur l'humidité, 26 bits d'informations sur la température et 8 bits de contrôle.
Regardons de plus près le chronogramme de la communication Arduino avec le capteur DHT11.
On peut voir sur la figure qu'il existe deux types d'impulsions: courte et longue. Les impulsions courtes dans ce protocole d'échange désignent des zéros, des impulsions longues - des uns.
Ainsi, les deux premières impulsions sont la demande de l'Arduino au DHT11 et, par conséquent, la réponse du capteur. Viennent ensuite 16 bits d'humidité. De plus, ils sont divisés en octets, haut et bas, haut à gauche. Autrement dit, dans notre figure, les données d'humidité sont les suivantes:
0001000000000000 = 00000000 00010000 = 0x10 = 16% HR.
Données de température similaires à:
0001011100000000 = 00000000 00010111 = 0x17 = 23 degrés Celsius.
Bits de contrôle - la somme de contrôle n'est que la somme de 4 octets de données reçus:
00000000 +
00010000 +
00000000 +
00010111 =
00100111 en binaire ou 16 + 23 = 39 en décimal.