So fügen Sie einem Arduino-Projekt einen SD-Karten-Datenlogger hinzu

Arduino-Projekte können von Heimbrauemanagern über Wetterstationen bis hin zu fortschrittlicher Heimautomation sehr unterschiedlich sein. 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 eine zeitgestempelte Datenprotokollierung zu ermöglichen.

Sammeln Sie die Komponenten, Tools und Bibliotheken

Komponenten

  • Standard-Brotschneidebrett
  • Arduino verwendet dieses Tutorial Nano, aber die meisten Modelle sollten funktionieren
  • MicroSD-Karten-Breakout-Board
  • Micro SD Karte
  • Echtzeituhr
  • Temperatur-Feuchtigkeitssensor
  • 22 Gauge-Anschlussdraht (mehrere Farben)
  • 9V-Batterieclip mit Drahtleitungen

Werkzeuge

  • Lötkolben
  • Löten
  • Werkzeug für Dritte
  • Computer mit Arduino IDE zur Programmierung
  • USB-Kabel passend für Ihren Arduino-Mini B für den Nano

Bibliotheken

Laden Sie die folgenden Arduino-Bibliotheken aus ihren Repositorys herunter. Entpacken Sie den Ordner für jede Bibliothek in das Verzeichnis Arduino / Bibliotheken Mappe. Benennen Sie die einzelnen Ordner um SD, RTCLib, und DHT beziehungsweise. Die Arduino IDE kann die Bindestriche in den Dateinamen nicht verarbeiten.

  • Adafruit SD-Bibliothek (Wrapper für Sdfat-Bibliothek) zum Arbeiten mit der SD-Karte
  • Adafruit RTCLib-Gabel zum Lesen und Einstellen der Uhrzeit in der Echtzeituhr
  • Adafruit DHT Sensor Library zum Ablesen der Temperatur und Luftfeuchtigkeit

Ein Wort zum Auswählen eines Datenloggers

Datenlogger sind als diskrete Elemente erhältlich und können zwischen 35 und 100 US-Dollar kosten. Die Wahl des richtigen Loggers ist eine wichtige Entscheidung im Projekt. Es wäre eine große Enttäuschung, ein Tiefsee-Beobachterprojekt abzurufen, um herauszufinden, dass die Daten des vergangenen Jahres korrupt waren. 

Wie bei allen Projekten müssen Sie den Stromverbrauch berücksichtigen. Es gibt jedoch einige andere Funktionen, die Sie beachten sollten, wenn Sie einen Datenlogger für ein bestimmtes Projekt auswählen.

Umweltbedingungen

Vielleicht ist das Projekt in rauen Bedingungen. Physikalische Stöße, hohe Temperaturen, Feuchtigkeit und andere Bedingungen beeinflussen die Auswahl. Es stehen Logger zur Verfügung, die unterschiedlichen Bedingungen standhalten können. Stellen Sie sicher, dass Sie wissen, wo sich Ihr Projekt und Ihr Logger befinden, und wählen Sie die richtige Technologie aus.

Oberflächentyp

Es gibt serielle Logger, die über 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 für die Projekttechnologie und den Schreibgeschwindigkeitsbedarf geeigneten Logger auswählen.  

Protokollabruf

Es ist nicht gut, wenn die protokollierten Daten nicht abgerufen werden können. Es ist der sprichwörtliche Baum, ohne dass irgendjemand ihn hört. Vergewissern Sie sich, dass Sie wissen, wie Daten vom ausgewählten Logger abgerufen werden sollen. In einigen Fällen mit diskreten IC-Chips für die Protokollierung müssen Sie eine externe Schnittstelle aufbauen, mit der Sie die Daten vom Chip zurückholen können.

Zeit

Einige Logger speichern nur Daten, während andere für die Datensätze unglaublich genaue Zeitstempel haben. Wie erwartet, ist der Preis umso höher, je genauer die Zeitstempel sind. Wenn für Ihr Projekt eine sehr schnelle Protokollierung der Zeitstempel auf die Nanosekunde erforderlich ist, wird der Logger etwas mehr ausgeführt als ein Logger, der keine Ahnung hat, um welche Uhrzeit es sich handelt.  

Beharrlichkeit

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

Medientyp / Haltbarkeit

Stellen Sie sicher, dass Sie auswerten, wie oft der Gerätespeicher überschrieben werden kann und wie der Plan aussieht, wenn er zusammenbricht. 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 vornehmen möchten.

SD-Karten-Logger

Die Verwendung einer SD-Karte für die Protokollierung hat viele Vorteile. Das ist relativ günstig. Sie können Ihr eigenes Protokollierungsformat auswählen und festlegen, ob Sie Zeitstempel verwenden möchten. Das Medium ist bei Verschleiß leicht austauschbar und kann von jedem Standardcomputer schnell entnommen und gelesen werden.  

Die SD-Karten-Protokollierung hat auch einige Nachteile. 

Es ist nicht die beste raue Umgebung, in der Feuchtigkeit die Kontakte beeinträchtigen könnte. Es verbraucht auch eine Menge wertvoller Pins an einem Mikrocontroller. Zwischen der Echtzeituhr (RTC) und der SD-Breakout-Platine werden sechs verschiedene Pins benötigt.  

Ich habe mich für den SD-Karten-Logger für dieses Lernprogramm entschieden, da das Arbeiten mit der SD-Karte zum Schreiben und Lesen der Protokolle einfach und flexibel ist. Noch wichtiger ist, dass sich die Kenntnisse der SD-Karte und eines RTC für eine Vielzahl anderer Projekte eignen.

Bauen Sie das Projekt auf

Führen Sie die folgenden Schritte aus, um das Steckbrett zusammenzubauen. Dieses Tutorial verwendet einen einfachen Temperatur- und Feuchtigkeitssensor, um Daten für die Protokollierung zu sammeln. Nachdem Sie die Schritte ausgeführt haben, sollten Sie ein Steckbrett haben, das dem folgenden Diagramm ähnelt.

SD-Karten-Datenlogger abgeschlossen

Bauen Sie das SD Breakout Board zusammen

Das Breakout-Board der SD-Karte wird mit durchsteckbaren, brotbrettfreundlichen Headern geliefert, die jedoch nicht befestigt sind. Durch ein schnelles Löten wird das behoben und Sie können die Platine wie in der Abbildung gezeigt einsetzen.

Formatieren und legen Sie die SD-Karte ein

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

Montieren Sie die Echtzeituhr

Die Echtzeituhr- oder RTC-Platine wird als Bausatz geliefert und erfordert etwas mehr Löten, um sie zusammenzusetzen. Alle Komponenten sind im Kit enthalten. Befolgen Sie die Schritt-für-Schritt-Anweisungen, um die Platine einschließlich der Durchsteck-Header zu montieren. 

Stellen Sie sicher, dass Sie den mitgelieferten Akku nach der Montage in den Clip einsetzen. Ohne den Akku funktioniert es nicht richtig. Der RTC zieht nur dann von der Batterie, wenn keine Netzspannung anliegt. Die Batterie sollte also Jahre halten.

Anbringen des 9V-Batterieclips

Viele Batteriegehäuse, wie die in der oben genannten Teileliste, werden mit Kabel geliefert, die nicht verbesserungswürdig sind. Um die Leiterplatten brotverträglich zu machen, löten Sie einen Draht oder Kopfstift an das Ende jeder Drahtleitung.

Ein Wort zu SD-Kartenlesern

SD-Kartenleser können wesentlich günstiger als die in diesem Lernprogramm empfohlenen Karten erworben werden. Der Haken ist jedoch, dass SD-Kartenleser eine 3-Volt-Technologie sind, während der Arduino einen 5-Volt-Mikrocontroller verwendet. 

Das heißt, um einen SD-Kartenleser sicher mit einem Arduino zu verwenden, ist ein Logikpegelwandler erforderlich, um Spannungen zwischen den beiden umzuwandeln. Dies erhöht die Kosten und die Komplexität. Der in der Teileliste angegebene Leser ist zwar etwas teurer, hat aber mehrere Möglichkeiten.

  • Es verfügt über einen integrierten Pegelwandler, so dass keine zusätzlichen Komponenten oder Verdrahtungen erforderlich sind. Es werden keine Widerstände verwendet, um die Spannung zu reduzieren, was das Lesen und Schreiben auf die Karte verlangsamen kann. Somit kann es sicher direkt mit dem Arduino verbunden werden
  • Es verwendet Micro SD Cards für eine sehr kompakte Grundfläche
  • Es gibt eine Menge verfügbarer 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. Es ist zwar möglich, alternative Pins zu verwenden, aber Sie erhalten die schnellste und zuverlässigste Leistung, wenn Sie die für Hardware bestimmten Pins verwenden.

Die im Schaltbild angegebenen Pins sind für einen Arduino Uno oder Arduino Nano genau.

Programmieren Sie den Arduino

Wenn die Projekthardware zusammengebaut ist, müssen Sie sie als nächstes programmieren. Laden Sie die mit diesem Tutorial gepackte ZIP-Datei oder aus dem github-Repository für dieses Datenprotokollierungsprojekt herunter.

  • Öffnen datalogger.ino in der Arduino IDE
  • Verbinden Sie den Arduino Nano mit dem USB-zu-USB-Minikabel mit dem Computer
  • Stellen Sie sicher, dass der serielle Port auf den Port eingestellt ist, den der Computer beim Anschließen des Arduino mit erkannt hat Extras> Serienport Speisekarte
  • Stellen Sie sicher, dass die Karte mit der Taste auf Arduino Nano w / ATmega328 eingestellt ist Extras> Platine Speisekarte
  • Vergewissern Sie sich, dass die Bibliotheken ordnungsgemäß installiert sind, indem Sie auf klicken Überprüfen und stellen Sie sicher, dass keine Fehler auftreten
  • Verbinden Sie die Batterie mit dem Projekt. Dies scheint ein merkwürdiger Schritt zu sein, aber Arduino, RTC, Sensor und SD-Kartenleser ziehen alle so viel Spannung, dass ich fand, dass mein USB-Port nicht konstant genug Strom lieferte und das Projekt kontinuierlich zurückgesetzt wurde. Nehmen Sie sich Zeit für den Anschluss der 9-V-Batterie. Als ich dies tat, bemerkte ich, dass die Statusanzeige des Arduino merklich aufgehellt wurde
  • Verwenden Sie die Hochladen Taste, um den Code zum Arduino zu drücken
  • Bearbeiten Sie den Code, um die Zeile auszukommentieren: rtc.adjust (DateTime (F (__ DATUM__), F (__ TIME__))); Durch das Setzen eines // am Anfang der Zeile. Beim ersten Hochladen des Codes wurden Datum und Uhrzeit des RTC auf den Zeitpunkt des Kompilierens gesetzt. Sie möchten die Uhr jedoch nicht jedes Mal neu einstellen, wenn die Karte zurückgesetzt wird. Code ohne diesen Code hochladen rtc.adjust Damit bleibt die Uhrzeit beim nächsten Booten stehen
  • Laden Sie den Code erneut mit auskommentierter Zeitzeilenzeile hoch
  • Öffne das Serienmonitor Fenster durch Drücken von Control-Shift-M und stellen Sie sicher, dass es eingestellt ist 19200 Baud. Sie sollten das Arduino mit der Ausgabe wie im folgenden Beispiel initialisieren sehen
Datenlogger mit RTC Version 1.0 initialisieren Temperatur- und Feuchtesensor starten SD-Kartenleser und Karte starten Öffnen der Protokolldatei zum Schreiben. Beginn der Echtzeituhr Unixtime: 1405787147 1405787148,2014 / 7/19 16: 25: 48,69.80,40.00 1405787151,2014 / 7/19 16: 25: 51,69.80,40,00 1405787155,2014 / 7/19 16:25: 55,69,80,40,00 1405787158,2014 / 7/19 16: 25: 58,69,80,40,00 1405787162,2014 / 7/19 16: 26: 02,69,80,80,40,00 1405787165,2014 / 7/19 16:26:05, 69,80,40,00

Hinweise zum Programm

Das Datenloggerprogramm fügt Funktionen aus der RTC-Bibliothek, der DHT-Bibliothek und der SD-Bibliothek zusammen. Im oberen Bereich des Programms gibt es einige Optionen, die Sie einstellen können, z. B. den Namen der Datendatei und den Typ des DHT. 

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

Hauptschleife

Die Hauptschleife des Programms simple macht drei Dinge.

  • Temperatur und Luftfeuchtigkeit vom Sensor ablesen. Ich habe mir dafür etwas Code aus einem anderen Tutorial geliehen, das ich schrieb: Aufbau eines drahtlosen Sensornetzwerks in Ihrem Zuhause 
  • Formatieren Sie die abgerufenen Daten in einer durch Kommas getrennten Liste, um sie an die Protokollfunktion zu senden
  • Senden Sie die Daten an die logThis () Funktion zum Beschreiben der Karte
  • Schlaf drei Sekunden lang

Der Vorgang wird wiederholt, solange auf der SD-Karte Strom und Platz vorhanden ist.

Protokollierung

Das logThis () Die Funktion nimmt eine Zeichenfolge von Daten als Argument, ruft die Uhrzeit vom RTC ab, formatiert sie mit den Daten und schreibt sie in die Protokolldatei. Der Protokolldateiname wird in angegeben #definieren Abschnitt des Programms. Die Skizze öffnet die Protokolldatei, wenn das Setup gestartet wird, sodass der Dateilogger sie nicht für jeden Protokolleintrag erneut öffnen muss. Die kryptische Sprintf Der unten gezeigte Befehl formatiert die Daten. 

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

sprintf (Nachricht "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", Epoche, Jahr, Monat, Tag, Stunde, Minute, Sekunde, Logmeldung);

Endlich, das dataFile.println (Nachricht) Befehl schreibt die formatierte Zeichenfolge in die Datei. Die Funktion verhält sich genauso wie die Serial.println Befehl.

Das FAT32-Dateisystem auf der SD-Karte hat einige wissenswerte Einschränkungen. Der Dateiname muss auch ein 8.3-Format haben. Die größte Dateigröße, die es aufnehmen kann, ist eine 2 GB-Datei und nur 268.173.300 Dateien. Hoffentlich können Sie mit diesen Einschränkungen ein wenig leben.

Zeit

Die Funktionen now.year () und Freunde führen die erforderliche Arbeit aus, um die aktuellen Zeitelemente (Unix-Epoche, Jahr, Monat, Tag, Stunde, Minute, Sekunde) vom RTC-Board auszulesen und den Wert zurückzugeben.

Das Coole an Echtzeituhren ist, dass sie natürlich die Zeit halten. Während der Code und das Projekt andere wichtige Dinge erledigen können, z. B. dafür zu sorgen, dass Ihr Bier bei der richtigen Temperatur fermentiert, bleibt es einfach weiter. Selbst wenn Ihr Projekt an Leistung verliert, tickt es mit einer unabhängigen Batterie ständig weiter. 

Sie müssen nur danach fragen, und es wird Ihnen sagen, wie spät es ist. Dies ist natürlich perfekt für die Protokollierung von Daten. Bei der in der Teileliste angegebenen Komponente handelt es sich um einen passierbaren Zeitnehmer, die Angaben sagen jedoch, dass sie bis zu zwei Sekunden pro Tag gewinnen kann. 

Wenn Sie so eine Nacht aufbleiben, sollten Sie sich den fetten ChronoDot mit dem gleichen Protokoll genauer ansehen. Es ist für ein paar Dollar mehr mit dem RTC in diesem Projekt austauschbar und wird komplett montiert geliefert.

Testen 

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

  1. Stellen Sie die Platine an einem Ort auf, an dem Temperatur und Luftfeuchtigkeit interessant sind, und schließen Sie die Batterie an
  2. Lassen Sie den Logger eine Weile laufen und sammeln Sie Daten
  3. Trennen Sie nach einiger Zeit die Stromversorgung vom Projekt und entfernen Sie die SD-Karte
  4. Setzen Sie die Karte in den Adapter mit voller Größe ein und setzen Sie die SD-Karte in Ihren Computer ein.
  5. Öffne die Datei datalog.txt

Sie sollten etwas wie das Folgende sehen.

1405787012,2014 / 7/19 16: 23: 32,69,80,40,00 1405787015,2014 / 7/19 16: 23: 35,69,80,80,00 1405787019,2014 / 7/19 16: 23: 39,69.80,40,00 1405787022, 2014/7/19 16: 23: 42,69,80,40,00 1405787026,2014 / 7/19 16: 23: 46,69,80,40,00 1405787029,2014 / 7/19 16: 23: 49,69,80,40,00 1405787053,2014 / 19/19 16: 24: 13,69,80,40,00

Fazit

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 für 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 durchführen. Aktualisieren Sie den Zeitchip, um genauere Zeitstempel zu erhalten. Das mitgelieferte 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 drehen. 

Ich habe nicht einmal die Kartenerkennungsleitung vom Lesegerät erwähnt, mit der Sie das Schaltbild und die Platine modifizieren können, um das Vorhandensein einer Karte zu testen, bevor Sie Lese- oder Schreibvorgänge durchführen. Viel Glück und viel Spaß beim Experimentieren.