Mesure de température et humidité avec un DHT11 + Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Mesure de température et humidité avec un DHT11 + Arduino

Messagepar tiptop » Ven 16 Aoû 2013 18:23

Mesure de la température et l'humidité de l'air avec un capteur DHT11 et une carte Arduino.

Image

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)
Image

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)
Consommation : 0.5 mA en nominal / 2.5 mA maximum.

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.Image

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

Image

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;
}



Image
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
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités