Sketch arduino pour l’étude de la charge du condensateur d’un dipôle RC série

Montage

Sortie série

L’affichage de la sortie série peut se faire de trois manières différentes :

Code à téléverser

// DÉCLARATIONS // Constantes const int voltMetre = A0; // Plus explicite // Variables globales int digital_u_C = 0; // Tension aux bornes de C de 0 à 1023. float u_C = 0; // Tension aux bornes de C de 0 à 5 V. bool running = true; // Booléen de contrôle de boucle long start_time; // Date de début des mesures - long est un grand integer // INITIALISATIONS void setup() { pinMode(8, OUTPUT); // Configuration du pin 8 en sortie => applique une tension aux bornes du dipôle RC Serial.begin(9600); // Initialisation de la communication à 9600 bauds Serial.println(); // Passe à la ligne // Charge du dipôle pour pouvoir faire une décharge digital_u_C = analogRead(voltMetre); // Lecture de A0 if (digital_u_C > 3) // Si le condensateur est chargé il faut le décharger { Serial.print("Veuillez patienter ...."); while (digital_u_C > 3) // Tant que le condensateur n'est pas déchargé { digitalWrite(8, LOW); // On applique 0 V aux bornes du dipôle RC delay (2000); // On patiente 2 s Serial.print(".."); // On indique que ça fonctionne digital_u_C = analogRead(voltMetre); // Lecture de la nouvelle valeur } } // Le condensateur est déchargé Serial.println(); // Passe à la ligne start_time = millis(); // Déclenche le chrono - millis() indique le temps qui s'est écoulé depuis le démarrage du microcontrôleur digitalWrite(8, HIGH); // On démarre la charge en appliquant 5 V aux bornes du dipôle } // ENDLESS LOOP void loop() { if (running) // Si le bolléen de contrôle de boucle est true { digital_u_C = analogRead(voltMetre); // Lecture de A0 u_C = digital_u_C *5 /1023; // Conversion en Volt // Sortie des mesures // La sortie série est une chaîne brute encodée en Win-1252 Serial.print(millis() - start_time); // Date Serial.print("\t"); // Séparation date tension - \t sera decodé comme une tabulation Serial.println(u_C); // Tension aux bornes de C // Intervalle entre deux mesures delay(10); // On patiente 10 ms if ((millis() > 150000) || (digital_u_C > 1017)) // Si le sketch tourne depuis plus de 150 s - donné en ms - ou que la tension est supérieure à 1017 { Serial.println("EndOfData"); // On indique que la manip est finie running = false; // Le booléen est basculé } } }