Journalisation de données Arduino avec carte SD et horloge temps réel DS3231 – Tutoriel pas à pas
Dans ce tutoriel Arduino, nous allons apprendre à utiliser un module carte SD avec la carte Arduino. En combinaison avec le module horloge temps réel DS3231, nous réaliserons un exemple de journalisation de données où nous stockerons les données d'un capteur de température sur la carte SD et les importerons dans Excel pour en faire un graphique. Vous pouvez visionner la vidéo suivante ou lire le tutoriel écrit ci-dessous.
Comment ça marche
Regardons d'abord le module carte SD. Il fonctionne avec des cartes MicroSD standard dont la tension de fonctionnement est 3,3 V. Par conséquent, le module intègre un régulateur de tension et un convertisseur de niveau pour pouvoir l'utiliser avec les broches 5 V de l'Arduino.
Le module carte SD a six broches : deux pour l'alimentation (VCC et GND) et quatre pour la communication SPI. Voici comment le connecter à l'Arduino.
Notez que chaque carte Arduino a des broches SPI différentes qui doivent être connectées en conséquence.
Code Arduino pour module carte SD
Programmons maintenant l'Arduino. Voici un code simple :
/* Tutoriel Arduino Carte SD Exemple
* par Dejan Nedelkovski, www.HowToMechatronics.com */
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Broche 10 sur Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// Initialisation carte SD
if (SD.begin()) {
Serial.println("SD card is ready to use.");
} else {
Serial.println("SD card initialization failed");
return;
}
// Créer/Ouvrir fichier
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.println("Writing to file...");
myFile.println("Testing text 1, 2 ,3...");
myFile.close();
Serial.println("Done.");
} else {
Serial.println("error opening test.txt");
}
// Lecture du fichier
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("Read:");
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
} else {
Serial.println("error opening test.txt");
}
}
void loop() { }
Description du code : On inclut d'abord les bibliothèques standard SD et SPI, on crée un objet « File » et on définit la broche ChipSelect du bus SPI (broche 53 dans mon cas pour Arduino Mega). Comme on veut que le code s'exécute une seule fois, tout le code est dans « setup », la boucle « loop » reste vide.
On démarre la communication série et on définit la broche ChipSelect en sortie. C'est nécessaire car cette broche doit être à l'état « Low » pour que la communication SPI entre le module et l'Arduino fonctionne.
Ensuite, avec SD.begin() on initialise la carte SD. Si l'initialisation réussit, le « if » devient vrai et « SD card is ready to use. » s'affiche sur le moniteur série, sinon « SD card initialization failed » s'affiche et le programme s'arrête.
Avec SD.open() on crée un nouveau fichier « test.txt », avec l'argument FILE_WRITE signifiant qu'on peut lire et écrire. Si le fichier existe déjà, SD.open() l'ouvre simplement.
Si le fichier est créé avec succès, on affiche « Writing to file » puis avec myFile.println() on écrit « Testing text 1, 2 ,3… » dans le fichier. Il faut ensuite utiliser close() pour s'assurer que les données sont physiquement sauvées sur la carte SD.
Pour lire le fichier, on utilise à nouveau SD.open() ; comme le fichier existe, il l'ouvre. Avec myFile.read() on lit et on affiche sur le moniteur série. La fonction read() lit un caractère à la fois, donc on utilise une boucle « while » avec myFile.available() pour lire tout le contenu. À la fin, on ferme le fichier.
Après le téléversement, si tout va bien, le moniteur série affiche : initialisation réussie, écriture réussie, lecture réussie de « Testing text 1, 2 ,3… ». Sur l'ordinateur, on voit le fichier « test.txt » créé avec le texte écrit.
Journalisation de données Arduino sur carte SD
Faisons maintenant un exemple plus intéressant de journalisation d'un capteur de température. Pour cela, nous utiliserons le module horloge temps réel DS3231 qui possède un capteur de température intégré. Vous trouverez plus de détails sur la connexion et l'utilisation de ce module dans mon tutoriel précédent.
Après avoir connecté les deux modules à l'Arduino, regardons le code pour cet exemple.
/* Arduino Temperature Data Logging
* par Dejan Nedelkovski, www.HowToMechatronics.com */
#include <SD.h>
#include <SPI.h>
#include <DS3231.h>
File myFile;
DS3231 rtc(SDA, SCL);
int pinCS = 53; // Broche 10 sur Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
if (SD.begin()) {
Serial.println("SD card is ready to use.");
} else {
Serial.println("SD card initialization failed");
return;
}
rtc.begin();
}
void loop() {
Serial.print(rtc.getTimeStr());
Serial.print(",");
Serial.println(int(rtc.getTemp()));
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
myFile.print(rtc.getTimeStr());
myFile.print(",");
myFile.println(int(rtc.getTemp()));
myFile.close();
} else {
Serial.println("error opening test.txt");
}
delay(3000);
}
Description du code : On inclut les bibliothèques nécessaires pour les deux modules, on crée les deux objets et dans le setup on les initialise.
Dans la boucle, avec Serial.print() on affiche l'heure et les valeurs de température sur le moniteur série, avec une virgule entre elles et un saut de ligne après la température. Ce format permet de les importer facilement et de faire un graphique dans Excel. Notez que les valeurs de température sont converties en entiers.
Ces mêmes valeurs sont écrites dans le fichier « test.txt » nouvellement créé, et à la fin on ajoute un délai qui représente l'intervalle d'enregistrement des données de température.
Après le téléversement, l'Arduino commence à stocker les valeurs de température toutes les 3 secondes. Après un moment, on peut ouvrir la carte SD sur l'ordinateur pour voir les résultats.
Pour créer un graphique dans Excel, il faut importer ce fichier :
Dans le menu Données, cliquer sur « Obtenir des données depuis le texte » et sélectionner le fichier texte. Choisir « Délimité » et cliquer Suivant, puis à l'étape 2, sélectionner la virgule comme délimiteur et terminer l'assistant.
Ce processus insère l'heure et les valeurs de température dans des colonnes séparées. Il suffit de sélectionner les deux colonnes et, dans le menu Insertion, choisir « Insérer un graphique en courbes ». Cela créera le graphique montrant les valeurs de température toutes les 3 secondes.
C'est tout pour ce tutoriel. N'hésitez pas à poser vos questions dans la section commentaires ci-dessous.
Processus de fabrication
- IXON Cloud : Maîtriser la journalisation et les tableaux de bord de données machine en minutes
- Créer un verrou RFID sécurisé avec Arduino – Guide étape par étape
- Moniteur d'énergie Arduino & Data Logger fiable – Guide complet (Dr. Wattson + carte SD)
- Créer des animations et jeux sur LCD avec Arduino UNO
- Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
- Contrôle Arduino UNO depuis Python 3 – Communication Série et Démo LED
- Construire une Radio FM Compacte avec Arduino Nano et RDA5807M
- Enregistreur de Données Environnementales Arduino avec Carte SD et RTC
- Tutoriel Arduino Débutant 01 : Démarrez votre Premier Projet