Température DHT22 et arduino

Voici la première étape de mon premier projet arduino.

Déjà, faire fonctionner une sonde de température (et d’hygrométrie) avec un écran LCD, le tout piloté par une carte arduino UNO.

Premièrement le choix de l’écran LCD : le premier qui passe, 16 caractère et 2 lignes, c’est amplement suffisant. Le choix de la sonde maintenant. Là le problème est plus évident, surtout vu les exigences professionnels en terme de monitoring de température auxquelles nous sommes soumis en laboratoire. Dans le coup, je me tourne vers une DHT22 (la DHT11 étant clairement imprécise (plus ou moins 2 degrés Celsius, d’après la datasheet).

Donc la DHT22, elle, propose dans sa datasheet :

  • Range : -40 à 80 °C
  • Accurancy  : +/- 0,5°C
  • Resolution or sensitivity : 0,1 °C
  • Repeatability : +/- 0.2°C

Je ne vais pas m’étendre sur le câblage et la programmation de l’arduino étant donné qu’il existe la librairie DHT, et que de nombreux exemples existent sur internet. Je vais vous fournir néanmoins mon sketch, ce qui vous permettra de vérifier.

Contrairement à la datasheet, je n’ai pas installé (pour l’instant) de condensateur à 100nF, je n’ai pas de problème de bruit. Dans mon projet final, cela sera certainement nécessaire, mais avançons par étape. J’ai utilisée une résistance de 4,7KOhms pour la sonde et de 330Ohms pour le rétroéclairage. Le potentiomètre de 10KOhms permet de régler le contraste (très utile contrairement à une résistance fixe, lors des changements de température !).

Premier essai DHT22_bb

 

Voici le code utilisée (à copier coller dans l’IDE Arduino, sachant qu’il faut inclure la librairie DHT (moi, la librairie LCD était déjà dans l’IDE)) :

 

#include [LiquidCrystal.h] //Librairie pour l’écran LCD !!! remplacer [ ] par sup et inf
#include [DHT.h] //Librairie pour le capteur DHT — !!! remplacer [ ] par sup et inf

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Initialisation de l’écran LCD avec les numéros des pins utilisés

#define DHTPIN 8 //Pin auquel est connecté le capteur DHT

//#define DHTTYPE DHT11 //Si vous utiliser le DHT 11
#define DHTTYPE DHT22 //Si vous utiliser le DHT 22 (AM2302)
//#define DHTTYPE DHT21 //Si vous utiliser le DHT 21 (AM2301)

const int intTimePause = 5000; //Par défaut on actualise les valeures toutes les 5 secondes

float fltHumidity; //Pourcentage d’humidité mesuré
float fltTemperature; //Température mesurée en Celsius

DHT dht(DHTPIN, DHTTYPE); //On initialise le capteur DHT

void setup()
{
lcd.begin(16, 2);
lcd.clear();
lcd.print(« Bonjour maitre »);
lcd.setCursor(0,1);
lcd.print(« Pret a mesurer ? »);
delay(5000);
}

void loop()
{
fltHumidity = dht.readHumidity(); //On lit le pourcentage d’humidité
fltTemperature = dht.readTemperature(); //On lit la température en degrés Celsius
if (isnan(fltTemperature) || isnan(fltHumidity)) //Si les valeurs retournées ne sont pas des nombres :
{
lcd.setCursor(0, 1); //Positionnement du curseur
lcd.print(DHTTYPE); //On affiche le type de capteur
lcd.setCursor(5, 1);
lcd.print( » erreur de comm »); //On affiche l’erreur
}
else
{
//mise en forme et affichage des informations sur l’écran LCD
lcd.setCursor(0, 0); //Positionnement du curseur
lcd.print(« Degres : « );
lcd.setCursor(9, 0);
lcd.print(fltTemperature); //Affichage de la température
lcd.setCursor(13, 0);
lcd.print((char)223); //Affiche le caractère ° (degrés)
lcd.setCursor(14, 0);
lcd.print(« C »); //En degrés Celsius
lcd.setCursor(0, 1);
lcd.print(« Humidite : « );
lcd.setCursor(11, 1);
lcd.print(fltHumidity); //Affichage de l’humidité
lcd.setCursor(15, 1);
lcd.print(« % »);
}
delay(intTimePause);
}

 

Maintenant que cela fonctionne, j’ai entamé une vérification des propriétés de la sonde. J’ai la chance de pouvoir bénéficié de sonde de température vérifié par le Cofrac (COmité FRançais d’ACcréditation) dans des enceintes thermiques cartographiées. En utilisant des sondes vérifiée avec une incertitude (k=2) de +/-0,07°C, j’ai déterminé une erreur fixe de 0,3°C, à deux types de température : 6°C et 21°C.

Ainsi, l’erreur ne semble pas proportionnelle, même s’il me reste à tester d’autres plages de valeurs (-20°C jusqu’à 40°C). Ceci dit pour mon projet de domotique, la plage testée pour l’instant me convient très bien (je n’ai malheureusement pas la possibilité de vérifier les caractéristiques annoncées en terme d’hygrométrie).

A noter, je n’ai pas encore modifié mon programme pour tenir compte de cette erreur de 0,3°C. QUant à la répétabilité de 0,2°C, pour l’instant, j’ai déterminé une répétabilité inférieure à 0,1°C soit inférieure à la résolution !

 

Source :

Datasheet de la sonde DHT22

Cofrac