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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 abgeschlossenDas 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.
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.
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.
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.
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.
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.
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.
datalogger.ino
in der Arduino IDErtc.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 stehenDatenlogger 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
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.
Die Hauptschleife des Programms simple macht drei Dinge.
logThis ()
Funktion zum Beschreiben der KarteDer Vorgang wird wiederholt, solange auf der SD-Karte Strom und Platz vorhanden ist.
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.
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.
Sie haben das Projekt erstellt, (zweimal) programmiert und alles über die Betriebstheorie oben gelesen. Es ist Zeit, es auszuprobieren.
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
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.