Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
TP2 : Capteurs de température LM35 et DHT22
1. 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.
2. Présentation du capteur LM35
Le circuit LM35 est un capteur analogique de température fabriqué par Texas Instruments. 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 :
𝑉𝑠
𝑇=
10
Avec :
T : Température [°C]
Vs : Tension de sortie [mV]
Figure 1 Capteur LM35
3. Présentation du capteur DHT22
Le capteur DHT22 (ou AM2302) est un capteur de température et d’humidité à sortie numérique
sérielle. Il est calibré et ne nécessite pas de composants supplémentaires pour pouvoir être utilisé.
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.
Caractéristiques :
Humidité (relative%) : 0 à 100 %
Précision (humidité) : ±2% RH (max ±5% RH)
Température : -40°C à +125°C
Précision (température) : ±0,5°C
Fréquence mesure : ½ Hz (2 mesure par seconde)
Tension d’alimentation : 3 à 5 volts
Résolution : 0.1
Mesure de la température et de l'humidité
La mesure de ces 2 variables se fait via la bibliothèque "DHT.h"
1
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
4. Initiation ARDUINO
Carte Arduino
La carte Arduino repose sur un circuit intégré (un mini-ordinateur appelé également micro-
contrôleur) associée à des entrées et sorties qui permettent à l'utilisateur de brancher différents
types d'éléments externes.
Le micro-contrôleur permet, à partir d'événements détectés par des capteurs, de programmer et
commander des actionneurs ; la carte Arduino est donc une interface programmable.
Programmation
Il est possible de programmer le comportement de la carte Arduino de deux manières différentes :
2
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Logiciel
L'environnement de programmation Arduino (IDE en anglais) est une application écrite en Java
inspirée du langage Processing. L'IDE permet d'écrire, de modifier un programme et de le convertir
en une série d'instructions compréhensibles pour la carte.
Structure d'un program
3
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Le programme est lu par le microcontrôleur de haut vers le bas. Une variable doit être déclarée
avant d'être utilisée par une fonction. La structure minimale est constituée :
– En tête : déclaration des variables, des constantes, indication de l'utilisation de
bibliothèques etc...
– Un setup (= initialisation) cette partie n'est lue qu'une seule fois, elle comprend les fonctions
devant être réalisées au démarrage (utilisation des broches en entrées ou en sortie, mise en
marche du midi, du port série de l’I2C etc.…)
– Une Loop (boucle) : cette partie est lue en boucle ! C'est ici que les fonctions sont réalisées.
En plus de cette structure minimale, on peut ajouter :
– Des « sous-programmes » ou « routines » qui peuvent être appelées à tous moments dans
la boucle, très pratiquer pour réaliser des morceaux de codes répétitifs.
– Des « callbacks », ce sont des fonctions qui sont rappelées automatiquement depuis une
bibliothèque.
4
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Structure
Fonctions de base Structures de contrôle Opérateurs
Ces deux fonctions sont if = (égalité)
obligatoires dans tout if...else + (addition)
programme en langage for - (soustraction)
Arduino : switch case * (multiplication)
void setup () while / (division)
void loop() do... while % (modulo)
break == (égal à)
continue != (différent de)
return < (inférieur à)
goto > (supérieur à)
<= (inférieur ou égal à)
>= (supérieur ou égal à)
&& (ET booléen)
|| (OU booléen)
! (NON booléen)
Variables et constantes
Les variables sont des expressions que vous pouvez utiliser dans les programmes pour stocker des valeurs,
telles que la tension de sortie d'un capteur présente sur une broche analogique.
Constantes prédéfinies Types des données Conversion des types de
Les constantes prédéfinies Les variables peuvent être de type variés données
du langage Arduino sont qui sont décrits ci-dessous. • char ()
des valeurs particulières Boolean • byte ()
ayant une signification char • int ()
spécifique.
byte • long ()
HIGH | LOW
int • float ()
INPUT | OUTPUT • word ()
unsigned int
true | false Portée des variables et
long
unsigned long qualificateurs
float (nombres à virgules) Portée des variables
double (nombres à virgules) static
Les chaînes de caractères volatile
Objet String NEW const
Les tableaux de variables
Le mot-clé void (fonctions)
word
PROGMEM
5
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Fonctions
Entrées/Sorties Temps Trigonométrie
Numériques unsigned long millis () sin(rad)
pinMode (broche, unsigned long micros () cos(rad)
mode) delay (ms) tan(rad)
digitalWrite(broche, delayMicroseconds (us)
valeur) Bits et Octets
int digitalRead(broche) Math lowByte ()
min (x, y) highByte ()
Entrées analogiques max (x, y) bitRead ()
int analogRead(broche) abs (x) bitWrite ()
analogReference(type) constrain (x, a, b) bitSet ()
map (valeur, toLow, fromHigh, bitClear ()
Entrées/Sorties Avancées toLow, toHigh) bit ()
tone() pow (base, exposant)
noTone() sq(x) Nombres randomisés
shiftOut(roche, sqrt(x) (hasard)
BrocheHorloge, randomSeed (seed)
OrdreBit, valeur) Pour davantage de fonctions long random(max)
unsigned long mathématiques, la librairie math.h : long random(min, max)
pulseIn(broche, valeur) log, log10, asin, atan, acos, etc...
Ajout d’une bibiliothéque
Commencez par télécharger le fichier .zip de votre bibliothèque exemple avec la
bibliothèque de statistique : Statistic
Une fois que vous avez votre dossier .zip, deux méthodes s’offrent à vous :
1) Dans l’IDE Arduino cliquez sur « croquis », allez sur « inclure un bibliothèque » puis
cliquez sur « ajouter la bibliothèque .ZIP » Sélectionnez alors le dossier .zip de la
bibliothèque.
Votre bibliothèque est désormais installée.
6
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
2) Vous décompressez le fichier et le déposez dans le dossier
C:\Users\*NomUtilisateur*\Documents\Arduino\libraries.
Puis vous redémarrer le logiciel Arduino afin de prendre les modifications en compte.
5. Manipulation
Exemple 1 : Arduino avec capteur DHT22 et LCD
Matériels nécessaires :
Carte Arduino
Capteur DHT22 (ou AM2302)
Ecran LCD 1602
Résistance de 4.7K ohm
Circuit sur proteus Arduino + DHT22 + LCD
7
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Le DHT22 a 4 broches : VCC (+5V), Data pin, NC (not connected pin) et GND (de gauche à
droite). Une résistance pull-up doit être ajoutée à la broche de données avec une valeur entre 4.7K
et 10K.
On peut ajouter une résistance variable de 10K pour contrôler le contraste de l'écran LCD et une
résistance de 330 ohms alimente la LED de rétroéclairage du LCD.
Code Arduino:
// Connexion d'Arduino avec le capteur d'humidité et de température DHT22
// inclure le code de la bibliothèque LCD
#include <LiquidCrystal.h>
// inclure le code de la bibliothèque DHT
#include "DHT.h"
// Definit la broche de l'Arduino sur laquelle la
// broche DATA du capteur DHT22 est reliee pin 8
#define DHTPIN 8
// Les connexions du module LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#define DHTTYPE DHT22 // Definit le type de capteur utilisé DHT22
// Déclare un objet de type DHT
// Il faut passer en paramètre du constructeur de l'objet la broche et le type de capteur
8
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT library
char temperature[] = "Temp = 00.0 C";
char humidity[] = "RH = 00.0 %";
// Fonction setup(), appelée au démarrage de la carte Arduino
void setup()
{
// configurer le nombre de colonnes et de lignes de l'écran LCD
lcd.begin(16, 2); // Initialisation d'un écran LCD 16 colonne par 2 ligne
dht.begin();
}
// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {
// attendre 1s entre les lectures
delay(1000);
// Lecture de l'humidité
int RH = dht.readHumidity() * 10;
//Lecture de la température en degré Celsius
int Temp = dht.readTemperature() * 10;
// Vérifier si une lecture a échoué et sortir (pour réessayer).
if (isnan(RH) || isnan(Temp)) {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Error");
return;
}
if(Temp < 0){
temperature[6] = '-';
Temp = abs(Temp);
}
else
temperature[6] = ' ';
temperature[7] = (Temp / 100) % 10 + 48;
temperature[8] = (Temp / 10) % 10 + 48;
temperature[10] = Temp % 10 + 48;
temperature[11] = 223; // Degree symbol ( °)
if(RH >= 1000)
humidity[6] = '1';
else
humidity[6] = ' ';
humidity[7] = (RH / 100) % 10 + 48;
humidity[8] = (RH / 10) % 10 + 48;
humidity[10] = RH % 10 + 48;
lcd.setCursor(0, 0);
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print(humidity);
}
9
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Exemple 2 : Arduino avec capteur LM35 et LCD
Matériels nécessaires :
Carte Arduino
Capteur LM35
Ecran LCD 1602
1.2 Ce capteur est-il actif ou passif ? Justifier la réponse.
2.2 Quelle est la sensibilité de ce capteur ?
2.3 Ecrire un code sur Arduino qui permet d’afficher la valeur de température détecter par le
capteur LM35.
N.B : Ainsi, si vous utilisez analogRead() pour lire la tension à l'une des entrées analogiques de
l'Arduino, vous obtiendrez une valeur comprise entre 0 et 1023.
Pour convertir cette valeur en tension de sortie du capteur, vous pouvez utiliser :
VOUT = lecture de l'ADC * (Vref / 1023)
2.4 en cas, d’une valeur négative qu’est ce qu’on remarque ?
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(INTERNAL) 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(INTERNAL)
Pour un retour à la tension par défault, Vréf = 5 V, utiliser analogReference(DEFAULT)
10
Travaux pratiques capteurs, Actionneurs, robotique
ISTIC
Noté Bien :
Ne connectez rien à la broche AREF si une tension de référence interne est utilisée.
Si vous connectez quelque chose sur la broche AREF sans être dans le mode EXTERNAL, vous
allez déclencher un court-circuit à l'intérieur du microcontrôleur, ce qui lui sera fatal.
2.5 Calculer la nouvelle résolution entre les lectures.
2.6 En utilisant la nouvelle tension de référence, modifier le programme.
2.7 faire le schéma sur proteus et ecrire un programme qui, en cas d’appui sur un interreupteur,
calcule la valeur moyenne de la température, en se basant sur 5 mesures différentes, ensuite affiche
le résultat trouvé sur l'afficheur LCD.
11