Merci à tous pour vos retour,
pour répondre à Kamil, le temps caractéristique de décharge a été choisi pour les tests, j'irais ensuite vers un tau autour de 1,2 s.
Merci à dbrion06 pour ses précieux conseils qui sont encore trop techniques pour moi qui débute en programmation.
j'aurai voulu adapter le fichier ci-dessous à celui de base qui convient à mon montage.
/* ----------------------------------------------------------------------
Suivi conductimétrique suivie avec Regressi
adapté par Serge Chamelot d'après module pour Regressi
Index of /WordPress/wp-arduino
Ce programme peut être adapté à n'importe quel appareil de mesure
qui dispose d'une sortie en tension 0-5V */
// QUELQUES CONSTANTES A MODIFIER EN CONNAISSANCE DE CAUSE
const float Npalliers = 1024.0; // en 10 bits, 1024 palliers - Ne pas modifier
const int plageTension = 5.0; // plage de numérisation 5V - Ne pas modifier
const int decoupage = 10; // en régime stable, 1 mesure est réalisée tous les 10ièmes de la duréée d'acquisition
const float EcartTension = 0.2; // écart à dépasser pour déclencher une mesure
// ------------------------------------------------------------------------//
int timeRes; // période d'échantillonnage en ms
unsigned long dureeAcquisition; // durée totale de l'acquisition en s
unsigned long tempsZero;
unsigned long tempsCourant;
int topDepart = 0;
String envoi;
float oldtension ;
float tension ;
unsigned long tempsPrec;
void setup() {
Serial.begin(9600);
tempsPrec = millis();
tempsZero = millis();
envoi = "0";
}
void lecture()
{
float tensionInt;
float ecartAbsolu ;
// Lecture et conversion des données
tensionInt = analogRead(A0); // entrée analogique A0 pour mesurer une valeur entre 0 et 1023
tension = (tensionInt)*plageTension/Npalliers; //
ecartAbsolu = abs(tension-oldtension);
// Envoie les données seulement si écart suffisant or attente suffisante
if ((ecartAbsolu >=EcartTension) or ((tempsCourant-tempsPrec)>(dureeAcquisition/decoupage))) {
Serial.print(tempsCourant/1000.0); // donne la date en secondes
Serial.print('\t'); // insère une tabulation
Serial.println(tension); // donne la valeur de tension
oldtension = tension;
tempsPrec = millis()-tempsZero;
}
}
// Pour la fonction suivante
// 3 commandes possibles à saisir dans le moniteur série d'Arduino
// échantillonnage : e100 où 100 est un exemple de période d'échantillonnage en ms
// durée acquisition : d20 où 20 est un exemple de durée en seconde
// déclancher manuellement une mesure m ou M
// s ou S : pour lancer l'acquisition
void reglages()
{
String calibre;
String prm;
String unite;
String rec;
int posCmaj;
while (topDepart==0) {
envoi = Serial.readString();
envoi.toLowerCase();
// Cherche la position du caractère D ou d pour fixer la durée
if (envoi.startsWith("d")) {
prm = envoi.substring(posCmaj + 1); // Prend la valeur située après le d
dureeAcquisition=prm.toInt()*1000; // Conversion en milliseconde
}
// Cherche la position du caractère E ou e pour fixer la période d'échantillonage
if (envoi.startsWith("e")) {
prm = envoi.substring(posCmaj + 1); // Prend la valeur située après le e
timeRes = prm.toInt();
}
// Cherche la position du caractère S ou s
if (envoi.startsWith("s")) {
topDepart = 1; // déclenche l'acquisition
tempsZero = millis();
Serial.print("t"); // et inscrit dans le moniteur les têtes de colonnes
Serial.print('\t');
Serial.println("Uc");
Serial.print("s");
Serial.print('\t');
Serial.println("V");
}
}
}
// Boucle principale
void loop() {
tempsCourant = millis()-tempsZero;
if ( topDepart == 0) {
reglages();
} else {
if (tempsCourant<=dureeAcquisition) {
lecture(); // lance la lecture d'une donnée avec un delay de timeRes
delay(timeRes);
} else {
topDepart=0;
}
}
}