Arduino - Gegevens loggen met tijdstempel naar SD-kaart
In deze handleiding leert u hoe u met Arduino logbestanden schrijft met een tijdstempel naar een Micro SD-kaart. We behandelen in detail:
Arduino – Hoe u gegevens logt met een tijdstempel naar een bestand op een Micro SD-kaart
Arduino – Hoe u gegevens logt met een tijdstempel naar meerdere bestanden op een Micro SD-kaart, één bestand per dag
De tijdinformatie wordt opgehaald van een RTC-module (Real-Time Clock) en samen met de gegevens naar de Micro SD-kaart geschreven.
De te loggen data op de Micro SD-kaart kan van alles zijn. Bijvoorbeeld:
Om het eenvoudig te houden, leest deze handleiding als voorbeeld waarden van twee analoge pinnen uit. U kunt de code gemakkelijk aanpassen voor elk type data.
Of u kunt de volgende kits kopen:
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Als u nog niet bekend bent met de Micro SD-kaart module en RTC-module (pinout, werking, programmeren ...), leer er meer over in de volgende handleidingen:

This image is created using Fritzing. Click to enlarge image
※ Notiz:
Als u een Ethernet shield of een ander shield gebruikt dat een Micro SD-kaarthouder heeft, heeft u de Micro SD-kaart module niet nodig. U hoeft alleen de Micro SD-kaart in de Micro SD-kaarthouder van het shield te plaatsen.
#include <SD.h>
#include <RTClib.h>
#define PIN_SPI_CS 4
#define FILE_NAME "log.txt"
RTC_DS3231 rtc;
File myFile;
void setup() {
Serial.begin(9600);
if (!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);
}
Serial.println(F("SD CARD INITIALIZED."));
Serial.println(F("--------------------"));
}
void loop() {
myFile = SD.open(FILE_NAME, FILE_WRITE);
if (myFile) {
Serial.println(F("Writing log to SD Card"));
DateTime now = 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(" ");
int analog_1 = analogRead(A0);
int analog_2 = analogRead(A1);
myFile.print("analog_1 = ");
myFile.print(analog_1);
myFile.print(", ");
myFile.print("analog_2 = ");
myFile.print(analog_2);
myFile.write("\n");
myFile.close();
} else {
Serial.print(F("SD Card: error on opening file "));
Serial.println(FILE_NAME);
}
delay(2000);
}
Zorg ervoor dat de Micro SD-kaart geformatteerd is in FAT16 of FAT32 (zoek dit op Google indien nodig)
Kopieer de bovenstaande code en open deze met de Arduino IDE
Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
Bekijk het resultaat op de Seriële Monitor.
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
Verwijder de Micro SD-kaart uit de Micro SD-kaart module
Plaats de Micro SD-kaart in een USB SD-kaartlezer
Verbind de USB SD-kaartlezer met de pc
Open het log.txt bestand op uw pc, het ziet er als volgt uit:
Als u geen USB SD-kaartlezer heeft, kunt u de inhoud van het logbestand controleren door onderstaande Arduino-code uit te voeren.
#include <SD.h>
#define PIN_SPI_CS 4
#define FILE_NAME "log.txt"
File myFile;
void setup() {
Serial.begin(9600);
if (!SD.begin(PIN_SPI_CS)) {
Serial.println(F("SD CARD FAILED, OR NOT PRESENT!"));
while (1);
}
Serial.println(F("SD CARD INITIALIZED."));
myFile = SD.open(FILE_NAME, FILE_READ);
if (myFile) {
while (myFile.available()) {
char ch = myFile.read();
Serial.print(ch);
}
myFile.close();
} else {
Serial.print(F("SD Card: error on opening file "));
Serial.println(FILE_NAME);
}
}
void loop() {
}
Loggen naar één enkel bestand leidt na verloop van tijd tot een groot bestand, wat het lastig maakt om te controleren. De onderstaande code schrijft logbestanden naar meerdere bestanden:
#include <SD.h>
#include <RTClib.h>
#define PIN_SPI_CS 4
RTC_DS3231 rtc;
File myFile;
char filename[] = "yyyymmdd.txt";
void setup() {
Serial.begin(9600);
if (!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);
}
Serial.println(F("SD CARD INITIALIZED."));
Serial.println(F("--------------------"));
}
void loop() {
DateTime now = rtc.now();
int year = now.year();
int month = now.month();
int day = now.day();
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';
myFile = SD.open(filename, FILE_WRITE);
if (myFile) {
Serial.println(F("Writing log to SD Card"));
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(" ");
int analog_1 = analogRead(A0);
int analog_2 = analogRead(A1);
myFile.print("analog_1 = ");
myFile.print(analog_1);
myFile.print(", ");
myFile.print("analog_2 = ");
myFile.print(analog_2);
myFile.write("\n");
myFile.close();
} else {
Serial.print(F("SD Card: error on opening file "));
Serial.println(filename);
}
delay(2000);
}
Na langere looptijd, als u:
De Micro SD-kaart verwijdert uit de Micro SD-kaart module
De Micro SD-kaart plaatst in een USB SD-kaartlezer
De USB SD-kaartlezer aansluit op de pc
Ziet u de volgende bestanden:
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.