Activité numérique - circuit RC et Arduino - Physique-Chimie

Activité numérique - circuit RC et Arduino

, par Animatrice du Site Disciplinaire

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

unsigned long temps0, temps1 ; // Deux variables temps pour mesurer tau
float tau ; // Constante de temps (décimal)
int pinU = 2 ; // Broche alimentant le circuit RC

void setup()
// put your setup code here, to run once :
Serial.begin(9600) ; // Initialisation de la communication série
pinMode(pinU, OUTPUT) ; // On définit la borne d’alimentation du circuit en Sortie
digitalWrite(pinU, 0) ; // On applique une tension nulle en entrée du circuit RC

void loop()
// put your main code here, to run repeatedly :
digitalWrite(pinU, 0) ;
Serial.println("Décharge du condensateur") ;
Serial.println("Pressez l’interrupteur poussoir de court-circuit si décharge trop longue") ;
while (analogRead(A0) > 0) // On s’assure que le condensateur se décharge
Serial.println(analogRead(A0)) ; // On lit la tension aux bornes du condensateur (valeur entre 0 et 1023)
delay(500) ;

Serial.println("La mesure va commencer dans 5 secondes") ; // On va commencer la mesure
Serial.println("Lachez l’interrupteur de court-circuit") ;
delay(5000) ; // On attends 5 secondes
Serial.println("Mesure en cours") ;
temps0 = micros() ; // On relève t0 en microsecondes
digitalWrite(pinU, 1) ; // On applique 5V en entrée du circuit RC
while (analogRead(A0) < 647) // Tant que le niveau lu est inférieur à 647 (63.2% de 1023)
// on boucle sans rien faire

temps1 = micros() ; // Une fois sorti de la boucle on mesure t1
tau = (temps1 - temps0) * 1e-6 ; // Calcul de tau, converti en secondes
Serial.print("Constante RC en s : ") ;
Serial.println(tau, 3) ; // On affiche tau avec 3 chiffres après la virgule
Serial.println("Nouvelle mesure dans 5 secondes") ;
delay(5000) ;

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$$

Article proposé par : Christophe Bellessort

Documents joints