Zum Hauptinhalt springen

Anleitung: Datenlogger-Shield

mit SD-Karte und RTC auf dem Arduino UNO

Diese Anleitung beschreibt, wie man das Datenlogger-Shield mit SD-Karten-Slot und RTC von Christians Technikshop zusammen mit dem UNO R3 Entwicklerboard verwendet, um Zeitdaten zu erfassen und auf einer SD-Karte zu speichern.


Inhaltsverzeichnis


Benötigte Komponenten


Schritt 1: Shield aufstecken

  1. Stecke das Datenlogger-Shield auf das UNO R3 Entwicklerboard. Achte darauf, dass alle Pins korrekt verbunden sind.

  2. Setze eine passende Knopfzelle (CR1220 oder CR2032) in die RTC-Halterung auf dem Shield ein.

Wichtig

Achten Sie darauf, dass die Polarität der Batterie korrekt ist. Eine falsche Polung kann die RTC beschädigen.


Schritt 2: SD-Karte vorbereiten

  1. Formatiere die SD-Karte mit dem Dateisystem FAT16 oder FAT32.

  2. Stecke die SD-Karte in den SD-Karten-Slot auf dem Shield.

Tipp

Verwenden Sie eine SD-Karte mit maximal 32 GB Kapazität für beste Kompatibilität. Größere Karten können Probleme verursachen.


Schritt 3: Benötigte Bibliotheken installieren

Öffne die Arduino IDE und installiere folgende Bibliotheken über den Bibliotheksverwalter:

  1. SD – Standardmäßig in der Arduino IDE enthalten
  2. RTClib – Von Adafruit, zur Ansteuerung der RTC

Installation über den Bibliotheksverwalter:

  1. Gehen Sie zu Sketch > Bibliothek einbinden > Bibliotheken verwalten...
  2. Suchen Sie nach "RTClib"
  3. Installieren Sie die Bibliothek von Adafruit
  4. Die SD-Bibliothek ist bereits enthalten und muss nicht installiert werden

Schritt 4: Beispielcode hochladen

Beispiel: RTC-Zeit auslesen und auf SD-Karte speichern

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

RTC_DS1307 rtc;

const int chipSelect = 10;

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

// RTC initialisieren
if (!rtc.begin()) {
Serial.println("RTC nicht gefunden!");
while (1);
}

if (!rtc.isrunning()) {
Serial.println("RTC läuft nicht. Setze aktuelle Zeit.");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

// SD-Karte initialisieren
if (!SD.begin(chipSelect)) {
Serial.println("SD-Karte konnte nicht initialisiert werden!");
return;
}
Serial.println("SD-Karte erkannt.");

// Log-Datei öffnen und schreiben
File dataFile = SD.open("log.txt", FILE_WRITE);
if (dataFile) {
DateTime now = rtc.now();
dataFile.print(now.timestamp());
dataFile.println(" -> Logeintrag");
dataFile.close();
Serial.println("Logeintrag geschrieben.");
} else {
Serial.println("Fehler beim Öffnen der Datei.");
}
}

void loop() {
// Leerlauf
}

Code-Erklärung:

  • RTC_DS1307 rtc; – Erstellt ein RTC-Objekt für den DS1307-Chip
  • chipSelect = 10; – Definiert den Chip-Select-Pin für die SD-Karte (Standard bei Arduino UNO)
  • rtc.begin() – Initialisiert die RTC
  • rtc.adjust() – Setzt die RTC-Zeit (beim ersten Start auf Kompilierungszeit)
  • SD.begin(chipSelect) – Initialisiert die SD-Karte
  • SD.open() – Öffnet eine Datei auf der SD-Karte
  • rtc.now() – Liest die aktuelle Zeit von der RTC

Hinweise

Wichtige Hinweise
  • Achte darauf, dass die SD-Karte eingesteckt ist, bevor du das Programm startest
  • Die RTC behält die Zeit auch bei Stromausfall, solange eine Batterie eingesetzt ist
  • Beim ersten Start wird die RTC automatisch auf die Kompilierungszeit des Sketches gesetzt

Erweiterte Nutzung:

Sie können den Code erweitern, um kontinuierlich Daten zu loggen:

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

File dataFile = SD.open("log.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(now.timestamp());
dataFile.print(",");
dataFile.println(analogRead(A0)); // Beispiel: Analogwert loggen
dataFile.close();
}

delay(1000); // Alle Sekunde einen Eintrag
}

Fehlerbehebung

SD-Karte wird nicht erkannt

Lösung
  • ✅ Überprüfe die Formatierung (FAT16 oder FAT32)
  • ✅ Prüfe die Steckverbindung der SD-Karte
  • ✅ Überprüfe den Chip-Select-Pin (normalerweise Pin 10)
  • ✅ Teste eine andere SD-Karte
  • ✅ Stelle sicher, dass die SD-Karte nicht schreibgeschützt ist

RTC funktioniert nicht

Lösung
  • ✅ Stelle sicher, dass eine Batterie eingesetzt ist
  • ✅ Überprüfe die Polung der Batterie
  • ✅ Prüfe, ob die RTC im Code korrekt angesprochen wird
  • ✅ Überprüfe die I2C-Verbindung (SDA/SCL)

Datei kann nicht geschrieben werden

Lösung
  • ✅ Stelle sicher, dass die SD-Karte nicht voll ist
  • ✅ Prüfe, ob die Datei bereits geöffnet ist
  • ✅ Überprüfe die Schreibrechte der SD-Karte
  • ✅ Formatiere die SD-Karte neu (FAT32)