Arduino TP2 – Capteurs analogiques | Dr Ousmane SADIO
_______________________________________________________________________________________________________________
TP2 – Capteurs analogiques
Connaissance du mode de fonctionnement des capteurs analogiques. Lire la valeur des signaux
analogiques reçues sur les broches d’entrées analogique de la carte Arduino. Exploiter les fiches
techniques des capteurs afin de convertir ces valeurs analogiques en grandeurs physique. Dans
certaines situations, un étalonnage des capteurs sera effectué.
A. Convertisseur Analogique/Numérique (CAN) sur Arduino
Les microcontrôleurs ATmega utilisés avec les cartes Arduino contiennent un convertisseur analogique-
numérique (CAN ou ADC : Analogue to Digital Converter) à approximations successives (meilleur
compromis entre vitesse et résolution.).
Le convertisseur de l’Arduino UNO (ATmega328p) possède 6 voies d’entrées multiplexées, avec une
résolution sut 10 bits, une précision absolue de ±2LSB, un temps de conversion de 13 cycles d’horloge.
• Principe de fonctionnement
Le convertisseur étant un CAN a 10 bits unipolaire, alors son quantum 𝑞 se calcule ainsi :
𝑉𝑟𝑒𝑓
𝑞=
2𝑛
Sachant que par défaut 𝑉𝑟𝑒𝑓 = 5𝑉 et 𝑛 = 10, alors on a un quantum 𝑞 = 48,82 𝑚𝑉. Le résultat
numérique 𝑅𝑛 d’une entrée analogique 𝑉𝑒 s’obtient par la formule suivante :
𝑉𝑒 𝑉𝑒
𝑅𝑛 = −1= × 2𝑛 − 1
𝑞 𝑉𝑟𝑒𝑓
La plage de la tension d’entrée 𝑉𝑒 est comprise entre 0𝑉 et 𝑉𝑟𝑒𝑓 − 1𝐿𝑆𝐵 (≈ 5𝑉). Ainsi pour 𝑉𝑒 = 2.5𝑉
on a 𝑅𝑛 = (511)10 = (0111111111) 2, notons que la valeur 𝑅𝑛 est comprise entre 0 et 1023.
• Utilisation de l’environnement de développement Arduino
Le système Arduino nous permet de faire de la conversion analogique numérique grâce à la fonction
analogRead(). Cette fonction prend en paramètre le numéro de l’une des broches d’entrée analogique
(0−5 Arduino Uno; 0−15 Arduino Mega) et renvoie le résultat numérique 𝑅𝑛 correspondant. A partir de
la valeur 𝑅𝑛 on peut retrouver la valeur analogique correspondante, grâce à la formule :
(𝑅𝑛 + 1)
𝑉𝑒 = 𝑉𝑟𝑒𝑓 = (𝑅𝑛 + 1) × 𝑞
2𝑛
Arduino propose une autre fonction capable d’effectuer cette opération. Il s’agit de la fonction map().
La valeur renvoyée par cette fonction correspond à 𝑉𝑒 .
______________________________________________________________________________
UVS 2021 – 2022 | Licence 2 Robotique
Arduino TP2 – Capteurs analogiques | Dr Ousmane SADIO
_______________________________________________________________________________________________________________
B. Thermistor
Une thermistance est une “résistance thermique” : sa valeur varie en fonction de la température. Il en
existe deux types : NTC (Negative Temperature Coefficient) et PTC (Positive Temperature Coefficient).
Dans ce qui suit, nous étudierons un thermistor de type NTC.
Arduino ne peut pas mesurer la résistance directement. On va donc utiliser un diviseur de
tension afin de mesurer la tension aux bornes de la résistance R puis en déduire la résistance 𝑅𝑡
du thermistor.
𝑅 𝑉𝑖𝑛
𝑉𝐴 = 𝑉𝑖𝑛 ⇒ 𝑅𝑡 = 𝑅 ( − 1)
𝑅 + 𝑅𝑡 𝑉𝐴
Enfin, l'équation de Steinhart-Hart est utilisée pour convertir la résistance de la thermistance
en une mesure de température en Kelvin.
1 1
= 𝐴 + 𝐵𝑙𝑛𝑅𝑡 + 𝐶(𝑙𝑛𝑅𝑡 )3 ⇒ 𝑇 =
𝑇 𝐴 + 𝐵𝑙𝑛𝑅𝑡 + 𝐶(𝑙𝑛𝑅𝑡 )3
Avec A, B et C sont les coefficients de Steinhart-Hart, qui varient en fonction du type et du
modèle de thermistance et de la plage de température concernée. Pour 𝑅 = 10𝑘Ω on a :
1024
𝐿𝑅 = 𝑙𝑜𝑔𝑅𝑡 = 𝑙𝑜𝑔 (10000 ( − 1))
𝑅𝑛
1
𝑇(𝐾𝑒𝑙𝑣𝑖𝑛) =
0.001129148 + (0.000234125 + 0.0000000876741𝐿2𝑅 ) 𝐿𝑅
𝑇(𝐶𝑒𝑙𝑠𝑖𝑢𝑠) = 𝑇(𝐾𝑒𝑙𝑣𝑖𝑛) − 273.15
• Pratique
Réaliser le montage ci-dessous puis écrire un programme pour déterminer la température de la
thermistance et l’afficher.
Indication : voici un bout de code des formules présentées ci-haut.
// Rn est la valeur de sortie du Convertisseur A/N
// Lr = Log Rt
double Lr = log(10000.0 * ((1024.0/Rn - 1)));
// Temperature en Kelvin
double T_K = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Lr * Lr ))*Lr);
// Convertir de Kelvin à Celsius
float T_C = T_K - 273.15;
______________________________________________________________________________
UVS 2021 – 2022 | Licence 2 Robotique
Arduino TP2 – Capteurs analogiques | Dr Ousmane SADIO
_______________________________________________________________________________________________________________
C. Capteur LM35
Le LM35 est un circuit intégré calibré en usine pour être utilisé comme capteur de température de
précision. Sa tension de sortie est linéairement proportionnelle à la température suivant la relation :
𝑉𝑜𝑢𝑡 = 10𝑚𝑉/°𝐶 × 𝑇°𝐶
La tension de sortie 𝑉𝑜𝑢𝑡 augmente de 10 mV chaque fois que la température augmente de 1°C.
• Pratique
Ecrire un programme capable de déterminer la température du capteur LM35 puis de l’afficher la valeur.
______________________________________________________________________________
UVS 2021 – 2022 | Licence 2 Robotique
Arduino TP2 – Capteurs analogiques | Dr Ousmane SADIO
_______________________________________________________________________________________________________________
D. Capteur d’eau
Le module est composé de trois parties. Une partie avec de l’électronique et des pins de connexion, une
résistance de pull-up de 1MΩ et des pistes conductrices. Une série de pistes est reliée à la masse. Entre
se trouvent des pistes qui vont permettre de faire la détection et envoyer un signal sur la sortie S.
• Pratique
Ecrire un programme capable de lire la tension générée par le capteur de niveau d’eau puis de
l’afficher.
Bout de code des formules présentées ci-haut
// Value est la valeur de sortie du Convertisseur A/N
if(((HistoryValue>=value) && ((HistoryValue - value) > 10)) ||
((HistoryValue<value) && ((value - HistoryValue) > 10)))
{
[Link]("La quantite d'eau detectee: " + String(value));
HistoryValue = value;
}
• Etalonnage
Relever la valeur affichée sur le moniteur lorsque le capteur est à sec, juste submergé, à moitié submergé
et totalement submergé. Ecrire alors un programme qui détermine l’état du capteur en fonction de la
valeur mesurée.
______________________________________________________________________________
UVS 2021 – 2022 | Licence 2 Robotique
Arduino TP2 – Capteurs analogiques | Dr Ousmane SADIO
_______________________________________________________________________________________________________________
E. Contrôle de l’éclairage
Un potentiomètre est un bouton qui fournit une résistance variable. Il est souvent constitué de
3 bornes dont les deux extrêmes servent pour l’alimentation alors que celle du milieu fournie
une tension analogique proportionnelle à la position du curseur.
• Pratique
Le but du montage est de commander l’intensité lumineuse de la LED à partir du potentiomètre.
Pour ce faire, écrire un programme capable de déterminer la tension générée par le
potentiomètre puis de générer un signal PWM de rapport cyclique proportionnel à cette tension.
Indication : la valeur numérique générée par le potentiomètre est comprise entre 0 (0V) et1023
(5V), et le rapport cyclique sur Arduino s’éteint entre 0 (0%) et 255 (100%).
F. Automatisation de l’éclairage
La photorésistance est une résistance dont la valeur résistive change en fonction de la quantité de lumière
qui atteint le capteur. Elle peut être ainsi assimilable à un potentiomètre commandé par une lumière.
• Pratique
1. Réaliser un capteur de luminosité qui permet d’afficher le niveau d’obscurité de la pièce (sous forme
de valeur numérique) et en même temps d’allumer une LED dès qu’un seuil d’obscurité est atteint.
2. Modifier le code afin d’adapter le niveau (intensité) d’éclairage en fonction de la luminosité
ambiante.
______________________________________________________________________________
UVS 2021 – 2022 | Licence 2 Robotique
Arduino TP2 – Capteurs analogiques | Dr Ousmane SADIO
_______________________________________________________________________________________________________________
______________________________________________________________________________
UVS 2021 – 2022 | Licence 2 Robotique