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.

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écision
Température (en °c)
[0°C – 50°C]+/- 2 °C
Humidité (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 Arduino
  • Vcc : 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 librairie

Pour 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 librairie

Une 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érature
Led rougeSupérieur à 27 °C
Led orangecompris entre 17°C et 27°C
Led vertecompris entre 17°C et 5°C
Led 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.

logo python