Բովանդակություն:
- Քայլ 1: Եղանակի ցուցիչ
- Քայլ 2: ՌԴ ընդունիչ
- Քայլ 3: ՌԴ ալեհավաքներ
- Քայլ 4: ՌԴ հաղորդակցության արձանագրություն
- Քայլ 5: Timeամանակի տվյալներ
- Քայլ 6: Timeամային գոտիներ
- Քայլ 7: Սխեմատիկ
- Քայլ 8: LCD ծրագրակազմ
- Քայլ 9: Clամացույցի ծրագրակազմ
- Քայլ 10. Եղանակի ծրագրակազմ
- Քայլ 11: Disուցադրում
Video: Arduino 3-ը 1-ում Timeամանակի և եղանակի ցուցադրում. 11 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Հետևեք հեղինակի ավելին ՝
Ինձ դուր են գալիս PIC միկրոկառավարիչները և ինձ դուր է գալիս ծրագրավորումը հավաքման լեզվով: Փաստորեն, վերջին մի քանի տարիների ընթացքում ես այդ համադրության հիման վրա տեղադրել եմ մոտ 40 նախագիծ իմ կայքում: Վերջերս ես որոշ մասեր էի պատվիրում ԱՄՆ -ի իմ ամենասիրած վաճառողներից մեկից և նկատեցի Arduino Nano- ն ՝ ծրագրավորման մալուխով, ընդամենը 1,20 դոլարով ավելի, քան մերկ ATMEGA328 պրոցեսորային չիպը: Այսպիսով, ես գնեցի դրանցից մի քանիսը: Այնուհետև ես ներբեռնեցի Arduino IDE- ն և մաքրեցի «C ++» ծրագրավորման իմ հիշողությունը:
Այս նախագիծը ժամացույցի խառնուրդ է, որն օգտագործում է GPS- ը ժամանակի համար և ՌԴ ընդունիչ, որը վերծանում է եղանակային հաղորդագրությունները սովորական AcuRite սենսորից: Արդյունքը փոքր մասշտաբի ժամանակի և ջերմաստիճանի ցուցադրում է: GPS ժամացույցը և եղանակի ռեժիմը կարգավորվում են որպես առանձին ֆայլեր, այնպես որ հեշտ է մտնել հիմնական առօրյան և կարգավորել այն, որպեսզի կատարի միայն ժամացույցի գործառույթը կամ պարզապես եղանակի գործառույթը: Պարզապես մեկնաբանեք համապատասխան «#սահմանումը» հիմնական առօրյայի վերևում, եթե ցանկանում եք միայն գործառույթներից մեկը:
Եթե երկու գործառույթներն էլ օգտագործվում են, ապա LCD- ի վերին տողում ցուցադրվում է տեղական ժամանակը, իսկ LCD- ի ներքևի տողում `խոնավությունը և ջերմաստիճանը ինչպես elsելսիուսի, այնպես էլ Ֆարենհեյթի ջերմաստիճանում: Եթե օգտագործվում է միայն ժամացույցի գործառույթը, ապա վերին տողում ցուցադրվում է տեղական ժամանակը, իսկ ներքևում ՝ UTC: Եթե օգտագործվում է միայն եղանակի գործառույթը, ապա վերին տողում ցուցադրվում է առաջին ստացված սենսորը, իսկ ներքևում `ցանկացած այլ ստացված սենսոր: Ես ավելացրի այդ հնարավորությունը, քանի որ ունեմ եղանակի երկու տվիչ:
Քայլ 1: Եղանակի ցուցիչ
Այստեղ օգտագործվող եղանակային սենսորը AcuRite- ը ջերմաստիճանի և խոնավության մասին տեղեկատվություն է ուղարկում ամեն 16 վայրկյանը մեկ: Հետևի վրա այն ցույց է տալիս 000592TXR մոդելի համարը, բայց այն սովորաբար գովազդվում է որպես 06002M մոդել: Այս սենսորը օգտագործվում է եղանակային կայանների շատ տարբեր մոդելների կողմից, այնպես որ այն հեշտ է գտնել, և ես կարողացա դրանք ձեռք բերել eBay- ում 20 դոլարից ցածր գնով: AcuRite- ն վաճառում է նման տեսքի սենսորներ իրենց որոշ եղանակային կայանների համար, սակայն դրանք կարող են հավատարիմ լինել կամ չկատարել նույն հաղորդակցության արձանագրությանը: Համացանցում կա որոշակի նշում, որ 00606 ջերմաստիճանի միայն սենսորը օգտագործում է հաղորդագրության նույն ձևաչափը, բայց խոնավության անվավեր բայթով:
Ինչպես երևում է վերևում ցուցադրված առաջին ալիքի ձևում, եղանակային հաղորդագրություններն ուղարկվում են պոռթկումներով ՝ հաջորդական հաղորդագրությունների միջև 2 մմ բացթողումով: Երկրորդ ալիքի ձևը, որը ցույց է տրված վերևում, ընդլայնում է մեկ հաղորդագրության մի մասը, որպեսզի տեսնի բիտերի տևողությունը և օրինաչափությունները: Կան չորս համաժամացման բիթեր, որոնք մոտ 600us բարձր են, որին հաջորդում է 600us ցածր: Տվյալների բիթերը ներկայացված են 400us բարձր, որին հաջորդում է 200us ցածր (1) կամ 200us բարձր, որին հաջորդում է 400us ցածր (0):
Հաղորդագրության ձևաչափը բաղկացած է 7 բայթ տվյալներից: Առաջին երկու բայթերը սենսորի ID- ն են և դրանք չեն փոխվում (այսինքն. Այն չի օգտագործում շարժական ծածկագիր): Վերջին բայթը առաջին վեց բայթերի պարզ հավելիչ ստուգիչ գումարն է: Երրորդ բայթը մարտկոցի մակարդակի ցուցանիշ է և միշտ պետք է լինի 44 վեցանկ, եթե մարտկոցը լավ է: Չորրորդ բայթը խոնավությունն է և այն 0-ից 99-ի միջև չմշակված արժեք է: Կարևոր է հաշվի առնել, որ 4, 5 և 6 բայթերի ամենակարևոր բիթը պարիտետային բիթ է և չափման մաս չէ: արժեքները: 5-րդ և 6-րդ բայթերն են մասշտաբային ջերմաստիճանը (elsելսիուս), որի բայթ 5-ի ստորին 4 բիթերը համակցված են 6-ական ստորին 7 բիթերի հետ ՝ կազմելով 11-բիթանոց արժեք: Theերմաստիճանը միշտ ներկայացված է որպես դրական թիվ և բացասական է դառնում միայն այն դեպքում, երբ կիրառվում է մասշտաբավորումը: Մասշտացումը (C / 10) - 100 է: 10 -ի բաժանումը պահանջվում է, քանի որ ջերմաստիճանի լուծումը աստիճանի տասներորդն է: Հանումը պահանջվում է, քանի որ սենսորը 100 է ավելացնում փոխանցվող արժեքը դրական պահելու համար:
Քայլ 2: ՌԴ ընդունիչ
Այս նախագծի համար օգտագործվող ՌԴ մոդուլը RXB6 է: Դա գերհետերոդինային ընդունիչ է, ի տարբերություն պակաս ցանկալի գերվերածնիչ ընդունիչների: Եթե նայեք ՌԴ -ի էժան մոդուլներին, ապա կգտնեք, որ հաղորդիչ և ընդունիչ տախտակները հաճախ միավորված են: Այդ փաթեթավորված ընդունիչներից շատերը գերվերածնող տեսակներ են, ուստի նրանք հակված են ունենալ ավելի ցածր կատարողական բնութագրեր (ներառյալ միջակայքը), քան գերհետերոդինային ընդունիչները: Այս նախագծի համար մեզ անհրաժեշտ է միայն ընդունիչի մոդուլը, քանի որ մենք ազդանշաններ ենք ստանալու եղանակային տվիչների հաղորդիչից:
Քայլ 3: ՌԴ ալեհավաքներ
RXB6- ը չի գալիս ալեհավաքով: Դուք կարող եք բավականին էժան գնել որոշ պարույրներ, բայց նաև հեշտ է պատրաստել ձեր սեփական ալեհավաքը: Իրականում, տախտակի ցատկող մալուխը կարող է սահել մոդուլի ալեհավաքի քորոցի վրա, եթե չեք ցանկանում չափազանց շքեղ դառնալ: Իդեալում, ուղիղ մետաղալար ալեհավաքը կլինի 1/4 ալիքի երկարություն, որը աշխատում է մինչև 6,8 դյույմ: Սկզբում ես կատարեցի թռիչքի մետաղալարերի գործը և խնդիր չունեի վերցնել արտաքին սենսորը, չնայած էլեկտրոնիկայի արտադրամասը իմ նկուղում էր:
Մեկ այլ հնարավորություն է `պատրաստել ձեր սեփական պարուրաձև ալեհավաքը: Համացանցում դրա համար կան մի շարք ծրագրեր, բայց վերևում պատկերվածը այն է, ինչ ես պատրաստել եմ: Ես օգտագործեցի որոշ պինդ միջուկային մետաղալարեր Ethernet մալուխի կտորից և այն փաթաթեցի 5/32 դյույմանոց հորատման սահուն հատվածի շուրջը: Թողեք մեկուսացումը, բացառությամբ այն հուշման, որը կպչում է ՌԴ տախտակին: Ձեզ անհրաժեշտ կլինի 20 պտույտ: Կարող եք նաև օգտագործել 7/32 դյույմանոց փորվածք և փոխարենը փաթեթավորել 17 պտույտ: Սրանցից որևէ մեկը հավանաբար լավ կաշխատի այն տիրույթների համար, որոնք, ամենայն հավանականությամբ, կունենաք ձեր տվիչների համար: Իրական բանալին սկզբում լավ ՌԴ ընդունիչ ունենալն է: AcuRite տվիչներն ունեն նաև բավականին հզոր հաղորդիչներ:
Քայլ 4: ՌԴ հաղորդակցության արձանագրություն
Գոյություն ունեն տվյալների փոխանցման մի քանի տարբեր մոդուլյացիոն տեխնիկա, սակայն այս սենսորներն օգտագործում են ամենապարզը ՝ OOK (անջատում-անջատում) կամ ASK (ամպլիտուդայի հերթափոխ-բանալին): Քանի որ այս օրինակում մենք գործ ունենք 0/1 տվյալների բիթերի հետ, ամպլիտուդը լրիվ միացված է կամ լրիվ անջատված: Այսպիսով, մեր նպատակների համար OOK- ը և ASK- ը նույնն են, որովհետև OOK- ը նշանակում է, որ ՌԴ փոխադրողը կա՛մ միացված է, կա՛մ լրիվ անջատված: Հաղորդագրության ձևաչափը ընդհանուր առմամբ սահմանվում է փոխանցող սարքի արտադրողի կողմից, և նրանք կարող են օգտագործել գրեթե ցանկացած փոխանցման արագություն, բիթերի ձևաչափման ցանկացած ոճ և հաղորդագրության ցանկացած երկարություն: 433-ՄՀց հաճախականությունը խցանված է փոխանցման տուփերով ՝ խելացի հաշվիչների և այլնի համար, այնպես որ ծրագրակազմը պետք է կարգավորվի ՝ զտելու համար միայն այն հաղորդագրության ձևաչափի համար, որը մենք ցանկանում ենք օգտագործել:
Քայլ 5: Timeամանակի տվյալներ
Ես օգտագործում եմ էժան GPS սարք, որպեսզի ստանամ ժամանակի ճշգրիտ տվյալներ, որոնք ինքնաբերաբար կվերագործարկվեն հոսանքի անջատումից հետո: Ես ունեմ մի քանի GPS միավոր (առանց դիսփլեյների), որոնք թողարկում են ստանդարտ NMEA նախադասությունները, բայց իմ ունեցած ամենափոքրն ու ամենաէժանը NEO-6M- ն է: NEO-6M մոդուլը հեշտ է միանում Arduino- ին, քանի որ այն օգտագործում է TTL մակարդակի սերիական պորտ: Միակ իրական տարբերությունն այն է, որ NMEA ստանդարտը սահմանում է 4800 բաուդ սերիայի արագություն, սակայն NEO-6M- ը կանխադրված է 9600 բաուդ: Դուք կարող եք գործարկել անվճար «u-center» ծրագիրը ՝ փոխելու բաուդ արագությունը, բայց ես այն թողեցի գործարանային լռելյայն: Կա նաև անվճար օգտակար ծրագիր `GPSInfo (տեղադրված է Globalsat- ի կողմից), որը շատ հարմար է համակարգչում GPS տեղեկատվությունը դիտելու համար: Դուք կարող եք GPS միավորը միացնել USB- ից TTL ստանդարտ մալուխին `այն ստուգելու կամ համակարգչի միջոցով կարգավորելու համար: Հիշեք, որ մոդուլի GPS չիպը իրականում աշխատում է 3.3 վոլտ (ներկառուցված լարման կարգավորիչի միջոցով), այնպես որ, եթե ցանկանում եք միանալ իր RXD նավահանգստին, ապա պետք է մակարդակը փոխեք 5 վոլտից: TXD նավահանգիստը կարող է միանալ անմիջապես Arduino- ին կամ համակարգչին:
Քայլ 6: Timeամային գոտիներ
GPS- ի ժամանակը ցուցադրելը հեշտ բան է, քանի դեռ ցանկանում եք ցուցադրել UTC (Համընդհանուր ժամանակի համակարգված): NMEA նախադասությունները կազմված են ASCII նիշերից, որոնք կարող են ուղղակիորեն մուտքագրվել LCD- ին: Portionամանակի մասը գտնվում է HHMMSS. FF ձևաչափով (ժամ, րոպե, վայրկյան և կոտորակային վայրկյան): Մեր ժամացույցի համար կոտորակային մասը օգտակար չէ, այնպես որ այն ամենը, ինչ մեզ պետք է լուծել, վեց նիշ է: Խնդիրն այն է, որ դուք պետք է փոխարկեք ձեր տեղական ժամանակը և 12-ժամյա AM/PM ձևաչափի, եթե դա ցանկանում եք: Բայց երբեմն խնդիրներն այն են, ինչը կյանքը դարձնում է հետաքրքիր, ուստի ծրագրաշարի այդ հատվածն իրականում հենց դրանում է:
Ինչ վերաբերում է ժամային գոտիներին, ապա դուք կարող եք մտածել, որ դրանցից պարզապես 24-ը կլինեն, որոնցից 12-ը UTC- ի գտնվելու վայրից արևելք (+ գոտիներ) և 12-ը UTC- ի գտնվելու վայրից արևմուտք (- գոտիներ): Փաստորեն, կան մի քանի տարօրինակ ժամեր, որոնք կոտորակային ժամեր են և զույգեր, որոնք գերազանցում են 12 ժամվա «սահմանը»: Եթե դուք պատահում եք, որ ապրում եք այդ տարածքներից մեկում, ես ներողություն եմ խնդրում, քանի որ իմ ծրագրակազմը կազմում է միայն ամբողջ 24 ժամյա գոտիները: Կան նաև մեզանից ոմանք, ովքեր օգտագործում են ցերեկային ժամերը տարվա մի մասը, բայց դա ինքնաբերաբար չի հաշվառվում ծրագրակազմում: Դա կպահանջի ապագա ամսաթվերի որոնման աղյուսակ, ծրագրակազմի լրացուցիչ բարդություն և ծրագրակազմի թարմացման անհրաժեշտություն, եթե տարվա անցման շաբաթները փոխվեն: Փոխարենը, ապարատը օգտագործում է ակնթարթային կոնտակտային անջատիչ ՝ ժամային գոտու հեշտ կարգավորումը (UTC օֆսեթ) թույլ տալու համար:
Քայլ 7: Սխեմատիկ
Սխեմատիկան ցուցադրվում է վերևում և ներառում է 1602 LCD- ի 4-բիթանոց ինտերֆեյսի միացումները: ՌԴ ստացողի սերիական տվյալները թվային տրամաբանության մակարդակում են, այնպես որ այն ուղղակիորեն միացված է Arduino- ի տվյալների մուտքագրման կապումներից մեկին: Քորոցը ծրագրակազմում կազմաձևված է `ընդհատման-փոփոխման գործառույթ կատարելու համար, որպեսզի կարողանանք չափել զարկերակի լայնությունները: GPS TXD ելքն ուղղակիորեն միացված է Arduino RX մուտքին:
Օգտագործվում է երկու անջատիչ: Ինչպես նշվեց ավելի վաղ, ակնթարթային շփման անջատիչը թույլ է տալիս կարգավորել UTC անջատումը: Անջատիչը կարող է սեղմվել ցանկացած պահի `սահմանված ռեժիմ մուտք գործելու համար: Սկզբում էկրանին կցուցադրվի «+77» անվավեր UTC օֆսեթ: UTC- ի օֆսեթ կարգավորման հրահանգների համար դիմեք «ockամացույցի ծրագրակազմ» բաժին:
Երկրորդ անջատիչը միացման/անջատման պարզ անջատիչ է: «Անջատված» դիրքում ժամանակը կցուցադրվի 12-ժամյա ձևաչափով (AM/PM), իսկ «միացված» դիրքում ՝ ժամանակը ՝ 24-ժամյա ձևաչափով: Այս անջատիչը կարող է փոխվել ցանկացած պահի ՝ ձևաչափերի միջև անցնելու համար:
Եթե ցանկալի է միայն ժամացույցի գործառույթը, ապա ՌԴ ստացողի մոդուլը պետք չէ միացնել: Եթե միայն եղանակային գործառույթն է ցանկալի, ապա GPS- ն ու երկու անջատիչները միացման կարիք չունեն:
Քայլ 8: LCD ծրագրակազմ
Ես հակված եմ օգտագործել երկու տեսակի LCD միջերեսներից մեկը: Մեկը ստանդարտ 4-բիթանոց ինտերֆեյսն է, իսկ մյուսը `3-լարային ինտերֆեյսը, որն օգտագործում է հերթափոխի գրանցամատյան: Ես նախագծեցի այդ ինտերֆեյսը, երբ աշխատում էի PIC- ի փոքր միկրոկոնտրոլերների հետ, որոնք ունեին սահմանափակ թվով I/O կապում: Այս նախագծի համար ես օգտագործել եմ 4-բիթանոց ինտերֆեյսը, բայց ունեմ իմ ընդհանուր LCD ֆայլը ՝ ընդհանուր Arduino LCD գրադարանից օգտվելու փոխարեն: Դա նվազեցնում է հիշողության սպառումը և կոդի բարդությունը, ինչպես նաև թույլ է տալիս ինձ փոփոխել ծածկագիրը այսպիսի նախագծերի համար:
Քայլ 9: Clամացույցի ծրագրակազմ
GPS միավորը թողարկում է ստանդարտ NMEA-0183 նախադասություններ, որոնք ASCII տողեր են, որոնք պարունակում են բազմազան տեղեկատվություն: Այս հավելվածի համար ես ընտրեցի GGA նախադասությունը ՝ ժամանակի մասին տեղեկատվություն ստանալու համար, քանի որ դա այն նախադասությունն է, որը ես օգտագործել էի GPS- ի նախորդ նախագծի համար: NMEA նախադասությունների տեղեկատվական դաշտերը բաժանվում են ստորակետներով, այնպես որ, GGA նախադասության վերնագրի հայտնաբերումից հետո, ծրագրաշարը սովորաբար հաշվում էր ստորակետներով և զանգահարում համապատասխան ռեժիմ GPS տեղեկատվության յուրաքանչյուր ցանկալի դաշտի համար: Այստեղ միայն ժամանակի մասին տեղեկատվությունն է անհրաժեշտ, և դա առաջին ստորակետից հետո դաշտում է, այնպես որ հաշվարկի կարիք չկա:
Վեց ժամանակային թվանշանները (HHMMSS) բուֆերացված են, այնուհետև մշակվում են բոլորի ստացումից հետո: GPS- ը կարող է վաղաժամ թողնել որոշ թերի հաղորդագրություններ, այնպես որ բուֆերային ռեժիմը ստուգում է, որ յուրաքանչյուր նիշ ASCII- ի թվային արժեք է: Եթե վատ նշան է ստացվել, հաղորդագրությունը հեռացվում է: Դա կարող է պատահել նաև հազվագյուտ դեպքերում նորմալ աշխատանքի ընթացքում, մասնավորապես, եթե սերիական նավահանգստի հաղորդակցությունը մի փոքր ընկնում է: Ես սա միայն մեկ անգամ եմ տեսել, և այն, ինչ տեղի ունեցավ, այն է, որ ժամանակը կանգ առավ մեկ վայրկյան, իսկ հետո ցատկեց երկու վայրկյանի փոխարեն:
Եթե ծրագրաշարը կազմաձևված է միայն ժամանակի ցուցադրման համար, ապա LCD- ի առաջին տողը կցուցադրի տեղական ժամանակը, իսկ երկրորդ տողը `UTC: UTC- ի համար ծրագրակազմն ուղղակի ASCII նիշերն ուղարկում է անմիջապես ցուցադրման ռեժիմին ՝ հաստ կետերով (:) համապատասխան տեղադրված:
UTC- ն տեղական ժամանակի փոխարկելու համար պետք է կիրառվի UTC օֆսեթը (ժամային գոտի): Քանի որ GPS- ից UTC ժամանակը ASCII ձևաչափով է, ծրագրակազմը ASCII ժամային նիշերը վերածում է տասնորդականի և այնուհետ ավելացնում UTC օֆսեթը: UTC օֆսեթը պահվում է որպես դրական BCD արժեք ՝ նշանի բիթով, ուստի այն նախ փոխակերպվում է ամբողջ արժեքի, այնուհետև մերժվում է, եթե նշանի բիթը դրված է: Տեղական ժամանակի ժամի արժեքը հաշվարկվելուց հետո որոնման աղյուսակը օգտագործվում է այն BCD- ի փոխարկելու համար, այնուհետև BCD- ը կրկին վերածվում է ASCII- ի `ցուցադրման համար: Որոնման աղյուսակը պետք է կարգավորի 24 ժամյա UTC ձևաչափը, ինչպես նաև +/- 12 ժամային գոտիները: Որպեսզի դա կատարվի, UTC- ի ժամը 0000 -ից 2300 -ը զբաղեցնում են աղյուսակի միջին 24 գրառումները `12 մուտքով առաջ և 12 գրառում` ժամային գոտիների հաշվառման համար: Մեկ սեղանը 12-ժամյա ձևաչափով է, այնպես որ ես ավելացրի նաև ցուցադրման AM/PM մասի որոնման աղյուսակը: Մյուս սեղանը 24-ժամյա ձևաչափով է: Ինչպես արդեն նշվեց, միացման/անջատման անջատիչը թույլ է տալիս ընտրել 12-ժամյա կամ 24-ժամյա ձևաչափ:
Initialամային գոտին EEPROM- ից վերցվում է սկզբնավորման ընթացքում և կարճ ցուցադրվում: Եթե այն գոնե մեկ անգամ չի սահմանվել, ապա կարգաբերման ռեժիմը կոչվում է: Կարգավորման ռեժիմը կարող է ցանկացած ժամանակ կանչվել ՝ սեղմելով պահի շփման անջատիչը: Կարգավորման ռեժիմը էկրանը կսկսի «UTC OFFSET +77»: Անջատիչի կարճ սեղմումը արժեքը կփոխի «-00» -ի: Եթե պահանջվում է դրական ժամային գոտի, ապա մեկ այլ կարճ սեղմումով արժեքը կփոխվի «+00» - ի: Երկար սեղմումով (> 1 վայրկյան) կարգավորումների ռեժիմը կտեղափոխվի հաջորդ քայլին: Այս պահին յուրաքանչյուր կարճ սեղմում կավելացնի ժամանակի արժեքը մինչև առավելագույնը 12. theանկալի ժամային գոտու հասնելուց հետո սեղմեք և պահեք անջատիչը ավելի քան 1 վայրկյան, ապա բաց թողեք այն: Այնուհետև ծրագրաշարը կպահպանի UTC արժեքը EEPROM- ում և հակիրճ կցուցադրի «OFFSET SAVED»: Եթե սխալ եք թույլ տալիս մուտքի ժամանակ, պարզապես դուրս եկեք, այնուհետև նորից սեղմեք անջատիչը `այն վերականգնելու համար:
NEO-6M- ը չի պահանջում դիրքի լավ ամրագրում ՝ ժամանակը թողարկելու համար, այնպես որ այն պետք է հաղորդագրություններ թողնի մեկ արբանյակ ստանալուն պես: Մինչ այդ էկրանը կարդալու է «ՏՎՅԱԼՆԵՐՈՎ»:
Քայլ 10. Եղանակի ծրագրակազմ
PIC միկրոկառավարիչը հնարավորություն ունի միացնել/անջատել ժմչփը ՝ օգտագործելով արտաքին զարկերակ: Այդ նույն մուտքային զարկերակը կարող է օգտագործվել նաև որպես արտաքին ընդհատում ՝ ազդանշանի իմպուլսի տևողության ընթերցման համար: Arduino- ն չունի այդ ճշգրիտ հնարավորությունը, այնպես որ ես օգտագործեցի փոփոխության ընդհատման գործառույթը: ՌԴ հաղորդագրության զարկերակի մի եզրին ընթացիկ միկրովայրկյան ժամանակը խնայում է ընդհատիչ կարգավորիչը: Հակառակ եզրին անցած ժամանակը հաշվարկվում է զարկերակի լայնությունը որոշելու համար:
Theրագրակազմն ունի «DEBUG» սահմանում, որը թույլ է տալիս ցուցադրել ստացված հաղորդագրությունների տվյալների հում ձևաչափը: Կա նաև սահման ՝ ՌԴ ընդունիչից սերիական հոսքի համար Arduino մուտքագրման քորոցը նշելու համար: Theրագրակազմը ստեղծվել է `այս սահմանման հիման վրա հաշվարկել համապատասխան ընդհատումների փոփոխման գրանցամատյանների կարգավորումները: Հաշվարկը գործում է միայն Arduino թվային կապում: Փոխարենը կարող է օգտագործվել անալոգային քորոց, բայց դա կպահանջի գրանցամատյանների արժեքների կոշտ կոդավորում:
Ընդհատման կարգավորիչը որոշում է, թե գրավված հաշվարկը բավականաչափ երկար է արդյոք սկզբնական զարկերակ լինելու համար: Ինչպես արդեն նշվեց, բազմաթիվ հաղորդագրությունների միջև եղած բացը 2 ms է, այնպես որ դա այն է, ինչ փնտրում է ծրագրակազմը: 433-ՄՀց բոլոր տրաֆիկի պատճառով ծրագրային ապահովման սկզբնական ստուգումը համոզված է, որ չափված ժամանակը առնվազն 1.8 մ է, բայց ոչ ավելի, քան 2.4 մկմ: Սկիզբը հայտնաբերելուց հետո ծրագրաշարը փնտրում է համաժամացման բիթեր (600us) և հաշվում `համոզվելու համար, որ դրանցից չորսը ստացվել են: Այս թեստերն անցնելուց հետո ծրագրաշարը փնտրում է 200us և 400us համապատասխան բիթային ժամանակները:
Ստացված բիթերը ձևավորվում են բայթերի մեջ և յուրաքանչյուր բայթ պահվում է: Յոթ բայթ ստանալուց հետո հաղորդագրության ստուգիչ գումարը ստուգվում է մինչև հետագա մշակման թույլտվությունը: Եթե հում բայթերը պետք է թողարկվեն (կարգաբերման ռեժիմ), ապա բայթերը վերածվում են ASCII նիշերի և ուղարկվում են LCD- ին: Եթե խոնավության և ջերմաստիճանի արդյունքները ցանկալի են, ապա կատարվում են համապատասխան փոխակերպումներ:
ՌԴ հաղորդագրության Centigrade- ի երկու բայթ տվյալները միավորված են ՝ կազմելով 11-բիթանոց արժեք: Ստորին հատվածը մեկ բիթ տեղափոխվում է ձախ ՝ հավասարության բիթը վերացնելու և այն վերին հատվածի բիթերի հետ հավասարեցնելու համար: Երկու բայթերը ձևավորվում են 16-բիթանոց բառի փոփոխականի, այնուհետև ամբողջը ճիշտ տեղափոխվում է մեկ բիթ `վերջնական բիթերի հավասարեցում ստանալու համար: Այնուհետև փոփոխական բառը մաթեմատիկական հաշվարկների համար վերածվում է լողացող կետի փոփոխականի:
PIC- ում Arduino- ի և հավաքման լեզվի վրա C ++ օգտագործելու մեծ առավելությունն այն է, որ այն պարզեցնում է մաթեմատիկական հաշվարկները: Ինչպես արդեն նշվեց, Centigrade- ի փոխակերպումը (C / 10) -100 է: Արդյունքը փոխակերպվում է տողի և ուղարկվում LCD- ի ցուցադրման համար: Ֆարենհայտի հաշվարկն է (C * 1.8) + 32. Արդյունքը կրկին վերածվում է տողի և ուղարկվում LCD- ի ցուցադրման: Երկու դեպքում էլ, Լարերի փոխարկումը ներառում է բացասական նշանը (անհրաժեշտության դեպքում) և տասնորդական կետը: Տասնորդական կետի համար ստուգում է կատարվում `տասնորդականից հետո միայն մեկ նիշ ուղարկելու համար էկրան: Այդ ստուգումն անհրաժեշտ է, քանի որ տողը կարող է տատանվել 3 -ից 5 նիշ երկարությամբ:
Ես ունեմ երկու AcuRite տվիչ, այնպես որ ես ծրագրում ստուգում ավելացրի, որպեսզի համոզվեմ, որ մեկի տվյալները չեն փոխարինի մյուսի տվյալները, եթե ծրագրակազմը միայն եղանակային գործառույթն է կատարում: Առաջին սենսորը, որը ստացվել է հոսանքի ուժգնացումից հետո, ցուցադրվում է 1 -ին տողում, իսկ մյուսը ցուցադրվում է տողում 2 -ում: Օգտագործելով վրիպազերծման ռեժիմը, ես կարող եմ տեսնել, թե որն է ID- ն յուրաքանչյուր սենսորի համար, որպեսզի կարողանամ պարզ ստուգում կատարել ծածկագրում, եթե միայն ցանկանում էր մշակել դրանցից մեկի տվյալները:
Theրագիրը վերահսկում է մարտկոցի կարգավիճակը (բայթ 3) և ցուցադրում է հաղորդագրություն, եթե այն ցույց է տալիս մարտկոցի լիցքը: Այս հաղորդագրությունը փոխարինում է այդ տվիչի բոլոր մյուս տվյալները:
Քայլ 11: Disուցադրում
Ահա տարբեր գործառույթների ցուցադրման օրինակներ: Ես ունեմ մի քանի այլ հրահանգներ, բայց իմ PIC միկրոկառավարիչների նախագծերի մեծ մասը կարելի է գտնել իմ կայքում ՝ www.boomerrules.wordpress.com
Խորհուրդ ենք տալիս:
Եղանակի պարզ ցուցադրում ՝ օգտագործելով Raspberry PI և Cyntech WeatherHAT: 4 քայլ
Եղանակի պարզ ցուցադրում ՝ օգտագործելով Raspberry PI և Cyntech WeatherHAT: * 2019 թվականին Yahoo- ն փոխեց իր API- ն, և դա դադարեց աշխատել: Ես տեղյակ չէի փոփոխությունից: 2020 -ի սեպտեմբերին այս նախագիծը թարմացվել է ՝ OPENWEATHERMAP API- ի օգտագործման համար: Տես ստորև ներկայացված թարմացված բաժինը, այս տեղեկատվության մնացած մասը դեռ լավ է
Art Deco Եղանակի կանխատեսման ցուցադրում. 9 քայլ (նկարներով)
Եղանակի կանխատեսման Art Deco ցուցադրում. Ողջույն, ընկերներ, այս Ուսուցողական ծրագրում մենք պատրաստվում ենք շոգ տեսնել ՝ Եղանակի կանխատեսման այս ցուցադրումը կառուցելու համար: Եղանակի կանխատեսումը ցուցադրելու համար այն օգտագործում է Wemos D1 մինի տախտակ և 1.8 դյույմանոց TFT էկրան: Ես նաև նախագծեցի և տպեցի 3 -րդ պարիսպը
Եղանակի մատրիցային ցուցադրում. 4 քայլ (նկարներով)
Եղանակի մատրիցա. Aboutրագրի մասին ես ձեզ ցույց կտամ, թե ինչպես ստեղծել 8x8 մատրիցային էկրանից մինի եղանակի կարգավիճակի ցուցադրում: Ես կօգտագործեմ Genuino MKR1000- ը `ընտրված վայրում ջերմաստիճանը, խոնավությունը և եղանակի վիճակը բերելու համար: howուցադրել կարգավիճակը ցուցադրելու համար սահնակով
Մեծ Բրիտանիայի գնացքների և եղանակի ցուցադրում. 5 քայլ
Մեծ Բրիտանիայի գնացքների և եղանակի ցուցադրում. Այս հրահանգը նախատեսված է մարտկոցով աշխատող Մեծ Բրիտանիայի գնացքների մեկնումների և եղանակի ցուցադրման համար: Այն օգտագործել է Ազգային երկաթուղային OpenLDBWS տվյալների բազան `իրական երկաթուղային կայարանի գնացքների մեկնման մասին տեղեկություններ ստանալու և դրանք ցուցադրելու համար: Այն օգտագործում է բաց եղանակ
Ինչպես կատարել մինի եղանակի կարգավիճակի ցուցադրում ՝ 4 քայլ
Ինչպես կատարել մինի եղանակի կարգավիճակի ցուցադրում. Նախագծի մասին Միկրոկոնտրոլերը կարող է միևնույն ժամանակ զվարճալի և զվարճալի լինել, ինտերնետի միացում ավելացնել իրերի իրական ինտերնետի համար: Թույլ տվեք ցույց տալ ձեզ, թե ինչպես ես կարողացա ստեղծել մինի եղանակի կարգավիճակի ցուցադրում ՝ օգտագործելով 8x8 մատրիցային էկրան և