Introduction Le DHT11 (Digitale Température Humidité 11) est un capteur qui génère un signal digital en sortie codant une valeur de température et d’humidité mesurée en temps réel. Sommaire masquer 1 Introduction 1.1 Attention au température négative ! 1.2 Comment reproduire nos schémas Fritzing ? 2 Librairie DHT11 3 Afficher valeur d'humidité et température 4 Mini station Météo 5 Allumer des leds en fonction de la température 6 Pour aller plus loin : Contrôler votre composant avec Python Le capteur de température et d’humidité peut-être utilisé dans plein de domaine, que ça soit pour savoir la température extérieur, pour gérer l’arrosage d’une petite serre autonome… C’est pour cela que nous avons fait un petit tableau récapitulatif des caractéristiques du capteur : DHT11Valeur de fonctionnementPrécisionTempérature (en °c)[0°C – 50°C]+/- 2 °CHumidité (en %)[20% – 80%]+/- 5% Attention au température négative ! Comme vous avez pu voir dans le tableau, le capteur DHT11 ne peut pas mesurer des températures négative ! Attention donc en cas d’utilisation à l’extérieur ! Voici les différentes pins du capteur DHT11 :Signal : Permet d’envoyer la valeur à la carte ArduinoVcc : La tension d’alimentation (5V)GND : La masse Comment reproduire nos schémas Fritzing ? Pour pouvoir reproduire nos circuits sur Fritzing, vous devez avoir le composant capteur de température DHT11. Vous pouvez regarder notre tutoriel sur comment l’installer dans le logiciel ! Librairie DHT11 a) Installation de la librairiePour pouvoir compiler les programmes faisant fonctionner le capteur de température, vous allez avoir besoin de la librairie DHT11.C’est un dossier en .zip, donc pour l’installer, vous devez aller dans sketch, puis include library et add .zip library. Vous pouvez retrouver plus d’explication sur notre cours sur les librairies.b) Contenu de la librairieUne librairie n’est jamais obligatoire dans un programme. Elle permet de limiter la longeur du code et de créer des fonctions rendant plus facile la manipulation du composant. On va donc voir les différentes fonctions que propose la librairie DHT11 et surtout celle qui pourrait vous être utile : DHT_nonblocking( pin, type) : Fonction qui permet d’initialiser la librairie avec le bon capteur et la broche auquel il est assigné.measure( float *temperature, float *humidity ) : Permet de récupérer les valeurs de température et d’humiditéread_temperature( ) : Calcul de la température.read_humidity( ) : Calcul de l’humidité.read_nonblocking( ) : Fait en sorte que le capteur continu de lire la température et l’humidité en faisant des petites pauses pour refroidir et économiser de l’énergie. Afficher valeur d'humidité et température On va maitenant voir comment afficher la température et l’humidité sur le moniteur série.N’oubliez pas d’installer la librairie du capteur de température pour faire fonctionner le programme. #include <dht_nonblocking.h> // On appelle la librairie du capteur #define DHT_SENSOR_TYPE DHT_TYPE_11 // On définit que l'on a le DHT11 car la libraire fonctionne pour plusieurs capteur de température static const int capteur_temperature = 2; // On définit ou est branché le capteur de température DHT_nonblocking dht_sensor( capteur_temperature, DHT_SENSOR_TYPE ); // On initialise la librairie avec la bonne broche et le bon type de capteur void setup( ){ Serial.begin( 9600);} // On initialise le moniteur série. static bool measure_environment( float *temperature, float *humidite ){ // On créer une fonction pour récupérer la valeur static unsigned long pause_entre_mesure = millis( ); // On définit le temps avec lequel on va faire les mesures if( millis( ) - pause_entre_mesure > 3000ul ) { // On calcule la mesure toue les 4 secondes if( dht_sensor.measure( temperature, humidite ) == true ){ // On prends la nouvelle valeur si elle a évolué pause_entre_mesure = millis( ); return( true ); } } return( false );} void loop(){ float temperature; // On déclare une variable pour récupérer la valeur de la température float humidite; // On déclare une variable pour récupérer la valeur de la température if( measure_environment( &temperature, &humidite ) == true ) { // Si les valeurs ont changésdata:image/pjpeg;base64,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 // Affichage de la température Serial.print( "T = " ); Serial.print( temperature, 1 ); Serial.print( " deg. C, H = " ); // Affichage de l'humidité Serial.print( humidite, 1 ); Serial.println( "%" ); } } Voici ce que l’on peut voir sur le moniteur série : Mini station Météo Nous avons fait un projet de mini station météo ou le capteur DHT11 mesure la température et l’humidité. Ces deux valeurs sont ensuite affiché sur un écran 16×2. Vous pouvez retrouvez tout les détails de ce projet sur notre cours sur l’écran lcd 16×2. Allumer des leds en fonction de la température On va maintenant voir comment allumer différente led en fonction de la température mesuré par le capteur. On va pour cela utiliser 4 leds qui seront allumés en fonction de la température :LedTempératureLed rougeSupérieur à 27 °CLed orangecompris entre 17°C et 27°CLed vertecompris entre 17°C et 5°CLed bleuinférieur à 5°C Voici le schéma du circuit : #include <dht_nonblocking.h> // On appelle la librairie du capteur #define DHT_SENSOR_TYPE DHT_TYPE_11 // On définit que l'on a le DHT11 car la libraire fonctionne pour plusieurs capteur de température int led_bleu_broche = 7; // On assigne la LED bleu à la broche 7. int led_verte_broche = 4; // On assigne la LED verte à la broche 4. int led_orange_broche = 3; // On assigne la LED bleu à la broche 3. int led_rouge_broche = 2; // On assigne la LED bleu à la broche 2. static const int capteur_temperature = 13; // On définit ou est branché le capteur de température DHT_nonblocking dht_sensor( capteur_temperature, DHT_SENSOR_TYPE ); // On initialise la librairie avec la bonne broche et le bon type de capteur void setup( ){ Serial.begin( 9600); // On initialise le moniteur série. pinMode(led_bleu_broche, OUTPUT); // On assigne la LED bleu en sortie pinMode(led_verte_broche, OUTPUT); // On assigne la LED verte en sortie pinMode(led_orange_broche, OUTPUT); // On assigne la LED orange en sortie pinMode(led_rouge_broche, OUTPUT); // On assigne la LED rouge en sortie } static bool measure_environment( float *temperature, float *humidite ){ // On créer une fonction pour récupérer la valeur static unsigned long pause_entre_mesure = millis( ); // On définit le temps avec lequel on va faire les mesures if( millis( ) - pause_entre_mesure > 3000ul ) { // On calcule la mesure toue les 4 secondes if( dht_sensor.measure( temperature, humidite ) == true ){ // On prends la nouvelle valeur si elle a évolué pause_entre_mesure = millis( ); return( true ); } } return( false );} void loop(){ float temperature; // On déclare une variable pour récupérer la valeur de la température float humidite; // On déclare une variable pour récupérer la valeur de la température if( measure_environment( &temperature, &humidite ) == true ) { // Si les valeurs ont changésdata:image/pjpeg;base64,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 // Affichage de la température Serial.print( "T = " ); Serial.println( temperature, 1 ); if (temperature <=5) { digitalWrite(led_bleu_broche,HIGH); // On allume la LED bleu digitalWrite(led_verte_broche,LOW); // On éteint les autres leds digitalWrite(led_orange_broche,LOW); digitalWrite(led_rouge_broche,LOW); } if (5<temperature && temperature <=17) { digitalWrite(led_verte_broche,HIGH); // On allume la LED vert digitalWrite(led_bleu_broche,LOW); // On éteint les autres leds digitalWrite(led_orange_broche,LOW); digitalWrite(led_rouge_broche,LOW); } if (17<temperature && temperature <=27) { digitalWrite(led_orange_broche,HIGH); // On allume la LED orange digitalWrite(led_verte_broche,LOW); // On éteint les autres leds digitalWrite(led_bleu_broche,LOW); // digitalWrite(led_rouge_broche,LOW); // } if (27<temperature) { digitalWrite(led_rouge_broche,HIGH); // On allume la LED rouge digitalWrite(led_verte_broche,LOW); // On éteint les autres leds digitalWrite(led_orange_broche,LOW); digitalWrite(led_bleu_broche,LOW); } } } Pour aller plus loin : Contrôler votre composant avec Python Vous pouvez aussi contrôler votre capteur de température avec python. On a fait un cours où l’on affiche la température sur la console python.