You are on page 1of 25

Universit Saad Dahlab de Blida

Facult lectronique
Dpartement lectronique

Projet de fin de cycle

Ralisation d'un dtecteur temprature et


humidit base d'arduino

Anne 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 temprature et lhumidit constituent des informations importantes dans plusieurs
processus industriels et de laboratoire. Elles interviennent comme des grandeurs
principales dont la valeur doit tre connue avec prcision ou comme paramtres
influant sur la qualit dautres mesures. Ses valeurs seront utilises pour la correction
ou la compensation. Certains procdes industriels ou biologiques favorisent des
environnements de tempratures et humidits spcifiques. Ainsi la rgulation de
temprature simpose. Cette rgulation passe par la mesure de temprature de
manire continue.

la temprature est une grandeur physique mesure laide dun thermomtre. Dans
la vie courante, elle est relie aux sensations de froid et de chaud, provenant du
transfert de chaleur entre le corps humain et son environnement. En physique, elle se
dfinit de plusieurs manires, comme fonction croissante du degr dagitation
thermique des particules, par lquilibre des transferts thermiques entre plusieurs
systmes. La temprature est une variable importante dans dautres disciplines. Il
existe plusieurs mthodes de mesure de temprature parmi ces mthodes la mthode
lectrique.
2.LE CAPTEUR DHT11 :

Ce capteur dhumidit et de temprature est trs rependu dans le contrle de


climatisation, il est constitu dun capteur de temprature base de NTC et dun
capteur dhumidit rsistif, un microcontrleur soccupe de faire les mesures, les
convertir et de les transmettre.

Ce capteur est calibr en usine et ses paramtres de calibration sont stocks dans la
mmoire OTP (Rom) du microcontrleur.

Il sinterface grce un protocole semblable 1Wire sur 1 seul fil de donn, une
librairie pour Arduino est disponible, il est possible de dporter le capteur jusqu 20
m.

Cette version est constitu uniquement du capteur, il possde 4 broches espaces 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

Caractristiques

Alimentation +5V (3.5 - 5.5V)

temprature : de 0 50C, prcision : +/- 2C

Humidit : de 20 96% RH, prcision +/- 5% RH


Le capteur DHT11 cest le petit boitier plastique bleu.
on voit bien la rsistance 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 (rsistance de tirage et condensateur de dcouplage).
Pour ceux qui nauraient que le capteur il suffit de se munir dune rsistance de 5K et
dun condensateur cramique de 100nF pour avoir le mme rsultat.

2. B.LA COMMUNICATION DHT11 :

le condensateur de 100nF entre VCC et GND (il nest pas sur le schma mais il est
ncessaire)

Le protocole de communication :

Le DHT11 a la particularit dutiliser une seule broche pour communiquer avec son
maitre.
Bien sr cela aurait trop facile dutiliser un bus 1-Wire classique
La communication se fait donc au moyen dun protocole propritaire demandant des
timings bien prcis.

1- Signal Wake Up

Une trame type se compose de trois grandes parties :


1 Le maitre rveil le capteur au moyen dun signal de start .
2 Le capteur sort de son sommeil et envoie une rponse pour dire quil est vivant.
3 Le capteur envoie 40 bits de donnes (5 octets) contenant la temprature, le taux
dhumidit et une checksum.

(1 & 2) Rveil du capteur.

Ce quil faut noter cest 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.
Do limportant de la rsistance de tirage que lon peut voir sur le schma, pas de
rsistance = pas de signal.
2- Send Wake Up

Le DHT11 est une grosse fniasse, il passe sont temps dormir.


Si on veut quil nous envoie ses donnes 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 dun tat haut
(5v) de 40 microsecondes. Ensuite le DHT11 va rpondre pour dire quil est bien
rveill.
Pour ce faire il va placer le signal ltat bas pendant 80 microsecondes puis ltat
haut pendant 80 autres microsecondes.
A ce moment prcis le capteur est prt, les mesures de la temprature et de
lhumidit sont faites et le capteur va pouvoir commencer envoyer les donnes.

3-Data Reception :

Un paquet de donnes complet fait 40 bits, soit 5 octets.


Ce paquet se dcompose comme suit :
Octet Contenu

1 Humidit en %
2 zro
3 Temprature en degr Celsius
4 zro
5 Checksum (= humidit + temprature)
Certains se demanderont pourquoi les octets 2 et 4 sont zros.
Cest simple, le capteur na quune prcision de 8 bits, la partie dcimale est donc
toujours vide.

Reste encore un petit dtail claircir : comment diffrencier un bit 1 dun 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 suprieur 40 microsecondes (12 s de marge
pour tre sr) cest un 1 , sinon cest un 0 .

Remarque: le capteur envoie les bits lenvers 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 dabord installer la bibliothque, pour cela il faut rendre sur le github de Adafruit ddi
aux capteurs DHT, puis cliquez sur Download ZIP avant de cliquer dans lIDE Arduino sur Croquis, puis
Include Library, puis Add .ZIP Library et slectionner larchive DHT-sensor-library-master.

Ensuite on injecte le programme suivant laide de linterface 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 dpass
7. DHT11_CHECKSUM_ERROR //!< Donnes reues errones
8. };
9. /** Fonction setup() */
10. void setup() {
11. /* Initialisation du port srie */
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 temprature et de l'humidit + gestion des
erreurs */
20. switch (readDHT11(DHT11_PIN, &temperature, &humidity)) {
21. case DHT11_SUCCESS:
22. /* Affichage de la temprature 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 trs souvent */
36. delay(2000);
37. }
38. /**
39. Lit la temprature et le taux d'humidit capt par un capteur
DHT11
40. *
41. @param pin Broche sur laquelle est cbl le capteur
42. @param temperature Pointeur vers la variable stockant la
temprature
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 donnes du cpateur
48. counter -> compteur permettant de savoir quel bit est reu
(bitwise)
49. index -> compteur permettant de savoir quel octet est reu
(bitwise)
50. timeout -> compteur pour le timeout
51. */
52. byte data[5] = { 0 }, counter = 7, index = 0;
53. unsigned int timeout;
54. /* Conversion du numro de broche Arduino en ports/masque binaire
"bas niveau" */
55. /* Utiliser les registres du microcontrleur 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. /* Rveil du capteur */
62. *ddr |= bit; // OUTPUT
63. *out &= ~bit; // LOW
64. delay(18); // Temps d'attente LOW causant le rveil du capteur
65. *out |= bit; // HIGH
66. delayMicroseconds(40);
67. *ddr &= ~bit; // INPUT
68. /* Attente de la rponse 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 donnes 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 mmoire 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 suprieur 40S 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 dfaut
88. /* Si le compteur de bits atteint zro */
89. if (counter-- == 0) {
a. counter = 7; /* On passe l'octet suivant */
b. ++index;
90. }
91. }
92. /* Format des donnes :
93. [0] = humidit en %
94. [1] = zro
95. [2] = temprature en degrs Celsius
96. [3] = zro
97. [4] = checksum (humidit + temprature)
98. */
99. *humidity = data[0];
100. *temperature = data[2];
101. /* Vrifie 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 temprature et l'hygromtrie augmentent si on souffle sur le capteur DHT11.

4. AFFICHAGE DE TEMPERATURE ET HUMIDITE SUR


UN LCD:
4.A.MATERIELS REQUIENT
le matriel quon est besoin :
Un Arduino mega 2560
Un capteur dhumidit et de temprature DHT11
Un cran LCD 216
Une breadboard
Une rsistance de 10k, deux de 1.1k (ou un potentiomtre) et des cbles 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 rpondre un large spectre de besoins de mesures,
il fournit une lecture fiable lorsque le degr dhygromtrie ambiante est
compris entre 20% RH et 90% RH , et lorsque la temprature est comprise
entre 0c et 50 c , ce qui couvre les besoins de la plupart des foyers et
des activits quotidiennes ne prsupposant pas de conditions extrmes .