DIY CSV Datenlogger

Comment évolue la température au cours de la journée ? Pour enregistrer ces données de manière fiable, il est possible d'utiliser un enregistreur de données fabriqué soi-même à partir d'un microcontrôleur. Dans ce projet, un capteur DS18B20 est utilisé pour mesurer la température. Les valeurs enregistrées sont stockées à intervalles réguliers au format CSV (Comma Separated Values) sur une carte SD et peuvent ensuite être analysées.

Matériel

Une carte SD est idéale pour enregistrer facilement les données et les transférer ensuite vers l'ordinateur. Elle peut être commandée via l'interface SPI.

Avec le matériel suivant, la mise en œuvre est très simple grâce à l'utilisation d'un shield :

Carte UNO (USB-C)

Shield enregistreur de données

Capteur (par ex. DS18B20)

Résistance 4,7 kΩ (assortiment de résistances)

 

Dans l'exemple, nous utilisons le capteur DS18B20. Celui-ci est commandé et lu via l'interface OneWire. Vous pouvez également utiliser d'autres capteurs de votre choix capteurs .

Soudez le capteur sur le shield comme suit :

Figure 1 : Capteur sur le shield de l'enregistreur de données

Logiciel

Capteur

Pour communiquer avec le capteur, les bibliothèques externes suivantes sont nécessaires :

OneWire de Paul Stoffregen

DallasTemperature par jmchippa

 

Vous pouvez les télécharger au format .zip via les liens GitHub indiqués et les ajouter à l'IDE Arduino sous
Sketch > include Library > Add .zip Library …

 

.
Vous pouvez également installer la bibliothèque via le gestionnaire de bibliothèques intégré.

 

Pour tester le capteur et la structure supérieure, chargez le programme suivant sur le microcontrôleur :

#include
#include

#define BUS_PIN 7

OneWire oneWire(BUS_PIN);

DallasTemperature sensor(&oneWire);

void setup(void) {
Serial.begin(9600);
sensor .
begin();
}

void loop(void) {
sensor .requestTemperatures();
delay(1500);
 
float tempC = sensor.getTempCByIndex(0);

if (tempC != DEVICE_DISCONNECTED_C) {
Serial.print("Temperature: ");
Serial.println(tempC);
}
<
span lang="de" style="font-family: Consolas; mso-fareast-font-family: Consolas; mso-bidi-font-family: Consolas; color: #d35400;">else {
Serial.println("Error: Could not read temperature data");
}
}

Explication :

Au début du programme, les objets des classes de bibliothèque sont créés. L'objet oneWire régule la communication via l'interface. L'objet sensor envoie les commandes exactes du capteur via cette interface, transmise avec un pointeur.

 

Vous pouvez télécharger le programme télécharger ici .

RTC

Le bouclier est équipé d'un module d'horloge en temps réel(RTC). Celui-ci peut être réglé et lu via l'interface I2C. Une fois l'heure configurée, elle est mise à jour en continu par la petite batterie, même sans alimentation électrique du microcontrôleur.

 

Pour communiquer avec le module RTC, la bibliothèque externe suivante est nécessaire :

RTClib d'Adafruit

 

Vous pouvez les télécharger au format .zip via les liens GitHub indiqués et les ajouter à l'IDE Arduino sous
Sketch > include Library > Add .zip Library …

 

.
Vous pouvez également installer la bibliothèque via le gestionnaire de bibliothèques intégré.

Le programme suivant peut être utilisé pour régler l'heure et tester le fonctionnement :

 

#include "Wire.h"
#include "RTClib.h"

RTC_DS1307 rtc;

void setup () {
Serial.begin(9600);

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
   
while (1) delay(10);
}

if (! rtc.isrunning()) {
Serial.println( « RTC is NOT running, let's set the time! ») ;
// 17 août 2025 3 :5:0 :
   
// rtc.adjust(DateTime(2025, 8, 17, 3, 5, 0));
}


}

void loop () {
DateTime now = rtc.now();

Serial.print(now.year(), DEC);
Serial.print('/');
   
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);

Serial.print('');

Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

delay(3000);
}

Explication :

Après l'intégration habituelle du fichier bibliothèque et la création de l'objet, la communication avec le module RTC est lancée dans setup(), puis le réglage de l'heure actuelle est effectué en option.
Pour pouvoir régler cette heure, supprimez le commentaire et ajustez l'heure. Veillez à ce que cette ligne soit à nouveau commentée, sinon l'heure sera écrasée à chaque démarrage.

Dans la boucle loop(), l'heure et la date sont affichées via l'interface série.

 

Vous pouvez télécharger le code télécharger ici .

Déroulement Enregistreur de données

Illustration 2 : Diagramme du déroulement du programme d'enregistrement des données

Code de l'enregistreur de données

Pour finir, chargez le programme complet sur le microcontrôleur :

#include
#include "Wire.h"
#
include
#include
#include
#include « RTClib.h »

const int CS_PIN_SD = 4; // Broche de sélection de puce de carte SD
const char* BASE_FILENAME = "LOG"; // Nom de fichier de base, par exemple LOG00.CSV
const char* FILE_EXTENSION = ".txt";

#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
RTC_DS1307 rtc;

float temperatureAmbient = 0.0;

unsigned long lastLogTime = 0;
const unsigned long LOG_INTERVAL_MS = 2500;

char tempAStr[10];
char logFileName[13]; // LOG00000 .txt
char timeStr[6];

void createNewLogFile() {
for (int i = 0; i < 100000; i++) { // Max 99999 fichiers journaux
sprintf (logFileName,
"%s%05d%s", BASE_FILENAME, i, FILE_EXTENSION);
   
if (!SD.exists(logFileName)) {
File logFile = SD.open(logFileName, FILE_WRITE);
if (logFile) {
logFile .
println("En-tête :");
        logFile.
close();
Serial.print("Created new log file: ");
Serial.println(logFileName);
}
else {
Serial.println("Error creating new log file!" );
}
yes;">
return;
}
}
Serial.println("Max log files reached!");
}

void setup() {
Serial.begin(9600);

sensors .
begin();

pinMode(10, OUTPUT); // Required for SPI on UNO
 
if (!SD.begin(CS_PIN_SD)) {
Serial.println("SD Card Failed!");
   
while(1) {
}

} else {
Serial.println("SD Card OK.");

}

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1) delay(10);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
//
August 17, 2025 3 :5:0 :
   
// rtc.adjust(DateTime(2025, 8, 17, 3, 5, 0));
}

createNewLogFile (); //
Créer un nouveau fichier journal au démarrage
}

void loop() {
unsigned long currentMillis = millis();

sensors .requestTemperatures();
//delay
(1500);
  temperatureAmbient = sensors.getTempCByIndex(
0);
DateTime now = rtc.now();

Serial.println(temperatureAmbient);

dtostrf (temperatureAmbient,
0, 1, tempAStr);
  sprintf(timeStr,
"%02d:%02d", now.hour(), now.minute());

//
Enregistrer sur la carte SD
 
if (currentMillis - lastLogTime >= LOG_INTERVAL_MS) {
digitalWrite(3,HIGH);
    lastLogTime = currentMillis;

File logFile = SD.open(logFileName, FILE_WRITE);
if (logFile) {
logFile .
print(currentMillis);
logFile .
print(",");
logFile .
print(now.timestamp());
logFile .
print(",");
logFile .
print(timeStr);
logFile .
print(",");
logFile .
print(tempAStr);
      logFile.
println();

logFile .
close();
Serial.println("Data logged to SD.");
}
else {
Serial.println("Error opening log file!");
}
}

delay(100);

}

Explication :

Par rapport aux deux programmes précédents, seule la sortie vers la carte SD a été ajoutée. La fonction createNewLogFile() crée un nouveau fichier dont le nom est automatiquement numéroté de manière consécutive.

Évaluation des données

Après avoir enregistré avec succès une série de mesures à l'aide de l'enregistreur de données, les valeurs doivent maintenant être représentées graphiquement dans un tableur.
Ce tutoriel utilise LibreOffice Calc, car il s'agit d'un logiciel open source disponible gratuitement sur tous les systèmes d'exploitation. Tous les autres programmes sont toutefois similaires en termes de fonctionnement et d'utilisation.

1. Copiez le fichier .txt généré par l'enregistreur de données de la carte SD vers le disque dur de votre ordinateur. Cliquez ensuite avec le bouton droit de la souris sur le fichier et sélectionnez « Renommer ». Modifiez ici l'extension du fichier de .txt à .csv.

2. Ouvrez le fichier csv avec le tableur. Une boîte de dialogue s'ouvre, dans laquelle vous pouvez sélectionner les symboles de séparation. Sélectionnez ici « Virgule » et confirmez l'importation en cliquant sur OK après avoir vérifié l'aperçu ci-dessous.

Illustration 3 : Fenêtre d'importation

 

3. Étant donné que le microcontrôleur affiche les valeurs du capteur avec un point comme séparateur décimal, mais que le programme attend une virgule, vous devez maintenant remplacer ce séparateur.
Pour ce faire, ouvrez le Rechercher et remplacer . Vous pouvez y remplacer tous les points par des virgules.

4. Sélectionnez maintenant la colonne contenant les millisecondes et les valeurs du capteur en maintenant la touche Ctrl enfoncée et en cliquant sur le nom de la colonne, puis sélectionnez sous Insérer, Diagramme…

5. Dans cette fenêtre, vous pouvez maintenant sélectionner le type de diagramme. Pour une courbe de valeurs de capteur, il est recommandé d'utiliser le diagramme XY (diagramme de dispersion).

Illustration 4 : Fenêtre Diagramme

 

Vous pouvez également définir ici le mode d'affichage et le type de ligne.

 

Illustration 5 : Diagramme final avec valeurs mesurées

 

Conclusion

L'enregistreur de données peut être complété par un bouton-poussoir et une LED afin de permettre l'affichage de l'état et des fonctions de commande simples telles que le démarrage et l'arrêt.
Les possibilités d'utilisation se trouvent principalement dans la mesure environnementale, la surveillance du climat intérieur ou dans des scénarios similaires où les valeurs des capteurs doivent être enregistrées.
Les étapes présentées vous ont permis de découvrir une base économique et flexible sur laquelle vous pouvez facilement construire vos propres projets.

 

Amusez-vous bien en le reproduisant :)

 

Für arduinoProjekte für anfängerSensorenTemperatur

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery