/* Charge d'un condensateur sur la sortie numérique 8 de la carte UNO * Te = 10ms (période d'acquisition) * Suivi graphique de uc en exécutant avec le traceur série * abscisse = temps(ms)/10 = temps(cs) * affichage du temps caractéristique avec une incertitude de Te/2 = 5ms */ // Déclaration des contantes byte Te = 10; // durée fixe entre deux acquisitions (petite valeur entière en ms) // Déclaration des variables unsigned long t; // temps qui prendra des grandes valeurs entières positives unsigned long t0; // origine des temps (début charge) unsigned long t1 = 0; // servira à mémoriser l'instant de l'acquisition unsigned int tau = 0; // temps caractéristique en ms et en valeur entière positive float uc; // tension uc qui prendra des valeurs décimales void setup() { // Initialisation des ports pinMode(8, OUTPUT); // définit la broche numérique 8 comme une sortie de la carte UNO Serial.begin(9600); //ouvre une communication avec le port série de l'ordinateur // Dans un premier temps, on s'assure que le condensateur est complètement déchargé digitalWrite(8,LOW); // sortie numérique 8 mise à 0,0V Serial.println("Patientez_3s_SVP décharge..."); // affiche un texte via le port série (en légende si traceur OU suivi d'un passage à la ligne si moniteur) delay(3000); // délai de décharge (valeur à adapter au temps caractéristique théorique RC) // Dans un deuxième temps, charge du condensateur Serial.println("uc=f(t) charge..."); uc = float(analogRead(A0))*5/1023; // lit la valeur numérique sur l'entrée A0 et la convertit en volts (0,0-5,0V = 0-1023) Serial.println(uc); // affiche via le port série la valeur de uc (0,0V attendu), suivi d'un passage à la ligne si moniteur OU son point représentatif si traceur digitalWrite(8,HIGH); // sortie numérique 8 mise à 5,0V (= 1023) t0 = millis(); // définition de l'origine des temps à l'aide de la fonction millis() qui renvoie la // date en ms de l'horlorge interne d'Arduino prise à partir de sa mise sous tension while( analogRead(A0) < 1022 ) { // boucle qui s'exécute tant que uc < 5,0V ; // éviter 1023 comme valeur de comparaison car parfois cette valeur n'est pas atteinte t = (millis() - t0) ; // mesure du temps écoulé depuis l'origine des temps t0 if ((t - t1) >= Te) { // bloc qui ne sera exécuté que si 10ms se sont écoulées depuis t1 uc = float(analogRead(A0))*5/1023; Serial.println(uc); // affiche via le port série la valeur de uc, suivi d'un passage à la ligne si moniteur OU son point représentatif si traceur t1 = t; // mémorise l'instant de l'acquisition if ((analogRead(A0) >= 0.63*1023) and (tau == 0)) { // condition de mesure de tau : à 63% de la tension de charge tau = (t-5); // mesure de tau à mi-intervalle avec l'acquisition précédente de uC } } } digitalWrite(8,LOW); // remise à 0,0V de la sortie 8 Serial.print("uc(V)=f(t(cs)) "); // affiche du texte via le port série Serial.print("tau="); // Serial.print(tau); // affiche la valeur de tau via le port série Serial.println("ms+/-5ms"); // affiche du texte via le port série, et passe à la ligne si moniteur } void loop() { }