Բովանդակություն:

Arduino ամսաթիվ/ժամ գծագրում/մուտքագրում ՝ օգտագործելով Millis () և PfodApp: 11 քայլ
Arduino ամսաթիվ/ժամ գծագրում/մուտքագրում ՝ օգտագործելով Millis () և PfodApp: 11 քայլ

Video: Arduino ամսաթիվ/ժամ գծագրում/մուտքագրում ՝ օգտագործելով Millis () և PfodApp: 11 քայլ

Video: Arduino ամսաթիվ/ժամ գծագրում/մուտքագրում ՝ օգտագործելով Millis () և PfodApp: 11 քայլ
Video: Arduino project how to make a laser electronic alarm, an amazing invention DIY 2024, Նոյեմբեր
Anonim
Arduino ամսաթիվ/ժամ գծագրում/մուտքագրում `օգտագործելով Millis () և PfodApp
Arduino ամսաթիվ/ժամ գծագրում/մուտքագրում `օգտագործելով Millis () և PfodApp

Arduino կամ Android ծրագրավորում չի պահանջվում: RTC և GPS մոդուլներ նույնպես ապահովված են: zամային գոտիների, RTC- ի շարժումների և GPS- ի բացակայող թռիչքային վայրկյանների ավտոմատ ուղղում

Ներածություն

Այս ձեռնարկը ցույց է տալիս, թե ինչպես օգտագործել ձեր Arduino millis () ժամանակային դրոշմակնիքները ՝ ձեր Android բջջային սարքի ամսաթվի և ժամի տվյալների հիման վրա ՝ օգտագործելով pfodApp:

Arduino կամ Android ծրագրավորում չի պահանջվում: pfodApp- ը նաև գրանցում է բավարար տվյալներ, որպեսզի հետագայում կարողանաք վերարտադրել ամսաթվի/ժամի գծագրերը աղյուսակում:

RTC կամ GPS մոդուլ անհրաժեշտ չէ, սակայն եթե ձեր Arduino նախագիծը ունի RTC (Իրական ժամանակի ժամացույց) կամ GPS մոդուլ, դրանք նույնպես կարող են օգտագործվել: Այդ դեպքերում pfodApp- ի գծապատկերներն ավտոմատ կերպով կուղղվեն ժամային գոտու, RTC- ի շեղման և GPS- ի բացակայող թռիչքային վայրկյանների համար: Այս ուղղումների համար հատուկ Arduino կոդ չի պահանջվում: Ինչպես միշտ pfodApp- ի դեպքում, ստացված տվյալները գրանցվում են այնպես, ինչպես որ կան, չշտկված, սակայն տեղեկամատյան ֆայլը պարունակում է նաև բավարար տեղեկատվություն, որը թույլ կտա ինքներդ կիրառել այդ ուղղումները, երբ տեղեկամատյանները ներբեռնում եք ձեր համակարգչում: Այս հետամշակման օրինակների համար տե՛ս ստորև:

Isամանակի և ամսաթվի X առանցքի ձևաչափման լայն տեսականի ապահովված է, որոնք բոլորն ամբողջությամբ վերահսկվում են ձեր Arduino էսքիզի կարճ տեքստային տողերով: Android ծրագրավորում չի պահանջվում:

pfodApp- ը կկապվի WiFi- ի, Bluetooth Classic- ի, BLE- ի և SMS- ի միջոցով: Անվճար pfodDesigner- ը ստեղծում է Arduino- ի ամբողջական էսքիզներ ամսաթվի/ժամի գծագրման/գրանցման համար `մի շարք տախտակներին միանալու համար: Arduino ծրագրավորում չի պահանջվում:

Այս հրահանգը կօգտագործի Adafruit Feather52- ը որպես Arduino տախտակի օրինակ, որը միանում է BLE- ի միջոցով:

Այս հրահանգը ներառում է երեք դեպք. 3) Ձեր միկրոպրոցեսորային նախագիծը ունի GPS մոդուլ.

Քայլ 1. Օգտագործելով Arduino Millisecond Timestamps, Millis ()

Միլիվայրկյանների օգտագործման ամսաթվի և ժամի երկու մաս կա. Մեկը նախատեսված է անցած ժամանակի կամ ամսաթվի/ժամի դեմ տվյալների գծագրման համար, իսկ մյուս մասը `ամսաթիվը և ժամը նորից ստեղծելու մուտքագրված հում տվյալների միլիվայրկյան ժամկետային նշաններից: pfodApp- ը չի փոփոխում pfodDevice- ից (Arduino միկրո) ստացված հում տվյալները: Այն պարզապես գրանցում է ստացված բայթերը:

Նախ օգտագործեք անվճար pfodDesigner- ը ՝ ձեր միկրո համակարգի համար Arduino ուրվագիծ ստեղծելու համար, որը միլիվայրկյաններ և տվյալների չափումներ կուղարկի pfodApp- ին ՝ գծագրման/մուտքագրման համար: Այս օրինակը ստեղծում է մենյու Adafruit Feather 52 BLE տախտակի համար, որը կարդում է A0: Adafruit Feather nRF52 LE - Custom Controls with pfodApp- ը անցնում է pfodDesigner- ի քայլերով ՝ Փետուրի համար nRF52 փետուրի համար ընտրացանկ ստեղծելու համար, որը ներառում է Գծապատկեր կոճակ, ուստի մանրամասն տեղեկությունների համար ստուգեք այն: Այս ձեռնարկում մենք կավելացնենք ընդամենը գծապատկերի կոճակ և կօգտագործենք X- առանցքի ձևաչափի նոր ընտրանքները ՝ A0- ի ընթերցումները գծված ժամանակի և ամսաթվի/ժամի հետ համեմատելու համար:

Այս ձեռնարկի առաջին մասը կանցնի անվճար pfodDesigner- ի միջոցով ՝ ձեր Android բջջայինի վրա ամսաթվի/ժամի օրինակելի աղյուսակ ստեղծելու համար: Երբ գոհ եք ցուցադրումից, կարող եք ստեղծել Arduino էսքիզ, որը կվերարտադրի այն, երբ միանաք pfodApp- ի հետ: Android ծրագրավորում չի պահանջվում, և քանի որ pfodDesigner- ը ստեղծում է Arduino- ի էսքիզներ Arduino տախտակների լայն տեսականի համար, Arduino ծրագրավորում նույնպես չի պահանջվում:

Քայլ 2. Գծապատկեր ավելացնելը ընտրացանկին

Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին
Գծապատկեր ավելացնելը ընտրացանկին

Ներբեռնեք pfodDesigner ծրագիրը Google Play- ից, բացեք այն և կտտացրեք «Սկսել նոր ընտրացանկ»

Կտտացրեք «Թիրախային սերիա», այնուհետև «Bluetooth ցածր էներգիա» կոճակին ՝ մոտ 11 BLE տախտակների ցուցակը ցուցադրելու համար (ոլորեք ներքև ՝ այլ ընտրանքները տեսնելու համար): Ընտրեք Adafruit Bluefruit Feather52- ում:

Վերադարձեք Խմբագրման ընտրացանկ և կտտացրեք «Խմբագրել հուշում» և այս ցանկի համար համապատասխան հուշում սահմանեք, օրինակ. «Փետուր 52» և տեքստը համարձակ և չափ +7: Ֆոնի գույնը մնացել է որպես «կանխադրված» Սպիտակ

Վերադարձեք և կտտացրեք «Ավելացնել ընտրացանկի տարր», ոլորեք ներքև և ընտրեք «Գծապատկեր կոճակ», որը բացում է գծապատկերի կոճակի խմբագրման էկրանը: Դուք կարող եք ցանկացած փոփոխություն կատարել կոճակի արտաքին տեսքում: Այս դեպքում կոճակի տեքստը փոխվում է «A0 ամսաթիվ/ժամ», իսկ մնացած կանխադրվածները մնում են այնպես, ինչպես կա:

Սա ձեզ տալիս է ցանկի կոճակ, որը կբացի գծապատկերի էկրանը:

Քայլ 3: Հողամասի աղբյուրի և ընդհատումների խմբագրում

Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում
Հողամասի աղբյուրի և պայմանների խմբագրում

Կտտացրեք «A0 ամսաթվի/ժամի գծապատկերին» կոճակին ՝ Խմբագրման սյուժեների էկրանը բացելու համար, որտեղ կարող եք մուտք գործել գծապատկերային պիտակը, X առանցքի ձևաչափը, գծապատկերի տվյալների միջակայքը և (ներքև ոլորելով) սյուժեի կարգավորումները: Խմբագրել Գծապատկերային պիտակը համապատասխան բանի, օրինակ. «A0 վոլտ»:

Ոլորեք ներքև և 2 և 3 սյուժեների համար բացեք «Խմբագրել սյուժեն» և կտտացրեք «Թաքցնել գծապատկերը» ՝ դրանք գծապատկերից հեռացնելու համար:

Այնուհետև կտտացրեք «Խմբագրել սյուժեն 1» -ին և սահմանեք գծապատկեր (օրինակ ՝ A0), yAxis միավորներ (օրինակ ՝ վոլտ), ցուցադրեք առավելագույնը 3.6 Վ և միացեք I/O կապի A0- ին:

Ոլորեք դեպի հետ և կտտացրեք «Գծապատկերների նախադիտում» ՝ դեպի ամենավերջին 0 ընտրանքային տվյալների կետերը ՝ 1 վայրկյան ընդմիջումներով ՝ գծված րոպեների ընթացքում ՝ վայրկյանների ընթացքում:

Բոլոր անցած ժամանակաշրջանների համար զրո միավոր միավորները չեն ցուցադրվում, այնպես որ այս գծապատկերում միայն այն ժամանակները, որոնք ցույց են տալիս 1 րոպե առաջատար րոպեները:

Քայլ 4: Ընտրելով ամսաթվի/ժամի ձևաչափը

Ամսաթվի/ժամի ձևաչափի ընտրություն
Ամսաթվի/ժամի ձևաչափի ընտրություն
Ամսաթվի/ժամի ձևաչափի ընտրություն
Ամսաթվի/ժամի ձևաչափի ընտրություն
Ամսաթվի/ժամի ձևաչափի ընտրություն
Ամսաթվի/ժամի ձևաչափի ընտրություն

Անցած ժամանակային սյուժեների համար առաջատար միավորը պարզապես շարունակում է աճել ժամանակի ընթացքում: Դրա օրինակը տեսնելու համար վերադարձեք «Հողամասերի խմբագրում» էկրան և ավելացրեք Հողամասի տվյալների միջակայքը մինչև 15 րոպե (այս էկրանի ներքևում)

Այնուհետև կտտացրեք Գծապատկերային նախադիտմանը ՝ նույն նմուշի տվյալները ցույց տալու համար, բայց այժմ ՝ նմուշների միջև 15 րոպե ընդմիջումով: Ինչպես տեսնում եք, mm: ss- ի րոպեների հատվածը պարզապես աճում է:

Այժմ հետ գնացեք և կտտացրեք X առանցքի կոճակին ՝ X- առանցքի տվյալների/ժամանակի բոլոր հնարավոր ձևաչափերի փոքր ընտրությունը ցուցադրելու համար (ավելին ոլորեք ներքև)

Վերևում ներկայացված է գծապատկերի նախադիտումների ընտրություն ՝ օգտագործելով X առանցքի տարբեր ձևաչափեր:

Այստեղ ցուցադրված ամսաթվի/ժամի գծապատկերները գտնվում են «տեղական» ժամային գոտում: Կան նաև UTC- ում ամսաթիվ/ժամ գծագրելու ձևաչափի տարբերակներ: Ամսաթիվ/ժամ ձևաչափի հնարավոր ընտրանքների ամբողջական փաթեթի համար տե՛ս pfodSpecification.pfd:

Քայլ 5. Ստեղծեք և փորձարկեք Arduino ուրվագիծը

Ստեղծեք և փորձարկեք Arduino ուրվագիծը
Ստեղծեք և փորձարկեք Arduino ուրվագիծը
Ստեղծեք և փորձարկեք Arduino ուրվագիծը
Ստեղծեք և փորձարկեք Arduino ուրվագիծը

Երբ գոհ եք ձեր գծապատկերի ձևաչափից և տվյալների ընդմիջումից, կարող եք անցնել «Խմբագրման ընտրացանկ_1» էկրանին և ոլորել ներքև և «Ստեղծել ծածկագիր» `ձեր ընտրած թիրախային տախտակի համար: Ահա Adafruit Feather52- ի օրինակելի ուրվագիծը `օգտագործելով 1 վրկ տվյալների միջակայքեր և մմ. Ss անցած ժամանակի ձևաչափ, pfodFeather52_timeplot.ino

Վերևում փետուրից A0 սյուժե է 52

Ֆորմատը շաբաթվա օր փոխելով ՝ hr: mins: sec (~ E HH: mm: ss) և ծածկագրի վերարտադրումը (pfodFeather52_dateplot.ino) տալիս է վերևի երկրորդի նման սյուժե:

Դուք կարող եք X առանցքի ձևաչափը խմբագրել անմիջապես ձեր Arduino էսքիզում, ինչպես նկարագրված է հաջորդում:

Քայլ 6. Ինչպե՞ս է PfodApp- ը գծում Միլիսից ():

Երբ pfodApp- ը միանում է, հիշում է իր «տեղական» և UTC ժամանակը և խնդրում է pfodDevice- ի (Arduino տախտակի) ընթացիկ գծապատկերի տվյալների ժամկետները: Օգտագործելով այս տեղեկատվությունը pfodApp- ն այնուհետև կարող է գծել միլիվայրկյան ժամանակային նշաններ ՝ որպես անցած ժամանակ, այսինքն ՝ միլիվայրկյանների ժամվա փոխակերպում ժամվա վայրկյան և այլն, կամ գծել այն ամսաթիվը և ժամը, երբ միլիվայրկյան ժամանակային նշանները ներկայացնում են կապի հաստատման և pfodDevice- ի ներկայիս ժամանակի պահանջի համեմատ:

Նայելով Arduino- ի ստեղծած ուրվագծին (օրինակ ՝ pfodFeather52_dateplot.ino) ՝ կան երեք փոքր կոդ, որոնք կարգավորում են սյուժեների Arduino կողմը:

The loop () կոդի բաժինը, որը կարգավորում է pfodApp- ի {@} ընթացիկ ժամանակի հարցումը

// կարգավորել {@} հարցումը} այլ դեպքում, եթե ('@' == cmd) {// pfodApp- ը պահանջել է 'ընթացիկ' ժամանակը plot_mSOffset = millis (); // ֆիքսել ընթացիկ միլիարդները որպես օֆսեթ rawdata timestamps parser.print (F ("{@` 0} ")); // վերադարձնել «0 -ը որպես« ընթացիկ »հումքի տվյալների միլիվայրկյաններ

Դուք կարող եք պարզապես վերադարձնել millis () ներկայիս արժեքը, սակայն millis () -ը յուրաքանչյուր 49,7 օրվա ընթացքում պտտվում է 0 -ի վրա, ինչը կստիպի հողամասը հետ թռչել: Այսպիսով, կոդը հիշում է ընթացիկ millis () արժեքը, երբ {@} հարցումն արվել է, և վերադարձնում է {@`0}, այսինքն` զրոյական միլիվայրկյան ժամանակային նշանը: Այնուհետև հում տվյալների տողերն ուղարկելիս էսքիզն օգտագործում է

plot_1_var = analogRead (A0); // կարդալ մուտքագրումը սյուժեի // plot_2_var սյուժեի համար ….

այնպես, որ տվյալների հետ ուղարկված միլիվայրկյան ժամկետային նշանը սկսվի 0 -ից և ավելանա մինչև 49,7 օր: Եթե շարունակաբար կապված լինեք 49.7 օր, ապա կտեսնեք, որ սյուժեն հետընթաց է թռչում 50 ֆունտով: 49,7 օրը մեկ անգամ անջատվելն ու նորից միանալը խուսափում է դրանից:

Ամսաթվի/ժամի սյուժեի երրորդ մասը սյուժեի հաղորդագրությունն է:

} else if ('A' == cmd) {// օգտվողը սեղմված է `'A0 ամսաթիվ/ժամ գծագիր' // Menu_1- ի հիմնական ընտրացանկում // վերադառնալ գծապատկերների հաղորդագրություն: parser.print (F ("{= A0 վոլտ ~ E HH: մմ: սս | ամսաթիվ | A0 ~~~ վոլտ ||}"));

Երբ օգտվողը սեղմում է «A0 ամսաթիվ/ժամ գծապատկերը» կոճակը, pfodApp- ն ուղարկում է {A} cmd- ը pfodDevice- ին, իսկ pfodDevice- ը պատասխանում է գծապատկերային հաղորդագրությամբ, {=… {= A0 վոլտ ~ E HH: մմ: ss | ամսաթիվ | A0 ~~~ Վոլտ ||} որը պարունակում է X առանցքի ձևաչափ E HH: մմ: սս

Այստեղ ընդունելի են Java SimpleDateFormat ձևաչափերը: pfodApp Data Logging and Plotting- ը և pfodSpecification.pdf- ն ավելի շատ մանրամասներ ունեն սյուժեի հաղորդագրության վերաբերյալ:

Քայլ 7: Ձեր համակարգչի վրա ամսաթվի/ժամի գծագրերի վերարտադրումը

Ձեր համակարգչում ամսաթվի/ժամի գծագրերի վերարտադրում
Ձեր համակարգչում ամսաթվի/ժամի գծագրերի վերարտադրում
Ձեր համակարգչում ամսաթվի/ժամի գծագրերի վերարտադրում
Ձեր համակարգչում ամսաթվի/ժամի գծագրերի վերարտադրում
Ձեր համակարգչում ամսաթվի/ժամի գծագրերի վերարտադրում
Ձեր համակարգչում ամսաթվի/ժամի գծագրերի վերարտադրում

Լռելյայնորեն, pfodApp- ը մուտքագրում է բոլոր մուտքային հում տվյալները ձեր բջջայինի մատյանում, եթե անջատված չեք այս մուտքը կապի խմբագրման էկրանին, տես pfodAppForAndroidGettingStarted.pdf

Երբ խմբագրում եք pfodApp- ը, կարճ հաղորդագրությունը ցուցադրվում է տեղեկամատյան ֆայլի գտնվելու վայրի և անվան հետ, օրինակ. /pfodAppRawData/pfod_bluefruit52.txt Այդ ֆայլը CSV ձևաչափով է ՝ ստորակետով սահմանազատված, և այն համակարգչին փոխանցելուց հետո (տե՛ս pfodAppForAndroidGettingStarted.pdf փոխանցման ընտրանքները), կարող եք բացել այն աղյուսակում ՝ տվյալները գծելու համար:

Ահա տեղեկամատյան ֆայլի առաջին մի քանի տողերը:

// pfodApp V3.0.360, տեղական ժամանակ, UTC, mS մեկ օրում, pfod bluefruit52 ընթացիկ ժամանակը (mS), pfod bluefruit52 ընթացիկ ժամանակը, // միացված է ՝ 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,, Վերևում կարող եք տեսնել «տեղական» և UTC ժամանակը, երբ pfodApp- ը միացրել է Feather52- ին և ներկա ժամանակը mS- ում, որը Feather52- ը հայտնել է {@..} պատասխանի միջոցով: Վերջին սյունակը դատարկ է, քանի որ չկա RTC կամ GPS և, հետևաբար, փետուրի կողմից yyyy/MM/dd ժամանակի ընթացիկ ժամանակը չի հաղորդվել:

Տվյալներն անցած ժամանակի դեմ գծելու համար միլիվայրկյան ժամանակային կնիքից հանեք ընթացիկ ժամանակը (mS) և այնուհետ բաժանեք օրական արժեքի mS- ի: Ահա աղյուսակը `ավելացված բանաձևով և արդյունքի գծապատկերով: Ստորև ներկայացված աղյուսակը (pfod_bluefruit52.xls) հանդիսանում է OpenOffice աղյուսակ, որը պահվում է Excel ձևաչափով:

OpenOffice- ում սյուժեն ցրված սյուժե է, և սյուժեի x առանցքը ձևաչափվել է HH: MM: SS Նշում. Աղյուսակի ամսաթվի/ժամի ձևաչափերը նույնը չեն, ինչ pfodApp- ի կողմից օգտագործվող սյուժեի ձևաչափերը: Օրինակ, pfodApp- ում, MM- ն ամիսներ են, իսկ մմ -ը `րոպեներ:

Ամսաթվի և ժամի դեմ գծագրելու համար հարկավոր է միայն ավելացնել աղյուսակի ժամանակին միացման ժամանակը և վերաբեռնել: (pfod_bluefruit52_date.xls)

Նշում. Տեղական ժամանակը և UTC- ն ներմուծվել են որպես տեքստ իմ աղյուսակում, այնպես որ ես պետք է հեռացնեի առաջատարը `դրանք բանաձևում օգտագործելուց առաջ:

Քայլ 8. Ինչպես խուսափել 49.7 օրվա Millis () սահմանաչափից և ինչու չպետք է դա անել

Ինչպես նշվեց վերևում, ինչպես է pfodApp- ը գծում ամսաթիվը/ժամը millis () -ից: Կոդի մի քանի տող կարող է խուսափել դրանից, բայց խորհուրդ չի տրվում:

Նախ, ինչպես խուսափել շրջապատումից: Ավելացրեք մեկ այլ անստորագիր int փոփոխական ՝ հետևելու համար, թե քանի անգամ են դրոշմակնիքները պտտվում և տպում համակցված արդյունքը HEX- ով:

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… Plot_1_var = analogRead (A0); // կարդալ մուտքագրումը սյուժեի // plot_2_var սյուժեի համար if (timeStamp <lastTimeStamp) {// timeStamp- ը վերադարձվեց 0 mSwrapCount ++; // ավելացնել մեկը հաշվելու համար} lastTimeStamp = timeStamp; parser.print («0x»); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // ժամանակը HEX- ում միլիվայրկյաններով….

{@.. պատասխանը վերադարձնելիս մաքրեք նաև mSwrapCount- ը:

// կարգավորել {@} հարցումը} այլ դեպքում, եթե ('@' == cmd) {// pfodApp- ը պահանջել է 'ընթացիկ' ժամանակը plot_mSOffset = millis (); // գրավել ընթացիկ միլիարդները որպես փոխհատուցվող հում տվյալների ժամանակային նշաններ mSwrapCount = 0; // մաքուր փաթաթման հաշվարկ: parser.print (F ("{@` 0} ")); // վերադարձնել «0 -ը որպես« ընթացիկ »հումքի տվյալների միլիվայրկյաններ

Estամկետային նշանները այժմ կտան «ճիշտ» արժեքը հաջորդ 40.7 օրվա համար * 65536 ~ = 7308 տարի:

pfodApp- ը ինքնաբերաբար կվերածի գծագրման վեցանկյուն ժամկետները և դրանք կգրանցի այնպես, ինչպես ստացվել է, այսինքն ՝ վեցանկյուն: (OpenOffice) աղյուսակում դուք օգտագործում եք այս բանաձևը ՝ A2 տողում վեցանկյուն տողը փոխելու համար mS (որտեղ A1- ն ցանկացած դատարկ բջիջ է) = HEX2DEC (ՓՈՓՈԽՈԹՅՈ (Ն (A2; 1; 2; A1))

Ինչու չեք ուզում դա անել

Ինչպես ցույց է տրված վերևում, հեշտ է երկարացնել mS- ի ժամկետները մինչև 50 օրից ավելի: Այնուամենայնիվ, դուք հավանաբար չեք ուզում դա անել, քանի որ դրանք դառնում են ավելի ճշգրիտ: Տիպիկ 16 ՄՀց բյուրեղը, որն օգտագործվում է միլիս () արդյունքները ստեղծելու համար, ունի միկրո, ունի pp 50ppm ճշգրտություն (մասեր միլիոնից): Սա նշանակում է, որ 49.7 օր հետո միլիվայրկյան ժամկետային նշանը կարող է դուրս գալ 3 ½ րոպեով, և դա անտեսում է ջերմաստիճանի ազդեցությունը բյուրեղների ճշգրտության վրա:

Միացման կարճ ժամանակահատվածների ընթացքում այս ճշգրտությունը խնդիր չէ, քանի որ յուրաքանչյուր վերամիացման դեպքում {@.. պատասխանը նորից համաժամացնում է միլիվայրկյան ժամանակային նշանը բջջայինի ամսաթվի/ժամի հետ: Այնուամենայնիվ, եթե ցանկանում եք երկար ժամանակ կապ ունենալ (օրեր) և անընդհատ գրանցել տվյալները, ապա պետք է օգտագործեք ավելի ճշգրիտ բան, քան ներկառուցված միլիլոսը (), օրինակ ՝ RTC կամ GPS մոդուլը:

Քայլ 9: Օգտագործելով RTC (իրական ժամանակի ժամացույց)

Օգտագործելով RTC (իրական ժամանակի ժամացույց)
Օգտագործելով RTC (իրական ժամանակի ժամացույց)
Օգտագործելով RTC (իրական ժամանակի ժամացույց)
Օգտագործելով RTC (իրական ժամանակի ժամացույց)

Կան մի շարք RTC մոդուլներ, որոնցից առավել ճշգրիտներից մեկը DS3231 է, օրինակ. Adafruit- ի DS3231 մոդուլը: Հայտարարված ճշգրտությունը +/- 2ppm 0-ից 40C- ից բարձր է: այսինքն ~ +/- 5 վրկ/ամիս:

Եթե ցանկանում եք գծել տվյալներ, որոնք ունեն ամսաթվի/ժամի ժամկետային նշաններ, օրինակ. 2019/04/19 20: 4: 34, ապա դուք պետք է փոփոխեք {@ պատասխանը ՝ ընթացիկ ամսաթիվը/ժամը վերադարձնելու համար, օրինակ. {@«0 ~ 2019/4/19 3: 33: 5}. Ահա մի քանի նմուշային փոփոխություններ, որոնք պետք է կիրառվեն pfodDesigner- ի ստեղծած ուրվագծի վրա ՝ RTC մոդուլ օգտագործելու համար, ենթադրելով, որ դուք օգտագործում եք RTClib գրադարանը և ավելացրել եք կոդը RTC մոդուլը նախաստորագրելու համար:

// կարգավորել {@} հարցումը} այլ դեպքում, եթե ('@' == cmd) {// pfodApp- ը պահանջել է 'ընթացիկ' ժամանակը plot_mSOffset = millis (); // գրավել ընթացիկ միլիարդները որպես փոխհատուցված rawdata timestamps parser.print (F ("{@" 0 "}); // վերադարձնել« 0 -ը որպես «ընթացիկ» հումքի տվյալների միլիվայրկյանների parser.print ('~'); // սկսել տող ամսաթիվ/ժամ DateTime այժմ = rtc.now () sendDateTime (& այժմ); // ուղարկել yyyy/M/d/H: m: s parser.print, փոխանցել հասցեն և որպես arg. parser.print ('}'); // {@ պատասխանի ավարտը, օրինակ ՝ {@ `0 ~ 2019/4/19 3: 33: 5}…

// ուղարկել ամսաթվի ժամանակը վերլուծիչին printvoid sendDateTime (DateTime* dt) {parser.print (dt-> տարի (), DEC); parser.print ('/'); parser.print (dt-> ամիս (), DEC); parser.print ('/'); parser.print (dt-> օր (), DEC); parser.print (''); parser.print (dt-> ժամ (), DEC); parser.print (':'); parser.print (dt-> րոպե (), DEC); parser.print (':'); parser.print (dt-> երկրորդ (), DEC); }

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // վերագործարկել գծապատկերի տվյալների ժմչփը, առանց տեղաշարժի // նշանակել արժեքներ ձեր օղակի փոփոխականներից կամ կարդալ ADC մուտքերը plot_1_var = analogRead (A0); // կարդալ մուտքագրումը հողամասին // plot_2_var սյուժեն Թաքցված է, որպեսզի այստեղ տվյալներ չտրվեն // plot_3_var սյուժեն Թաքցված են, որպեսզի այստեղ տվյալներ չտրվեն // ուղարկեք սյուժեի տվյալներ CSV ձևաչափով DateTime now = rtc.now (); sendDateTime (և այժմ); // ուղարկել yyyy/M/d/H: m: s parser.print- ին, փոխանցել հասցեն և որպես arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Հողամաս 2 -ը թաքնված է: Տվյալներ չեն ուղարկվել: parser.print (','); // Հողամաս 3 -ը թաքնված է: Տվյալներ չեն ուղարկվել: parser.println (); // CSV տվյալների գրանցման ավարտը}}

{@ Պատասխանի 2019/4/19 3: 33: 5 հատվածը թույլ է տալիս pfodApp- ին իմանալ, թե ինչ է կարծում pfodDevice- ը ընթացիկ ամսաթիվը և ժամը: Այնուհետև ձեր ուրվագիծը կարող է տվյալներ ուղարկել yMd Hms ժամանակային նշաններով և pfodApp- ը դրանք կդարձնի կամ որպես կապի ժամանակից անցած ժամանակ, կամ որպես ամսաթիվ և ժամ ՝ կախված ձեր նշած X առանցքի ձևաչափից:

Ամսաթվի և ժամի դեմ գծագրելիս pfodApp- ի գծապատկերային ռեժիմը շտկում է RTC- ի ցանկացած «շեղում» ՝ համեմատելով pfodDevice- ի հաղորդած ընթացիկ ժամանակը բջջայինի ներկայիս ժամանակի հետ: Այս ուղղումը նաև կարգավորում է RTC- ի ՝ ձեր բջջայինի տեղական ժամային գոտուց այլ ժամային գոտի սահմանելը: millis () timestamps շարունակում են աշխատել, ինչպես Arduino- ի millisecond timestamps- ում, վերը նշված 5 -րդ քայլում:

Ահա սենյակի ջերմաստիճանի օրինակ աղյուսակը 8 օրվա ընթացքում, Office_Temp.xls Երբ տեղեկամատյան ֆայլը ներմուծվեց, առաջին սյունակը նշվեց որպես YMD ՝ տեքստը ամսաթվի/ժամի փոխարկելու համար: Դուք դեռ պետք է հեռացնեք առաջատարը տեղական ժամանակից, UTC- ից և Office Temp- ի ընթացիկ ժամանակի գրառումներից, որպեսզի աղյուսակը դրանք մեկնաբանի որպես ամսաթվեր և ժամեր:

Նույն սյուժեն ստանալու համար, որը ցույց է տալիս pfodApp- ը, դուք պետք է հաշվարկեք «Ուղղված ամսաթիվ/ժամ»: Այս դեպքում RTC- ի ժամանակը 2 վայրկյանով հետ է մնում բջջայինի տեղական ժամանակից, այնպես որ յուրաքանչյուր RTC- ի ժամանակացույցը ավելացվում է (տեղական ժամանակ - Office Temp ընթացիկ ժամանակ) `իրական տեղական ժամանակը ստանալու համար:

Անցած ժամանակացույցերի համար ստեղծեք նոր սյունակ, որը պարունակում է (ամսաթիվ/ժամացույցի նշան-Office Time ընթացիկ ժամանակը) և օգտագործեք այն որպես X առանցք գծապատկերում (Office_TempElapsed.xls) Իրականում այս դեպքում pfodApp- ն ավելի գեղեցիկ անցած ժամանակացույց է արտադրում օրերով ժամ: րոպե: վրկ

Քայլ 10: Օգտագործելով GPS մոդուլ

GPS մոդուլի օգտագործումը նման է RTC մոդուլին, միայն թե GPS մոդուլները հասանելի են միլիվայրկյաններով, տարիները սկսվում են 2000 թվականից, և ժամանակը բացակայում է UTC թռիչքային վայրկյաններից (տե՛ս https://tycho.usno.navy.mil/leapsec.html) GPS- ի ամսաթիվը և ժամը ներկայումս 18 վայրկյան առաջ են UTC- ից, 2018 թվականի հունվարի դրությամբ:

Adafruit Ultimate GPS- ի համար Adafruit GPS գրադարանը, ի տարբերություն RTClib- ի, չի ավելացնում 2000 տարվա փոխհատուցումը GPS տարիներին, այնպես որ այն պետք է ավելացվի, երբ ուղարկում եք ամսաթիվը և ժամը: Նաև չնայած GPS գրադարանը ապահովում է միլիվայրկյաններ, որոնք ունեն շատ լավ երկարաժամկետ ճշգրտություն, դրանք շատ ճշգրիտ չեն: GPS- ի ժամանակի թարմացումներն ամեն 100mS- ն են միայն մեկ անգամ, այնուհետև լրացուցիչ ուշացում է ստացվում սերիական տվյալների դանդաղ 9600 բաուդ արագությամբ և ևս մեկ ուշացում դրանց վերլուծման մեջ: Դրանք բոլորը ավելացնում են միլիվայրկյան ճշգրիտ տվյալների ընթերցումների ժամանակային նշման ժամանակ:

Ահա մի քանի նմուշային փոփոխություններ, որոնք պետք է կիրառվեն pfodDesigner- ի ստեղծած ուրվագծում ՝ GPS մոդուլ օգտագործելու համար, ենթադրելով, որ օգտագործում եք Adafruit- ի GPS գրադարանը և ավելացրել եք հաղորդագրությունները GPS օբյեկտի մեջ ընդունելու և վերլուծելու ծածկագիրը:

// կարգավորել {@} հարցումը} այլ դեպքում, եթե ('@' == cmd) {// pfodApp- ը պահանջել է 'ընթացիկ' ժամանակը plot_mSOffset = millis (); // գրավել ընթացիկ միլիարդները որպես փոխհատուցված rawdata timestamps parser.print (F ("{@" 0 "}); // վերադարձնել« 0 -ը որպես «ընթացիկ» հումքի տվյալների միլիվայրկյանների parser.print ('~'); // սկսել տող ամսաթիվ/ժամ sendDateTime (& GPS); // ուղարկել yyyy/M/d/H: m: s parser.print, փոխանցել հասցեն և որպես arg. parser.print ('}'); // {@ պատասխանի ավարտը, օրինակ. {@«0 ~ 2019/4/19 3: 33: 5}…

// ուղարկել ամսաթիվը վերլուծիչին printvoid sendDateTime (Adafruit_GPS* gps) {parser.print (F ("20"); // 20.. տարի parser.print (gps-> տարի, DEC); parser.print ('/ '); parser.print (gps-> ամիս, DEC); parser.print ('/'); parser.print (gps-> օր, DEC); parser.print (' '); parser.print (gps- > ժամ, DEC); parser.print (':'); parser.print (gps-> րոպե, DEC); parser.print (':'); parser.print (gps-> երկրորդ, DEC); // parser.print (''.

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // վերագործարկել գծապատկերի տվյալների ժմչփը, առանց տեղաշարժի // նշանակել արժեքներ ձեր օղակի փոփոխականներից կամ կարդալ ADC մուտքերը plot_1_var = analogRead (A0); // կարդալ մուտքագրումը հողամասին // plot_2_var սյուժեն Թաքնված է, որպեսզի այստեղ տվյալներ չտրվեն // plot_3_var սյուժեն Թաքցված են, որպեսզի այստեղ տվյալներ չտրվեն // ուղարկեք հողամասի տվյալներ CSV ձևաչափով sendDateTime (& GPS); // ուղարկել yyyy/M/d/H: m: s parser.print- ին, փոխանցել հասցեն և որպես arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Հողամաս 2 -ը թաքնված է: Տվյալներ չեն ուղարկվել: parser.print (','); // Հողամաս 3 -ը թաքնված է: Տվյալներ չեն ուղարկվել: parser.println (); // CSV տվյալների գրանցման ավարտը}}

Ամսաթվի և ժամի դեմ գծագրելիս pfodApp- ն ինքնաբերաբար ուղղում է թռիչքային վայրկյանները: 2018 թվականի հունվարի դրությամբ GPS ժամանակը UTC- ից 18 վայրկյան առաջ է: pfodApp- ը դա ուղղում է ՝ համեմատելով GPS- ի կողմից վերադարձված ամսաթիվը/ժամը, {@ պատասխանի միջոցով, բջջայինի UTC ամսաթվի և ժամի հետ: PfodApp տեղեկամատյանից աղյուսակներում սյուժեներ ստեղծելը նույնն է, ինչ վերը նշված RTC մոդուլների համար: GPS- ի ժամանակային նշանների վրա (տեղական ժամանակ - Office Temp ընթացիկ ժամանակը) ավելացնելը շտկում է թռիչքային վայրկյանները:

millis () timestamps շարունակում են աշխատել, ինչպես Arduino- ի millisecond timestamps- ում, վերը նշված 5 -րդ քայլում:

Քայլ 11: Եզրակացություն

Android բջջային հեռախոսում pfodApp- ի օգտագործումը թույլ է տալիս տվյալները գծել ամսաթվի և ժամի կամ անցած ժամանակի համեմատ ՝ օգտագործելով միայն Arduino- ի millis () գործառույթը: Օգտագործելով pfodApp տեղեկամատյան ֆայլը, կարող եք նորից արտադրել այս ամսաթվի/ժամի գծագրերը աղյուսակում: Եթե ձեր Arduino նախագիծը ունի RTC մոդուլ, կարող եք մուտքագրել և գծագրել ամսաթիվը և RTC ժամային նշանները ՝ ինքնաբերաբար ուղղելով RTC- ի «շեղումը»: Եթե դուք Arduino նախագիծն ունի GPS մոդուլ, կարող եք մուտք գործել և գծագրել դրա չափազանց ճշգրիտ ժամկետները, և pfodApp- ը ինքնաբերաբար կուղղի GPS- ի բացակայող թռիչքային վայրկյանները:

Բոլոր դեպքերում ձեր Arduino նախագծի հում տվյալները գրանցվում են այնպես, ինչպես ստացվել են, չշտկված: Այնուամենայնիվ, pfodApp տեղեկամատյանը ներառում է լրացուցիչ տվյալներ, որոնք թույլ կտան ձեզ նորից ուղղել ներբեռնված տեղեկամատյանից աղյուսակում այս ուղղումները:

Android կոդավորում չի պահանջվում: Սյուժեի ձևաչափերը բոլորը նշված են ձեր Arduino էսքիզի փոքր տեքստային տողերով: Անվճար pfodDesigner- ը ստեղծում է Arduino- ի տվյալների ամբողջական մուտքագրում և գծագրեր ուրվագծերի համար Arduino տախտակների լայն տեսականիով, որոնք կապվում են WiFi- ի, դասական Bluetooth- ի, BLE- ի և SMS- ի միջոցով:

Խորհուրդ ենք տալիս: