Messwerte auf SD - Shield speichern

Hallo.

Ich mache an unserer Schule ein Maturaprojekt und ich muss Temperatur und Luftfeuchtigkeit messen. Dazu habe ich eine Messschaltung mit einem Arduino Uno und einem SMTF75 Sensor aufgebaut. Ich habe für die Programmierung einfach nur aus der Sensirion Library das Beispielprogramm genommen und es funktioniert.

Aber jetzt stehe ich vor einem Problem: Wie schreibe ich mein Programm um, sodass ich die Messwerte auf meiner SD- Karte in einem txt- file oder excel- file abspeichern kann. SD- shield habe ich auch schon an den Arduino angeschllossen.

Kann mir bitte jemand helfen?

Was für ein SD-Kartenmodul hast Du denn?
Im Verzeichnis der Arduino-Installation\libraries gibt es einen Ordner SD, in dem auch Beispiele drin sind.
Die Daten würde ich mit ; oder , getrennt jeweils in eine Zeile speichern.
Für Excel die Dateiendung csv wählen.
Das Beispiel datalogger.ino ist ein guter Ansatz.

Gruß Tommy

robinhtl_klu:
Hallo.

Ich mache an unserer Schule ein Maturaprojekt und ich muss Temperatur und Luftfeuchtigkeit messen. Dazu habe ich eine Messschaltung mit einem Arduino Uno und einem SMTF75 Sensor aufgebaut. Ich habe für die Programmierung einfach nur aus der Sensirion Library das Beispielprogramm genommen und es funktioniert.

Aber jetzt stehe ich vor einem Problem: Wie schreibe ich mein Programm um, sodass ich die Messwerte auf meiner SD- Karte in einem txt- file oder excel- file abspeichern kann. SD- shield habe ich auch schon an den Arduino angeschllossen.

Kann mir bitte jemand helfen?

Hallo,

hier findest du alles nötig.
SD-Card

Hallo,

dazu mal wieder ein kleiner Hinweis. In der SD Lib steckt ein kleiner Bug. Fällt aber nur selten auf. Probleme können auftreten wenn man die Karte zwischendurch entfernt und wieder zugreifen möchte.

Dazu sollte man die SD.cpp Datei abändern.
Betrifft die Funktion ab Zeile 337.

Wie folgt ändern

boolean SDClass::begin(uint8_t csPin) {
  /*
    Performs the initialisation required by the sdfatlib library.

    Return true if initialization succeeds, false otherwise.

    Erster Block ergänzt, root wird geschlossen falls offen, damit kann jederzeit erneut initialisiert werden, zum Bsp. nach Kartenwechsel    
  */
    if (root.isOpen()) root.close();      // allows repeated calls
    return card.init(SPI_HALF_SPEED, csPin) &&
         volume.init(card) &&
         root.openRoot(volume);
}

robinhtl_klu:
Aber jetzt stehe ich vor einem Problem: Wie schreibe ich mein Programm um, sodass ich die Messwerte auf meiner SD- Karte in einem txt- file oder excel- file abspeichern kann.
...
Kann mir bitte jemand helfen?

Im ersten Schritt denkst Du Dir einen Dateinamen für die Datei aus, der der Konvention 8.3 entsprechen sollte, also bis zu 8 Zeichen vor dem Punkt, dann einen Punkt und dann die Dateiendung.

Beispielsweise:

Datenlog.txt

Zweiter Schritt: Du überlegst Dir, wie oft Du die Daten auf SD-Karte schreiben möchtest: Einmal pro Sekunde? Einmal pro Minute? Einmal pro Viertelstunde? Einmal pro Stunde? Oder was?

Wie schnell kann der Sensor denn messen? Hast Du das Datenblatt gelesen?

Soll das Datenloggen zu festen Uhrzeiten erfolgen, z.B. immer zur vollen Minute einmal, insgesamt 60 mal pro Stunde? In dem Fall würdest Du für Dein Projekt noch eine Echtzeituhr (RTC = realtime clock) als Modul benötigen.

Ein RTC-Modul würdest Du auch benötigen, wenn sich der Dateiname je nach Datum ändern soll, also wenn Du z.B.

am06.12.2016 in Datei 20161206.txt loggen
am 07.12.2026 in Datei 10161207.txt loggen
und am 01.01.2017 in Datei 20170101.txt loggen möchtest

Erzähle und mehr, was Du Dir überlegt hast und ob Du womöglich ein RTC-Uhrenmodul benötigst!

Schau mal hier, da habe ich was (#33) vergleichbares beschrieben.