Turinys:

„Arduino“datos/laiko braižymas/registravimas naudojant „Millis“() ir „PfodApp“: 11 žingsnių
„Arduino“datos/laiko braižymas/registravimas naudojant „Millis“() ir „PfodApp“: 11 žingsnių

Video: „Arduino“datos/laiko braižymas/registravimas naudojant „Millis“() ir „PfodApp“: 11 žingsnių

Video: „Arduino“datos/laiko braižymas/registravimas naudojant „Millis“() ir „PfodApp“: 11 žingsnių
Video: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, Lapkritis
Anonim
„Arduino“datos/laiko braižymas/registravimas naudojant „Millis“() ir „PfodApp“
„Arduino“datos/laiko braižymas/registravimas naudojant „Millis“() ir „PfodApp“

Nereikia „Arduino“ar „Android“programavimo. Taip pat palaikomi RTC ir GPS moduliai. Automatinė laiko juostų, RTC poslinkio ir GPS trūkstamų sekundžių korekcija

Įvadas

Šioje pamokoje parodyta, kaip naudoti „Arduino millis“() laiko žymes duomenims pagal datą ir laiką nustatyti „Android“mobiliajame telefone naudojant „pfodApp“.

Nereikia „Arduino“ar „Android“programavimo. „pfodApp“taip pat registruoja pakankamai duomenų, kad vėliau galėtumėte atkurti datos ir laiko grafikus skaičiuoklėje.

Nereikia jokio RTC ar GPS modulio, tačiau jei jūsų „Arduino“projekte yra RTC (realaus laiko laikrodis) arba GPS modulis, jie taip pat gali būti naudojami. Tokiais atvejais „pfodApp“brėžiniai automatiškai ištaisys laiko juostą, RTC poslinkį ir GPS, kai trūksta šuolių sekundžių. Šiems pataisymams nereikia specialaus „Arduino“kodo. Kaip visada naudojant „pfodApp“, gauti duomenys registruojami tiksliai tokie, kokie yra, nepataisomi, tačiau žurnalo faile taip pat yra pakankamai informacijos, kad galėtumėte patys pritaikyti šiuos pataisymus, kai atsisiunčiate žurnalus į savo kompiuterį. Žemiau rasite šio papildomo apdorojimo pavyzdžių.

Palaikomas įvairus laiko ir datos X ašies formatavimas, visa tai visiškai valdoma trumpomis teksto eilutėmis jūsų „Arduino“eskize. „Android“programavimas nereikalingas.

„pfodApp“prisijungs per „WiFi“, „Bluetooth Classic“, BLE ir SMS. Nemokamas „pfodDesigner“sukuria išsamius „Arduino“eskizus datos/laiko braižymui/registravimui, kad būtų galima prisijungti prie įvairių plokščių. Nereikia programuoti „Arduino“.

Šis nurodymas naudos „Adafruit Feather52“kaip pavyzdinę „Arduino“plokštę, kuri jungiasi per BLE.

Ši instrukcija apima tris atvejus:- 1) Jūsų mikroprocesoriaus projekte yra tik milisekundžių laiko žymos- milis () 2) Jūsų mikroprocesoriaus projekte yra realaus laiko laikrodis (RTC)- „pfodApp“automatiškai koreguoja dreifą. 3) Jūsų mikroprocesoriaus projekte yra GPS modulis - „pfodApp“automatiškai pataiso kelias sekundes, kai jos įvyksta (šiuo metu 18 sek.).

1 veiksmas: „Arduino“milisekundžių laiko žymų naudojimas, „Millis“()

Yra dvi dalys, skirtos datos ir laiko naudojimui milisekundėmis. Viena skirta duomenims braižyti pagal praėjusį laiką arba datą/laiką, o kita dalis-datos ir laiko sukūrimas iš užregistruotų neapdorotų duomenų milisekundžių laiko žymų. „pfodApp“nekeičia neapdorotų duomenų, gautų iš „pfodDevice“(„Arduino micro“). Jis tiesiog registruoja tiksliai gautus baitus.

Pirmiausia naudokite nemokamą „pfodDesigner“, kad sukurtumėte „Arduino“eskizą savo „micro“, kuris nusiųs milisekundes ir duomenų matavimus į „pfodApp“, kad būtų galima nubraižyti/registruoti. Šis pavyzdys sukuria „Adafruit Feather 52 BLE“plokštės meniu, kuriame yra A0. Pamoka apie „Adafruit Feather nRF52 LE“- pasirinktiniai valdikliai su „pfodApp“eina per „pfodDesigner“veiksmus, kad sukurtų „Feather nRF52“meniu, kuriame yra mygtukas Diagrama, todėl norėdami sužinoti daugiau. Šioje pamokoje mes pridėsime tik diagramos mygtuką ir naudosime naujas X ašies formato parinktis, kad suplanuotume A0 rodmenis pagal praėjusį laiką ir datą/laiką.

Pirmoji šios pamokos dalis bus naudojama naudojant nemokamą „pfodDesigner“, kad sukurtumėte pavyzdinę datos/laiko diagramą „Android“mobiliajame telefone. Kai būsite patenkinti ekranu, galite sugeneruoti „Arduino“eskizą, kuris pakartos, kai prisijungsite prie „pfodApp“. „Android“programavimas nereikalingas, o kadangi „pfodDesigner“sukuria išsamius „Arduino“eskizus įvairioms „Arduino“plokštėms, „Arduino“programavimas taip pat nereikalingas.

2 veiksmas: diagramos pridėjimas prie meniu

Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu
Diagramos pridėjimas prie meniu

Atsisiųskite „pfodDesigner“programą iš „Google Play“, atidarykite ją ir spustelėkite „Pradėti naują meniu“

Spustelėkite „Tikslinė serija“, tada - mygtuką „Bluetooth mažai energijos“, kad būtų parodytas maždaug 11 BLE plokščių sąrašas (slinkite žemyn, kad pamatytumėte kitus pasirinkimus). Pasirinkite „Adafruit Bluefruit Feather52“.

Grįžkite į redagavimo meniu ir spustelėkite „Redaguoti raginimą“ir nustatykite tinkamą meniu, pvz. „Plunksna52“ir tekstas paryškintas, dydis +7. Fono spalva buvo palikta kaip numatytoji balta

Grįžkite atgal ir spustelėkite „Pridėti meniu elementą“, slinkite žemyn ir pasirinkite „Diagramos mygtukas“, kuris atveria diagramos mygtuko redagavimo ekraną. Čia galite pakeisti mygtuko išvaizdą. Šiuo atveju mygtuko tekstas buvo pakeistas į „Data/Time diagram A0“, o kitos numatytosios nuostatos liko tokios, kokios yra.

Tai suteikia meniu mygtuką, kuris atidarys diagramos ekraną.

3 veiksmas: sklypo šaltinio ir etikečių redagavimas

Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas
Sklypo šaltinio ir etikečių redagavimas

Spustelėkite mygtuką „A0 data/laikas“, kad atidarytumėte ekraną „Redagavimo planai“, kuriame galėsite pasiekti diagramos etiketę, X ašies formatą, grafiko duomenų intervalą ir (slinkdami žemyn) pačius brėžinio nustatymus. Redaguokite diagramos etiketę kaip tinkamą, pvz. „A0 voltai“.

Slinkite žemyn ir 2 ir 3 sklypams atidarykite Redaguoti brėžinį ir spustelėkite Slėpti brėžinį, kad pašalintumėte juos iš diagramos ekrano.

Tada spustelėkite „Redaguoti grafiką 1“ir nustatykite brėžinio etiketę (pvz., A0), yAxis vienetus (pvz., Voltus), rodykite maks. 3,6 V ir prijunkite prie įvesties/išvesties kaiščio A0.

Slinkite atgal aukštyn ir spustelėkite „Diagramos peržiūra“, kad pasiektumėte naujausius 0 mėginio duomenų taškų 1 sekundės intervalais, pavaizduotą pagal praėjusį laiką minutėmis: sek.

Viso prabėgusio laiko grafikai, rodantys nulinius vienetus, nerodomi, todėl šiame grafike rodomas tik tas laikas, ilgesnis kaip 1 min.

4 žingsnis: datos/laiko formato pasirinkimas

Datos/laiko formato pasirinkimas
Datos/laiko formato pasirinkimas
Datos/laiko formato pasirinkimas
Datos/laiko formato pasirinkimas
Datos/laiko formato pasirinkimas
Datos/laiko formato pasirinkimas

Praėjus laikui, pagrindiniai vienetai laikui bėgant tik didėja. Norėdami pamatyti to pavyzdį, grįžkite į ekraną „Sklypų redagavimas“ir padidinkite diagramos duomenų intervalą iki 15 minučių (šio ekrano apačioje)

Tada spustelėkite diagramos peržiūrą, kad būtų rodomi tie patys mėginių duomenys, bet dabar su 15 minučių intervalu tarp mėginių. Kaip matote minučių dalis mm: ss tik didėja.

Dabar grįžkite atgal ir spustelėkite X ašies mygtuką, kad būtų parodytas nedidelis visų galimų X ašies duomenų/laiko formatų pasirinkimas (daugiau slinkite žemyn)

Aukščiau pateiktas diagramų peržiūrų pasirinkimas naudojant skirtingus X ašies formatus.

Čia rodomi datos ir laiko grafikai yra vietinėje laiko juostoje. Taip pat yra formatavimo parinkčių, skirtų datai/laikui nubrėžti UTC. Visą galimų datos ir laiko formatavimo parinkčių rinkinį rasite pfodSpecification.pfd.

5 veiksmas: sukurkite ir išbandykite „Arduino“eskizą

Sukurkite ir išbandykite „Arduino“eskizą
Sukurkite ir išbandykite „Arduino“eskizą
Sukurkite ir išbandykite „Arduino“eskizą
Sukurkite ir išbandykite „Arduino“eskizą

Kai būsite patenkinti diagramos formatu ir duomenų intervalu, galite pereiti į ekraną „Redagavimo meniu_1“ir slinkti žemyn ir pasirinkti parinktį „Sukurti kodą“. Čia yra pavyzdinis „Adafruit Feather52“eskizas, naudojant 1 sek. Duomenų intervalus ir mm: ss praėjusio laiko formatą, pfodFeather52_timeplot.ino

Viršuje yra A0 sklypas iš plunksnos52

Pakeitus formatą į „Weekday hr: mins: sec“(~ E HH: mm: ss) ir iš naujo sugeneravus kodą (pfodFeather52_dateplot.ino), gaunamas panašus į antrąjį.

X ašies formatą galite redaguoti tiesiogiai savo „Arduino“eskize, kaip aprašyta toliau.

6 žingsnis: Kaip „PfodApp“nubrėžia datą/laiką iš Millis ()?

Kai „pfodApp“prisijungia, jis prisimena savo „vietinį“ir UTC laiką ir prašo „pfodDevice“(„Arduino“plokštės) dabartinių sklypo duomenų laiko žymų. Naudodamas šią informaciją, „pfodApp“gali nubraižyti milisekundžių laiko žymes kaip praėjusį laiką, t. Y. Konvertuoti milisekundes į val. Min. Sek. Ir pan., Arba nubrėžti datą ir laiką, kai milisekundės laiko žymos nurodo ryšį, kai buvo užmegztas ryšys ir buvo paprašytas dabartinis „pfodDevice“laikas.

Žvelgiant į „Arduino“sukurtą eskizą (pvz., „PfodFeather52_dateplot.ino“), yra trys nedideli kodo bitai, kurie tvarko sklypų „Arduino“pusę.

Ciklo () kodo skiltis, kuri tvarko „pfodApp“{@} dabartinio laiko užklausą

// tvarkyti {@} užklausą} else if ('@' == cmd) {// pfodApp paprašė 'current' time plot_mSOffset = millis (); // užfiksuoti dabartinius milis kaip kompensuoti neapdorotų duomenų laiko žymes parser.print (F ("{@` 0} ")); // grąžinti „0“kaip „dabartinius“neapdorotus duomenis milisekundėmis

Galite tiesiog grąžinti dabartinę milis () vertę, tačiau milis () kas 49,7 dienos apvyniojama iki 0, todėl siužetas šokinėja atgal. Taigi kodas prisimena dabartinę milis () reikšmę, kai buvo pateikta {@} užklausa, ir grąžina {@`0}, t. Y. Dabartinę milisekundės laiko žymę, lygią nuliui. Tada, siunčiant neapdorotus duomenų taškus, eskizas naudojamas

plot_1_var = analogRead (A0); // skaityti įvestį į sklypą // plot_2_var sklypas Paslėptas, todėl čia nėra priskirtų duomenų // plot_3_var sklypas Paslėptas, todėl čia nėra priskirtų duomenų // siunčia sklypo duomenis CSV formatu parsatorius.print (millis ()-plot_mSOffset); // laikas milisekundėmis ….

kad milisekundės laiko žyma, išsiųsta su duomenimis, prasidėtų nuo 0 ir padidėtų iki 49,7 dienų. Jei nuolat palaikysite ryšį 49,7 dienas, pamatysite, kad siužetas šokinėja atgal ~ 50 dienų. Atjungus ir vėl prijungus kartą per 49,7 dienas, to išvengiama.

Trečioji datos/laiko grafiko dalis yra siužeto pranešimas.

} else if ('A' == cmd) {// vartotojas paspaudė - 'Date/Time plot of A0' // pagrindiniame meniu_1 meniu // grįžti brėžinio žinutė. parser.print (F ("{= A0 voltai ~ E HH: mm: ss | data | A0 ~~~ voltai ||}"));

Kai vartotojas paspaudžia mygtuką „A0 data/laikas“, „pfodApp“siunčia {A} cmd į „pfodDevice“, o „pfodDevice“atsako siužeto pranešimu, {=… {= A0 voltai ~ E HH: mm: ss | data | A0 ~~~ Voltai ||}, kuriame yra X ašies formatas E HH: mm: ss

Čia yra priimtini „Java SimpleDateFormat“formatai. „pfodApp“duomenų registravimas ir braižymas ir „pfodSpecification.pdf“turi daugiau informacijos apie schemos pranešimą.

7 veiksmas: datos/laiko grafikų atkūrimas kompiuteryje

Datos/laiko grafikų atkūrimas kompiuteryje
Datos/laiko grafikų atkūrimas kompiuteryje
Datos/laiko grafikų atkūrimas kompiuteryje
Datos/laiko grafikų atkūrimas kompiuteryje
Datos/laiko grafikų atkūrimas kompiuteryje
Datos/laiko grafikų atkūrimas kompiuteryje

Pagal numatytuosius nustatymus „pfodApp“registruoja visus gaunamus neapdorotus duomenis į žurnalo failą jūsų mobiliajame telefone, nebent išjungėte šį registravimą ryšio redagavimo ekrane, žr. PfodAppForAndroidGettingStarted.pdf

Kai redaguojate „pfodApp“, rodomas trumpas pranešimas su žurnalo failo vieta ir pavadinimu, pvz. /pfodAppRawData/pfod_bluefruit52.txt Šis failas yra CSV formato, atskirtas kableliais, o perkėlus jį į kompiuterį (persiuntimo parinktis žr. pfodAppForAndroidGettingStarted.pdf), galite atidaryti jį skaičiuoklėje, kad būtų pateikti duomenys.

Čia yra pirmosios žurnalo failo eilutės.

// „pfodApp V3.0.360“, vietinis laikas, UTC, mS per dieną, „pfod bluefruit52“dabartinis laikas (mS), „pfod bluefruit52“dabartinis laikas, // prijungtas, 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,, Viršuje galite pamatyti „vietinį“ir UTC laiką, kurį „pfodApp“prijungė prie „Feather52“, ir dabartinį laiką mS, apie kurį „Feather52“pranešė per atsakymą {@..}. Paskutinis stulpelis tuščias, nes nėra RTC ar GPS, todėl „Feather52“nepranešė apie dabartinį laiką yyyy/MM/dd laiku.

Norėdami pavaizduoti duomenis pagal praėjusį laiką, iš milisekundžių laiko žymos atimkite dabartinį laiką (mS) ir tada padalinkite iš mS dienos vertės. Čia yra skaičiuoklė su pridėta formule ir nubrėžtu rezultatu. Žemiau esanti skaičiuoklė (pfod_bluefruit52.xls) yra „OpenOffice“skaičiuoklė, išsaugota „Excel“formatu.

„OpenOffice“schema yra sklaidos schema, o grafiko x ašis buvo suformatuota HH: MM: SS. Pavyzdžiui, „pfodApp“MM yra mėnesiai, o mm - minutės.

Norėdami nubraižyti datą ir laiką, prie skaičiuoklės laiko reikia pridėti tik prisijungimo laiką ir perskirstyti. (pfod_bluefruit52_date.xls)

Pastaba: vietinis laikas ir UTC buvo importuoti kaip tekstas mano skaičiuoklėje, todėl prieš naudodama formulę turėjau pašalinti pradinį ženklą.

8 veiksmas: kaip išvengti 49,7 dienų () ribos ir kodėl neturėtumėte

Kaip minėta aukščiau skyriuje „Kaip pfodApp nubrėžia datą/laiką iš milis ()?“, Jei nuolat palaikysite ryšį ilgiau nei 49,7 dienos, milisekundės laiko žymos bus apvyniojamos iki nulio. Kelios kodo eilutės gali to išvengti, tačiau nerekomenduojama.

Pirmiausia, kaip apsisaugoti. Pridėkite dar vieną nepasirašytą int kintamąjį, kad galėtumėte stebėti, kiek kartų laiko žymos apvyniojamos, ir išspausdinti bendrą rezultatą HEX.

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… Plot_1_var = analogRead (A0); // skaityti įvestį į sklypą // plot_2_var sklypas Paslėptas, todėl čia nėra priskirtų duomenų // plot_3_var sklypas Paslėptas, todėl čia nėra priskirtų duomenų // siusti sklypo duomenis CSV formatu uint32_t timeStamp = millis ()-plot_mSOffset; if (timeStamp <lastTimeStamp) {// laiko žyma suvyniota į 0 mSwrapCount ++; // pridėti vieną prie skaičiavimo} lastTimeStamp = timeStamp; parser.print ("0x"); parseris.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // laikas milisekundėmis HEX….

Grąžindami atsakymą {@.., išvalykite ir „mSwrapCount“.

// tvarkyti {@} užklausą} else if ('@' == cmd) {// pfodApp paprašė 'current' time plot_mSOffset = millis (); // užfiksuoti dabartinius milis kaip kompensuoti neapdorotų duomenų laiko žymes mSwrapCount = 0; // aiškus įvyniojimų skaičius. parser.print (F ("{@` 0} ")); // grąžinti „0“kaip „dabartinius“neapdorotus duomenis milisekundėmis

Laiko žymos dabar suteiks „teisingą“vertę ateinančioms 40,7 dienoms * 65536 ~ = 7308 metams.

„pfodApp“automatiškai konvertuos šešiabriaunius laiko žymes braižant ir registruos tiksliai taip, kaip buvo gauta, t. Skaičiuoklėje („OpenOffice“) naudodami šią formulę šešiabriaunę eilutę A2 paversite mS (kur A1 yra bet koks tuščias langelis) = HEX2DEC (REPLACE (A2; 1; 2; A1))

Kodėl tu nenori to daryti

Kaip parodyta aukščiau, mS laiko žymes nesunku pratęsti ilgiau nei 50 dienų. Tačiau tikriausiai nenorite to daryti, nes jie tampa vis netikslesni. Įprasto 16Mhz kristalo, naudojamo milis () rezultatams sukurti, mikro tikslumas yra ~ 50 ppm (dalys milijonui). Tai reiškia, kad po 49,7 dienų milisekundės laiko žyma gali išnykti per 3½ minutės ir į tai nekreipiamas dėmesys į temperatūros poveikį kristalų tikslumui.

Per trumpą prisijungimo laikotarpį šis netikslumas nėra problema, nes atsakymas {@.. pakartotinai sinchronizuoja milisekundės laiko žymę su mobiliojo telefono data/laiku kiekvieną kartą prisijungus. Tačiau jei norite palaikyti ryšį ilgą laiką (dienas) ir nuolat registruoti duomenis, turėtumėte naudoti kažką tikslesnio nei integruotas milis (), pvz., RTC arba GPS modulį.

9 veiksmas: RTC (realaus laiko laikrodžio) naudojimas

RTC (realaus laiko laikrodžio) naudojimas
RTC (realaus laiko laikrodžio) naudojimas
RTC (realaus laiko laikrodžio) naudojimas
RTC (realaus laiko laikrodžio) naudojimas

Yra nemažai RTC modulių, vienas tikslesnių yra DS3231 pvz. „Adafruit“DS3231 modulis. Nurodytas tikslumas yra +/- 2 ppm esant 0–40 ° C temperatūrai. y., ~ +/- 5 sek. per mėnesį.

Jei norite nubraižyti duomenis, turinčius datos/laiko laiko žymes, pvz. 2019/04/19 20: 4: 34, tada turite pakeisti {@ atsakymą, kad būtų grąžinta dabartinė data/laikas, pvz. {@`0 ~ 2019/4/19 3: 33: 5}. Štai keletas kodo pakeitimų pavyzdžių, kuriuos reikia taikyti „pfodDesigner“sukurtam eskizui naudoti RTC modulį, darant prielaidą, kad naudojate „RTClib“biblioteką ir pridėjote kodą, kuris inicijuoja RTC modulį.

// tvarkyti {@} užklausą} else if ('@' == cmd) {// pfodApp paprašė 'current' time plot_mSOffset = millis (); // fiksuoti dabartinius milis kaip kompensuoti neapdorotų duomenų laiko žymes parser.print (F ("{@` 0 "}); // grąžinti" 0 kaip "dabartinius" neapdorotus duomenis milisekundžių parser.print ('~ "); // pradžios eilutė data/laikas DateTime dabar = rtc.now () sendDateTime (& dabar); // siųsti yyyy/M/d/H: m: s į parser.print, perduoti adresą & kaip arg. parser.print ('}'); // pabaiga {@ atsakymas, pvz., {@ `0 ~ 2019/4/19 3: 33: 5}….

// siųsti datos laiką parsiniui printvoid sendDateTime (DateTime* dt) {parser.print (dt-> metai (), DEC); parser.print ('/'); parser.print (dt-> mėnuo (), DEC); parser.print ('/'); parser.print (dt-> diena (), DEC); parser.print (''); parser.print (dt-> valanda (), DEC); parser.print (':'); parser.print (dt-> minutė (), DEC); parser.print (':'); parser.print (dt-> antras (), DEC); }

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // iš naujo paleisti sklypo duomenų laikmatį, be dreifo // priskirti reikšmes sklypo kintamiesiems iš savo kilpos kintamųjų arba skaityti ADC įvestis plot_1_var = analogRead (A0); // skaityti įvestį į sklypą // plot_2_var sklypas Paslėptas, todėl čia nėra priskirtų duomenų // plot_3_var sklypas Paslėptas, todėl čia nėra priskirtų duomenų // siunčia sklypo duomenis CSV formatu DateTime now = rtc.now (); sendDateTime (& dabar); // siųskite yyyy/M/d/H: m: s į parser.print, perduokite adresą ir kaip arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // 2 sklypas paslėptas. Duomenys nesiųsti. parser.print (','); // 3 sklypas paslėptas. Duomenys nesiųsti. parseris.println (); // CSV duomenų įrašo pabaiga}}

~ 2019/4/19 3: 33: 5 dalis atsakymo {@ leidžia „pfodApp“žinoti, kokia „pfodDevice“manymu yra dabartinė data ir laikas. Tada jūsų eskizas gali siųsti duomenis su „yMd Hms“laiko žymomis, o „pfodApp“juos suplanuos kaip praėjusį laiką nuo prisijungimo laiko ARBA kaip datą ir laiką, priklausomai nuo jūsų nurodytos X ašies formato.

Nubraižant datą ir laiką, „pfodApp“brėžinių tvarka ištaiso bet kokį „nukrypimą“RTC, palygindama „pfodDevice“ataskaitinį dabartinį laiką ir dabartinį mobiliojo telefono laiką. Ši korekcija taip pat tvarko RTC nustatymą į kitą laiko juostą nei jūsų mobiliojo telefono vietinė laiko juosta. millis () laiko žymos ir toliau veikia taip pat, kaip naudojant „Arduino“milisekundžių laiko žymes, 5 veiksmas aukščiau.

Čia yra kambario temperatūros skaičiuoklės pavyzdys per 8 dienas, Office_Temp.xls Kai buvo importuotas žurnalo failas, pirmasis stulpelis buvo pažymėtas kaip YMD, kad tekstas būtų paverstas data/laiku. Vis tiek turite pašalinti pagrindinius „vietos laiko, UTC ir„ Office Temp “dabartinio laiko įrašus, kad skaičiuoklė juos interpretuotų kaip datas ir laiką.

Norėdami gauti tą patį grafiką, kurį rodo „pfodApp“, turite apskaičiuoti „Ištaisyta data/laikas“. Šiuo atveju RTC laikas 2 sekundėmis atsilieka nuo vietinio mobiliojo laiko, todėl prie kiekvieno RTC laiko žyma pridedama (vietinis laikas - dabartinis „Office Temp“laikas), kad būtų gautas tikrasis vietinis laikas.

Praėjusio laiko grafikams sukurkite naują stulpelį, kuriame yra (datos/laiko laiko žyma-dabartinis „Office Time“laikas), ir naudokite jį kaip X ašį diagramoje („Office_TempElapsed.xls“) Iš tikrųjų šiuo atveju „pfodApp“sukuria gražesnes praleisto laiko diagramas dienomis val.: min: sek.

10 veiksmas: GPS modulio naudojimas

GPS modulio naudojimas yra panašus į RTC modulio naudojimą, išskyrus tai, kad GPS moduliai turi turimas milisekundes, metai prasideda nuo 2000 m., O laiko nėra UTC keliamųjų sekundžių (žr. Https://tycho.usno.navy.mil/leapsec.html) GPS data ir laikas šiuo metu yra 18 sekundžių anksčiau nei UTC, 2018 m. Sausio mėn.

„Adafruit GPS“biblioteka, skirta „Adafruit Ultimate GPS“, skirtingai nei „RTClib“, neprideda 2000 metų poslinkio prie GPS metų, todėl jį reikia pridėti siunčiant datos ir laiko žymę. Be to, nors GPS biblioteka tiekia milisekundes, kurių ilgalaikis tikslumas yra labai geras, jos nėra labai tikslios. GPS laiko atnaujinimai atliekami tik kartą per 100 mS, tada serijiniai duomenys gaunami papildomai vėluojant lėtai 9600 baudų, o dar kartą vėluojama juos analizuoti. Visa tai padidina milisekundės tikslumą, kai laiko rodmenys rodo duomenų rodmenis.

Štai keletas kodo pakeitimų pavyzdžių, kuriuos reikia pritaikyti „pfodDesigner“sukurtam eskizui naudoti GPS modulį, darant prielaidą, kad naudojate „Adafruit“GPS biblioteką ir pridėjote kodą, kad gautumėte ir išanalizuotumėte pranešimus į GPS objektą.

// tvarkyti {@} užklausą} else if ('@' == cmd) {// pfodApp paprašė 'current' time plot_mSOffset = millis (); // fiksuoti dabartinius milis kaip kompensuoti neapdorotų duomenų laiko žymes parser.print (F ("{@` 0 "}); // grąžinti" 0 kaip "dabartinius" neapdorotus duomenis milisekundžių parser.print ('~ "); // pradžios eilutė data/laikas sendDateTime (& GPS); // siųsti yyyy/M/d/H: m: s į parser.print, perduoti adresą & kaip arg. parser.print ('}'); // pabaiga {@ atsakymas pvz. {@`0 ~ 2019/4/19 3: 33: 5}….

// siųsti datos laiką parsiniui printvoid sendDateTime (Adafruit_GPS* gps) {parser.print (F ("20"); // 20.. year parser.print (gps-> year, DEC); parser.print ('/ '); parser.print (gps-> mėnuo, DEC); parser.print ('/'); parser.print (gps-> diena, DEC); parser.print (' '); parser.print (gps- > valanda, DEC); parser.print (':'); parser.print (gps-> minute, DEC); parser.print (':'); parser.print (gps-> second, DEC); // parser.print ('.'); jei siunčiate milisekundes // jei norite siųsti mS, gps-> milisekundžių reikšmę turite užpildyti pirmaisiais nuliais // ty 3 reikia užpildyti iki 003}

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // iš naujo paleisti sklypo duomenų laikmatį, be dreifo // priskirti reikšmes sklypo kintamiesiems iš savo kilpos kintamųjų arba skaityti ADC įvestis plot_1_var = analogRead (A0); // skaityti įvestį į sklypą // plot_2_var sklypas Paslėptas, todėl čia nepriskirti jokie duomenys // plot_3_var sklypas Paslėptas, todėl čia nepriskirti jokie duomenys // siusti sklypo duomenis CSV formatu sendDateTime (& GPS); // siųskite yyyy/M/d/H: m: s į parser.print, perduokite adresą ir kaip arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // 2 sklypas paslėptas. Duomenys nesiųsti. parser.print (','); // 3 sklypas paslėptas. Duomenys nesiųsti. parseris.println (); // CSV duomenų įrašo pabaiga}}

Piešiant pagal datą ir laiką, „pfodApp“automatiškai pataiso kelias sekundes. 2018 m. Sausio mėn. GPS laikas yra 18 sekundžių priekyje UTC. „pfodApp“tai pataiso, palygindama prisijungimo GPS grąžintą datą/laiką per {@ atsakymą ir mobiliojo telefono UTC datą ir laiką. Siužetų kūrimas skaičiuoklėje iš „pfodApp“žurnalo failo yra toks pat kaip ir aukščiau pateiktuose RTC moduliuose. Į GPS laiko žymes pridėjus (vietinis laikas - dabartinis „Office Temp“laikas), koreguojamos kelios sekundės.

millis () laiko žymos ir toliau veikia taip pat, kaip naudojant „Arduino“milisekundžių laiko žymes, 5 veiksmas aukščiau.

11 žingsnis: Išvada

Naudodami „pfodApp“savo „Android“mobiliajame telefone galite nubraižyti duomenis pagal datą ir laiką arba praėjusį laiką, naudodami tik „Arduino“milis () funkciją. Naudodami „pfodApp“žurnalo failą, galite iš naujo pateikti šiuos datos ir laiko grafikus skaičiuoklėje. Jei jūsų „Arduino“projekte yra RTC modulis, galite registruoti ir nubraižyti datą ir RTC laiko laiko žymes, automatiškai ištaisydami RTC „dreifą“. Jei „Arduino“projekte yra GPS modulis, galite užregistruoti ir nubraižyti jo labai tikslius laiko žymes, o „pfodApp“automatiškai ištaisys trūkstamas GPS šuolio sekundes.

Visais atvejais neapdoroti jūsų „Arduino“projekto duomenys registruojami tiksliai tokie, kokie buvo gauti, nepataisyti. Tačiau „pfodApp“žurnalo faile yra papildomų duomenų, kad galėtumėte iš naujo atlikti šiuos pataisymus skaičiuoklėje iš atsisiųsto žurnalo failo.

„Android“kodavimo nereikia. Siužeto formatai yra nurodyti mažomis teksto eilutėmis jūsų „Arduino“eskize. Nemokamas „pfodDesigner“sukuria išsamius „Arduino“duomenų registravimo ir braižymo eskizus įvairioms „Arduino“plokštėms, jungiančioms per „WiFi“, klasikinį „Bluetooth“, BLE ir SMS

Rekomenduojamas: