Utiliser un capteur de température et d'humidité DHT22 avec arduino

La sonde DHT22 est une des sondes les plus classiques lorsque l’on souhaite mesurer une température avec un minimum de fiabilité. Voici un petit aperçu de ce que l'on peut faire avec et de comment l'utiliser.

Au passage, je déconseille fortement d’utiliser la DHT11 car elle est moins précise, et ne prend pas en compte les températures négatives. Restez donc loin de la DHT11, même si elle est moins chère !

Prise en main et materiel

Pour ce montage, il nous faudra donc une sonde DHT22 (ici ou la), une carte arduino (voir mon article sur comment choisir son arduino), et quelques fils pour les connections.

La sonde dispo de 4 pattes: La sonde possède 4 pattes, mais la 3 ème ne nous sert pas. On relie donc les pattes de la manière suivante :

- Vers l’alimentation 3,3 ou 5 Volts
- Vers un pin de donnée
- Laissé flottant
- Vers un pin GND

Petite subtilité néamoins, il faudra ajouter une resistance d'au moins 10K entre le pin de données et celui du +5V. C'set une resistance de pull up (force la ligne a +5V quand le DHT ne transmet pas).

Si vous ne pouvez (voulez) pas utiliser une resistance externe, arduino en integre plusieurs sur certains PINS. Cette resistance s'active avec le code pinMode (2, INPUT_PULLUP); au lieu de pinMode (2, INPUT);. Cette resistance fait entre 30 et 50K, mais tout fonctionne parfaitement avec !

Le code

La partie logicielle quand a elle est toute simple, il suffit de s'inspirer du code sur le github d'adafruit.

#include "DHT.h"

#define DHTPIN 2     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
  pinMode (DHTPIN, INPUT_PULLUP); // Force pinmode with pullup
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

Et voila! apres lancement du programme, les données de la sonde remontent bien sur la liaison série!

3

A vous de jouer maintenant pour construire une station météo ou controler la température de votre imprimante 3D !t