Inhoudsopgave:

Arduino datum/tijd plotten/loggen met Millis() en PfodApp - Ajarnpa
Arduino datum/tijd plotten/loggen met Millis() en PfodApp - Ajarnpa

Video: Arduino datum/tijd plotten/loggen met Millis() en PfodApp - Ajarnpa

Video: Arduino datum/tijd plotten/loggen met Millis() en PfodApp - Ajarnpa
Video: Arduino MASTERCLASS | Volledige programmeerworkshop in 90 minuten! 2024, November
Anonim
Arduino datum/tijd plotten/loggen met Millis() en PfodApp
Arduino datum/tijd plotten/loggen met Millis() en PfodApp

Geen Arduino- of Android-programmering vereist. RTC- en GPS-modules worden ook ondersteund. Automatische correctie voor tijdzones, RTC-drift en ontbrekende schrikkelseconden door GPS

Invoering

Deze tutorial laat je zien hoe je je Arduino millis()-tijdstempels gebruikt om gegevens uit te zetten tegen datum en tijd op je Android-mobiel met behulp van pfodApp.

Geen Arduino- of Android-programmering vereist. pfodApp logt ook voldoende gegevens zodat u de datum/tijd-plots later in een spreadsheet kunt reproduceren.

Er is GEEN RTC- of GPS-module nodig, maar als uw Arduino-project een RTC (Real Time Clock) of een GPS-module heeft, kunnen deze ook worden gebruikt. In die gevallen zullen de pfodApp-plots automatisch corrigeren voor tijdzone, RTC-drift en ontbrekende GPS-sprongseconden. Voor deze correcties is geen speciale Arduino-code vereist. Zoals altijd bij pfodApp worden de ontvangen gegevens precies zoals ze zijn gelogd, niet gecorrigeerd, maar het logbestand bevat ook voldoende informatie om u in staat te stellen deze correcties zelf toe te passen wanneer u de logs naar uw computer downloadt. Zie hieronder voor voorbeelden van deze nabewerking.

Een grote verscheidenheid aan tijd- en datum-X-as-opmaak wordt ondersteund, die allemaal volledig worden gecontroleerd door korte tekstreeksen in uw Arduino-schets. Er is geen Android-programmering vereist.

pfodApp maakt verbinding via WiFi, Bluetooth Classic, BLE en sms. De gratis pfodDesigner genereert complete Arduino-schetsen voor het plotten/loggen van datum/tijd om verbinding te maken met een grote verscheidenheid aan borden. Er is geen Arduino-programmering vereist.

Deze instructable gebruikt een Adafruit Feather52 als het Arduino-bord als voorbeeld, dat verbinding maakt via BLE.

Deze instructable omvat drie gevallen: - 1) Uw microprocessorproject heeft slechts milliseconde tijdstempels - millis () 2) Uw microprocessorproject heeft een Real Time Clock (RTC) - pfodApp corrigeert automatisch voor drift. 3) Uw microprocessorproject heeft een GPS-module - pfodApp corrigeert automatisch voor schrikkelseconden wanneer ze zich voordoen (momenteel 18 seconden zoals in 2018).

Stap 1: Arduino milliseconde tijdstempels gebruiken, Millis()

Het gebruik van milliseconden voor datum en tijd bestaat uit twee delen. Een daarvan is voor het uitzetten van de gegevens tegen de verstreken tijd of datum/tijd en het andere deel is het opnieuw creëren van de datum en tijd op basis van de geregistreerde rawdata milliseconde tijdstempels. pfodApp wijzigt de onbewerkte gegevens die zijn ontvangen van het pfodDevice (de Arduino-micro) niet. Het registreert precies de ontvangen bytes.

Gebruik eerst de gratis pfodDesigner om een Arduino-schets voor uw micro te genereren die de milliseconden en gegevensmetingen naar pfodApp stuurt voor plotten/loggen. In dit voorbeeld wordt een menu gemaakt voor het Adafruit Feather 52 BLE-bord met de tekst A0. De tutorial over Adafruit Feather nRF52 LE - Custom Controls met pfodApp doorloopt de pfodDesigner stappen om een menu te maken voor de Feather nRF52 dat een Chart-knop bevat, dus bekijk het voor meer details. In deze tutorial zullen we alleen een grafiekknop toevoegen en de nieuwe X-as formaatopties gebruiken om de A0-metingen uit te zetten tegen de verstreken tijd en datum/tijd.

Het eerste deel van deze tutorial gaat door met behulp van de gratis pfodDesigner om een voorbeeld van een datum-/tijdgrafiek te maken op je Android-mobiel. Als u tevreden bent met het display, kunt u de Arduino-schets genereren die dat zal reproduceren wanneer u verbinding maakt met pfodApp. Er is geen Android-programmering vereist en aangezien pfodDesigner complete Arduino-schetsen genereert voor een breed scala aan Arduino-kaarten, is ook geen Arduino-programmering vereist.

Stap 2: Een grafiek aan het menu toevoegen

Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen
Een kaart aan het menu toevoegen

Download de pfodDesigner-app van Google Play, open deze en klik op "Start nieuw menu"

Klik op de "Target Serial" en vervolgens op de "Bluetooth Low Energy"-knop om de lijst met zo'n 11 BLE-kaarten weer te geven (scroll naar beneden om de andere keuzes te zien). Selecteer op Adafruit Bluefruit Feather52.

Ga terug naar het menu Bewerken en klik op "Prompt bewerken" en stel een geschikte prompt in voor dit menu, b.v. "Feather52" en tekst vet en grootte +7. De achtergrondkleur bleef als de 'standaard' Wit

Ga terug en klik op "Menu-item toevoegen", scroll naar beneden en selecteer "Kaartknop" waarmee het bewerkingsscherm van de kaartknop wordt geopend. U kunt hier wijzigingen aanbrengen in het uiterlijk van de knop. In dit geval was de tekst van de knop veranderd in “Datum/Tijd plot van A0” en de andere standaardwaarden werden ongewijzigd gelaten.

Dit geeft u een knop in het menu die het kaartscherm opent.

Stap 3: De plotbron en labels bewerken

De plotbron en labels bewerken
De plotbron en labels bewerken
De plotbron en labels bewerken
De plotbron en labels bewerken
De plotbron en labels bewerken
De plotbron en labels bewerken
De plotbron en labels bewerken
De plotbron en labels bewerken

Klik op de knop "Datum-/tijdplot van A0" om het scherm Plots bewerken te openen, waar u toegang hebt tot het kaartlabel, de X-as-indeling, het gegevensinterval van de plot en (door naar beneden te scrollen) de plotinstellingen zelf. Bewerk het kaartlabel naar iets dat geschikt is, b.v. "A0 Volt".

Scroll naar beneden en open voor Plots 2 en 3 Edit Plot en klik op Hide Plot om ze van de kaartweergave te verwijderen.

Klik vervolgens op "Edit Plot 1" en stel een plotlabel in (bijv. A0), yAxis-eenheden (bijv. Volts), geef max. 3.6V weer en sluit aan op I/O-pin A0.

Scroll terug naar boven en klik op "Grafiekvoorbeeld" naar de meest recente 0 voorbeeldgegevenspunten, met intervallen van 1 sec, uitgezet tegen de verstreken tijd in minuten:sec.

Voor alle verstreken tijdplots worden voorloopnuleenheden niet weergegeven, dus in deze grafiek worden alleen die tijd > 1min weergegeven met voorloopminuten.

Stap 4: Het datum-/tijdformaat kiezen

Het datum-/tijdformaat kiezen
Het datum-/tijdformaat kiezen
Het datum-/tijdformaat kiezen
Het datum-/tijdformaat kiezen
Het datum-/tijdformaat kiezen
Het datum-/tijdformaat kiezen

Voor grafieken met verstreken tijd blijft de leidende eenheid toenemen naarmate de tijd vordert. Om een voorbeeld hiervan te zien, gaat u terug naar het scherm "Plots bewerken" en verhoogt u het Plot Data-interval tot 15 minuten (onderaan dit scherm)

Klik vervolgens op Grafiekvoorbeeld om dezelfde voorbeeldgegevens weer te geven, maar nu met intervallen van 15 minuten tussen de monsters. Zoals je kunt zien, blijft het minutengedeelte van mm:ss toenemen.

Ga nu terug en klik op de X-as-knop om een kleine selectie van alle mogelijke X-as data/tijdformaten te tonen (scroll naar beneden voor meer)

Hierboven ziet u een selectie van diagramvoorbeelden met verschillende X-as-indelingen.

De hier getoonde datum/tijd grafieken bevinden zich in de 'lokale' tijdzone. Er zijn ook formaatopties om datum/tijd in UTC te plotten. Zie de pfodSpecification.pfd voor een complete set van mogelijke datum/tijd formaat opties.

Stap 5: Genereer en test de Arduino Sketch

Genereer en test de Arduino Sketch
Genereer en test de Arduino Sketch
Genereer en test de Arduino Sketch
Genereer en test de Arduino Sketch

Als u eenmaal tevreden bent met het formaat en de gegevensinterval van uw grafiek, kunt u naar het scherm "Bewerken Menu_1" en naar beneden scrollen en "Code genereren" voor het door u gekozen doelbord. Hier is een voorbeeldschets voor de Adafruit Feather52 met data-intervallen van 1sec en een mm:ss verstreken tijdformaat, pfodFeather52_timeplot.ino

Hierboven is een perceel van A0 van de Feather52

Het formaat wijzigen in Weekday hr:mins:sec (~E HH:mm:ss) en het opnieuw genereren van de code (pfodFeather52_dateplot.ino) geeft een plot zoals de tweede hierboven.

U kunt het X-as-formaat rechtstreeks in uw Arduino-schets bewerken, zoals hieronder wordt beschreven.

Stap 6: Hoe plot PfodApp de datum/tijd van Millis()?

Wanneer pfodApp verbinding maakt, onthoudt het zijn 'lokale' en UTC-tijd en vraagt het de pfodDevice's (het Arduino-bord) huidige tijdstempels voor plotgegevens. Met behulp van deze informatie kan pfodApp vervolgens milliseconden tijdstempels plotten als ofwel verstreken tijd, d.w.z. milliseconden converteren naar uren minuten seconden, enz., of de datum en tijd plotten die de milliseconden tijdstempels vertegenwoordigen ten opzichte van wanneer de verbinding werd gemaakt en de huidige tijd van het pfodDevice werd aangevraagd.

Kijkend in de door Arduino gegenereerde schets (bijv. pfodFeather52_dateplot.ino), zijn er drie kleine stukjes code die de Arduino-kant van de plots afhandelen.

De loop() codesectie die het {@} huidige tijdverzoek van de pfodApp afhandelt

// handle {@} request } else if('@'==cmd) { // pfodApp verzocht 'huidige' tijd plot_mSOffset = millis(); // leg huidige millis vast als offset rawdata-tijdstempels parser.print (F ("{@`0}")); // retourneer `0 als 'huidige' onbewerkte gegevens milliseconden

Je zou gewoon de huidige waarde van millis() kunnen retourneren, maar millis() keert elke 49,7 dagen terug naar 0, waardoor de plot achteruit zou springen. Dus in plaats daarvan onthoudt de code de huidige millis()-waarde toen het {@}-verzoek werd gedaan, en retourneert {@`0}, d.w.z. een huidige milliseconde tijdstempel van nul. Vervolgens gebruikt de schets bij het verzenden van de rawdata-punten

plot_1_var = analoog lezen (A0); // lees invoer naar plot // plot_2_var plot Verborgen dus geen gegevens hier toegewezen // plot_3_var plot Verborgen dus geen gegevens hier toegewezen // stuur plotgegevens in CSV-formaat parser.print(millis()-plot_mSOffset);// tijd in milliseconden ….

zodat de milliseconde-tijdstempel die met de gegevens wordt verzonden, begint bij 0 en toeneemt tot 49,7 dagen. Als u 49,7 dagen continu verbonden blijft, ziet u de plot met ~ 50 dagen achteruit springen. Door een keer per 49,7 dagen de verbinding te verbreken en opnieuw aan te sluiten, wordt dit voorkomen.

Het derde deel van de datum/tijd-plot is het plotbericht.

} else if('A'==cmd) { // gebruiker ingedrukt -- 'Date/Time plot of A0' // in het hoofdmenu van Menu_1 // return plotting msg. parser.print(F("{=A0 Volt~E HH:mm:ss|datum|A0~~~Volt||}"));

Wanneer de gebruiker op de "Date/Time plot of A0"-knop drukt, stuurt pfodApp de {A} cmd naar de pfodDevice en de pfodDevice reageert met het plotbericht, {=…{=A0 Volts~E HH:mm:ss|date |A0~~~Volts||}die het X-asformaat E HH:mm:ss. bevat

Java SimpleDateFormat-indelingen zijn hier acceptabel. pfodApp Data Logging and Plotting en de pfodSpecification.pdf hebben meer details over het plotbericht.

Stap 7: De datum/tijd-plots op uw computer reproduceren

De datum-/tijdgrafieken op uw computer reproduceren
De datum-/tijdgrafieken op uw computer reproduceren
De datum-/tijdgrafieken op uw computer reproduceren
De datum-/tijdgrafieken op uw computer reproduceren
De datum-/tijdgrafieken op uw computer reproduceren
De datum-/tijdgrafieken op uw computer reproduceren

Standaard logt pfodApp alle binnenkomende onbewerkte data in een logbestand op je mobiel, tenzij je deze logging hebt uitgeschakeld in het verbindingsbewerkingsscherm, zie de pfodAppForAndroidGettingStarted.pdf

Wanneer u pfodApp bewerkt, wordt er een kort bericht weergegeven met de locatie en naam van het logbestand, b.v. /pfodAppRawData/pfod_bluefruit52.txt Dat bestand is in CSV-indeling, door komma's gescheiden, en nadat u het naar uw computer hebt overgebracht (zie pfodAppForAndroidGettingStarted.pdf voor overdrachtsopties), kunt u het in een spreadsheet openen om de gegevens te plotten.

Hier zijn de eerste paar regels van een logbestand.

// pfodApp V3.0.360, lokale tijd, UTC, mS per dag, pfod bluefruit52 huidige tijd (mS), pfod bluefruit52 huidige tijd, // verbonden op, 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,, Hierboven zie je de 'lokale' en UTC-tijd dat pfodApp verbinding maakte met de Feather52 en de huidige tijd in mS die de Feather52 meldde via de {@..} response. De laatste kolom is leeg, omdat er geen RTC of GPS is en er dus geen huidige tijd in jjjj/MM/dd tijd is gemeld door de Feather52.

Om de gegevens uit te zetten tegen de verstreken tijd, trekt u de huidige tijd (mS) af van de milliseconde tijdstempel en deelt u deze vervolgens door de mS per dagwaarde. Hier is de spreadsheet met de toegevoegde formule en het resultaat uitgezet. De onderstaande spreadsheet (pfod_bluefruit52.xls) is een OpenOffice-spreadsheet die is opgeslagen in Excel-indeling.

In OpenOffice is de plot een spreidingsplot en is de x-as van de plot geformatteerd in HH:MM:SS Opmerking: de datum-/tijdnotaties van de spreadsheet zijn NIET hetzelfde als de plotformaten die door pfodApp worden gebruikt. In pfodApp is MM bijvoorbeeld maanden en mm is minuten.

Om te plotten tegen datum en tijd, hoeft u alleen de verbindingstijd toe te voegen aan de spreadsheettijd en opnieuw te plotten. (pfod_bluefruit52_date.xls)

Opmerking: de lokale tijd en UTC zijn geïmporteerd als tekst in mijn spreadsheet, dus ik moest de voorloop ' verwijderen voordat ik ze in een formule kon gebruiken.

Stap 8: Hoe u de Millis()-limiet van 49,7 dagen kunt vermijden en waarom u dat niet zou moeten doen?

Zoals hierboven vermeld in Hoe plot de pfodApp Datum/Tijd van millis()?, als je langer dan 49,7 dagen continu verbonden blijft, zullen de milliseconden tijdstempels teruglopen naar nul. Een paar regels code kunnen dit voorkomen, maar het wordt niet aanbevolen.

Eerst hoe je de wrap around kunt vermijden. Voeg nog een niet-ondertekende int-variabele toe om het aantal keren bij te houden dat de tijdstempels rondlopen en het gecombineerde resultaat in HEX af te drukken.

uint_t mSwrapCount = 0;uint32_t lastTimeStamp = 0;

… plot_1_var = analoog lezen (A0); // lees invoer naar plot // plot_2_var plot Verborgen dus geen gegevens hier toegewezen // plot_3_var plot Verborgen dus geen gegevens hier toegewezen // stuur plotgegevens in CSV-formaat uint32_t timeStamp = millis()-plot_mSOffset; if (timeStamp <lastTimeStamp) {// timeStamp terug naar 0 mSwrapCount++; // voeg er een toe om te tellen } lastTimeStamp = timeStamp; parser.print("0x"); parser.print(msWrapCount, HEX); parser.print(timeStamp, HEX);// tijd in milliseconden in HEX ….

Wanneer u de {@..-reactie retourneert, moet u ook de mSwrapCount wissen.

// handle {@} request } else if('@'==cmd) { // pfodApp verzocht 'huidige' tijd plot_mSOffset = millis(); // vastleggen huidige millis als offset rawdata tijdstempels mSwrapCount = 0; // duidelijke omslagtelling. parser.print(F("{@`0}")); // retourneer `0 als 'huidige' onbewerkte gegevens milliseconden

De tijdstempels geven nu de 'juiste' waarde voor de volgende 40,7 dagen * 65536 ~= 7308 jaar.

pfodApp converteert automatisch de hex-tijdstempels voor plotten en logt ze precies zoals ze zijn ontvangen, d.w.z. in hex. In het (OpenOffice)-spreadsheet gebruikt u deze formule om de hexadecimale tekenreeks, in A2, om te zetten in mS (waarbij A1 een lege cel is) =HEX2DEC(REPLACE(A2;1;2;A1))

Waarom wil je dit niet doen?

Zoals hierboven weergegeven, is het eenvoudig om de mS-tijdstempels uit te breiden tot langer dan 50 dagen. Maar dat wil je waarschijnlijk niet doen, omdat ze steeds onnauwkeuriger worden. Een typisch 16Mhz-kristal dat wordt gebruikt om de millis()-resultaten in de micro te maken, heeft een nauwkeurigheid van ~50ppm (parts per million). Dit betekent dat na 49,7 dagen de milliseconde-tijdstempel 3 ½ min kan afwijken en dat negeert het effect van temperatuur op de kristalnauwkeurigheid.

Bij korte verbindingsperioden is deze onnauwkeurigheid geen probleem, aangezien de {@..-reactie de milliseconde tijdstempel opnieuw synchroniseert met de datum/tijd van de mobiele telefoon bij elke nieuwe verbinding. Als u echter voor langere tijd (dagen) verbonden wilt blijven en de gegevens continu wilt loggen, moet u iets nauwkeuriger gebruiken dan de ingebouwde millis(), zoals een RTC- of GPS-module.

Stap 9: Een RTC (Real Time Clock) gebruiken

Een RTC (Real Time Clock) gebruiken
Een RTC (Real Time Clock) gebruiken
Een RTC (Real Time Clock) gebruiken
Een RTC (Real Time Clock) gebruiken

Er zijn een aantal RTC-modules beschikbaar, een van de nauwkeuriger is DS3231, b.v. Adafruit's DS3231-module. De aangegeven nauwkeurigheid is +/- 2ppm boven 0 tot 40C. d.w.z. ~+/-5 sec/maand.

Als u gegevens wilt plotten die datum/tijd-tijdstempels hebben, b.v. 2019/04/19 20:4:34, dan moet u de {@-reactie wijzigen om de huidige datum/tijd terug te geven, b.v. {@`0~2019/4/19 3:33:5}. Hier zijn enkele voorbeeldcodewijzigingen om toe te passen op de door pfodDesigner gegenereerde schets voor het gebruik van een RTC-module, ervan uitgaande dat u de RTClib-bibliotheek gebruikt en de code hebt toegevoegd om de RTC-module te initialiseren.

// handle {@} request } else if('@'==cmd) { // pfodApp verzocht 'huidige' tijd plot_mSOffset = millis(); // capture huidige millis als offset rawdata tijdstempels parser.print(F("{@`0"}); // return `0 als 'huidige' onbewerkte data milliseconden parser.print('~'); // start string van datum/tijd DateTime nu = rtc.now() sendDateTime(&now); // stuur yyyy/M/d/ H:m:s naar parser.print, geef adres & as arg.parser.print('}'); // einde van {@ antwoord bijv. {@`0~2019/4/19 3:33:5}….

// stuur datum tijd om printvoid te parseren sendDateTime (DateTime * dt) {parser.print (dt-> jaar (), DEC); parser.print('/'); parser.print(dt->maand(), DEC); parser.print('/'); parser.print(dt->day(), DEC); parser.print(' '); parser.print(dt->uur(), DEC); parser.print(':'); parser.print(dt->minuut(), DEC); parser.print(':'); parser.print(dt->second(), DEC); }

void sendData() {if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // herstart plot data timer, zonder drift // wijs waarden toe aan plotvariabelen van uw lusvariabelen of lees ADC-ingangen plot_1_var = analogRead(A0); // lees invoer naar plot // plot_2_var plot Verborgen dus geen gegevens hier toegewezen // plot_3_var plot Verborgen dus geen gegevens hier toegewezen // stuur plotgegevens in CSV-formaat DateTime now = rtc.now(); sendDateTime(&nu); // stuur yyyy/M/d/ H:m:s naar parser.print, geef adres door en als argument. parser.print(', '); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print(', '); // Perceel 2 is verborgen. Geen gegevens verzonden. parser.print(', '); // Perceel 3 is verborgen. Geen gegevens verzonden. parser.println(); // einde van CSV-gegevensrecord } }

Het ~ 2019/4/19 3:33:5 deel van het {@ antwoord laat pfodApp weten wat het pfodDevice denkt dat de huidige datum en tijd is. Uw schets kan dan gegevens verzenden met yMd Hms-tijdstempels en pfodApp zal ze plotten als verstreken tijd vanaf de verbindingstijd OF als datum en tijd, afhankelijk van het X-asformaat dat u opgeeft.

Bij het plotten tegen datum en tijd corrigeert de pfodApp-plotroutine voor elke 'drift' in de RTC door de door het pfodDevice gerapporteerde huidige tijd te vergelijken met de huidige tijd van de mobiele telefoon. Deze correctie zorgt er ook voor dat de RTC wordt ingesteld op een andere tijdzone dan de lokale tijdzone van uw mobiel. millis() tijdstempels blijven werken zoals in Arduino milliseconde tijdstempels gebruiken, stap 5 hierboven.

Hier is een voorbeeld van een spreadsheet met kamertemperatuur over een periode van 8 dagen, Office_Temp.xls. Toen het logbestand werd geïmporteerd, werd de eerste kolom gemarkeerd als YMD om de tekst naar een datum/tijd te converteren. U moet nog steeds de leidende ' uit de lokale tijd, UTC en Office Temp huidige tijdsvermeldingen verwijderen om de spreadsheet ze als datums en tijden te laten interpreteren.

Om dezelfde plot te krijgen die pfodApp laat zien, moet u de "Corrected Date/Time" berekenen. In dit geval is de RTC-tijd 2 seconden achter op de lokale tijd van de mobiele telefoon, dus aan elke RTC-tijdstempel wordt toegevoegd (lokale tijd – huidige kantoortijd) om de echte lokale tijd te krijgen.

Maak voor grafieken van verstreken tijd een nieuwe kolom met de (datum/tijd timstamp – de huidige tijd van de kantoortijd) en gebruik die als de X-as in de grafiek (Office_TempElapsed.xls) In dit geval produceert pfodApp mooiere grafieken met verstreken tijd in dagen u:min:sec.

Stap 10: Een GPS-module gebruiken

Het gebruik van een GPS-module is vergelijkbaar met het gebruik van een RTC-module, behalve dat GPS-modules milliseconden beschikbaar hebben, jaren beginnen bij 2000 en de tijd de UTC-schrikkelseconden mist (zie https://tycho.usno.navy.mil/leapsec.html) De GPS-datum en -tijd lopen momenteel 18 seconden voor op UTC, zoals in januari 2018.

De Adafruit GPS-bibliotheek voor de Adafruit Ultimate GPS voegt, in tegenstelling tot de RTClib, de 2000 jaar offset niet toe aan de GPS-jaren, dus dat moet worden toegevoegd wanneer u de datum- en tijdtijdstempel verzendt. Ook al levert de GPS-bibliotheek milliseconden met een zeer goede nauwkeurigheid op lange termijn, ze zijn niet erg nauwkeurig. De GPS-tijdupdates zijn slechts één keer per 100 mS en dan is er een extra vertraging bij het ontvangen van de seriële gegevens met een langzame 9600 baud en nog een vertraging bij het ontleden ervan. Dit alles draagt bij aan de precisie van milliseconden bij het tijdstempelen van gegevensmetingen.

Hier zijn enkele voorbeeldcodewijzigingen die van toepassing zijn op de door pfodDesigner gegenereerde schets voor het gebruik van een GPS-module, ervan uitgaande dat u de GPS-bibliotheek van Adafruit gebruikt en de code hebt toegevoegd om de berichten te ontvangen en te ontleden in een GPS-object.

// handle {@} request } else if('@'==cmd) { // pfodApp verzocht 'huidige' tijd plot_mSOffset = millis(); // capture huidige millis als offset rawdata tijdstempels parser.print(F("{@`0"}); // return `0 als 'huidige' onbewerkte data milliseconden parser.print('~'); // start string van datum/tijd sendDateTime(&GPS); // stuur yyyy/M/d/ H:m:s naar parser.print, geef adres door & as arg.parser.print('}'); // einde van {@ antwoord bijv. {@`0~2019/4/19 3:33:5}….

// stuur datum tijd naar parser printvoid sendDateTime (Adafruit_GPS * gps) {parser.print (F ("20"); // 20.. jaar parser.print (gps-> jaar, DEC); parser.print ('/ '); parser.print(gps->maand, DEC); parser.print('/'); parser.print(gps->dag, DEC); parser.print(' '); parser.print(gps- >uur, DEC); parser.print(':'); parser.print(gps->minuut, DEC); parser.print(':'); parser.print(gps->seconde, DEC); // parser.print('.'); als je milliseconden verzendt // als je mS wilt verzenden, moet je de gps->milliseconden-waarde invullen met voorloopnullen // dwz 3 moet worden opgevuld tot 003 }

void sendData() {if (plotDataTimer.isFinished()) { plotDataTimer.repeat(); // herstart plot data timer, zonder drift // wijs waarden toe aan plotvariabelen van uw lusvariabelen of lees ADC-ingangen plot_1_var = analogRead(A0); // lees invoer naar plot // plot_2_var plot Verborgen dus geen gegevens hier toegewezen // plot_3_var plot Verborgen dus geen gegevens hier toegewezen // stuur plotgegevens in CSV-formaat sendDateTime(&GPS); // stuur yyyy/M/d/ H:m:s naar parser.print, geef adres door en als argument. parser.print(', '); parser.print(((float)(plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print(', '); // Perceel 2 is verborgen. Geen gegevens verzonden. parser.print(', '); // Perceel 3 is verborgen. Geen gegevens verzonden. parser.println(); // einde van CSV-gegevensrecord } }

Bij het plotten tegen datum en tijd corrigeert de pfodApp automatisch voor schrikkelseconden. In januari 2018 loopt de GPS-tijd 18 seconden voor op UTC. pfodApp corrigeert dit door de datum/tijd die wordt geretourneerd door de GPS bij verbinding, via het {@-antwoord, te vergelijken met de UTC-datum en -tijd van de mobiele telefoon. Het maken van plots in een spreadsheet vanuit het pfodApp-logbestand is hetzelfde als voor RTC-modules hierboven. Het toevoegen van de (lokale tijd – huidige kantoortijd) aan de GPS-tijdstempels corrigeert voor de schrikkelseconden.

millis() tijdstempels blijven werken zoals in Arduino milliseconde tijdstempels gebruiken, stap 5 hierboven.

Stap 11: Conclusie

Door pfodApp op je Android-mobiel te gebruiken, kun je gegevens uitzetten tegen datum en tijd of verstreken tijd, met alleen Arduino's millis()-functie. Met behulp van het pfodApp-logbestand kunt u deze datum/tijd-plots in een spreadsheet reproduceren. Als uw Arduino-project een RTC-module heeft, kunt u de datum en de RTC-tijdstempels loggen en plotten, waarbij automatisch wordt gecorrigeerd voor de RTC-drift. Als je Arduino-project een GPS-module heeft, kun je de zeer nauwkeurige tijdstempels loggen en plotten en pfodApp zal automatisch de ontbrekende schrikkelseconden van de GPS corrigeren.

In alle gevallen worden de onbewerkte gegevens van uw Arduino-project precies gelogd zoals ze zijn ontvangen, ongecorrigeerd. Het pfodApp-logbestand bevat echter extra gegevens waarmee u deze correcties in een spreadsheet kunt reproduceren vanuit het gedownloade logbestand.

Er is geen Android-codering vereist. De plotformaten worden allemaal gespecificeerd door kleine tekststrings in je Arduino-schets. De gratis pfodDesigner genereert volledige Arduino-gegevensregistratie en plotschetsen voor een breed scala aan Arduino-kaarten die via wifi, klassieke Bluetooth, BLE en sms zijn verbonden

Aanbevolen: