Arduino Nano - Enregistrer des données avec horodatage sur carte SD
Ce tutoriel vous explique comment écrire un journal avec horodatage sur la carte Micro SD en utilisant un Arduino Nano. Plus précisément, nous aborderons :
Arduino Nano - Enregistrement de données avec horodatage dans un seul fichier sur carte Micro SD
Arduino Nano - Enregistrement de données avec horodatage dans plusieurs fichiers sur carte Micro SD, un fichier par jour
L'heure est obtenue à partir d'un module RTC et enregistrée sur une carte Micro SD avec les données.
Les informations stockées sur la carte Micro SD peuvent être de tout type de données. Cela pourrait inclure :
Données collectées à partir d'un capteur
Un enregistrement des accès de serrure de porte
En résumé, ce tutoriel prend les valeurs de deux broches analogiques comme illustration des données. Il est facile de modifier le code pour l'adapter à tout type de données.
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
À propos du module de carte Micro SD et du module RTC
Si vous ne connaissez pas le module de carte Micro SD et le module RTC, y compris leurs brochages, leur fonctionnement et comment les programmer, les tutoriels suivants peuvent vous aider :
Arduino Nano - Enregistrer des données avec horodatage sur une carte Micro SD
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS 4#define FILE_NAME "log.txt"RTC_DS3231 rtc;File myFile;voidsetup() {Serial.begin(9600);// SETUP RTC MODULEif (!rtc.begin()) {Serial.println(F("Couldn't find RTC"));while (1); }if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));Serial.println(F("--------------------"));}voidloop() {// open file for writing myFile = SD.open(FILE_NAME, FILE_WRITE);if (myFile) {Serial.println(F("Writing log to SD Card"));// write timestampDateTimenow = rtc.now(); myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data// read dataint analog_1 = analogRead(A0);int analog_2 = analogRead(A1);// write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(FILE_NAME); }delay(2000); // delay 2 seconds}
Étapes rapides
Assurez-vous que la carte Micro SD est formatée en FAT16 ou FAT32 (vous pouvez trouver les instructions sur la façon de faire cela via une recherche Google).
Copiez le code et ouvrez-le dans l'IDE Arduino.
Cliquez sur le bouton Upload dans l'IDE Arduino pour envoyer le code à l'Arduino Nano.
Vérifiez les résultats dans le moniteur série.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
SD CARD INITIALIZED.
--------------------
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Ln 11, Col 1
Arduino Nano on COM15
2
Retirez la carte micro SD du module de carte micro SD.
Insérez la carte micro SD dans un lecteur de carte SD USB.
Connectez le lecteur de carte SD USB au PC.
Ouvrez le fichier log.txt sur votre ordinateur ; il apparaîtra comme suit.
Si vous ne possédez pas de lecteur de carte SD USB, vous pouvez examiner le contenu du fichier journal en exécutant le code Arduino Nano ci-dessous.
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-log-data-with-timestamp-to-sd-card*/#include <SD.h>#define PIN_SPI_CS 4#define FILE_NAME "log.txt"File myFile;voidsetup() {Serial.begin(9600);if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));// open file for reading myFile = SD.open(FILE_NAME, FILE_READ);if (myFile) {while (myFile.available()) {char ch = myFile.read(); // read characters one by one from Micro SD CardSerial.print(ch); // print the character to Serial Monitor } myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(FILE_NAME); }}voidloop() {}
Arduino Nano - Enregistrer des données dans plusieurs fichiers
La journalisation dans un seul fichier peut conduire à une taille de fichier importante avec le temps et rendre difficile la révision. Le code ci-dessous permettra de diviser le journal en plusieurs fichiers, avec :
Un fichier par jour
Le nom du fichier est la date au format AAAAMMJJ.txt
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-log-data-with-timestamp-to-sd-card*/#include <SD.h>#include <RTClib.h>#define PIN_SPI_CS 4RTC_DS3231 rtc;File myFile;char filename[] = "yyyymmdd.txt"; // filename (without extension) should not exceed 8 charsvoidsetup() {Serial.begin(9600);// SETUP RTC MODULEif (!rtc.begin()) {Serial.println(F("Couldn't find RTC"));while (1); }if (!SD.begin(PIN_SPI_CS)) {Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));while (1); // don't do anything more: }Serial.println(F("SD CARD INITIALIZED."));Serial.println(F("--------------------"));}voidloop() {DateTimenow = rtc.now();intyear = now.year();intmonth = now.month();intday = now.day();// update filename filename[0] = (year / 1000) + '0'; filename[1] = ((year % 1000) / 100) + '0'; filename[2] = ((year % 100) / 10) + '0'; filename[3] = (year % 10) + '0'; filename[4] = (month / 10) + '0'; filename[5] = (month % 10) + '0'; filename[6] = (day / 10) + '0'; filename[7] = (day % 10) + '0';// open file for writing myFile = SD.open(filename, FILE_WRITE);if (myFile) {Serial.println(F("Writing log to SD Card"));// write timestamp myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data// read dataint analog_1 = analogRead(A0);int analog_2 = analogRead(A1);// write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else {Serial.print(F("SD Card: error on opening file "));Serial.println(filename); }delay(2000); // delay 2 seconds}
Une fois que vous avez terminé une longue course, si vous :
Retirez la carte Micro SD du module de carte Micro SD
Insérez la carte Micro SD dans un lecteur de carte SD USB
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !