Capteur de lumière - partie 2

Objectif

On souhaite écrire un programme faisant la lecture de l'entrée analogique A0 et affichant la valeur de la résistance de la photorésistance.

Chaîne de mesure

Loi des mailles (loi d'additivité des tensions) :

\(5\;V=U_R+U_r\)

Loi d'Ohm : \(I=\frac{U_r}{r}\) et \(U_R=R\times I\)

\(5\;V-U_r=\frac{R}{r}\times U_r\)

\(R=r\times \left( \frac{5\;V}{U_r}-1 \right)\)

SyntaxeEnvironnement de programmation

Le logiciel Arduino permet deux choses :

  1. Rédiger les instructions que le microcontrôleur devra exécuter et les lui téléverser

  2. Accéder par le moniteur série aux mesures effectuées (print)

Environnement de programmation et structure d'un programme

MéthodeTravail à réaliser

  • Lancer le logiciel Arduino

  • Copier/coller le programme ci-dessous

  • Le compiler pour vérifier l'absence d'erreur

  • Connecter le microcontrôleur à l'ordinateur et sélectionner le port COM dans le menu /Outils

  • Téléverser le programme au microcontrôleur

  • Ouvrir le moniteur série et vérifier la cohérence du fonctionnement du programme.

1
const int sensorPin = A0;
2
int sensorValue = 0;
3
float U_r, r, R;
4
5
void setup() {
6
  r = 1000.0;
7
  Serial.begin(9600);
8
}
9
10
void loop() {
11
  sensorValue = analogRead(sensorPin);
12
  U_r = sensorValue*5.0/1023;
13
  R = r*(5.0/U_r - 1);
14
  Serial.println(R);
15
}

RemarqueConversion analogique numérique

Le potentiel électrique, en volt, qui peut prendre des valeurs entre \(0\) et \(5\;V\) et dont on fait l'acquisition sur l'entrée analogique A0 est converti en un nombre \(N\) sur 10 bits.

Autrement dit, la variable sensorValue prend des valeurs entières comprises entre \(0\) et \(2^{10}-1=1023\).

Conversion analogique numérique

Les valeurs des tensions analogiques évoluent entre 0 et 5 V. Le CAN est sur 10 bits. Donc les valeurs numériques stockées sont entre 0 et 2^10 - 1 = 1023.

Dans le programme Arduino, on peut retrouver la valeur du potentiel électrique en volt en faisant l'opération inverse :

\(U_r=sensorValue\times\frac{5.0}{1023}\)

c'est-à-dire : U_r = sensorValue*5.0/1023;