Inhaltsverzeichnis:
- Schritt 1: Verwenden von Arduino-Millisekunden-Zeitstempeln, Millis ()
- Schritt 2: Hinzufügen eines Diagramms zum Menü
- Schritt 3: Bearbeiten der Plotquelle und der Beschriftungen
- Schritt 4: Auswahl des Datums-/Zeitformats
- Schritt 5: Generieren und testen Sie die Arduino-Skizze
- Schritt 6: Wie stellt PfodApp Datum/Uhrzeit von Millis() dar?
- Schritt 7: Reproduzieren der Datums-/Uhrzeit-Plots auf Ihrem Computer
- Schritt 8: Wie Sie das 49,7-Tage-Millis()-Limit vermeiden und warum Sie es nicht tun sollten
- Schritt 9: Verwenden einer RTC (Echtzeituhr)
- Schritt 10: Verwenden eines GPS-Moduls
- Schritt 11: Fazit
Video: Arduino Datum / Uhrzeit Plotten / Protokollieren mit Millis () und PfodApp - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Keine Arduino- oder Android-Programmierung erforderlich. RTC- und GPS-Module werden ebenfalls unterstützt. Automatische Korrektur für Zeitzonen, RTC-Drift und GPS fehlende Schaltsekunden
Einführung
Dieses Tutorial zeigt Ihnen, wie Sie Ihre Arduino millis()-Zeitstempel verwenden, um Daten mit pfodApp gegen Datum und Uhrzeit auf Ihrem Android-Handy darzustellen.
Keine Arduino- oder Android-Programmierung erforderlich. pfodApp protokolliert auch ausreichend Daten, damit Sie die Datums-/Uhrzeit-Plots später in einer Tabellenkalkulation reproduzieren können.
Es wird kein RTC- oder GPS-Modul benötigt. Wenn Ihr Arduino-Projekt jedoch über eine RTC (Real Time Clock) oder ein GPS-Modul verfügt, können diese auch verwendet werden. In diesen Fällen korrigieren die pfodApp-Plots automatisch Zeitzone, RTC-Drift und fehlende GPS-Schaltsekunden. 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 genügend Informationen, um diese Korrekturen selbst vornehmen zu können, wenn Sie die Protokolle auf Ihren Computer herunterladen. Beispiele für diese Nachbearbeitung finden Sie unten.
Es wird eine Vielzahl von Zeit- und Datums-X-Achsen-Formatierungen unterstützt, die alle vollständig durch kurze Textzeichenfolgen in Ihrer Arduino-Skizze gesteuert werden. Es ist keine Android-Programmierung erforderlich.
pfodApp verbindet sich über WLAN, Bluetooth Classic, BLE und SMS. Der kostenlose pfodDesigner generiert komplette Arduino-Skizzen für Datums-/Zeit-Plots/Logging, um eine Verbindung zu einer Vielzahl von Boards herzustellen. Es ist keine Arduino-Programmierung erforderlich.
Dieses anweisbare verwendet ein Adafruit Feather52 als Beispiel-Arduino-Board, das über BLE verbunden ist.
Dieses anweisbare deckt drei Fälle ab: 1) Ihr Mikroprozessorprojekt hat nur Millisekunden-Zeitstempel – Millis () 2) Ihr Mikroprozessorprojekt hat eine Echtzeituhr (RTC) – pfodApp korrigiert automatisch die Drift. 3) Ihr Mikroprozessorprojekt verfügt über ein GPS-Modul – pfodApp korrigiert automatisch die auftretenden Schaltsekunden (derzeit 18 Sek. Stand 2018).
Schritt 1: Verwenden von Arduino-Millisekunden-Zeitstempeln, Millis ()
Die Verwendung von Millisekunden für Datum und Uhrzeit besteht aus zwei Teilen. Einer dient dazu, die Daten entweder gegen die verstrichene Zeit oder Datum/Uhrzeit zu zeichnen, und der andere Teil stellt das Datum und die Uhrzeit aus den protokollierten Millisekunden-Zeitstempeln der Rohdaten neu her. pfodApp ändert die vom pfodDevice (dem Arduino-Mikro) empfangenen Rohdaten nicht. Es protokolliert nur genau die empfangenen Bytes.
Verwenden Sie zuerst den kostenlosen pfodDesigner, um eine Arduino-Skizze für Ihr Mikro zu generieren, die die Millisekunden und Datenmessungen zum Plotten / Protokollieren an pfodApp sendet. In diesem Beispiel wird ein Menü für das Adafruit Feather 52 BLE-Board erstellt, das A0 liest. Das Tutorial zu Adafruit Feather nRF52 LE - Custom Controls with pfodApp führt die pfodDesigner-Schritte durch, um ein Menü für das Feather nRF52 mit einer Chart-Schaltfläche zu erstellen. In diesem Tutorial fügen wir nur eine Diagrammschaltfläche hinzu und verwenden die neuen X-Achsen-Formatoptionen, um die A0-Messwerte gegen die verstrichene Zeit und Datum/Uhrzeit darzustellen.
Im ersten Teil dieses Tutorials wird der kostenlose pfodDesigner verwendet, um ein Beispiel-Datums-/Zeitdiagramm auf Ihrem Android-Handy zu erstellen. Wenn Sie mit der Anzeige zufrieden sind, können Sie die Arduino-Skizze generieren, die dies reproduziert, wenn Sie sich mit pfodApp verbinden. 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-Boards anzuzeigen (scrollen Sie nach unten, um die anderen Optionen anzuzeigen). Wählen Sie auf Adafruit Bluefruit Feather52.
Gehen Sie zurück zum Menü Bearbeiten 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 "Diagramm-Schaltfläche", um den Bearbeitungsbildschirm für die Diagrammschaltfläche zu öffnen. Hier können Sie das Aussehen der Schaltfläche beliebig ändern. In diesem Fall wurde der Text der Schaltfläche in „Datum/Zeit-Diagramm von A0“geändert und die anderen Voreinstellungen wurden unverändert belassen.
Dadurch erhalten Sie eine Schaltfläche im Menü, die den Kartenbildschirm öffnet.
Schritt 3: Bearbeiten der Plotquelle und der Beschriftungen
Klicken Sie auf die Schaltfläche „Datum/Zeit-Diagramm von A0“, um den Bildschirm „Plots bearbeiten“zu öffnen, in dem Sie auf die Diagrammbeschriftung, das X-Achsen-Format, das Diagrammdatenintervall und (durch Herunterscrollen) die Diagrammeinstellungen selbst zugreifen können. Bearbeiten Sie die Diagrammbeschriftung auf etwas Passendes, z. B. „A0 Volt“.
Scrollen Sie nach unten und öffnen Sie für Plots 2 und 3 Plot bearbeiten und klicken Sie auf Plot ausblenden, um sie aus der Diagrammanzeige zu entfernen.
Klicken Sie dann auf „Edit Plot 1“und legen Sie eine Plotbezeichnung (z. B. A0), y-Achsen-Einheiten (z. B. Volt) fest, zeigen Sie max. 3,6 V an und verbinden Sie sie mit dem E/A-Pin A0.
Scrollen Sie zurück nach oben und klicken Sie auf „Diagrammvorschau“zu den letzten 0 Beispieldatenpunkten in 1-Sekunden-Intervallen, aufgetragen gegen die verstrichene Zeit in Min:Sek.
Für alle Diagramme der verstrichenen Zeit werden keine führenden Nulleinheiten angezeigt, daher werden in diesem Diagramm nur die Zeit > 1min führende Minuten angezeigt.
Schritt 4: Auswahl des Datums-/Zeitformats
Bei Darstellungen der verstrichenen Zeit wird die führende Einheit im Laufe der Zeit einfach weiter erhöht. Um ein Beispiel dafür zu sehen, gehen Sie zurück zum Bildschirm „Plots bearbeiten“und erhöhen Sie das Diagrammdatenintervall auf 15 Minuten (unten in diesem Bildschirm).
Klicken Sie dann auf Diagrammvorschau, um dieselben Beispieldaten anzuzeigen, jedoch jetzt mit 15-Minuten-Intervallen zwischen den Proben. Wie Sie sehen können, wird der Minutenteil von mm:ss immer größer.
Gehen Sie nun zurück und klicken Sie auf die Schaltfläche X-Achse, um eine kleine Auswahl aller möglichen X-Achsen-Daten-/Zeitformate anzuzeigen (scrollen Sie für mehr nach unten).
Oben sehen Sie eine Auswahl von Diagrammvorschauen mit verschiedenen X-Achsen-Formaten.
Die hier gezeigten Datums-/Uhrzeit-Plots sind in der 'lokalen' Zeitzone. Es gibt auch Formatoptionen, um Datum/Uhrzeit in UTC darzustellen. Einen vollständigen Satz möglicher Formatoptionen für Datum/Uhrzeit finden Sie in der Datei pfodSpecification.pfd.
Schritt 5: Generieren und testen Sie die Arduino-Skizze
Sobald Sie mit dem Format und dem Datenintervall Ihres Diagramms zufrieden sind, können Sie zum Bildschirm „Bearbeitungsmenü_1“gehen und nach unten scrollen und „Code generieren“für das von Ihnen gewählte Zielboard auswählen. Hier ist eine Beispielskizze für den Adafruit Feather52 mit 1-Sekunden-Datenintervallen und einem mm:ss-Zeitformat, pfodFeather52_timeplot.ino
Oben ist ein Plot von A0 von der Feather52
Das Ändern des Formats auf Wochentag hr:mins:sec (~E HH:mm:ss) und das erneute Generieren des Codes (pfodFeather52_dateplot.ino) ergibt ein Diagramm wie das zweite oben.
Sie können das X-Achsen-Format direkt in Ihrer Arduino-Skizze bearbeiten, wie im Folgenden beschrieben.
Schritt 6: Wie stellt PfodApp Datum/Uhrzeit von Millis() dar?
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 dann Millisekunden-Zeitstempel entweder als verstrichene Zeit darstellen, d. h. Millisekunden in Std. Min. Sek. umwandeln usw.
In der von Arduino generierten Skizze (z. B. pfodFeather52_dateplot.ino) gibt es drei kleine Codebits, die die Arduino-Seite der Plots behandeln.
Der loop()-Codeabschnitt, der die {@}-Zeitanfrage der pfodApp verarbeitet
// {@} Anfrage bearbeiten} else if('@'==cmd) { // pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis(); // aktuelle Millis als Offset-Rohdaten-Zeitstempel erfassen parser.print(F("{@`0}")); // `0 als 'aktuelle' Rohdaten-Millisekunden zurückgeben
Sie könnten einfach den aktuellen Wert von millis() zurückgeben, aber millis() springt alle 49,7 Tage zurück auf 0, wodurch der Plot rückwärts springen würde. Stattdessen merkt sich der Code den aktuellen millis()-Wert, als die {@}-Anfrage gestellt wurde, und gibt {@`0} zurück, d. h. einen aktuellen Millisekunden-Zeitstempel von Null. Beim Senden der Rohdatenpunkte verwendet die Skizze dann
plot_1_var = analogRead(A0); // Eingabe zum Plot lesen // plot_2_var Plot Versteckt, also hier keine Daten zugewiesen // plot_3_var Plot Versteckt, also hier keine Daten zugewiesen // Plotdaten im CSV-Format senden parser.print(millis()-plot_mSOffset);// Zeit in Millisekunden ….
so dass der mit den Daten gesendete Millisekunden-Zeitstempel bei 0 beginnt und auf 49,7 Tage ansteigt. Wenn Sie 49,7 Tage lang ununterbrochen in Verbindung bleiben, wird der Plot um ~50 Tage rückwärts springen. Durch einmaliges Trennen und erneutes Verbinden alle 49,7 Tage wird dies vermieden.
Der dritte Teil des Datum/Uhrzeit-Plots ist die Plot-Meldung.
} else if('A'==cmd) { // Benutzer gedrückt -- 'Datum/Uhrzeit-Diagramm von A0' // im Hauptmenü von Menu_1 // Plotten-Nachricht zurückgeben. parser.print(F("{=A0 Volt~E HH:mm:ss|date|A0~~~Volt||}"));
Wenn der Benutzer die Schaltfläche „Datum/Zeit-Diagramm von A0“drückt, sendet pfodApp das {A} cmd an das pfodDevice und das pfodDevice antwortet mit der Plot-Nachricht {=…{=A0 Volts~E HH:mm:ss|date |A0~~~Volts||}enthält das X-Achsen-Format E HH:mm:ss
Java SimpleDateFormat-Formate sind hier akzeptabel. pfodApp Data Logging and Plotting und die pfodSpecification.pdf enthalten weitere Details zur Plot-Meldung.
Schritt 7: Reproduzieren der Datums-/Uhrzeit-Plots auf Ihrem Computer
Standardmäßig protokolliert pfodApp alle eingehenden Rohdaten in einer Protokolldatei auf Ihrem Handy, 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, durch Kommas getrennt, und nachdem Sie sie auf Ihren Computer übertragen haben (siehe pfodAppForAndroidGettingStarted.pdf für Übertragungsoptionen), können Sie sie in einer Tabelle öffnen, um die Daten darzustellen.
Hier sind die ersten paar Zeilen einer Protokolldatei.
// pfodApp V3.0.360, Ortszeit, UTC, mS pro Tag, pfod bluefruit52 aktuelle Zeit (mS), pfod bluefruit52 aktuelle Zeit, // verbunden um, 20.04.2019 11:32:50.238, 20.04.2019 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 die {@..}-Antwort gemeldet hat. Die letzte Spalte ist leer, da kein RTC oder GPS vorhanden ist und daher keine aktuelle Uhrzeit in yyyy/MM/dd time vom Feather52 gemeldet wurde.
Um die Daten gegen die verstrichene Zeit darzustellen, subtrahieren Sie die aktuelle Zeit (mS) vom Millisekunden-Zeitstempel und dividieren Sie dann durch den Wert in mS pro Tag. Hier ist die Tabelle mit der hinzugefügten Formel und dem aufgetragenen Ergebnis. Die Tabelle unten (pfod_bluefruit52.xls) ist eine OpenOffice-Tabelle, die im Excel-Format gespeichert wird.
In OpenOffice ist das Diagramm ein Streudiagramm und die x-Achse des Diagramms wurde in HH:MM:SS formatiert Hinweis: Die Datums-/Uhrzeitformate der Tabellenkalkulation sind NICHT die gleichen wie die von pfodApp verwendeten Diagrammformate. In pfodApp steht beispielsweise MM für Monate und mm für Minuten.
Um gegen Datum und Uhrzeit zu zeichnen, müssen Sie nur die Verbindungszeit zur Tabellenkalkulationszeit hinzufügen und erneut zeichnen. (pfod_bluefruit52_date.xls)
Hinweis: Die Ortszeit und UTC wurden als Text in meine Tabelle importiert, daher musste ich das führende ' entfernen, bevor ich sie in einer Formel verwenden konnte.
Schritt 8: Wie Sie das 49,7-Tage-Millis()-Limit vermeiden und warum Sie es nicht tun sollten
Wie oben in Wie stellt pfodApp Datum/Uhrzeit von millis() dar?, werden die Millisekunden-Zeitstempel auf Null zurückgesetzt, wenn Sie länger als 49,7 Tage ununterbrochen verbunden bleiben. Ein paar Codezeilen können dies vermeiden, es wird jedoch nicht empfohlen.
Zuerst, wie man das Umwickeln vermeidet. Fügen Sie eine weitere vorzeichenlose int-Variable hinzu, um zu verfolgen, wie oft die Zeitstempel umlaufen und das kombinierte Ergebnis in HEX ausgeben.
uint_t mSwrapCount = 0;uint32_t lastTimeStamp = 0;
… plot_1_var = analogRead(A0); // Eingabe für Plot lesen // plot_2_var Plot Versteckt, also hier keine Daten zugewiesen // plot_3_var Plot Versteckt, also hier keine Daten zugewiesen // Plotdaten im CSV-Format senden uint32_t timeStamp = millis()-plot_mSOffset; if (timeStamp < lastTimeStamp) { // timeStamp auf 0 zurückgepackt mSwrapCount++; // füge eins hinzu, um zu zählen } lastTimeStamp = timeStamp; parser.print("0x"); parser.print (msWrapCount, HEX); parser.print(timeStamp, HEX); // Zeit in Millisekunden in HEX ….
Wenn Sie die Antwort {@.. zurückgeben, löschen Sie auch den mSwrapCount.
// {@} Anfrage bearbeiten} else if('@'==cmd) { // pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis(); // aktuelle Millis als Offset-Rohdaten-Zeitstempel erfassen mSwrapCount = 0; // Wrap-Zähler löschen. parser.print(F("{@`0}")); // `0 als 'aktuelle' Rohdaten-Millisekunden zurückgeben
Die Zeitstempel geben nun den 'richtigen' Wert für die nächsten 40,7 Tage * 65536 ~= 7308 Jahre an.
pfodApp konvertiert automatisch die Hex-Zeitstempel zum Plotten und protokolliert sie genau so, wie sie empfangen wurden, d.h. in Hex. In der (OpenOffice)-Tabelle verwenden Sie diese Formel, um die Hex-Zeichenfolge in A2 in mS umzuwandeln (wobei A1 eine beliebige leere Zelle ist) =HEX2DEC(REPLACE(A2;1;2;A1))
Warum willst du das nicht machen
Wie oben gezeigt, ist es einfach, die mS-Zeitstempel auf mehr als 50 Tage zu verlängern. Sie möchten dies jedoch wahrscheinlich nicht tun, da sie immer ungenauer werden. Ein typischer 16-MHz-Kristall, der zum Erstellen der Millis()-Ergebnisse verwendet wird, hat im Mikro eine Genauigkeit von ~ 50 ppm (Teile pro Million). Dies bedeutet, dass der Millisekunden-Zeitstempel nach 49,7 Tagen um 3 ½ Minuten außerhalb des Zeitstempels liegen kann und der Einfluss der Temperatur auf die Kristallgenauigkeit ignoriert wird.
Bei kurzen Verbindungszeiten stellt diese Ungenauigkeit kein Problem dar, da die {@..-Antwort den Millisekunden-Zeitstempel bei jeder erneuten Verbindung mit dem Datum/der Uhrzeit des Mobiltelefons neu synchronisiert. Wenn Sie jedoch über längere Zeit (Tage) in Verbindung bleiben und die Daten kontinuierlich protokollieren möchten, sollten Sie etwas genaueres als das eingebaute 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. B. Das DS3231-Modul von Adafruit. Die angegebene Genauigkeit beträgt +/-2 ppm über 0 bis 40 °C. d.h. ~+/-5 Sek./Monat.
Wenn Sie Daten mit Datums-/Uhrzeit-Zeitstempeln plotten 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}. Hier sind einige Beispielcodeänderungen, die auf die von pfodDesigner generierte Skizze für die Verwendung eines RTC-Moduls angewendet werden sollen, vorausgesetzt, Sie verwenden die RTClib-Bibliothek und haben den Code hinzugefügt, um das RTC-Modul zu initialisieren.
// {@} Anfrage bearbeiten} else if('@'==cmd) { // pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis(); // aktuelle Millisekunden als Offset-Rohdaten-Zeitstempel erfassen parser.print(F("{@`0"}); // `0 als 'aktuelle' Rohdaten-Millisekunden zurückgeben parser.print('~'); // Startstring von Datum/Uhrzeit DateTime now = rtc.now() sendDateTime(&now); // jjjj/M/d/ H:m:s an parser.print senden, Adresse & als Argument übergeben parser.print('}'); // Ende von {@ Antwort zB {@`0~2019/4/19 3:33:5}….
// Datum und Uhrzeit an Parser senden printvoid 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 neu starten, ohne Drift // Werte den Plotvariablen aus Ihren Schleifenvariablen zuweisen oder ADC-Eingänge lesen plot_1_var = analogRead (A0); // Eingabe zum Plot lesen // plot_2_var Plot Versteckt, also hier keine Daten zugewiesen // plot_3_var Plot Versteckt, also hier keine Daten zugewiesen // Plotdaten im CSV-Format senden DateTime now = rtc.now(); sendDateTime(&jetzt); // jjjj/M/d/ H:m:s an parser.print senden, Adresse & als Argument übergeben. parser.print(', '); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_skalierung + 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 } }
Der ~2019/4/19 3:33:5-Teil der {@-Antwort teilt pfodApp mit, was das pfodDevice für das aktuelle Datum und die aktuelle Uhrzeit hält. Ihre Skizze kann dann Daten mit yMd Hms-Zeitstempeln senden und pfodApp zeichnet sie entweder als verstrichene Zeit ab der Verbindungszeit ODER als Datum und Uhrzeit, je nach dem von Ihnen angegebenen X-Achsen-Format.
Beim Plotten gegen Datum und Uhrzeit korrigiert die pfodApp-Plotroutine jede „Drift“in der Echtzeituhr, indem sie die gemeldete aktuelle Uhrzeit des pfodDevice mit der aktuellen Uhrzeit des Mobiltelefons vergleicht. Diese Korrektur behandelt auch, dass die Echtzeituhr auf eine andere Zeitzone als die lokale Zeitzone Ihres Mobiltelefons eingestellt ist. millis()-Zeitstempel funktionieren weiterhin wie in Arduino-Millisekunden-Zeitstempel verwenden, Schritt 5 oben.
Hier ist eine Beispieltabelle der 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 Datum/Uhrzeit umzuwandeln. Sie müssen immer noch die führenden ' aus den Einträgen Ortszeit, UTC und Office Temp entfernen, damit die Tabelle sie als Datum und Uhrzeit interpretiert.
Um das gleiche 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 hinzugefügt wird (Ortszeit – Office Temp aktuelle Zeit), um die wahre Ortszeit zu erhalten.
Erstellen Sie für Diagramme der verstrichenen Zeit eine neue Spalte mit dem (Datum/Uhrzeit-Zeitstempel – die aktuelle Uhrzeit der Office-Zeit) und verwenden Sie diese als X-Achse im Diagramm (Office_TempElapsed.xls). Tatsächlich erzeugt pfodApp in diesem Fall schönere Diagramme der verstrichenen Zeit in Tagen Std:Min:Sek.
Schritt 10: Verwenden eines GPS-Moduls
Die Verwendung eines GPS-Moduls ähnelt der Verwendung eines RTC-Moduls, außer dass für GPS-Module Millisekunden verfügbar sind, die Jahre bei 2000 beginnen und der Zeit die UTC-Schaltsekunden fehlen (siehe https://tycho.usno.navy.mil/leapsec.html) Das GPS-Datum und die GPS-Uhrzeit liegen derzeit 18 Sekunden vor UTC, Stand Januar 2018.
Die Adafruit GPS-Bibliothek für das Adafruit Ultimate GPS fügt im Gegensatz zur RTClib nicht den 2000-Jahres-Offset zu den GPS-Jahren hinzu, sodass dieser hinzugefügt werden muss, wenn Sie den Datums- und Zeitstempel senden. Auch wenn die GPS-Bibliothek Millisekunden mit sehr guter Langzeitgenauigkeit liefert, sind sie nicht sehr genau. Die GPS-Zeitaktualisierungen erfolgen nur einmal alle 100 ms und dann gibt es eine zusätzliche Verzögerung beim Empfang der seriellen Daten mit langsamen 9600 Baud und eine weitere Verzögerung beim Parsen. All dies trägt zur Millisekunden-Ungenauigkeit beim Zeitstempeln von Datenlesewerten bei.
Hier sind einige Beispielcodeänderungen, die auf die von pfodDesigner generierte Skizze für die Verwendung eines GPS-Moduls angewendet werden können, vorausgesetzt, Sie verwenden die GPS-Bibliothek von Adafruit und haben den Code hinzugefügt, um die Nachrichten zu empfangen und in ein GPS-Objekt zu parsen.
// {@} Anfrage bearbeiten} else if('@'==cmd) { // pfodApp hat die 'aktuelle' Zeit angefordert plot_mSOffset = millis(); // aktuelle Millisekunden als Offset-Rohdaten-Zeitstempel erfassen parser.print(F("{@`0"}); // `0 als 'aktuelle' Rohdaten-Millisekunden zurückgeben parser.print('~'); // Startstring von Datum/Uhrzeit sendDateTime(&GPS); // jjjj/M/d/ H:m:s an parser.print senden, Adresse & als Argument übergeben parser.print('}'); // Ende von {@ Antwort eg {@`0~2019/4/19 3:33:5}….
// Datum Uhrzeit an Parser senden printvoid sendDateTime(Adafruit_GPS* gps) { parser.print(F("20"); // 20.. Jahr parser.print(gps->Jahr, DEC); parser.print('/ '); parser.print(gps->Monat, DEC); parser.print('/'); parser.print(gps->Tag, DEC); parser.print(' ');parser.print(gps- >hour, DEC); parser.print(':'); parser.print(gps->minute, DEC); parser.print(':'); parser.print(gps->second, DEC); // parser.print('.'); beim Senden von Millisekunden // wenn Sie mS senden möchten, müssen Sie den GPS->Millisekunden-Wert mit führenden Nullen auffüllen // dh 3 muss auf 003 aufgefüllt werden }
void sendData() { if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // Plotdaten-Timer neu starten, ohne Drift // Werte den Plotvariablen aus Ihren Schleifenvariablen zuweisen oder ADC-Eingänge lesen plot_1_var = analogRead (A0); // Eingabe zum Plot lesen // plot_2_var Plot Versteckt, also keine Daten hier zugewiesen // plot_3_var Plot Versteckt, also keine Daten hier zugewiesen // Plotdaten im CSV-Format senden sendDateTime(&GPS); // jjjj/M/d/ H:m:s an parser.print senden, Adresse & als Argument übergeben. parser.print(', '); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_skalierung + 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 Schaltsekunden. Ab Januar 2018 liegt die GPS-Zeit 18 Sekunden vor UTC. pfodApp korrigiert dies, indem das Datum/die Uhrzeit, die vom GPS bei der Verbindung über die {@-Antwort zurückgegeben wird, mit dem UTC-Datum und der UTC-Uhrzeit des Mobiltelefons vergleicht. Das Erstellen von Diagrammen in einer Tabelle aus der pfodApp-Protokolldatei erfolgt wie oben für RTC-Module. Das Hinzufügen von (Ortszeit – Office Temp aktuelle Zeit) zu den GPS-Zeitstempeln korrigiert die Schaltsekunden.
millis()-Zeitstempel funktionieren weiterhin wie in Arduino-Millisekunden-Zeitstempel verwenden, Schritt 5 oben.
Schritt 11: Fazit
Wenn Sie pfodApp auf Ihrem Android-Handy verwenden, können Sie Daten gegen Datum und Uhrzeit oder verstrichene Zeit darstellen, indem Sie nur die millis()-Funktion von Arduino verwenden. Mithilfe der pfodApp-Protokolldatei können Sie diese Datums-/Zeitdiagramme in einer Tabelle reproduzieren. Wenn Ihr Arduino-Projekt über ein RTC-Modul verfügt, können Sie das Datum und die RTC-Zeit-Zeitstempel protokollieren und plotten, wobei die RTC-Drift automatisch korrigiert wird. Wenn Ihr Arduino-Projekt über ein GPS-Modul verfügt, können Sie seine hochgenauen Zeitstempel protokollieren und grafisch darstellen und pfodApp korrigiert automatisch die fehlenden Schaltsekunden des GPS.
In allen Fällen werden die Rohdaten Ihres Arduino-Projekts genau so protokolliert, wie sie empfangen wurden, unkorrigiert. Die pfodApp-Protokolldatei enthält jedoch zusätzliche Daten, damit Sie diese Korrekturen in einer Tabelle aus der heruntergeladenen Protokolldatei reproduzieren 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 Plotterskizzen für eine Vielzahl von Arduino-Boards, die über WLAN, klassisches Bluetooth, BLE und SMS verbunden sind
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: 7 Schritte (mit Bildern)
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: Hallo, und willkommen zu meinem ersten instructable! :) In diesem instructables möchte ich eine fantastische Bibliothek für die Schnittstelle der Tastatur mit Arduino teilen - 'Password Library' einschließlich 'Keypad Library'. Diese Bibliothek enthält die besten Funktionen, die wir wi
Uhrzeit und Datum aus dem Internet abrufen - Tutorial: 9 Schritte
Abrufen von Uhrzeit und Datum aus dem Internet - Tutorial: In diesem Tutorial erfahren Sie, wie Sie mit M5Stack StickC und Visuino das Datum und die Uhrzeit vom NIST TIME-Server abrufen. Sehen Sie sich ein Demonstrationsvideo an
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E