Température et humidité avec Arduino

Câblage du capteur DHT11

Le capteur DHT11 (datasheet) offre la possibilité de mesurer à la fois la température et l’humidité. Il possède 4 broches numérotées de 1 à 4. La broche 3 n’est pas utilisée.Numérotation des broches du capteur DHT11

Pour l’alimentation de ce capteur :

  • la broche 1 du DHT11 est à relier au +5v de l’Arduino
  • la broche 4 du DHT11 est mettre à la masse de l’Arduino (GND)

Pour la mesure :

  • la broche 2 est à relier à l’entrée digitale 4 de l’Arduino
  • une résistance de 4,7  kΩ est à connecter entre la branche 5V et l’alimentation +5v du capteur DHT11
Branchement d'un écran Oled 0.96 et d'un capteur DHT11 sur Arduino

Installation d’une bibliothèque pour le capteur DHT11

Afin de nous faciliter la gestion du capteur DHT11, nous allons installer la bibliothèque Arduino SimpleDHT. Pour cela, dans le menu « Outils », choisir « Gérer les bibliothèques ». Puis, dans la fenêtre des bibliothèques qui s’affiche, saisir « DHT11 » dans la zone de recherche:

Recherche de la bibliothèque Arduino pour DHT11

Utilisez la barre de défilement pour descendre tout en bas et installez la bibliothèque « SimpleDHT by Winlin »:

Recherche et installation de la bibliothèque Arduino "SimpleDHT by Winlin"

Une fois cette bibliothèque installée, fermez cette fenêtre pour passer à la programmation.

Modification du code logiciel pour le capteur DHT11

Afin de faciliter la compréhension de la mise à jour de votre code logiciel, je vous propose d’insérer des sauts de ligne dans votre code pour obtenir le résultat suivant:

// Déclaration des librairies utilisées
#include "lcdgfx.h"


// Déclaration globales
DisplaySSD1306_128x64_I2C Afficheur_G(-1);


// Fonction de démarrage, s'exécute une seule fois:
void setup()
{
    /* Sélection de la fonte de 6x8 */
    Afficheur_G.setFixedFont( ssd1306xled_font6x8 );


    // Initialisation et effacement de l'écran   
    Afficheur_G.begin();
    Afficheur_G.clear();
}

// Fonction principale du programme, s'exécute en boucle:
void loop()
{











    Afficheur_G.printFixed (5, 16, "Temperature: xxC", STYLE_NORMAL);
    Afficheur_G.printFixed (5, 42, "Humidite: xx%", STYLE_NORMAL);




 
    delay(2000);
    Afficheur_G.clear();   
}

Comme précédemment, vous allez commencer par indiquer au compilateur Arduino que vous utilisez la bibliothèque SimpleDHT:

#include "SimpleDHT.h"

Là encore il s’agit d’une bibliothèque utilisant la programmation objet. Vous aller déclarer l’objet CapteurDHT11_G de type « SimpleDHT11 » en lui précisant entre parenthèse l’entrée de la carte Arduino utilisées pour le capteur (4 dans notre cas).

SimpleDHT11 CapteurDHT11_G(4);

Nous allons pouvoir maintenant appeler la fonction « CapteurDHT11_G.read » qui réalise l’acquisition des données du capteur DHT11:

    CodeRetour_L = CapteurDHT11_G.read(&temperature_L, &humidite_L, NULL);

Ces valeurs lues par cette fonctions sont stockées dans deux variable « temperature_L » et « humidite_L » qu’il est nécessaire de déclarer au préalable par les instructions:

    byte temperature_L = 0;
    byte humidite_L = 0;

La fonction « CapteurDHT11_G.read » que nous avons écrite précédemment, fournit également un indicateur de succès de l’acquisition de données. Indicateur que nous avons stocké dans la variable« CodeRetour_L » qu’il est nécessaire également de déclarer:

    int CodeRetour_L;

Afin de pouvoir gérer les erreurs, testons ce « CodeRetour_L » et écrivons un message d’erreur en cas d’impossibilité d’acquérir ces données:

    if( CodeRetour_L == SimpleDHTErrSuccess)
    {

et:

    }
    else
    {
      Afficheur_G.printFixed (5, 30, "Erreur d'acquisition !!!", STYLE_NORMAL);
    }

Maintenant que nous avons nos variable « temperature_L » et « humidite_L » remplies avec les valeurs numérique de mesures, il reste à le convertir en chaine de caractères afin de pouvoir les afficher. Nous utilisons la fonction  « sprintf«  du langage C portée sur Arduino pour pouvoir afficher cette température et cette humidité:

      sprintf(TexteTemperature_L, "Temperature: %d C", temperature_L);
      sprintf(TexteHumidite_L, "Humidite: %d%%", humidite_L);

Les chaines de caractères « TexteTemperature_L » et « TexteHumidite_L » contiennent le résultat de cette conversion. Leur déclaration s’effectue par l’écriture des lignes suivantes:

    char TexteTemperature_L[100];
    char TexteHumidite_L[100];

Et pour terminer, nous allons modifier les 2 lignes qui utilisent la fonction « printFixed » pour sur l’écran OLED afin qu’elles utilisent les 2 chaines de caractères « TexteTemperature_L » et « TexteHumidite_L »:

      Afficheur_G.printFixed (5, 16, TexteTemperature_L, STYLE_NORMAL);
      Afficheur_G.printFixed (5, 42, TexteHumidite_L, STYLE_NORMAL);

Votre programme de mesure de la température et de l’humidité avec Arduino est terminé, il correspond maintenant à:

// Déclaration des librairies utilisées
#include "lcdgfx.h"
#include "SimpleDHT.h"

// Déclaration globales
DisplaySSD1306_128x64_I2C Afficheur_G(-1);
SimpleDHT11 CapteurDHT11_G(4);

// Fonction de démarrage, s'exécute une seule fois:
void setup()
{
    /* Sélection de la fonte de 6x8 */
    Afficheur_G.setFixedFont( ssd1306xled_font6x8 );


    // Initialisation et effacement de l'écran   
    Afficheur_G.begin();
    Afficheur_G.clear();
}

// Fonction principale du programme, s'exécute en boucle:
void loop()
{
    byte temperature_L = 0;
    byte humidite_L = 0;
    char TexteTemperature_L[100];
    char TexteHumidite_L[100];
    int CodeRetour_L;

    CodeRetour_L = CapteurDHT11_G.read(&temperature_L, &humidite_L, NULL);
    if( CodeRetour_L == SimpleDHTErrSuccess)
    {
      sprintf(TexteTemperature_L, "Temperature: %d C", temperature_L);
      sprintf(TexteHumidite_L, "Humidite: %d%%", humidite_L);
      Afficheur_G.printFixed (5, 16, TexteTemperature_L, STYLE_NORMAL);
      Afficheur_G.printFixed (5, 42, TexteHumidite_L, STYLE_NORMAL);
    }
    else
    {
      Afficheur_G.printFixed (5, 30, "Erreur d'acquisition !!!", STYLE_NORMAL);
    }
    delay(2000);
    Afficheur_G.clear();   
}

Vous pouvez maintenant compiler votre programme puis le transférer dans l’Arduino. Voici le résultat obtenu:

Résultat de la mesure de la température et de l'humidité avec un Arduino Uno

Et si on améliorait notre projet ? Rendez-vous (page 3).

Laisser un commentaire