Carte Arduino, deux résistances, une platine d’essai et le ou les condensateurs à mesurer.
L’essai consiste à mesure le temps de charge d’un condensateur au travers d’une résistances
pour déterminer la capacité du condensateur.
Il s’inspire du projet de Paul Badger mis en ligne à l’adresse suivante :
https://docs.arduino.cc/tutorials/generic/capacitance-meter
Nous savons que la charge d'un condensateur au travers d’une résistance se fait selon une fonction exponentielle. L’étude de cette fonction nous apprends que la charge aura atteint un niveau de 63% au bout d’un temps t = R C.
Courbe de charge d'un condensateur
Connaissant la valeur de la résistance de charge R, la mesure du temps t nous permet donc de calculer C = t/R
La capacité à mesurer la capacité est chargé au travers de la résistance de 10 kΩ
raccordée à la broche 13 qui est configurée en sortie.
La broche n°11, raccordée à la résistance de 220 Ω, n'est configurée en sortie
que durant la décharge du condensateur. Elle est ensuite reconfigurée en entrée.
Elle retourne de cette façon en haute impédance afin de la déconnecter du montage durant la mesure suivante.
La carte Arduino calcule C=t/R et transmettra le résultat au PC via le câble USB pour y être affiché dans la console de l'IDE Arduino.
/* Capacimètre T = R.C * ------------------------------------------------------------------------------------ Le code de ce projet est largement inspiré d'un autre écrit en 2008 par un certain Paul Badger qu'il partage à cette adresse : https://docs.arduino.cc/tutorials/generic/capacitance-meter L'adaptation que j'en ai faite a consisté à traduire les commentaires et les noms de variables en français puis à simplifier le code pour mieux en faire ressortir l'essentiel. * ------------------------------------------------------------------------------------ * * Détermination de la capacité d'un condensateur en mesurant la durée de la * charge au travers d'une résistance. * * Base théorique: * Le condensateur se charge au travers d'une résistance en T secondes ( T = R * C) * T = Durée de la charge en seconde * R = Résistance en ohms * C = Capacité en farads (1 microfarad (µF) = 0,000001 F * * Le temps RC est égal au temps qu'il faut pour charger le condensateur * 63,2% de sa charge, soit 63,2% de la tension finale (5V dans cet essai) * La tension aux bornes du condensateur est donc de 63,2% de 5V à l'instant T. * * Configuration du circuit: * Le côté négatif du condensateur est raccordé au 0V (GND) * Le côté positif est raccordé à deux résistances : * - l'une de 10 kΩ pour charger le condensateur * - l'autre de 220 Ω pour décharger le condensateur. * Le côté positif du condensateur est aussi relié à l'entrée analogique A0 pour * mesurer la tension. (0 = 0V ➔ 1023 = 5V) */ #define testCharge 0 // Entrée analogique pour mesurer de la charge #define borneCharge 13 // Borne 13 ➔ résistance de 1o kΩ pour charger la capa #define borneDecharge 11 // Borne 11 ➔ résistance de 220 Ω pour décharger la capa #define valeurResistance 10000 // 10 kΩ unsigned long instantDeDepart; // Lecture du chrono au début de la charge unsigned long tempsEcoule; // Temps écoulé pour charger le condensateur à 63,2% float capacite; // Nombres flottants (avec décimales) pour calculs précis int numeroEssai = 0; // Pour afficher le nombre d'essais void setup() { pinMode(borneCharge, OUTPUT); // Broche 13 en sortie pour charger le condensateur digitalWrite(borneCharge, 0); // Mise à 0 au départ ⇢ condensateur déchargé Serial.begin(9600); // Initialisation du port com vers moniteur } void loop() { digitalWrite(borneCharge, 1); // Mettre borne 13 à 5 V = charger le condensateur instantDeDepart = millis(); // Lecture de l'instant de départ while(analogRead(testCharge) < 648) { // Attendre que la charge soit à 63,2% de la tension maximale (1023 = 5V) // 647 = 63.2% de 1023 } tempsEcoule = millis() - instantDeDepart; // Déduire la capacité du condensateur du temps écoulé, compté en millisecondes // Calcul de la capacité : t = R.C ⟹ C = t/R // NB. Il faudrait diviser le temsp par 1.000 pour le compter en seconde // puis multiplier le résulat par 1.000.000 pour avoir la capacité en µF // Au final, multiplier par 1.000.000/1.000, c'est multiplier par 1.000 capacite = ((float)tempsEcoule / valeurResistance) * 1000; // Impression du résultat sur le moniteur : Serial.print(numeroEssai); // Afficher le n° de l'essai Serial.print(" "); // suivi d'un espace numeroEssai++; // +1 au nombre d'essais Serial.print(tempsEcoule); // Affichage du temps écoulé Serial.print(" ms "); // puis les unités (millisecondes) Serial.print((long)capacite); // Afficher la capacité Serial.println(" micro farad"); // en µF // Décharge du condensateur digitalWrite(borneCharge, 0); // Arrêter la charge ➔ sortie à 0V pinMode(borneDecharge, OUTPUT); // Mettre la broche 11 en sortie digitalWrite(borneDecharge, LOW); // pour la forcer à 0 V while(analogRead(testCharge) > 0) { // Tant que la charge n'est pas revenue à 0 } // Attendre la décharge complète du condensateur pinMode(borneDecharge, INPUT); // Remettre la sortie 11 en entrée = haute impédance }
La simulation de cet essai sur TINKERCAD est accessible en suivant
ce lien.
Pour voir le résultat, il faut faire apparaître le code dans la simulation
et cliquer sur "Moniteur série" au bas du code.