Test capteur DHT22 avec carte Arduino UNO

Le DHT22 est capteur de température et de taux d’humidité qui peut être utilisé en extérieur car sa plage de fonctionnement est :

  • Pour la température de -40°C à +125°C avec une précision de 0.1°C
  • Pour l’humidité de 0% à 100% avec une précision de 0.1%

Le capteur possède 4 broches mais la 3ème de sert à rien. On utilise :

  • 1: Alimentation de 3v à 5v – avec 2,5 mA Max
  • 2: Données
  • 4: GND

Pour le test le capteur est branché sur une carte Arduino Uno en utilisant une platine d’essai. Dans l’exemple, j’ai choisi d’alimenter le capteur 3,3v et d’utiliser PIN 2 pour remonter les données du capteur. J’ai également ajouter une résistance de 4,7 KΩ entre l’alimentation et le pin de données pour amplifier le signal généré.

 

Ensuite, il faut réaliser un petit bout de programme avec l’IDE Arduino. Voici la version simplifiée, j’ai également réalisé un test plus complet que vous retrouverez sur GitHub Test_DHT22 .

//--------------------------------------------
//        Test du capteur DHT22
//-------------------------------------------
// EpixFR - Février 2017
// Attention fonctionnement en 3.3V
//-------------------------------------------
 
// Inclusion des bibliothèques pour le capteur DHT22
#include <Adafruit_Sensor.h> //Source : https://github.com/adafruit/Adafruit_Sensor
#include <DHT_U.h> //Source : https://github.com/adafruit/DHT-sensor-library

// Inclusion de la bibliothèque pour les messages en Français
#include <PrintFr.h> //Source : https://github.com/EpixFr/Arduino-PrintFr

// Définition du type de capteur
// Déclaration de l'input utilisé sur la carte Arduino
#define DHTPIN 2
// Déclaration du type de capteur DHTxx
#define DHTTYPE DHT22

// Création de l'objet de capteur DHT22
DHT_Unified dht(DHTPIN, DHTTYPE);

//Variable du délai de capture
float DelaiCapture;

void setup() {
  // Création de l'instance Message de type PrintFr 
  PrintFr Message;
  // Initialisation du capteur DHT22
  dht.begin();
  //Initialisation de la capture
  sensor_t sensor;

  //Calcul du délai mini entre 2 captures
  DelaiCapture = sensor.min_delay / 1000;

  Message.Affiche("*******************************************");
  Message.Affiche("           Capture des données");
  Message.Affiche("*******************************************");
}

void loop() {
  // Création de l'instance Message de type PrintFr 
  PrintFr Message;  
  //Capture des données du capteur de température
  sensors_event_t event;  
  dht.temperature().getEvent(&event);
  //Si on n'a pas d'évènement on affiche un message d'erreur
  //sinon on affiche la température
  if (isnan(event.temperature)) {
    Message.Affiche("Lecture de la température impossible !");
  }
  else {
    Message.Affiche(" Température : ",false);
    Serial.print(event.temperature);
    Message.Affiche("°C", false);
  }
  //Affichage séparateur
  Message.Affiche(" - ",false);  
  //Capture des données du capteur d'humidité
  dht.humidity().getEvent(&event);
  //Si on n'a pas d'évènement on affiche un message d'erreur
  //sinon on affiche la température
  if (isnan(event.relative_humidity)) {
    Message.Affiche("Lecture de l'humidité impossible !");
  }
  else {
    Message.Affiche("Humidité : ",false);
    Serial.print(event.relative_humidity);
    Message.Affiche("%");
  }
  //Temporisation entre 2 captures (temps calculé dans le setup)
  delay(DelaiCapture);
}

Attention pour que le code fonctionne, il faut bien posséder les 3 bibliothèques suivantes :

J’ai réalisé la dernière bibliothèque qui permet d’écrire des messages avec des caractères accentués. Plus d’infos ici

Et voici le type de résultat que vous aurez avec la version complète du test  :

La première partie vous donne toutes les caractéristiques du capteur puis le programme boucle sur la capture des données de température et de taux d’humidité.

Sources :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*