Beispielcode für DB6SW SD-Karten Shield DS1307 RTC

Der DB6SW SD-Karten Shield mit DS1307 Real-Time-Clock (RTC) bietet eine kostengünstige Plattform um Arduino Projekte um eine zuverlässige Zeitreferenz und einen nichtflüchtigen Speicher in Form einer SD-Karte zu ergänzen. Dieser Artikel zeigt anhand eines einfachen Biespielcodes, wie der Shield als Datenlogger eingesetzt werden kann.

Um die DS1307 RTC anzusprechen, bedarf es der Installation einiger Bibliotheken. Für unser Beispiel verwenden wir die TimeLib und DS1307RTC Bibliotheken. Beide können über den Bibliothekenmanager installiert werden.

WICHTIG: Vor dem Auslesen von Datum und Uhrzeit müssen beide natürlich erstmal korrekt eingestellt sein. Wurde der DS1307 nicht mit einem gültigen Wert beschrieben, so gibt dieser beim Auslesen eine Fehlermeldung aus. Es kann also fälschlicherweise der Eindruck entstehen, dass der Chip defekt ist. Die DS1307RTC Bibliothek enthält einen Beispielcode zum Einstellen der aktuellen Zeit.

Weiter ist es wichtig, dass die SD-Karte mit dem FAT16 oder FAT32 Dateisystem formatiert ist. Eine CR1220 Puffer-Batterie sorgt dafür, dass der DS1307 auch bei fehlender Versorgungsspannung die aktuelle Uhrzeit nicht vergisst.

DB6SW SD-Karten Shield mit eingesetzter CR1220 Batterie und FAT31-formatierter SD-Karte

DB6SW SD-Karten Shield mit eingesetzter CR1220 Batterie und FAT31-formatierter SD-Karte

Folgender Beispielcode kann als Startpunkt für erste Gehversuche mit dem Shield dienen. Die Werte der Analogeingänge A0, A1 und A2 werden hier zusammen mit der aktuellen Uhrzeit und Datum auf die SD-Karte geschrieben.

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

// Bibliotheken für die RTC einbinden
#include <TimeLib.h>
#include <DS1307RTC.h>

// Chip-Select PIN, Pin 10 für DB6SW Shield
const int chipSelect = 10;


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

  // Chip-Select PIN als Ausgang definieren
  pinMode(chipSelect, OUTPUT);

  // SD-Karte initialisieren und Ergebnis via serieller Schnittstelle ausgeben
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
  Serial.println("Card failed, or not present");
  }
}
 
void loop() {

  // Datei Demo.txt für Schreibzugriff öffnen
  File sdFile = SD.open("Demo.txt", FILE_WRITE);

  tmElements_t tm;

  if (RTC.read(tm)) {

    // Uhrzeit auf SD-Karte schreiben
    sdFile.print(tm.Hour);
    sdFile.print(':');
    sdFile.print(tm.Minute);
    sdFile.print(':');
    sdFile.print(tm.Second);
    sdFile.print(",");

    // Datum auf SD-Karte schreiben
    sdFile.print(tm.Day);
    sdFile.print('/');
    sdFile.print(tm.Month);
    sdFile.print('/');
    sdFile.print(tmYearToCalendar(tm.Year));
    sdFile.print(',');

    // Analogeingänge A0, A1 und A2 auslesen und Werte auf SD-Karte schreiben
    sdFile.print(analogRead(0));
    sdFile.print(',');
    sdFile.print(analogRead(1));
    sdFile.print(',');
    sdFile.print(analogRead(2));

    // Zeile abschließen
    sdFile.println();
  }
      
  // Datei schließen
  sdFile.close();
      
  }

Der Inhalt der Demo.txt nach einem Testlauf könnte beispielsweise wie folgt aussehen:

0:52:24,18/8/2019,244,243,239
0:52:24,18/8/2019,240,239,235
0:52:24,18/8/2019,243,243,238
0:52:24,18/8/2019,242,241,237
0:52:24,18/8/2019,240,239,235
0:52:24,18/8/2019,243,243,238
0:52:25,18/8/2019,240,239,235
0:52:25,18/8/2019,240,240,236
0:52:25,18/8/2019,241,240,236
0:52:25,18/8/2019,240,239,235
0:52:25,18/8/2019,243,242,238

[1] Funktechnik-Shop.de, DB6SW SD-Karten Shield mit DS1307 RTC: https://www.funktechnik-shop.de/p/db6sw-sd-karten-shield-fuer-arduino-mit-ds1307-real-rime-clock-rtc-datenlogger-shield

Kommentar verfassen