Le dipôle est alimenté entre les bornes Power GND et Digital 8
La mesure se fait sur la borne Analog IN A0
S’il n’est pas initialement déchargé, le condensateur est déchargé
Avec R = 10 kΩ et C = 1000 μF, il faut compter environ moins de 1 min de décharge − si nécessaire − et 1 min pour la charge. Un timer stoppe les mesures au bout de 150 s.
La chaîne "EndOfData" indique la fin des mesures. Elle permet à un script python de fermer le port série en fin de mesures.
Sortie série
L’affichage de la sortie série peut se faire de trois manières différentes :
En utilisant le moniteur série de l’IDE arduino, accessible par CTRL+MAJ+M
// 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é
}
}
}