Microcontrôleur Arduino et circuit RC

par Christophe Bellessort.

Utilisation d’une carte Arduino Uno pour mesurer la constante de temps d’un circuit RC (programme de Terminale)

Le montage proposé utilise une carte Arduino Uno associée à un montage RC afin de mesurer la valeur de la constante de temps.
On relève la tension aux bornes du condensateur lors de sa charge. L’échelon de tension est appliqué à l’aide d’une sortie numérique de la carte Arduino.
$$U_0 = 5\ \mathrm V$$


Lors de la charge, la tension UC aux bornes du condensateur varie en fonction du temps selon la relation :
$$ U_C = U_0 \times \left(1- e^{-\dfrac{t}{\tau}} \right) $$
Au bout d’une durée égale à la constante de temps la charge est effectuée à 63,2%, donc :
$$ U_C \left(\tau \right)=0{,}632 \times U_0 $$

La tension UC est mesurée sur l’entrée analogique de la carte Arduino. Le convertisseur analogique/numérique de la carte renvoie 1023 si la tension lue vaut 5 V. La valeur correspondant à une charge à 63,2% est 647.

On utilise la carte Arduino pour mesurer le temps nécessaire pour atteindre 647 sur l’entrée analogique, condensateur initialement déchargé.
Le principe de la mesure est le suivant : une fois le condensateur déchargé, on entame sa charge en relevant la date t0, on boucle sans rien faire en mesurant à chaque tour le niveau lu sur l’entrée analogique. Quand il atteint la valeur 647, on sort de la boucle et on mesure la date t1.
La constante de temps se déduit par une simple différence.

Remarque importante
Pour obtenir des mesures suffisamment précises, il faut des constantes de temps plutôt longues, de l’ordre de la seconde. La durée d’une boucle incluant la mesure de la tension est de l’ordre du dixième de milliseconde, ce qui ne permet pas de mesurer des charges trop rapides.

Programme pour la carte Arduino

  1. unsigned long temps0, temps1;  // Deux variables temps pour mesurer tau
  2. float tau;  // Constante de temps (décimal)
  3. int pinU = 2;  // Broche alimentant le circuit RC
  4.  
  5. void setup() {
  6.   // put your setup code here, to run once:
  7.   Serial.begin(9600) ;  // Initialisation de la communication série
  8.   pinMode(pinU, OUTPUT);  // On définit la borne d'alimentation du circuit en Sortie
  9.   digitalWrite(pinU, 0);  // On applique une tension nulle en entrée du circuit RC
  10. }
  11.  
  12. void loop() {
  13.   // put your main code here, to run repeatedly:
  14.   digitalWrite(pinU, 0);
  15.   Serial.println("Décharge du condensateur");
  16.   Serial.println("Pressez l'interrupteur poussoir de court-circuit si décharge trop longue");
  17.   while (analogRead(A0) > 0) {  // On s'assure que le condensateur se décharge
  18.     Serial.println(analogRead(A0));  // On lit la tension aux bornes du condensateur (valeur entre 0 et 1023)
  19.     delay(500);
  20.   }
  21.   Serial.println("La mesure va commencer dans 5 secondes");  // On va commencer la mesure
  22.   Serial.println("Lachez l'interrupteur de court-circuit");
  23.   delay(5000); // On attends 5 secondes
  24.   Serial.println("Mesure en cours");
  25.   temps0 = micros();  // On relève t0 en microsecondes
  26.   digitalWrite(pinU, 1);  // On applique 5V en entrée du circuit RC
  27.   while (analogRead(A0) < 647) {  // Tant que le niveau lu est inférieur à 647 (63.2% de 1023)
  28.     // on boucle sans rien faire
  29.   }
  30.   temps1 = micros();  // Une fois sorti de la boucle on mesure t1
  31.   tau = (temps1 - temps0) * 1e-6;  // Calcul de tau, converti en secondes
  32.   Serial.print("Constante RC en s : ");
  33.   Serial.println(tau, 3); // On affiche tau avec 3 chiffres après la virgule
  34.   Serial.println("Nouvelle mesure dans 5 secondes");
  35.   delay(5000);
  36. }

Deux résultats de mesure
Les mesures ci-dessous ont été réalisées après avoir mesuré les valeurs des résistances à l’ohmmètre.
$$C = 100\ \mathrm{\mu F}\ et\ R = 9{,}81\ \mathrm{k \Omega}\ donne\ \tau_{th}=0{,}981\ \mathrm s\ et\ \tau_{mes} = 1{,}044\ \mathrm s$$
$$C = 92{,}8\ \mathrm{nF}\ et\ R = 10{,}6\ \mathrm{M \Omega}\ donne\ \tau_{th}=1{,}04\ \mathrm s\ et\ \tau_{mes} = 1{,}061\ \mathrm s$$

Documents joints