Des sketchs à ajouter à ArdPyLog (suite)


2. CTN Shield datalogging GT1046
 (Mesure de températures avec une thermistance CTN et enregistrement des données sur une carte SD – Catégorie: Température)

 

L’objectif de l’activité est de mesurer une température avec une thermistance CTN dont les grandeurs caractéristiques suivantes sont connues :
– La valeur de sa résistance R0 (résistance nominale en Ω) à la température de référence T0 = 25 °C (298,15 K),
– La valeur de β (en K),
– La plage de température pour laquelle la relation entre la température T (en K) et RT, la résistance (en ohms) de la CTN à cette température, est vérifiée :

 

On utilise un shield datalogging GT1046 pour enregistrer les données de température sur une carte SD, le shield étant équipé d’une horloge en temps réel pour connaître l’heure exacte de l’enregistrement.

Le code de l’activité doit être modifié afin de renseigner les valeurs de T0, R0 et β de la CTN utilisée permettant de calculer la température à partir de la mesure de la résistance de la CTN.

 

Le programme

Voici le code de l’activité :

#include <SPI.h>
#include <SD.h>
#include <RTClib.h>
#include <Wire.h>

RTC_DS1307 RTC;

const int chipSelect = 10;
const int PinSensor = 0;
int ValSensor = 0;


void setup() {
Serial.begin(9600);
while (!Serial) {
}

Serial.print(« Initialisation de la carte SD… »);

if (!SD.begin(chipSelect)) {
Serial.println(« Carte SD défectueuse ou non presente »);
return;
}
Serial.println(« Carte SD initialisée. »);

// Initialisation de la liaison série Wire.begin();
RTC.begin();
// Cette ligne permet de définir une heure de départ pour le module RTC
//(Année, mois, jour, //heure, minute, seconde)
// Elle peut être mise en commentaire une fois le module mis à jour.
RTC.adjust(DateTime(2020, 9, 29, 10, 40, 0));

if (SD.exists(« datalog.txt »)) {
SD.remove(« datalog.txt »);
}
}

void loop() {
ValSensor = analogRead(PinSensor);

File dataFile = SD.open(« datalog.txt », FILE_WRITE);
DateTime now = RTC.now();

if (dataFile) {

dataFile.print(now.day(), DEC);
dataFile.print(‘/’);
dataFile.print(now.month(), DEC);
dataFile.print(‘/’);
dataFile.print(now.year(), DEC);
dataFile.println(‘ ‘);
dataFile.print(now.hour(), DEC);
dataFile.print(‘:’);
dataFile.print(now.minute(), DEC);
dataFile.print(‘:’);
dataFile.print(now.second(), DEC);
dataFile.println();

dataFile.print(« Valeur A0: « );
dataFile.println(ValSensor);
dataFile.println();
dataFile.close();

Serial.print(now.day(), DEC);
Serial.print(‘/’);
Serial.print(now.month(), DEC);
Serial.print(‘/’);
Serial.print(now.year(), DEC);
Serial.println(‘ ‘);
Serial.print(now.hour(), DEC);
Serial.print(‘:’);
Serial.print(now.minute(), DEC);
Serial.print(‘:’);
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(« Valeur A0: « );
Serial.println(ValSensor);
Serial.println();

delay(5000);
}
else {
Serial.println(« erreur lors de l’ouverture du fichier datalog.txt »);
}
}

 

Déroulement du programme :

– 1. Inclusion des librairies

Pour effectuer les calculs de température, le code nécessite l’importation de la librairie ”math.h”, et pour l’utilisation du shield DataLogging, les librairies suivantes doivent également être importées :

#include <SPI.h>
#include <SD.h>
#include <RTClib.h>
#include <Wire.h>

Remarque :

Pour utiliser le module RTC (horloge en temps réel), il est nécessaire de télécharger la librairie RTClib.h disponible à cette adresse.

Cliquez sur « Code » puis sur « Download Zip ». Cette action téléchargera un fichier compressé au format .ZIP contenant la librairie.

Ajoutez cette bibliothèque via le menu « Croquis » du logiciel Arduino IDE :

 

– 2. Déclaration des constantes et variables :

. const int PinSensor = 0 (constante nombre entier correspondant à la broche de la CTN)

. const int chipSelect = 10 (constante nombre entier correspondant à la broche du shield datalogging)

. long Ro = 22200 (variable nombre entier long pour stocker la valeur de la résistance de la CTN à la température de référence)

. int B = 3820 (variable nombre entier pour stocker la valeur de la constante β)

. int TempRef = 25 (variable nombre entier pour stocker la valeur de la température de référence)

. int ValSensor = 0 (variable nombre entier pour stocker la valeur de la broche de la CTN)

. float Temp = 0.0 (variable nombre décimal pour stocker la valeur de la température)

. float Rt = 0.0 (variable nombre décimal pour stocker la valeur de la résistance de la CTN)

. float Vctn = 0.0 (variable nombre décimal pour stocker la valeur de la tension de la broche de la
CTN)


– 3. Initialisation des entrées et sorties :

. Initialisation de la liaison série à un débit de 9600 bauds,

. Initialisation de la carte SD,

. Initialisation de l’horloge en temps réel,

. Création du fichier d’enregistrement des données « datalog.txt » (si ce fichier est déjà présent sur la carte SD, celui-ci est effacé)


– 4. Fonction principale en boucle :

–>Lecture de la valeur de la broche de la CTN,

–> Calcul de la résistance de la CTN,

–> Calcul de la température,

–> Enregistrement de la date et de l’heure des mesures de la température sur la carte SD et affichage des données enregistrées dans le moniteur série.

 

Résultats dans le moniteur série :