Arduino Datum / Uhrzeit-Plotten / Protokollieren mit Millis () und PfodApp: 11 Schritte

Arduino Datum / Uhrzeit-Plotten / Protokollieren mit Millis () und PfodApp: 11 Schritte

Inhaltsverzeichnis:

Anonim

Keine Arduino- oder Android-Programmierung erforderlich.

Einführung

Dieses Tutorial zeigt Ihnen, wie Sie Ihr Arduino verwenden Millis () Zeitstempel zum Plotten von Daten gegen Datum und Uhrzeit auf Ihrem Android-Handy mit pfodApp.

Keine Arduino- oder Android-Programmierung erforderlich. pfodApp protokolliert auch ausreichend Daten, damit Sie die Datums- / Zeitdiagramme später in einer Tabelle reproduzieren können.

Es wird KEIN RTC- oder GPS-Modul benötigt Wenn Ihr Arduino-Projekt jedoch über eine Echtzeituhr (RTC) oder ein GPS-Modul verfügt, können diese ebenfalls verwendet werden. In diesen Fällen korrigieren die pfodApp-Diagramme automatisch die Zeitzone, die RTC-Abweichung und das fehlende GPS-Signal. Für diese Korrekturen ist kein spezieller Arduino-Code erforderlich. Wie immer bei pfodApp werden die empfangenen Daten unverändert und unkorrigiert protokolliert. Die Protokolldatei enthält jedoch auch ausreichende Informationen, damit Sie diese Korrekturen selbst anwenden können, wenn Sie die Protokolle auf Ihren Computer herunterladen. Unten finden Sie Beispiele für diese Nachbearbeitung.

Es wird eine Vielzahl von Formatierungen auf der X-Achse für Uhrzeit und Datum unterstützt, die alle vollständig durch kurze Textzeichenfolgen in Ihrer Arduino-Skizze gesteuert werden. Es ist keine Android-Programmierung erforderlich.

pfodApp stellt eine Verbindung über WLAN, Bluetooth Classic, BLE und SMS her. Der kostenlose pfodDesigner generiert vollständige Arduino-Skizzen für das Plotten / Protokollieren von Datum und Uhrzeit, um eine Verbindung zu einer Vielzahl von Boards herzustellen. Es ist keine Arduino-Programmierung erforderlich.

Dieses instructable verwendet ein Adafruit Feather52 als Beispiel Arduino Board, das über BLE verbindet.

Dieses instructable deckt drei Fälle ab:

1) Ihr Mikroprozessor-Projekt hat nur Millisekunden-Zeitstempel - Millis ()

2) Ihr Mikroprozessor-Projekt verfügt über eine Echtzeituhr (RTC) - pfodApp korrigiert automatisch die Drift.

3) Ihr Mikroprozessor-Projekt verfügt über ein GPS-Modul - pfodApp korrigiert automatisch die auftretenden Schaltsekunden (derzeit 18 Sekunden ab 2018).

Zubehör:

Schritt 1: Verwenden von Arduino Millisekunden-Zeitstempeln, Millis ()

Die Verwendung von Millisekunden für Datum und Uhrzeit besteht aus zwei Teilen. Zum einen werden die Daten gegen die abgelaufene Zeit oder Datum / Uhrzeit geplottet, und zum anderen werden Datum und Uhrzeit anhand der protokollierten Zeitstempel für Rohdaten in Millisekunden neu erstellt. pfodApp ändert die vom pfodDevice (dem Arduino micro) empfangenen Rohdaten nicht. Es werden nur genau die empfangenen Bytes protokolliert .

Verwenden Sie zuerst den kostenlosen pfodDesigner, um eine Arduino-Skizze für Ihr Mikro zu erstellen, die die Millisekunden und Datenmessungen zum Plotten / Protokollieren an pfodApp sendet. In diesem Beispiel wird ein Menü für die Adafruit Feather 52 BLE-Karte mit dem Wert A0 erstellt. Im Tutorial zu Adafruit Feather nRF52 LE - Benutzerdefinierte Steuerelemente mit pfodApp wird anhand der pfodDesigner-Schritte ein Menü für den Feather nRF52 erstellt, das eine Diagrammschaltfläche enthält. Weitere Informationen finden Sie hier. In diesem Tutorial fügen wir nur eine Diagrammschaltfläche hinzu und verwenden die neuen Optionen für das X-Achsen-Format, um die A0-Messwerte gegen die verstrichene Zeit und das Datum / die Uhrzeit zu zeichnen.

Im ersten Teil dieses Tutorials wird mit dem kostenlosen pfodDesigner ein Beispiel für ein Datums- / Zeitdiagramm auf Ihrem Android-Handy erstellt. Wenn Sie mit der Anzeige zufrieden sind, können Sie eine Arduino-Skizze generieren, die diese beim Herstellen einer Verbindung mit pfodApp reproduziert. Es ist keine Android-Programmierung erforderlich, und da pfodDesigner vollständige Arduino-Skizzen für eine Vielzahl von Arduino-Boards generiert, ist auch keine Arduino-Programmierung erforderlich.

Schritt 2: Hinzufügen eines Diagramms zum Menü

Laden Sie die pfodDesigner-App von Google Play herunter, öffnen Sie sie und klicken Sie auf "Neues Menü starten".

Klicken Sie auf „Target Serial“ und dann auf die Schaltfläche „Bluetooth Low Energy“, um die Liste der 11 BLE-Karten anzuzeigen (scrollen Sie nach unten, um die anderen Optionen anzuzeigen). Wählen Sie auf Adafruit Bluefruit Feather52.

Gehen Sie zurück zum Bearbeitungsmenü und klicken Sie auf "Eingabeaufforderung bearbeiten" und stellen Sie eine geeignete Eingabeaufforderung für dieses Menü ein, z. "Feather52" und Text fett und Größe +7. Die Hintergrundfarbe wurde als "Standard" Weiß belassen

Gehen Sie zurück und klicken Sie auf "Menüelement hinzufügen", scrollen Sie nach unten und wählen Sie "Diagrammschaltfläche", um den Bearbeitungsbildschirm für die Diagrammschaltfläche zu öffnen. Hier können Sie das Erscheinungsbild der Schaltfläche ändern. In diesem Fall wurde der Text der Schaltfläche in "Datum / Uhrzeit-Diagramm von A0" geändert, und die anderen Standardeinstellungen wurden beibehalten.

Dies gibt Ihnen eine Schaltfläche im Menü, die den Kartenbildschirm öffnet.

Schritt 3: Bearbeiten der Plotquelle und der Beschriftungen

Klicken Sie auf die Schaltfläche „Datums- / Zeitdiagramm von A0“, um den Bildschirm zum Bearbeiten von Diagrammen zu öffnen, in dem Sie auf die Diagrammbezeichnung, das X-Achsen-Format, das Diagrammdatenintervall und (durch Scrollen nach unten) die Diagrammeinstellungen selbst zugreifen können. Bearbeiten Sie die Diagrammbeschriftung mit einem geeigneten Wert, z. "A0 Volt".

Scrollen Sie nach unten und öffnen Sie für Diagramme 2 und 3 die Option Diagramm bearbeiten und klicken Sie auf Diagramm ausblenden, um sie aus der Diagrammanzeige zu entfernen.

Klicken Sie dann auf "Edit Plot 1" und legen Sie eine Plotbezeichnung (z. B. A0) und yAxis-Einheiten (z. B. Volt) fest, zeigen Sie maximal 3,6 V an und verbinden Sie sie mit dem E / A-Pin A0.

Scrollen Sie zurück nach oben und klicken Sie auf "Chart Preview" (Diagrammvorschau), um die letzten 0 Probendatenpunkte in 1-Sekunden-Intervallen abzurufen, die gegen die verstrichene Zeit in Minuten: Sekunden aufgezeichnet wurden.

Für alle Diagramme der abgelaufenen Zeit werden führende Null-Einheiten nicht angezeigt. In diesem Diagramm werden daher nur die führenden Minuten für Zeit> 1 Minute angezeigt.

Schritt 4: Auswählen des Datums- / Uhrzeitformats

Bei Plots mit abgelaufener Zeit nimmt die führende Einheit mit der Zeit immer weiter zu. Um ein Beispiel dafür zu sehen, kehren Sie zum Bildschirm „Plots bearbeiten“ zurück und erhöhen Sie das Intervall für Plotdaten auf 15 Minuten (unten auf diesem Bildschirm).

Klicken Sie dann auf Diagrammvorschau, um die gleichen Probendaten anzuzeigen, jedoch mit 15-minütigen Intervallen zwischen den Proben. Wie Sie sehen können, nimmt der Minutenanteil von mm: ss immer weiter zu.

Gehen Sie nun zurück und klicken Sie auf die Schaltfläche für die X-Achse, um eine kleine Auswahl aller möglichen Daten- / Zeitformate für die X-Achse anzuzeigen (scrollen Sie für weitere Informationen nach unten).

Oben sehen Sie eine Auswahl von Diagrammvorschauen mit verschiedenen X-Achsen-Formaten.

Die hier gezeigten Datums- / Zeitdiagramme sind in der 'lokalen' Zeitzone. Es gibt auch Formatoptionen zum Zeichnen von Datum und Uhrzeit in UTC. Eine vollständige Liste der möglichen Optionen für das Datums- und Uhrzeitformat finden Sie in der Datei pfodSpecification.pfd.

Schritt 5: Generieren und testen Sie die Arduino-Skizze

Wenn Sie mit dem Format und dem Datenintervall Ihres Diagramms zufrieden sind, können Sie zum Bildschirm "Bearbeitungsmenü_1" gehen und nach unten scrollen und den Code für die ausgewählte Zielkarte generieren. Hier ist eine Beispielskizze für die Adafruit Feather52 mit 1-Sekunden-Datenintervallen und a mm: ss Format der abgelaufenen Zeit, pfodFeather52_timeplot.ino

Oben ist eine Handlung von A0 von der Feather52

Wenn Sie das Format in Wochentag Std: Min: Sek (~ E HH: mm: ss) ändern und den Code neu generieren (pfodFeather52_dateplot.ino), erhalten Sie eine Darstellung wie die zweite oben.

Sie können das X-Achsen-Format direkt in Ihrer Arduino-Skizze bearbeiten, wie im Folgenden beschrieben.

Schritt 6: Wie zeichnet PfodApp Datum / Uhrzeit in Millis ()?

Wenn pfodApp eine Verbindung herstellt, merkt es sich seine "lokale" und UTC-Zeit und fordert die aktuellen Zeitstempel der Plotdaten des pfodDevice (des Arduino-Boards) an. Mit diesen Informationen kann pfodApp Millisekunden-Zeitstempel entweder als abgelaufene Zeit darstellen, d. H. Millisekunden in Stunden, Minuten, Sekunden usw. konvertieren, oder das Datum und die Uhrzeit aufzeichnen, die die Millisekunden-Zeitstempel im Verhältnis zu dem Zeitpunkt darstellen, zu dem die Verbindung hergestellt und die aktuelle Zeit des pfodDevice angefordert wurde.

In der von Arduino generierten Skizze (z. B. pfodFeather52_dateplot.ino) befinden sich drei kleine Codebits, die die Arduino-Seite der Diagramme behandeln.

Der loop () - Codeabschnitt, der die pfodApps behandelt {@} aktuelle Zeitanfrage

// {@} Anfrage bearbeiten

} else if ('@' == cmd) {// pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis (); // aktuelle Millis als versetzte Rohdaten-Zeitstempel erfassen parser.print (F ("{@` 0} "); // gebe `0 als 'aktuelle' Rohdaten Millisekunden zurück

Sie könnten nur den aktuellen Wert von millis () zurückgeben, aber Millis () wird alle 49,7 Tage auf 0 zurückgesetzt, wodurch der Plot rückwärts springt. Der Code merkt sich also stattdessen den aktuellen Wert Millis () Wert, wenn die {@} Anfrage wurde gestellt und kehrt zurück {@`0} ein aktueller Millisekunden-Zeitstempel von Null. Beim Senden der Rohdatenpunkte verwendet die Skizze dann

plot_1_var = analogRead (A0); // Eingabe zum Plotten lesen

// plot_2_var plot Versteckt, damit hier keine Daten zugewiesen werden // plot_3_var plot Versteckt, damit hier keine Daten zugewiesen werden // Plotdaten im CSV-Format senden parser.print (millis () - plot_mSOffset); // Zeit in Millisekunden….

Damit beginnt der mit den Daten gesendete Millisekunden-Zeitstempel bei 0 und steigt auf 49,7 Tage. Wenn Sie 49,7 Tage lang in ständiger Verbindung bleiben, wird der Plot um ~ 50 Tage zurückspringen. Das einmalige Trennen und Wiederherstellen der Verbindung alle 49,7 Tage vermeidet dies.

Der dritte Teil des Datums- / Zeitplots ist die Plotnachricht.

} else if ('A' == cmd) {// Benutzer drückte - 'Datums- / Zeitdiagramm von A0'

// im Hauptmenü von Menu_1 // Plot-Meldung zurückgeben. parser.print (F ("A0 ~~~ Volt"));

Wenn der Benutzer auf die Schaltfläche „Datum / Uhrzeit-Plot von A0“ drückt, sendet pfodApp die {EIN} cmd an das pfodDevice und das pfodDevice antwortet mit der Handlungsnachricht, {=…

Datum

welches das X-Achsen-Format enthält E HH: mm: ss

Hier sind Java SimpleDateFormat-Formate zulässig. pfodApp Data Logging and Plotting und die pfodSpecification.pdf enthalten weitere Details zur Plotnachricht.

Schritt 7: Reproduzieren der Datums- / Zeitdiagramme auf Ihrem Computer

Standardmäßig protokolliert pfodApp alle eingehenden Rohdaten in einer Protokolldatei auf Ihrem Mobiltelefon, es sei denn, Sie haben diese Protokollierung im Verbindungsbearbeitungsbildschirm deaktiviert (siehe pfodAppForAndroidGettingStarted.pdf)

Wenn Sie pfodApp bearbeiten, wird eine kurze Meldung mit dem Speicherort und dem Namen der Protokolldatei angezeigt, z. /pfodAppRawData/pfod_bluefruit52.txt Diese Datei ist im CSV-Format und durch Kommas getrennt. Nachdem Sie sie auf Ihren Computer übertragen haben (Übertragungsoptionen finden Sie in der Datei pfodAppForAndroidGettingStarted.pdf), können Sie sie in einer Tabelle öffnen, um die Daten zu zeichnen.

Hier sind die ersten Zeilen einer Protokolldatei.

// pfodApp V3.0.360, Ortszeit, UTC, mS pro Tag, aktuelle Uhrzeit von pfod bluefruit52 (mS), aktuelle Uhrzeit von pfod bluefruit52, // verbunden am, 2019/04/20 11: 32: 50.238,2019 / 04/20 01: 32: 50.238,86400000,0, 366,0,25,, 1366,0,29,, 2366,0,31,, 3366,0,33,, 4366,0,33,,

Oben sehen Sie die 'lokale' und UTC-Zeit, die pfodApp mit dem Feather52 verbunden hat, und die aktuelle Zeit in ms, die der Feather52 über das meldet {@..} Antwort. Die letzte Spalte ist leer, da es keine RTC oder GPS gibt und daher vom Feather52 keine aktuelle Zeit in JJJJ / MM / TT-Zeit gemeldet wurde.

Subtrahieren Sie zum Plotten der Daten gegen die abgelaufene Zeit die aktuelle Zeit (mS) vom Millisekunden-Zeitstempel und dividieren Sie sie durch den Wert für mS pro Tag. Hier ist die Tabelle mit der hinzugefügten Formel und dem Ergebnis. Die folgende Tabelle (pfod_bluefruit52.xls) ist eine OpenOffice-Tabelle, die im Excel-Format gespeichert ist.

In OpenOffice ist das Diagramm ein Streudiagramm und die x-Achse des Diagramms wurde in HH: MM: SS formatiert

Hinweis: Die Datums- und Uhrzeitformate der Tabellenkalkulation stimmen NICHT mit den von pfodApp verwendeten Plotformaten überein. In pfodApp ist MM beispielsweise Monate und mm Minuten.

Zum Plotten gegen Datum und Uhrzeit müssen Sie nur die Verbindungszeit zur Tabellenkalkulationszeit und zum erneuten Plotten hinzufügen. (pfod_bluefruit52_date.xls)

Schritt 8: So vermeiden Sie das 49,7-Tage-Millis () -Limit und warum sollten Sie es nicht tun

Wie oben in Wie zeichnet pfodApp Datum / Uhrzeit von millis ()?Wenn Sie länger als 49,7 Tage ununterbrochen verbunden bleiben, werden die Millisekunden-Zeitstempel auf Null zurückgesetzt. Einige Codezeilen können dies vermeiden, dies wird jedoch nicht empfohlen.

Zuerst, wie man das Umwickeln vermeidet. Fügen Sie eine weitere vorzeichenlose int-Variable hinzu, um festzustellen, wie oft die Zeitstempel umlaufen und das kombinierte Ergebnis in HEX drucken.

uint_t mSwrapCount = 0;

uint32_t lastTimeStamp = 0;

plot_1_var = analogRead (A0); // Eingaben in Plot lesen // plot_2_var plot Versteckt, damit hier keine Daten zugewiesen werden // plot_3_var plot Versteckt, damit hier keine Daten zugewiesen werden // Plotdaten im CSV-Format senden uint32_t timeStamp = millis () - plot_mSOffset; if (timeStamp <lastTimeStamp) {// timeStamp wird auf 0 zurückgesetzt mSwrapCount ++; // zähle eins hinzu} lastTimeStamp = timeStamp; parser.print ("0x"); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // Zeit in Millisekunden in HEX….

Wenn Sie die Antwort {@.. zurücksenden, löschen Sie auch den mSwrapCount.

// {@} Anfrage bearbeiten

} else if ('@' == cmd) {// pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis (); // aktuelle Millis als versetzte Rohdaten-Zeitstempel erfassen mSwrapCount = 0; // Zeilenumbruch löschen. parser.print (F ("{@` 0} ")); // gebe `0 als 'aktuelle' Rohdaten Millisekunden zurück

Die Zeitstempel geben nun den korrekten Wert für die nächsten 40,7 Tage * 65536 ~ = 7308 Jahre an.

pfodApp konvertiert die hexadezimalen Zeitstempel für das Plotten automatisch und protokolliert sie genau so, wie sie empfangen wurden, d. h. in hexadezimal. In der (OpenOffice) -Tabelle verwenden Sie diese Formel, um die hexadezimale Zeichenfolge in A2 in mS zu konvertieren (wobei A1 eine leere Zelle ist). = HEX2DEC (REPLACE (A2; 1; 2; A1))

Warum willst du das nicht?

Wie oben gezeigt, ist es einfach, die Zeitstempel von mS auf mehr als 50 Tage zu verlängern. Das wollen Sie aber wahrscheinlich nicht, weil sie immer ungenauer werden. Ein typischer 16-MHz-Kristall, der zur Erzeugung der millis () -Ergebnisse verwendet wird, hat eine Genauigkeit von ~ 50 ppm (parts per million). Dies bedeutet, dass der Millisekunden-Zeitstempel nach 49,7 Tagen um 3 ½ Minuten abweicht und die Auswirkung der Temperatur auf die Kristallgenauigkeit ignoriert.

Bei kurzen Verbindungszeiten ist diese Ungenauigkeit kein Problem, da die Antwort {@.. den Millisekunden-Zeitstempel bei jeder erneuten Verbindung erneut mit dem Datum / der Uhrzeit des Mobiltelefons synchronisiert. Wenn Sie jedoch über einen längeren Zeitraum (Tage) in Verbindung bleiben und die Daten kontinuierlich protokollieren möchten, sollten Sie eine genauere Methode als die integrierte Funktion millis () verwenden, z. B. ein RTC- oder GPS-Modul.

Schritt 9: Verwenden einer RTC (Echtzeituhr)

Es gibt eine Reihe von RTC-Modulen, eines der genaueren ist DS3231, z. Adafruits DS3231-Modul. Die angegebene Genauigkeit beträgt +/- 2 ppm über 0 bis 40 ° C. ~ +/- 5 s / Monat.

Wenn Sie Daten mit Datums- / Zeitstempeln zeichnen möchten, z. 2019/04/19 20: 4: 34, dann müssen Sie die Antwort {@ ändern, um das aktuelle Datum / die aktuelle Uhrzeit zurückzugeben, z. {@`0~2019/4/19 3:33:5}. Im Folgenden sind einige Beispielcodeänderungen aufgeführt, die auf die von pfodDesigner generierte Skizze für die Verwendung eines RTC-Moduls angewendet werden sollen, sofern Sie die RTClib-Bibliothek verwenden und den Code hinzugefügt haben, der das RTC-Modul initialisiert.

// {@} Anfrage bearbeiten

} else if ('@' == cmd) {// pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis (); // aktuelle Millisekunden als versetzte Rohdaten-Zeitstempel erfassen parser.print (F ("{@` 0 "}); // 0 als 'aktuelle' Rohdaten-Millisekunden zurückgeben parser.print ('~'); // Startzeichenfolge von Datum / Uhrzeit DateTime now = rtc.now () sendDateTime (& now); // JJJJ / M / t / H: m: s an parser.print senden, Adresse & als Argument übergeben parser.print ('}'); // Ende der {@ Antwort zB {@ `0 ~ 2019/4/19 3: 33: 5}….

// Datum und Uhrzeit an den Parser senden

void sendDateTime (DateTime * dt) {parser.print (dt-> year (), DEC); parser.print ('/'); parser.print (dt-> month (), DEC); parser.print ('/'); parser.print (dt-> day (), DEC); parser.print (''); parser.print (dt-> hour (), DEC); parser.print (':'); parser.print (dt-> minute (), DEC); parser.print (':'); parser.print (dt-> second (), DEC); }

void sendData () {

if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // Plotdaten-Timer ohne Drift neu starten // Plotvariablen Werte aus Ihren Schleifenvariablen zuweisen oder ADC-Eingänge lesen plot_1_var = analogRead (A0); // Eingaben in Plot lesen // plot_2_var plot Versteckt, damit hier keine Daten zugewiesen werden // plot_3_var plot Versteckt, damit hier keine Daten zugewiesen werden // Plotdaten im CSV-Format senden DateTime now = rtc.now (); sendDateTime (& now); // JJJJ / M / T / H: M: S an parser.print senden, Adresse & als Argument übergeben. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Plot 2 ist ausgeblendet. Keine Daten gesendet. parser.print (','); // Plot 3 ist ausgeblendet. Keine Daten gesendet. parser.println (); // Ende des CSV-Datensatzes}}

Das ~2019/4/19 3:33:5 Teil der {@ Antwort informiert pfodApp über das Datum und die Uhrzeit, die das pfodDevice für aktuell hält. Ihre Skizze kann dann Daten mit yMd Hms-Zeitstempeln senden und pfodApp zeichnet sie entweder als abgelaufene Zeit ab der Verbindungszeit ODER als Datum und Uhrzeit, abhängig vom von Ihnen angegebenen Format der X-Achse.

Beim Plotten gegen Datum und Uhrzeit korrigiert die pfodApp-Plotroutine etwaige Abweichungen in der Echtzeituhr, indem sie die gemeldete aktuelle Uhrzeit des pfodDevice mit der aktuellen Uhrzeit des Mobiltelefons vergleicht. Diese Korrektur behandelt auch die RTC, die auf eine andere Zeitzone als die lokale Zeitzone Ihres Handys eingestellt ist. Millis () Zeitstempel funktionieren weiterhin wie in Verwenden von Arduino Millisekunden-Zeitstempeln, Schritt 5 oben.

Hier ist ein Beispiel für eine Tabelle mit Raumtemperaturen über einen Zeitraum von 8 Tagen: Office_Temp.xls Beim Importieren der Protokolldatei wurde die erste Spalte als YMD markiert, um den Text in ein Datum / eine Uhrzeit umzuwandeln. Sie müssen noch das führende 'Formular entfernen Ortszeit, koordinierte Weltzeit und Office Temp aktuelle Zeit Einträge, die vom Arbeitsblatt als Datum und Uhrzeit interpretiert werden sollen.

Um dasselbe Diagramm zu erhalten, das pfodApp anzeigt, müssen Sie das korrigierte Datum / die korrigierte Uhrzeit berechnen. In diesem Fall liegt die RTC-Zeit 2 Sekunden hinter der Ortszeit des Mobiltelefons, sodass zu jedem RTC-Zeitstempel (Ortszeit - aktuelle Office-Zeit) die wahre Ortszeit hinzugefügt wird.

Erstellen Sie für Diagramme der abgelaufenen Zeit eine neue Spalte mit dem (Datums- / Zeitstempel - die aktuelle Bürozeit) und verwenden Sie diesen als X-Achse im Diagramm (Office_TempElapsed.xls). In diesem Fall erstellt pfodApp tatsächlich schönere Diagramme der abgelaufenen Zeit in Tagen Std.: Min.: Sek.

Schritt 10: Verwenden eines GPS-Moduls

Die Verwendung eines GPS-Moduls ähnelt der Verwendung eines RTC-Moduls, mit der Ausnahme, dass für GPS-Module Millisekunden verfügbar sind, die Jahre ab 2000 beginnen und die UTC-Schaltsekunden fehlen (siehe http://tycho.usno.navy.mil/leapsec.html)) Datum und Uhrzeit des GPS-Empfängers liegen derzeit 18 Sekunden vor UTC (Stand Januar 2018).

Die Adafruit GPS-Bibliothek für das Adafruit Ultimate GPS addiert im Gegensatz zur RTClib nicht den 2000-Jahres-Offset zu den GPS-Jahren, sodass dieser beim Senden des Datums- und Zeitstempels hinzugefügt werden muss. Auch wenn die GPS-Bibliothek Millisekunden liefert, die eine sehr gute Langzeitgenauigkeit aufweisen, sind sie nicht sehr genau.Die GPS-Zeitaktualisierungen erfolgen nur einmal alle 100 ms, und dann tritt eine zusätzliche Verzögerung beim Empfang der seriellen Daten mit langsamen 9600 Baud und eine weitere Verzögerung beim Parsen auf. All dies trägt zur Millisekundengenauigkeit bei der Zeitstempelung von Daten bei.

Im Folgenden sind einige Beispielcodeänderungen aufgeführt, die auf die von pfodDesigner generierte Skizze für die Verwendung eines GPS-Moduls angewendet werden sollen, sofern Sie die GPS-Bibliothek von Adafruit verwenden und den Code zum Empfangen und Parsen der Nachrichten in ein GPS-Objekt eingefügt haben.

// {@} Anfrage bearbeiten

} else if ('@' == cmd) {// pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis (); // aktuelle Millisekunden als versetzte Rohdaten-Zeitstempel erfassen parser.print (F ("{@` 0 "}); // 0 als 'aktuelle' Rohdaten-Millisekunden zurückgeben parser.print ('~'); // Startzeichenfolge von Datum / Uhrzeit sendDateTime (& GPS); // JJJJ / M / T / H: m: s an parser.print senden, Adresse & als Argument übergeben parser.print ('}'); // Ende von {@ Antwort z {@ `0 ~ 2019/4/19 3: 33: 5}….

// Datum und Uhrzeit an den Parser senden

void sendDateTime (Adafruit_GPS * gps) {parser.print (F ("20"); // 20.. year parser.print (gps-> year, DEC); parser.print ('/'); parser.print (gps-> month, DEC); parser.print ('/'); parser.print (gps-> day, DEC); parser.print (''); parser.print (gps-> hour, DEC); parser.print (':'); parser.print (gps-> minute, DEC); parser.print (':'); parser.print (gps-> second, DEC); // parser.print ('.'); wenn Millisekunden gesendet werden // wenn Sie ms senden möchten, müssen Sie den Wert von gps-> Millisekunden mit führenden Nullen auffüllen // dh 3 muss auf 003 aufgefüllt werden}

void sendData () {

if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // Plotdaten-Timer ohne Drift neu starten // Plotvariablen Werte aus Ihren Schleifenvariablen zuweisen oder ADC-Eingänge lesen plot_1_var = analogRead (A0); // Eingaben in Plot lesen // Plot_2_var Plot ausgeblendet, damit hier keine Daten zugewiesen werden // Plot_3_var Plot ausgeblendet, damit hier keine Daten zugewiesen werden // Plotdaten im CSV-Format senden sendDateTime (& GPS); // JJJJ / M / T / H: M: S an parser.print senden, Adresse & als Argument übergeben. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Plot 2 ist ausgeblendet. Keine Daten gesendet. parser.print (','); // Plot 3 ist ausgeblendet. Keine Daten gesendet. parser.println (); // Ende des CSV-Datensatzes}}

Beim Plotten gegen Datum und Uhrzeit korrigiert die pfodApp automatisch die Schaltsekunden. Per Januar 2018 liegt die GPS-Zeit 18 Sekunden vor UTC. pfodApp korrigiert dies, indem das vom GPS bei der Verbindung über die Antwort {@ zurückgegebene Datum und die Uhrzeit mit dem UTC-Datum und der Uhrzeit des Mobiltelefons verglichen werden. Das Erstellen von Plots in einer Kalkulationstabelle aus der pfodApp-Protokolldatei ist dasselbe wie oben für RTC-Module. Durch Hinzufügen der (Ortszeit - aktuelle Bürozeit) zu den GPS-Zeitstempeln werden die Schaltsekunden korrigiert.

Millis () - Zeitstempel funktionieren weiterhin wie in Verwenden von Arduino-Millisekunden-Zeitstempeln, Schritt 5 oben.

Schritt 11: Fazit

Wenn Sie pfodApp auf Ihrem Android-Handy verwenden, können Sie Daten gegen Datum und Uhrzeit oder die abgelaufene Zeit plotten, wobei Sie nur Arduino verwenden Millis () Funktion. Mithilfe der pfodApp-Protokolldatei können Sie diese Datums- / Zeitdiagramme in einer Tabelle erneut erstellen. Wenn Ihr Arduino-Projekt über ein RTC-Modul verfügt, können Sie das Datum und die RTC-Zeitstempel protokollieren und zeichnen, wobei die RTC-Abweichung automatisch korrigiert wird. Wenn Ihr Arduino-Projekt über ein GPS-Modul verfügt, können Sie die hochgenauen Zeitstempel protokollieren und plotten. PfodApp korrigiert automatisch die fehlenden Schaltsekunden des GPS.

In allen Fällen werden die Rohdaten aus Ihrem Arduino-Projekt genau wie empfangen und nicht korrigiert protokolliert. Die pfodApp-Protokolldatei enthält jedoch zusätzliche Daten, mit denen Sie diese Korrekturen in einer Tabelle aus der heruntergeladenen Protokolldatei wiederherstellen können.

Es ist keine Android-Codierung erforderlich. Die Plotformate werden alle durch kleine Textzeichenfolgen in Ihrer Arduino-Skizze angegeben. Der kostenlose pfodDesigner generiert vollständige Arduino-Datenprotokollierungs- und Plotskizzen für eine Vielzahl von Arduino-Boards, die über WiFi, Classic Bluetooth, BLE und SMS verbunden sind

Dies ist ein Eintrag in der

Arduino-Wettbewerb 2019