Tutoriel TP Arduino capteur temperature
TP4 : Capteurs de température LM35 et DHT22
Objectif du TP
õ Mesure de la température par un capteur analogique LM35.
õ Mesure de la température par un capteur numérique DHT22 avec utilisation de bibliothèque pour un capteur à sortie numérique sérielle.
õ Comparaison des valeurs de la température mesurée par les 2 capteurs et leur affichage sur un écran LCD.
õ Schéma de câblage avec la carte ARDUINO MEGA.
õ Centrale domotique : Régulation de la température et de l'humidité avec affichage des valeurs sur l'écran LCD, détection d'intrus avec alarme, détecteur de proximité et d'obscurité avec allumage automatique de la lumière.
1. Présentation du capteur LM35
Le circuit LM35 est un capteur analogique de température. Le capteur de température LM35 est capable de mesurer des températures allant de -55°C à +150°C avec une précision de de ±0,5°C.
La température mesurée par le capteur est donnée par la relation :
Vs
T =
10
avec :
T : Température [°C]
Vs : Tension de sortie [mV]
2. Présentation du capteur DHT22
Le capteur DHT22 est un capteur de température et d’humidité à sortie numérique sérielle. La liaison entre la carte Arduino et le capteur est assuré par un microcontrôleur 8 bits intégré dans le corps du DHT22. Une bibliothèque permet la communication entre le capteur et la carte ARDUINO.
1 : Vcc
2 : Sortie sérielle
3 : Non Connecté
4 : GND
Fig.2 : Capteur DHT22
Caractéristiques :
Humidité (relative%) : 0 à 100 %
Précision (humidité) : +/- 2%
Température : -40°C à +150°C
Précision (température) : +/- 0,5°C
Fréquence mesure : ½ Hz (2 mesure par seconde)
Tension d’alimentation : 3 à 5 volts
Mesure de la température et de l'humidité
La mesure de ces 2 variables se fait via la bibliothèque
<dht.h>, se référer à la notice d'installation de la carte CAPAX-Xtd® pour son utilisation.
3. Présentation des capteurs sur la carte CAPAX-Xtd®
Fig.3 : Utilisation des composants du TP sur la carte CAPAX®
Légende | E/S correspondante sur la carte ARDUINO | |
8 | LM35 | A15 (Entrée analogique) |
6 | DHT22 | A6 (Entrée numérique) |
3 | Bouton poussoir | D47 (Entrée numérique) |
12 | LED Rouge | D42 (Sortie numérique) |
12 | LED Blanche | D9 (Sortie analogique) |
1 | Ecran LCD RS E D4 D5 D6 D7 | D34 D33 D32 D31 D30 D29 |
Travail à faire
1. Recherche sur Internet et schéma de câblage sur la carte ARDUINO MEGA
A partir d'Internet, télécharger les notices des constructeurs (datasheet) des capteurs LM35, DHT22 et l'écran LCD.
1.1 Terminer le schéma de câblage proposé dans l'Annexe 4.
1.2 Remplir le tableau suivant : nomenclature des broches de l'afficheur
N° | Pin | Désignation | Rôle |
1 | VSS | ||
2 | VDD | ||
3 | V0 | ||
4 | RS | ||
5 | RW | ||
6 | E | ||
7 | D0 | ||
8 | D1 | ||
9 | D2 | ||
10 | D3 | ||
11 | D4 | ||
12 | D5 | ||
13 | D6 | ||
14 | D7 | ||
15 | A | ||
16 | K |
2. Mesure de la température par le capteur LM352.1Ce capteur est-il actif ou passif ? Justifier la réponse.
2.2 Quelle est la sensibilité de ce capteur ?
2.3 Ecrire un programme qui, en cas d’appui sur le bouton poussoir BP, calcule la valeur moyenne de la température, en se basant sur 5 mesures différentes, ensuite affiche le résultat trouvé sur le moniteur série de l’Arduino IDE et sur l'afficheur LCD.
3. Amélioration de la précision de la mesure de la température par le capteur LM35
Dans le cas du capteur LM35, la température maximale mesurée Tmax ? 110°C, ce qui correspond à une tension de sortie maximale Vmax = 1,1V. Pour améliorer la précision de la mesure, on a intérêt à choisir une tension de référence Vréf très proche de Vmax, soit Vréf = 1.1 V. La fonction analogReference(INTERNAL1V1) satisfait cette demande et oblige le microcontrôleur à utiliser une tension de référence interne Vréf = 1.1V au lieu de Vréf = 5V.
Pour avoir Vréf = 1.1 V, utiliser analogReference(INTERNAL1V1)
Pour un retour à la tension par défault, Vréf = 5 V, utiliser analogReference(DEFAULT)
3.1Calculer la nouvelle sensibilité de ce capteur.
3.2En utilisant la nouvelle tension de référence, reprendre l'exercice du §2.3
4. Exploitation du capteur DHT22 pour la mesure de la température et de l'humidité
Ecrire un programme Arduino qui permet l’affichage de la température et du taux d'humidité sur le moniteur série et sur l’écran LCD en utilisant la fonction DHT.temperature et DHT.humidity après avoir inclus la bibliothèque <dht.h>.
Remarque : La lecture des données se fait avec la fonctionDHT.read22(DHT22_PIN) où DHT22_Pin est la broche qui relie le capteur à la carte Arduino MEGA.
5. Comparaison des différentes mesures de la température
Ecrire un programme qui permet la mesure de la température par 3 méthodes différentes et son affichage sur 3 digits (2 pour la partie entière et 1 pour la partie décimale) :
õ TDHT22 : Température mesurée par le capteur DHT22.
õ TDEF : Température mesurée par le capteur LM35 avec tension de référence 5V analogReference(DEFAULT).
õ T1V1 : Température mesurée par le capteur LM35 avec tension de référence 1.1V :
analogReference(INTERNAL1V1).
Remarque : pour le passage de analogReference(DEFAULT) vers analogReference(INTERNAL1V1), se référer à l'annexe 4.
L'affichage du résultat se fera sur l'afficheur LCD conformément au tableau ci-dessus.
C0 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 | C11 | C12 | C13 | C14 | C15 |
L0 | D | H | T | D | E | F | : | X | X | . | X | ||||
L1 | 2 | 2 | : | Z | Z | . | Z | 1 | V | 1 | : | Y | Y | . | Y |
TDHT22 = TDEF = T1V1 =
Calculer : ErrDef = | TDHT22 – TDEF| = Err1V1 = | TDHT22 – T1V1| =
6. Application : Centrale domotique
On veut réaliser une centrale domotique qui assure les fonctions suivantes :
õ Régulation de la température :
ù mesure de la température par les deux capteurs puis calcul de la moyenne et son affichage (1 digit après la virgule) sur l'écran LCD.
ù Si la température dépasse 25°C, actionner le moteur (ventilateur) pendant 5 s.
õ Humidité : mesure de l'humidité et son affichage (1 digit après la virgule) sur l'écran LCD.
õ Détecteur de proximité avec allumage de la lumière :
ù Mesure de la distance par le capteur à ultrason et son affichage (1 digit après la virgule) sur l'écran LCD.
ù si le capteur à US détecte un objet à d ? 12 cm, allumage de la LED Verte pendant 4s.
õ Détecteur d'obscurité avec allumage graduel de la lumière :
ù Au démarrage de l'application, mesure automatique de l'intensité lumineuse (RLDR0).
ù Sauvegarde de cette valeur dans le potentiomètre numérique.
ù Mesure en continu de RLDR et son affichage [en ?] sur l'écran LCD.
ù Si RLDR ? RLDR0, allumage graduel de la LED blanche (ValLED_B) en fonction de l'obscurité selon la loi de commande suivante :
????[?] ? ?????[?]
??????_? = ???( , ???)
??
õ Détection d'intrus avec alarme : en cas d'appui sur le bouton poussoir (contact forcé), allumage de la LED Rouge, affichage du caractère "?" et déclanchement d'une sirène pendant 4 s.
Allure de l'afficheur LCD :
C0 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 | C11 | C12 | C13 | C14 | C15 |
L0 | T | = | t | t | . | t | H | = | h | h | . | h | ? | ||
L1 | D | = | d | d | . | d | R | = | r | r | r | r |
T : Température [°C] – H : Humidité [%] – D : Distance [cm] – R : Résistance [?] ? : en cas d'appui sur le bouton poussoir.
Annexe 1 : Installation des bibliothèques
Pour l'installation des bibliothèques <dht> et <LiquidCrystal>, se référer à la notice d'installation de la carte CAPAX-Xtd® téléchargeable à partir de :
Annexe 2 : Utilisation de la bibliothèque du capteur DHT22
#include <dht.h> // Ajout de la bibliothèque dht
# define DHT22_pin A6
float chkDHT22; // initialisation de la bibliothèque <dht> Zone déclaration des variables float temp_DHT22; // lecture de la temperature [°C] float hum_DHT22 // lecture de l'humidité [%] void loop {
chkDHT22 = DHT.read22(DHT22_pin); // initialisation de la bibliothèque <dht> temp_DHT22 = DHT.temperature; // Température [°C] hum_DHT22 = DHT.humidity; // Humidité [%]
}
Annexe 3 : Utilisation de la bibliothèque pour l'écran LCD
Pour l'installation de la bibliothèque, se référer à la notice d'installation de la carte CAPAX-Xtd®.
#include <LiquiCrystal.h> // Ajout de la bibliothèque pour l'écran LCD const int rs=34; const int en=33;
const int d4=32; Zone déclaration des variables
const int d5=31; const int d6=30; const int d7=29;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7); // Initialisation d'un écran LCD void setup() {
lcd.begin(16, 2); // Initialisation d'un écran LCD 16 colonne par 2 ligne
lcd.setCursor(col, lig); // 0 ? col ? 15 , 0 ? lig ? 1; lcd.print("String"); // lcd.print(Var); // Variable
} void loop {
lcd.setCursor(col, lig); // 0 ? col ? 15 , 0 ? lig ? 1; lcd.print("String"); // lcd.print(Var); // Variable
}
Annexe 4 : Passage deanalogReference(DEFAULT)versanalogReference(INTERNAL1V1).Pour le changement de la référence de analogReference(DEFAULT) vers analogReference(INTERNAL1V1), il faut faire 2 mesures successives séparés par un délais pour avoir une mesure exacte.
void loop() { analogReference(DEFAULT);
var = analogRead(LM35_pin); // lecture de la tension aux bornes du capteur LM35
analogReference(INTERNAL1V1);// Les 2 mesures successives séparées par un délais sont nécessaires
// à cause du changement de analogReference
var1 = analogRead(LM35_pin); // lecture de la tension aux bornes du capteur LM35 delay(10);
var1 = analogRead(LM35_pin); // lecture de la tension aux bornes du capteur LM35
Annexe 4 : Terminer le schéma de câblage et le remettre avec le compte rendu du TP.
|