Matériel
- 1 capteur DHT11
- 1 carte Arduino Uno R3
- 1 breadboard et 3 fils de câblage
- 1 résistance ~ 5k
Principe
On peut mesurer la température et l'humidité de l'air avec un capteur DHT11
Ce capteur miniature (12 x 16 x 6 mm, 3 g) comporte 4 broches en ligne.
Il comporte deux capteurs intégrés :
- 1 Capteur résistif d'humidité
- 1 Capteur NTC de température (thermistor)
Sa sortie est numérique (8 bits), en mode single-wire (une seule broche), et ne nécessite donc pas d'entrée analogique.
Le capteur est calibré en usine, les paramètres sont stockés dans sa mémoire.
Il est alimenté en courant continu de 3.5-5V DC (ajouter une capa de 100nF pour filtrer l'alimentation, entre Vcc en GND).
Précision de mesures
- Humidité de l'air (HR) de 20-90% (0-50°C), précision typique 4 % (maximum ± 5%)
- Température de l'air, précision typique ± 1°C (maximum ±2°C)
Branchement
3 fils suffisent.
Si le câble de liaison mesure moins de 20m, ajouter une résistance de tirage de 5k (indispensable), des valeurs de 4.7k à 10k conviennent.
Une communication avec le capteur retourne 40 bits et dure typiquement 4ms. L'intervalle d'échantillonnage doit être d'au moins 1 sec.
https://lh3.googleusercontent.com/-8ZH1 ... roches.jpg.
Brochage (capteur vu de face, pins de gauche à droite)
1 VCC
2 DATA
3 NC
4 GND
Reproductibilité des mesures
Nous avons compéré 10 capteurs DHT11 d'un lot
capteur 1 = 66% 25°C
capteur 2 = 67% 25°C
capteur 3 = 62 % 26°C
capteur 4 = 61% 27°C
capteur 5 = 59% 26°C
capteur 6 =56% 27°C
capteur 7 = 62% 25°C
capteur 8 = 59% 27°C
capteur 9 =63% 27°C
capteur 10=61% 27°C
Donc humidité de 62% ± 4% et température de 26°C ± 1°C conforme aux spécifications.
Un autre capteur DHT22, plus cher, est également plus précis si besoin.
Logiciel
On utilise la librairie pour arduino DHT11lib
http://playground.arduino.cc/main/DHT11Lib
Exemple de programme
Ce programme est commenté en français et testé
- Code: Tout sélectionner
//****************************************************
// Démo du capteur DTHT11 température et humidité
//C ROLLAND - Tiptopboards.com
//06 02 2013
//Adapté de http://playground.arduino.cc/Main/DHT11Lib
//****************************************************
//Inclure la librairie de pilotage du capteur DHT11
#include <dht11.h>
dht11 DHT11; //Instancier un capteur de type dht11
#define DHT11PIN 2 //Branché sur pin2 digital
void setup()
{
Serial.begin(9600); //Port série 9600 bauds
Serial.print("Test du capteur DHT11 ");
Serial.print("Librairie version: ");
Serial.print(DHT11LIB_VERSION);
Serial.print("\n"); //Sauter une ligne
}
void loop()
{
Serial.print("\n"); //Passer à la ligne
int chk = DHT11.read(DHT11PIN); //Tester le capteur
//Serial.print("Mesure: ");
switch (chk)
{
case DHTLIB_OK:
//Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Erreur de Checksum");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Erreur de Time out");
break;
default:
Serial.println("Erreur inconnue");
break;
}
//Hygrométrie %
Serial.print("Humidite = ");
Serial.print((float)DHT11.humidity, 2);
Serial.print(" % ");
//Température °C
Serial.print("Temp = ");
Serial.print((float)DHT11.temperature, 2);
Serial.print(" C ");
//Point de rosée (calculé à partir de t et hr)
Serial.print("Rosee = ");
Serial.print(dewPoint(DHT11.temperature, DHT11.humidity));
Serial.print(" C ");
//Serial.print("DPF = "); //Dew PointFast
//Serial.print(dewPointFast(DHT11.temperature, DHT11.humidity));
//Serial.print (" C ");
//Serial.print("\n"); //A la ligne
delay(500); //0.5 sec de délai de rafraichissement
}
// Point de rosée (dewPoint) function NOAA
// reference: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558-T);
}
// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}
Documentation
Datasheet du capteur DHT11 : http://www.dfrobot.com/image/data/DFR00 ... _10_en.pdf
Autre exemple d'utilisation (en anglais)
http://arduino-info.wikispaces.com/DHT1 ... TempSensor