Advertisement
  1. Code
  2. Coding Fundamentals

Hinzufügen eines SD-Kartendatenloggers zu einem Arduino-Projekt

Scroll to top
Read Time: 11 min

() translation by (you can also view the original English article)

Arduino-Projekte können von Home Brew Managern über Wetterstationen bis hin zu fortschrittlicher Hausautomation stark variieren. Oft möchten Sie Daten aus diesen Projekten protokollieren. In diesem Tutorial zeige ich Ihnen, wie Sie eine SD-Karte und ein Echtzeituhrmodul in ein Projekt integrieren, um die Datenerfassung mit Zeitstempel zu ermöglichen.

Sammeln Sie die Komponenten, Werkzeuge und Bibliotheken

Komponenten

Werkzeuge

  • Lötkolben
  • Lot
  • Dritte Hand-Werkzeug 
  • Computer mit Arduino IDE zum Programmieren
  • Für Ihr Arduino geeignetes USB-Kabel - Mini B für den Nano

Bibliotheken

Laden Sie die folgenden Arduino-Bibliotheken aus ihren Repositories herunter. Entpacken Sie den Ordner für jede Bibliothek in den Ordner Arduino/library. Benennen Sie jeden Ordner in SD, RTCLib bzw. DHT um. Die Arduino IDE kann die Bindestriche in den Dateinamen nicht verarbeiten.

Ein Wort zur Auswahl eines Datenloggers

Datenlogger sind als diskrete Elemente erhältlich und können in den Kosten zwischen 35 und Hunderten US-Dollar variieren. Die Auswahl des richtigen Loggers ist eine wichtige Entscheidung im Projekt. Es wäre eine enorme Enttäuschung, ein Tiefseebeobachterprojekt abzurufen, um festzustellen, dass die Daten des letzten Jahres korrupt waren.

Wie bei allen Projekten müssen Sie den Stromverbrauch berücksichtigen, es gibt jedoch einige andere Funktionen, die Sie bei der Auswahl eines Datenloggers für ein bestimmtes Projekt berücksichtigen sollten.

Umweltbedingungen

Vielleicht wird das Projekt unter rauen Bedingungen sein. Physische Stöße, hohe Temperaturen, Luftfeuchtigkeit und andere Bedingungen beeinflussen die Auswahl. Es sind Logger verfügbar, die unterschiedlichen Bedingungen standhalten können. Stellen Sie sicher, dass Sie wissen, wo Ihr Projekt und Ihr Logger leben werden, und wählen Sie die richtige Technologie aus.

Oberflächentyp

Es gibt serielle Logger, die nahezu jedes Protokoll, I2C, RS232, CAN, SPI und mehr sprechen. Das Schnittstellenprotokoll beeinflusst, wie schnell die Protokolldaten geschrieben werden können. Stellen Sie sicher, dass Sie den Logger auswählen, der der Projekttechnologie und den Anforderungen an die Schreibgeschwindigkeit entspricht.

Protokollabruf

Es ist nicht gut, wenn die protokollierten Daten nicht abgerufen werden können. Es ist der sprichwörtliche Baum, der fällt, ohne dass jemand etwas hört. Stellen Sie sicher, dass Sie verstehen, wie Daten von dem von Ihnen ausgewählten Logger abgerufen werden sollen. In einigen Fällen von diskreten Logger-IC-Chips müssen Sie eine externe Schnittstelle erstellen, über die Sie die Daten vom Chip zurückziehen können.

Zeit

Einige Logger geben nur Daten aus, während andere unglaublich genaue Zeitstempel für die Datensätze haben. Wie zu erwarten ist, ist der Preis im Allgemeinen umso höher, je genauer die Zeitstempel sind. Wenn für Ihr Projekt eine sehr schnelle Protokollierung erforderlich ist, bei der Zeitstempel auf die Nanosekunde gesetzt werden, führt der Logger etwas mehr aus als ein Logger, der keine Ahnung hat, wie spät es ist.

Beharrlichkeit

Dies möchten Sie tun, wenn Sie das Ende des Speichers überschreiten. Die Schemata variieren vom Stoppen der Protokollierung bis zum Überschreiben der ältesten Daten.

Medientyp/Haltbarkeit

Stellen Sie sicher, dass Sie bewerten, wie oft der Gerätespeicher überschrieben werden kann und wie der Plan aussieht, wenn er ausfällt. Wenn Sie den gesamten Logger nach 10.000 Überschreibungen ersetzen müssen, hängt der Wert davon ab, wie viele Schreibvorgänge Sie pro Sekunde ausführen möchten.

SD-Kartenlogger

Es gibt viele Vorteile bei der Verwendung einer SD-Karte für die Protokollierung. Es ist relativ günstig. Sie können Ihr eigenes Protokollierungsformat auswählen und festlegen, ob Sie Zeitstempel möchten oder nicht. Das Medium kann bei Abnutzung leicht ausgetauscht werden und kann schnell entfernt und von jedem Standardcomputer gelesen werden.

Die Protokollierung von SD-Karten hat auch einige Nachteile.

Es ist nicht die beste raue Umgebung, in der Feuchtigkeit die Kontakte beeinträchtigen kann. Es verbraucht auch viele wertvolle Stifte auf einem Mikrocontroller. Zwischen der Echtzeituhr (RTC) und der SD-Breakout-Karte werden sechs Pins verschiedener Typen verbraucht.

Ich habe den SD-Karten-Logger für dieses Tutorial ausgewählt, da die Arbeit mit der SD-Karte zum Schreiben und Lesen der Protokolle einfach und flexibel ist. Noch wichtiger ist, dass die Fähigkeiten zur Verwendung der SD-Karte und einer RTC für eine Vielzahl anderer Projekte nützlich sind.

Erstellen Sie das Projekt

Befolgen Sie die nachstehenden Schritte, um das Steckbrett zusammenzubauen. In diesem Tutorial wird ein einfacher Temperatur- und Feuchtigkeitssensor verwendet, um Daten für die Protokollierung zu erfassen. Nachdem Sie die Schritte ausgeführt haben, sollten Sie ein Steckbrett haben, das dem folgenden Diagramm ähnelt.

Completed SD Card DataloggerCompleted SD Card DataloggerCompleted SD Card Datalogger
SD-Kartendatenlogger abgeschlossen

Montieren Sie das SD Breakout Board

Das SD-Karten-Breakout-Board wird mit Durchgangsloch-Steckbrettern geliefert, die jedoch nicht angebracht sind. Eine schnelle Lötsitzung behebt das Problem und ermöglicht es Ihnen, die Platine wie in der Abbildung gezeigt zu platzieren.

Formatieren und Einlegen der SD-Karte

Legen Sie die SD-Karte in einen Computer ein und überprüfen Sie, ob sie mit einem FAT32-Dateisystem formatiert ist. Möglicherweise benötigen Sie einen MicroSD-zu-Standard-SD-Kartenadapter. Die SD-Karte in der Komponentenliste wird mit einem Adapter geliefert. Legen Sie die SD-Karte vorsichtig in das Breakout-Board ein.

Bauen Sie die Echtzeituhr zusammen

Die Real Time Clock- oder RTC-Karte wird als Kit geliefert und erfordert etwas mehr Löten, um sie zusammenzusetzen. Alle Komponenten sind im Kit enthalten. Befolgen Sie die schrittweisen Anweisungen, um die Platine einschließlich der Durchgangslochköpfe zusammenzubauen.

Stellen Sie sicher, dass Sie die mitgelieferte Batterie nach dem Zusammenbau in den Clip einsetzen. Ohne eingelegten Akku funktioniert es nicht richtig. Die RTC zieht nur dann aus der Batterie, wenn keine Hauptspannung vorhanden ist, daher sollte die Batterie Jahre halten.

Anbringen des 9-V-Batterieclips

Viele Batteriegehäuse wie das in der obigen Teileliste werden mit Kabel geliefert, die nicht für Steckbretter geeignet sind. Um die Kabel brotbrettfreundlich zu machen, löten Sie einen Draht oder einen Stift an das Ende jedes Kabelkabels.

Ein Wort zu SD-Kartenlesern

SD-Kartenleser können viel billiger gekauft werden als in diesem Tutorial empfohlen. Der Haken ist jedoch, dass SD-Kartenleser eine 3-Volt-Technologie sind, während der Arduino einen 5-Volt-Mikrocontroller verwendet.

Dies bedeutet, dass zur sicheren Verwendung eines SD-Kartenlesers mit einem Arduino ein Logikpegelwandler benötigt wird, um Spannungen zwischen beiden umzuwandeln. Dies erhöht die Kosten und die Komplexität. Der in der Teileliste angegebene Leser ist zwar etwas teurer, hat aber einige Gründe.

  • Es verfügt über einen eingebauten Logikpegelwandler, sodass keine zusätzlichen Komponenten oder Verkabelungen erforderlich sind. Es werden keine Widerstände verwendet, um die Spannung zu reduzieren, die das Lesen und Schreiben auf die Karte verlangsamen kann. Daher kann es sicher direkt mit dem Arduino verbunden werden
  • Es verwendet Micro SD-Karten für eine sehr kompakte Grundfläche
  • Es gibt viele verfügbare Codes und Beispiele dafür

Der Leser verwendet das SPI-Protokoll zur Kommunikation. Arduino-Boards werden mit bestimmten Pins geliefert, die für dieses Protokoll entwickelt wurden. Während es möglich ist, zur Not alternative Pins zu verwenden, erzielen Sie mit den Hardware-Pins die schnellste und zuverlässigste Leistung.

Die im schematischen Bild angegebenen Stifte sind für einen Arduino Uno oder Arduino Nano genau.

Programmieren Sie das Arduino

Wenn die Projekthardware zusammengebaut ist, besteht der nächste Schritt darin, sie zu programmieren. Laden Sie die mit diesem Tutorial oder aus dem Github-Repository für dieses Datenprotokollierungsprojekt gepackte Zip-Datei herunter.

  • Öffnen Sie datalogger.ino in der Arduino IDE
  • Verbinden Sie den Arduino Nano mit dem USB-zu-USB-Minikabel mit dem Computer
  • Stellen Sie sicher, dass die serielle Schnittstelle auf die Schnittstelle eingestellt ist, die der Computer beim Anschließen des Arduino über das Menü Werkzeuge > Serial Port erkannt hat
  • Stellen Sie über das Menü Werkzeuge > Board, dass die Karte auf Arduino Nano mit ATmega328 eingestellt ist
  • Stellen Sie sicher, dass die Bibliotheken ordnungsgemäß installiert sind, indem Sie auf die Schaltfläche Überprüfen klicken und sicherstellen, dass keine Fehler vorliegen
  • Schließen Sie den Akku an das Projekt an. Dies scheint hier ein seltsamer Schritt zu sein, aber Arduino, RTC, Sensor und SD-Kartenleser ziehen alle genug Spannung, sodass ich feststellte, dass mein USB-Anschluss nicht ausreichend Strom liefert und das Projekt kontinuierlich zurückgesetzt wird. Nehmen Sie sich Zeit, um die 9-V-Batterie anzuschließen. Als ich dies tat, bemerkte ich, dass sich die Statusanzeige am Arduino merklich aufhellte
  • Verwenden Sie die Upload-Taste, um den Code auf das Arduino zu übertragen
  • Bearbeiten Sie den Code, um die Zeile zu kommentieren: rtc.adjust(DateTime(F (__ DATE__), F (__ TIME__)); Durch Setzen eines // am Zeilenanfang. Beim ersten Hochladen des Codes wurden Datum und Uhrzeit der RTC auf die Uhrzeit der Kompilierung festgelegt. Sie möchten die Uhr jedoch nicht jedes Mal zurücksetzen, um die Zeit zu kompilieren, wenn die Karte zurückgesetzt wird. Wenn Sie den Code ohne diese rtc.adjust hochladen, bleibt die Uhrzeit beim nächsten Start in Ruhe
  • Laden Sie den Code erneut mit der auskommentierten Zeitzeile hoch
  • Öffnen Sie das Fenster Serial Monitor, indem Sie Strg-Umschalt-M drücken, und stellen Sie sicher, dass es auf 19200 Baud eingestellt ist. Sie sollten sehen, wie das Arduino mit der Ausgabe wie im folgenden Beispiel initialisiert wird
1
Initializing datalogger with RTC version 1.0
2
Starting Temp and Humidity Sensor
3
Starting SDCard reader and card
4
Opening logfile for write.
5
Starting Real Time Clock
6
Unixtime: 1405787147
7
1405787148,2014/7/19 16:25:48,69.80,40.00
8
1405787151,2014/7/19 16:25:51,69.80,40.00
9
1405787155,2014/7/19 16:25:55,69.80,40.00
10
1405787158,2014/7/19 16:25:58,69.80,40.00
11
1405787162,2014/7/19 16:26:02,69.80,40.00
12
1405787165,2014/7/19 16:26:05,69.80,40.00

Hinweise zum Programm

Das Datenlogger-Programm kombiniert Funktionen aus der RTC-Bibliothek, der DHT-Bibliothek und der SD-Bibliothek. Oben im Programm gibt es einige Optionen, die Sie optimieren können, z. B. den Namen der Datendatei und den Typ Ihrer DHT.

Alle Standardeinstellungen sollten jedoch einwandfrei funktionieren, wenn Sie die oben vorgeschlagenen Komponenten verwendet haben.

Hauptschleife

Die Hauptschleife des Programms einfach macht drei Dinge.

  • Lesen Sie die Temperatur und Luftfeuchtigkeit vom Sensor ab. Ich habe mir dafür einen Code aus einem anderen Tutorial ausgeliehen, das ich geschrieben habe: Aufbau eines drahtlosen Sensornetzwerks in Ihrem Zuhause
  • Formatieren Sie die abgerufenen Daten in eine durch Kommas getrennte Liste, um sie an die Protokollfunktion zu senden
  • Senden Sie die Daten an die Funktion logThis(), um auf die Karte zu schreiben
  • Schlaf drei Sekunden lang

Der Vorgang wird wiederholt, solange auf der SD-Karte Strom und Speicherplatz vorhanden sind.

Protokollierung

Die Funktion logThis() verwendet eine Zeichenfolge von Daten als Argument, bezieht die Zeit von der RTC, formatiert sie mit den Daten und schreibt sie in die Protokolldatei. Der Name der Protokolldatei wird im Abschnitt #define des Programms angegeben. Die Skizze öffnet die Protokolldatei beim Start des Setups, sodass der Dateiprotokollierer sie nicht für jeden Protokolleintrag erneut öffnen muss. Der unten gezeigte Befehl cryptic sprintf formatiert die Daten.

Wenn Sie die Protokollierung der Daten ändern möchten, stellen Sie sicher, dass Sie mit der Sprintf-Funktion vertraut sind und die Formatierungs- und Datenelemente verschieben können. Wenn Sie nur die Datumsfelder neu anordnen müssen, können Sie einfach die Reihenfolge zwischen den Kommas ändern, und alles sollte einwandfrei funktionieren.

1
sprintf(message, "%ld,%d/%d/%d %02d:%02d:%02d,%s",epoch,Year,Month,Day,Hour,Minute,Second,logmessage );

Schließlich schreibt der Befehl dataFile.println (message) die formatierte Zeichenfolge in die Datei. Die Funktion verhält sich wie der Befehl Serial.println.

Das FAT32-Dateisystem auf der SD-Karte weist einige bekannte Einschränkungen auf. Der Dateiname muss ebenfalls im Format 8.3 vorliegen. Die größte Dateigröße, die es aufnehmen kann, ist eine 2-GB-Datei und es können nur 268.173.300 Dateien gespeichert werden. Hoffentlich können Sie ein bisschen mit diesen Einschränkungen leben.

Zeit

Die Funktionen now.year() und Freunde führen die Arbeit aus, die erforderlich ist, um die aktuellen Zeitelemente (Unix-Epoche, Jahr, Monat, Tag, Stunde, Minute, Sekunde) von der RTC-Karte zu lesen und den Wert zurückzugeben.

Die tolle Sache über Echtzeituhren ist, dass sie natürlich die Zeit behalten. Während der Code und das Projekt andere wichtige Dinge erledigen können, z. B. sicherzustellen, dass Ihr Bier bei der richtigen Temperatur fermentiert, bleibt nur die Zeit erhalten. Selbst wenn Ihr Projekt an Strom verliert, tickt es mit einer unabhängigen Batterie weiter.

Alles was Sie tun müssen, ist es zu fragen und es wird Ihnen sagen, wie spät es ist. Dies ist natürlich perfekt für die Protokollierung von Daten. Die in der Teileliste angegebene Komponente ist ein passabler Zeitnehmer, aber die Spezifikationen besagen, dass sie bis zu zwei Sekunden pro Tag gewinnen kann.

Wenn das Sie eine Nacht wach hält, dann schauen Sie sich den schicken ChronoDot für eine höhere Präzision mit genau demselben Protokoll an. Es ist in diesem Projekt für ein paar Dollar mehr vollständig mit dem RTC austauschbar und wird komplett montiert geliefert.

Testen

Sie haben das Projekt erstellt, es (zweimal) programmiert und oben alles über die Betriebstheorie gelesen. Es ist Zeit, es auszuprobieren.

  1. Stellen Sie das Board an einem Ort auf, an dem Temperatur und Luftfeuchtigkeit interessant sind, und schließen Sie den Akku an
  2. Lassen Sie den Logger eine Weile laufen, um Daten zu sammeln
  3. Trennen Sie das Projekt nach einiger Zeit vom Stromnetz und entfernen Sie die SD-Karte
  4. Stecken Sie die Karte in den Adapter in voller Größe und legen Sie die SD-Karte in Ihren Computer ein.
  5. Öffnen Sie die Datei datalog.txt

Sie sollten so etwas wie das Folgende sehen.

1
1405787012,2014/7/19 16:23:32,69.80,40.00
2
1405787015,2014/7/19 16:23:35,69.80,40.00
3
1405787019,2014/7/19 16:23:39,69.80,40.00
4
1405787022,2014/7/19 16:23:42,69.80,40.00
5
1405787026,2014/7/19 16:23:46,69.80,40.00
6
1405787029,2014/7/19 16:23:49,69.80,40.00
7
1405787053,2014/7/19 16:24:13,69.80,40.00

Abschluss

In diesem Tutorial habe ich Ihnen gezeigt, wie Sie eine SD-Karte und ein Echtzeituhrmodul in Ihr Projekt integrieren. Mit dem Beispielcode können Sie Daten über einen längeren Zeitraum protokollieren, die schnell und einfach auf einen Computer kopiert werden können.

Nach Abschluss dieses Projekts können Sie einige Änderungen oder Upgrades daran versuchen. Versuchen Sie, den Zeitchip für genauere Zeitstempel zu aktualisieren. Das enthaltene Programm schreibt einfach immer wieder in dieselbe Datei, bis sie voll ist. Sie können versuchen, ein datumsbasiertes Dateirotationsschema zu erstellen, um Dateien einmal pro Woche zu rotieren.

Ich habe nicht einmal das Kartenerkennungskabel vom Lesegerät erwähnt, mit dem Sie den Schaltplan und die Platine ändern können, um das Vorhandensein einer Karte zu testen, bevor Sie Lese- oder Schreibvorgänge ausführen. Viel Glück und viel Spaß beim Experimentieren.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.