CE SKETCH DOIT ÊTRE TESTÉ


Sketch arduino pour mesurer la température et le débit de l’eau sortant d’un échangeur

Montage

Sortie série

Code à téléverser

/** * mesure_temperature_debit.ino * Ce sketch affiche la température mesurée par une CTN, et le débit par un capteur YF-S401-03507 (0.3 à 6 L/min) * * Pour la temperature : la CTN forme un pont diviseur (alimenté en 5 V) avec une résistance 10kΩ. * Pour le débit : on compte les interruptions provoquées par le capteur pendant 1 s ie la fréquence * La datasheet donne : f (Hz) = 43 × Dv (L/min) */ // 1. Déclarations des constantes et variables globales // Capteur 5 V −− CTN −− R=10kΩ −− GND const byte TEMP_SENSOR_PIN = A0; // Le Pin A0 est connecté au point milieu du pont diviseur // La température est calculée grâce à une relation affine T (°C) = a × tension (V) + b const float a = 18.31; // Coefficient directeur a (°C/V) – L'étalonnage a été effectué prédécemment const float b = -19.67; // Ordonnée à l’origine b (°C) – L'étalonnage a été effectué prédécemment // Débitmètre const byte FLOW_PIN = 2; // Jaune D2, Noir GND et Rouge 5 V. // Le débit volumique est calculé par la rélation linéaire Dv (L/min) = f (Hz) / K const float CONSTANTE_CAPTEUR = 39.6; // K en Hz/(L/min) Déterminé par étalonnage × 2 // Variable de décompte des impulsions pour le débit volatile unsigned int count = 0; // Variable volatile car modifiée durant une interruption // 2. Setup − Exécuté une seule fois void setup() { // Fixe la vitesse de communication entre arduino et le PC Serial.begin(9600); // Active la résistance de pull-up interne. (Force à la valeur 5 V - HIGH) pinMode(FLOW_PIN, INPUT_PULLUP); // Dispense du montage avec la résistance // Associe l'interruption externe de la broche FLOW_PIN à la fonction flowISR() attachInterrupt(digitalPinToInterrupt(FLOW_PIN), flowISR, RISING); } // 3. Loop − Boucle infinie void loop() { // Détermination de la température int tempSensorRawValue = analogRead(TEMP_SENSOR_PIN); // Valeur numérique entre 0 et 1023 float tempSensorVoltage = tempSensorRawValue * 5.0 / 1023.0; // Valeur de la tension en volts float temperature = a * tempSensorVoltage + b; // Calcul de la température // Débitmètre count = 0; // Remise à zéro delay(1000); // Décompte durant une seconde afin de récupérer une fréquence noInterrupts(); // Désactive les interruptions le temps de récupérer count unsigned int frequency = count; // Fréquence du signal du capteur interrupts(); // Réactive les interruptions (défaut arduino uno) float flowRate = frequency / CONSTANTE_CAPTEUR; // Détermination du débit en L/min float flowRateISUnit = flowRate / 60 * 1000; // Conversion en mL/s // Affichage des valeurs Serial.print(temperature, 1); Serial.print('\t'); Serial.println(flowRateISUnit, 2); } // 4. Fonctions /** * Routine d'interruption (ISR : Interrupt Service Routine). * * Appelée automatiquement à chaque front montant produit * par le capteur. Elle incrémente simplement le compteur d'impulsions. */ void flowISR() { count++; }