Vous êtes sur la page 1sur 25

Université Saad Dahlab de Blida

Faculté électronique
Département électronique

Projet de fin de cycle

Réalisation d'un détecteur température et


humidité à base d'arduino

Année 2015-2016

Realisé par : Hamdoud karim

Chanane nour el houda


Encadré par : Y . Kabir

SOMMAIRE
1.
INTRODUCTION………………………………………
………………….
2. CAPTEUR TEMPERATURE ET
HUMIDITE.DHT11………….
2.A.FONCTIONNEMENT.DHT11…………………
………………….. 2. B.LA
COMMUNICATION.DHT11…………………………
………. 3. IMPLEMENTATION
DHT11 SUR UN CARTE ARDUINO….

3.A.
SCHEMA…………………………………………………
………………. 3.B.LE
PROGRAMME DE TEST DE
DHT11………………………..
3. C.RECUPERATION DE TEMPERATURE ET
HUMIDITE AVEC LE LOGICIEL ARDUINO
……………………………………………………….
4. AFFICHAGE DE TEMPERATURE ET
HUMIDITE SUR UN LCD
4.A.MATERIELS
REQUIENT……………………………………………..
4.
B.SHCEMA………………………………………………
…………………..
4.
C.PROGRAMME………………………………………
…………………..
4. D.RECUPERATION DE TEMPERATURE ET
HUMIDITE SUR LCD
5.CONCLUSION………………………………………
………………………
1.INTRODUCTION :
La température et l’humidité constituent des informations importantes dans plusieurs
processus industriels et de laboratoire. Elles interviennent comme des grandeurs
principales dont la valeur doit être connue avec précision ou comme paramètres
influant sur la qualité d’autres mesures. Ses valeurs seront utilisées pour la correction
ou la compensation. Certains procèdes industriels ou biologiques favorisent des
environnements de températures et humidités spécifiques. Ainsi la régulation de
température s’impose. Cette régulation passe par la mesure de température de
manière continue.

la température est une grandeur physique mesurée à l’aide d’un thermomètre. Dans
la vie courante, elle est reliée aux sensations de froid et de chaud, provenant du
transfert de chaleur entre le corps humain et son environnement. En physique, elle se
définit de plusieurs manières, comme fonction croissante du degré d’agitation
thermique des particules, par l’équilibre des transferts thermiques entre plusieurs
systèmes. La température est une variable importante dans d’autres disciplines. Il
existe plusieurs méthodes de mesure de température parmi ces méthodes la méthode
électrique.
2.LE CAPTEUR DHT11 :

Ce capteur d’humidité et de température est très rependu dans le contrôle de


climatisation, il est constitué d’un capteur de température à base de NTC et d’un
capteur d’humidité résistif, un microcontrôleur s’occupe de faire les mesures, les
convertir et de les transmettre.

Ce capteur est calibré en usine et ses paramètres de calibration sont stockés dans la
mémoire OTP (Rom) du microcontrôleur.

Il s’interface grâce à un protocole semblable à 1Wire sur 1 seul fil de donné, une
librairie pour Arduino est disponible, il est possible de déporter le capteur jusqu’à 20
m.

Cette version est constitué uniquement du capteur, il possède 4 broches espacées de


2,45mm (0,1") ce qui permet de le brancher facilement sur une breadboard.

Seul 3 broches sont utiles : VCC, GND et Data.


Il existe une version au format module DFR : Module DFR DHT11

Caractéristiques

 Alimentation +5V (3.5 - 5.5V)

 température : de 0 à 50°C, précision : +/- 2°C

 Humidité : de 20 à 96% RH, précision +/- 5% RH


Le capteur DHT11 c’est le petit boitier plastique bleu.
on voit bien la résistance de tirage sur la droite et le condensateur sur la gauche.
Cette petite carte a le gros avantage de sortir les signaux importants (alimentation,
masse, « data ») tout en ayant les composants requis au bon fonctionnement du
capteur (résistance de tirage et condensateur de découplage).
Pour ceux qui n’auraient que le capteur il suffit de se munir d’une résistance de 5K et
d’un condensateur céramique de 100nF pour avoir le même résultat.

2. B.LA COMMUNICATION DHT11 :

le condensateur de 100nF entre VCC et GND (il n’est pas sur le schéma mais il est
nécessaire)

Le protocole de communication :

Le DHT11 a la particularité d’utiliser une seule broche pour communiquer avec son
maitre.
Bien sûr cela aurait trop facile d’utiliser un bus 1-Wire classique …
La communication se fait donc au moyen d’un protocole propriétaire demandant des
timings bien précis.

1- Signal Wake Up

Une trame « type » se compose de trois grandes parties :


1 – Le maitre réveil le capteur au moyen d’un signal de « start ».
2 – Le capteur sort de son sommeil et envoie une réponse pour dire qu’il est vivant.
3 – Le capteur envoie 40 bits de données (5 octets) contenant la température, le taux
d’humidité et une checksum.

(1 & 2) Réveil du capteur.

Ce qu’il faut noter c’est que le capteur a une sortie dite à « collecteur ouvert », cela
signifie que le capteur ne sort pas des niveaux logiques 0v/5v mais utilise un transistor
en sortie.
Si le capteur veut envoyer un « 0 » il force le signal à 0v en rendant son transistor
(entre DATA et GND) passant.
Si le capteur veut envoyer un « 1 » il laisse le signal tel-quel en rendant son transistor
bloquant.
D’où l’important de la résistance de tirage que l’on peut voir sur le schéma, pas de
résistance = pas de signal.
2- Send Wake Up

Le DHT11 est une grosse féniasse, il passe sont temps à dormir.


Si on veut qu’il nous envoie ses données il faut le secouer en lui envoyant un signal de
start.
Le signal de start consiste en un état bas (0v) de 18 millisecondes et d’un état haut
(5v) de 40 microsecondes. Ensuite le DHT11 va répondre pour dire qu’il est bien
réveillé.
Pour ce faire il va placer le signal à l’état bas pendant 80 microsecondes puis à l’état
haut pendant 80 autres microsecondes.
A ce moment précis le capteur est prêt, les mesures de la température et de
l’humidité sont faites et le capteur va pouvoir commencer à envoyer les données.

3-Data Reception :

Un paquet de données complet fait 40 bits, soit 5 octets.


Ce paquet se décompose comme suit :
Octet Contenu

1 Humidité en %
2 zéro
3 Température en degré Celsius
4 zéro
5 Checksum (= humidité + température)
Certains se demanderont pourquoi les octets 2 et 4 sont à zéros.
C’est simple, le capteur n’a qu’une précision de 8 bits, la partie décimale est donc
toujours vide.

Reste encore un petit détail à éclaircir : comment différencier un bit « 1 » d’un bit
«0» ?
Un octet se composant de huit bits, si on ne sait pas comment recevoir un bit on ne
sait pas comment recevoir un octet .
Bit Temps bas Temps haut

«0» 50 µs 28 µs
«1» 50 µs 70 µs

Pour faire simple si le temps haut est supérieur à 40 microsecondes (12 µs de marge
pour être sûr) c’est un « 1 », sinon c’est un « 0 ».

Remarque: le capteur envoie les bits « à l’envers » soit le bit de poids fort en premier.
3: IMPLEMENTATION DHT11 SUR UN CARTE
ARDUINO :
3. A. SCHEMA :
Niveau montage simple, trois fils, une carte Arduino et le capteur. Pour assurer le mise en marche du capteur.

3. B.LE PROGRAMME DE TEST DE DHT11 :


INSTALLATION DU BIBLIOTHÈÈ QUÈ :

Il faudra tout d’abord installer la bibliothèque, pour cela il faut rendre sur le github de Adafruit dédié
aux capteurs DHT, puis cliquez sur Download ZIP avant de cliquer dans l’IDE Arduino sur Croquis, puis
Include Library, puis Add .ZIP Library… et sélectionner l’archive DHT-sensor-library-master.

Ensuite on injecte le programme suivant à l’aide de l’interface arduino.cc

1. /** Broche "DATA" du DHT11 */

2. const byte DHT11_PIN = 5;


3. /** Code d'erreur de la fonction readDHT11() */
4. enum {
5. DHT11_SUCCESS, //!< Pas d'erreur
6. DHT11_TIMEOUT_ERROR, //!< Temps d'attente dépassé
7. DHT11_CHECKSUM_ERROR //!< Données reçues erronées
8. };
9. /** Fonction setup() */
10. void setup() {
11. /* Initialisation du port série */
12. Serial.begin(115200);
13. Serial.println(F("DHT11 DEMO"));
14. }
15. /** Fonction loop() */
16. void loop() {
17. /* Variables d'usage */
18. byte temperature, humidity;
19. /* Lecture de la température et de l'humidité + gestion des
erreurs */
20. switch (readDHT11(DHT11_PIN, &temperature, &humidity)) {
21. case DHT11_SUCCESS:
22. /* Affichage de la température et du taux d'humidité */
23. Serial.print(F("Humidite (%): "));
24. Serial.println((int) humidity);
25. Serial.print(F("Temperature (^C): "));
26. Serial.println((int) temperature);
27. break;
28. case DHT11_TIMEOUT_ERROR:
29. Serial.println(F("Temps d'attente depasse !"));
30. break;
31. case DHT11_CHECKSUM_ERROR:
32. Serial.println(F("Erreur de checksum !"));
33. break;
34. }
35. /* Pas besoin de rafraichir l'affichage très souvent */
36. delay(2000);
37. }
38. /**
39. Lit la température et le taux d'humidité capté par un capteur
DHT11
40. *
41. @param pin Broche sur laquelle est câblé le capteur
42. @param temperature Pointeur vers la variable stockant la
température
43. @param humidity Pointeur vers la variable stockant le taux
d'humidité
44. @return DHT11_SUCCESS si aucune erreur, DHT11_TIMEOUT_ERROR en cas
de timeout, ou DHT11_CHECKSUM_ERROR en cas d'erreur de checksum
45. */
46. byte readDHT11(byte pin, byte* temperature, byte* humidity) {
47. /* data[] -> buffer contenant les données du cpateur
48. counter -> compteur permettant de savoir quel bit est reçu
(bitwise)
49. index -> compteur permettant de savoir quel octet est reçu
(bitwise)
50. timeout -> compteur pour le timeout
51. */
52. byte data[5] = { 0 }, counter = 7, index = 0;
53. unsigned int timeout;
54. /* Conversion du numéro de broche Arduino en ports/masque binaire
"bas niveau" */
55. /* Utiliser les registres du microcontrôleur est bien plus rapide
que digitalWrite() */
56. uint8_t bit = digitalPinToBitMask(pin);
57. uint8_t port = digitalPinToPort(pin);
58. volatile uint8_t *ddr = portModeRegister(port); // Registre MODE
(INPUT / OUTPUT)
59. volatile uint8_t *out = portOutputRegister(port); // Registre OUT
(écriture)
60. volatile uint8_t *in = portInputRegister(port); // Registre IN
(lecture)
61. /* Réveil du capteur */
62. *ddr |= bit; // OUTPUT
63. *out &= ~bit; // LOW
64. delay(18); // Temps d'attente à LOW causant le réveil du capteur
65. *out |= bit; // HIGH
66. delayMicroseconds(40);
67. *ddr &= ~bit; // INPUT
68. /* Attente de la réponse du capteur */
69. timeout = 0;
70. while(!(*in & bit)) /* Attente d'un état LOW */
71. if (++timeout == 10000)
a. return DHT11_TIMEOUT_ERROR;
72. timeout = 0;
73. while(*in & bit) /* Attente d'un état HIGH */
74. if (++timeout == 10000)
a. return DHT11_TIMEOUT_ERROR;

75. /* Lecture des données du capteur (40 bits) */


76. for (byte i = 0; i < 40; ++i) {
77. /* Attente d'un état LOW */
78. timeout = 0;
79. while(!(*in & bit))
a. if (++timeout == 10000)
b. return DHT11_TIMEOUT_ERROR;
80. /* Mise en mémoire du temps courant */
81. unsigned long t = micros();
82. /* Attente d'un état HIGH */
83. timeout = 0;
84. while(*in & bit)
a. if (++timeout == 10000)
b. return DHT11_TIMEOUT_ERROR;
85. /* Si le delta Temps est supérieur à 40µS c'est un "1", sinon
c'est un "0" */
86. if ((micros() - t) > 40)
a. data[index] |= (1 << counter); // "1"
87. // Le tableau data[] est initialisé à "0" par défaut
88. /* Si le compteur de bits atteint zéro */
89. if (counter-- == 0) {
a. counter = 7; /* On passe à l'octet suivant */
b. ++index;
90. }
91. }
92. /* Format des données :
93. [0] = humidité en %
94. [1] = zéro
95. [2] = température en degrés Celsius
96. [3] = zéro
97. [4] = checksum (humidité + température)
98. */
99. *humidity = data[0];
100. *temperature = data[2];
101. /* Vérifie la checksum */
102. if (data[4] != (data[0] + data[2]))
103. return DHT11_CHECKSUM_ERROR; /* Erreur de checksum */
104. else
105. return DHT11_SUCCESS; /* Pas d'erreur */
106. }
3. C.RECUPERATION DE TEMPERATURE ET HUMIDITE
AVEC LE LOGICIEL ARDUINO :
On utilise la fonction serial monitor sur le logiciel arduino . et en ajustant le baudrate sur 115200 . on a
obtenu
les mesures suivantes :
Tout fonctionne correctement :
La température et l'hygrométrie augmentent si on souffle sur le capteur DHT11.

4. AFFICHAGE DE TEMPERATURE ET HUMIDITE SUR


UN LCD:
4.A.MATERIELS REQUIENT
le matériel qu’on est besoin :
 Un Arduino mega 2560
 Un capteur d’humidité et de température DHT11
 Un écran LCD 2×16
 Une breadboard
 Une résistance de 10kΩ, deux de 1.1kΩ (ou un potentiomètre) et des câbles pour relier tout
ça.

4.B.SHCEMA :
4.C.PROGRAMME :
1. #include <LiquidCrystal.h>

2. #include <dht.h>

3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

4. int greenPin = A0;

5. dht sensor;

6. void setup()

7. {

8. lcd.begin(16,2); //16 by 2 character display

9. }

10. void loop()

11. {

12. delay(1000); //wait a sec (recommended for DHT11)

13. sensor.read11(greenPin);

14. lcd.clear();

15. lcd.setCursor(0,0);

16. lcd.print("Humidity = ");

17. lcd.print(sensor.humidity);

18. lcd.setCursor(0,1);

19. lcd.print("Temp = ");

20. lcd.print(sensor.temperature);
21. }

4.D.RECUPERATION DE TEMPERATURE ET HUMIDITE


SUR LCD :

5. CONCLUSION :
Le capteur DHT11 peut répondre à un large spectre de besoins de mesures,
il fournit une lecture fiable lorsque le degré d’hygrométrie ambiante est
compris entre 20% RH et 90% RH , et lorsque la température est comprise
entre 0ºc et 50 ºc , ce qui couvre les besoins de la plupart des foyers et
des activités quotidiennes ne présupposant pas de conditions extrêmes .

Vous aimerez peut-être aussi