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

Arduino ՌԴ սենսորային ապակոդավորիչ `5 քայլ
Arduino ՌԴ սենսորային ապակոդավորիչ `5 քայլ

Video: Arduino ՌԴ սենսորային ապակոդավորիչ `5 քայլ

Video: Arduino ՌԴ սենսորային ապակոդավորիչ `5 քայլ
Video: Արմաթ ինժիներական լաբորատորիա։ ARDUINO նախագիծ։ 2024, Հուլիսի
Anonim
Arduino ՌԴ սենսորային ապակոդավորիչ
Arduino ՌԴ սենսորային ապակոդավորիչ

Իմ նախորդ տունը հագեցած էր նախապես տեղադրված անվտանգության համակարգով, որն ուներ դռների տվիչներ, շարժման ցուցիչ և կառավարման վահանակ: Ամեն ինչ միացված էր առանձնասենյակում տեղադրված էլեկտրոնիկայի մեծ տուփին և հրահանգներ կար ֆիքսված հեռախոսին միացնելու համար `ահազանգի դեպքում ինքնաբերաբար զանգահարելու համար: Երբ ես փորձեցի խաղալ դրա հետ, ես հայտնաբերեցի, որ դռների տվիչներից մեկը թերի էր տեղադրված, իսկ մեկը ընդմիջվող էր ոչ պատշաճ դասավորության պատճառով: Այսքանը `անվտանգության ընկերության այցեքարտի վրա գովազդվող մասնագիտական տեղադրման մասին: Իմ լուծումն այն ժամանակ ինտերնետային անվտանգության տեսախցիկ գնելն էր և էժան անլար անվտանգության ահազանգը:

Շտապեք այսօր և այդ անլար ահազանգը նստած է իմ նկուղի տուփի մեջ: Էժան ՌԴ ընդունիչ ձեռք բերելուց հետո որոշեցի տեսնել, թե արդյոք կարո՞ղ եմ վերծանել տագնապի տվիչների և հեռակառավարման վահանակների փոխանցած հաղորդագրությունները, որոնք ես ունեմ: Ես հասկացա, որ քանի որ նրանք բոլորը աշխատում էին էժան ազդանշանային տուփով, նրանք բոլորը պետք է օգտագործեն նույն հաղորդագրության ձևաչափը ՝ այլ ID- ով: Շուտով պարզեցի, որ դրանք նման են միայն հաղորդագրությունների ընդհանուր կառուցվածքով: Այսպիսով, նախագիծը արագից չնչինից դարձավ շատ հետաքրքիր:

Քայլ 1: Սենսորային մոդուլներ

Սենսորային մոդուլներ
Սենսորային մոդուլներ
Սենսորային մոդուլներ
Սենսորային մոդուլներ
Սենսորային մոդուլներ
Սենսորային մոդուլներ
Սենսորային մոդուլներ
Սենսորային մոդուլներ

Ինչպես տեսնում եք վերևի նկարներում, հաղորդիչները ներառում են դռների բաց տվիչներ, շարժման դետեկտորներ, զինման հեռակառավարիչներ և ազդանշանային տուփը ծրագրավորելու համար օգտագործվող անլար ստեղնաշար: Ինչպես պարզվում է, այս սարքերից ոչ մեկը չի օգտագործում նույն համաժամացման երկարությունը կամ բիթերի տևողությունը: Միակ ընդհանրությունը, բացի հաղորդագրության երկարությունից, բիթերի հիմնական ձևաչափն է: Յուրաքանչյուր բիթ տևում է ֆիքսված ժամանակաշրջան ՝ զրոյի և մեկի միջև տարբերությունը բարձր/ցածր մասերի աշխատանքային ցիկլն է:

Վերևում ցուցադրված գեղեցիկ ալիքի ձևը այն չէ, ինչ ես առաջին անգամ ստացա: Քանի որ 433-ՄՀց հաճախականությունների տիրույթում այնքան շատ երթևեկություն կա, ես ստիպված եղա համոզվել, որ սենսորը միացնեմ միանգամից մի ձգան կատարելու հնարավորությունը սահմանելուց առաջ: Բարեբախտաբար, սենսորները միացված տվյալների տվյալների մի քանի պատճեն են հանում, և հեռակառավարման վահանակը և ստեղնաշարը շարունակում են հաղորդագրությունների թողարկումը, քանի դեռ ստեղնը սեղմված է: Օգտագործելով շրջանակը, ես կարողացա որոշել համաժամացման երկարությունը և յուրաքանչյուր տվյալների համար տվյալների բիտերի տևողությունը: Ինչպես արդեն նշվեց, համաժամացման ժամանակները տարբեր են, իսկ բիթերը ՝ տարբեր, սակայն հաղորդագրությունների ձևաչափերն ունեն ցածր մակարդակի համաժամացում, որին հաջորդում են տվյալների 24 բիթ և մեկ կանգառ բիթ: Դա ինձ բավական էր, որպեսզի կարողանայի ծրագրաշարի մեջ ստեղծել ընդհանուր ապակոդավորիչ ՝ առանց յուրաքանչյուր սարքի բոլոր տարբեր մանրամասների կոդ կոդավորելու:

Քայլ 2: Սարքավորումներ

Սարքավորումներ
Սարքավորումներ
Սարքավորումներ
Սարքավորումներ

Սկզբում ես ստեղծեցի սենսորային ապակոդավորիչ `օգտագործելով PIC միկրոկոնտրոլերը և հավաքման լեզուն: Ես վերջերս խաղում էի Arduino- ի տարբերակների հետ, ուստի մտածեցի, որ կտեսնեմ, եթե կարողանամ այն կրկնօրինակել: Պարզ սխեմատիկան ներկայացված է վերևում և կա նաև իմ նախատիպի նկարը: Արուինո Նանոյից դեպի ՌԴ ընդունիչ տախտակ գնալու համար ես ընդամենը օգտագործեցի երեք ընդհանուր թռիչքային լար: Էլեկտրաէներգիան և տվյալների մեկ տողը այն ամենն են, ինչ անհրաժեշտ է:

Եթե կարդաք իմ Instructable- ը «3-ը 1-ում ժամանակի և եղանակի ցուցադրման» վրա, կտեսնեք, որ ես օգտագործում եմ ընդհանուր RXB6, 433-ՄՀց ընդունիչ: Հնարավոր է, որ դուք կարողանաք իսկապես էժան ընդունիչներ աշխատել այս նախագծի համար անհրաժեշտ կարճ տիրույթում, բայց ես դեռ խորհուրդ եմ տալիս օգտագործել գերհետերոդինային ընդունիչ:

Քայլ 3: Softwareրագրակազմ

Theրագրակազմը ստացված բիթերը վերածում է ցուցադրվող ASCII նիշերի: Այն թողարկում է համաժամացման երկարության արժեքը և 1 և 0 բիթերի երկարությունները: Քանի որ ես արդեն գիտեի համաժամացման երկարությունները և բիտ ձևաչափերը, կարող էի ծրագրաշարը գրել հատուկ նրանց համար: Փոխարենը, ես որոշեցի տեսնել, թե արդյոք կարող եմ գրել այն համաժամացման երկարությունները դասավորելու և տվյալների բիթերն ինքնաբերաբար պարզելու համար: Դա պետք է ավելի հեշտ դարձնի փոփոխումը, եթե ես ուզում եմ ինչ -որ ժամանակ փորձել այլ ձևաչափեր հայտնաբերել: Կարևոր է նշել, որ ծրագրակազմը չգիտի հաղորդագրության առաջին բիթը 1 է, թե 0: Այն ենթադրում է, որ այն 1 է, բայց, եթե պարզվի, որ այն պետք է լիներ զրո, այն կշրջի բիթ լրացված հաղորդագրության մեջ, նախքան այն սերիական նավահանգիստը ուղարկելը:

Համաժամացման զարկերակի և տվյալների բիթերի ժամանակները որոշվում են `օգտագործելով INT0 արտաքին ընդհատման մուտքագրումը` ընդհատման կարգավորիչը գործարկելու համար: INT0- ը կարող է առաջացնել բարձրացման, ընկնելու կամ երկու եզրերի վրա կամ կայուն ցածր մակարդակի վրա: Softwareրագրակազմը ընդհատվում է երկու ծայրերում և չափում է այն ժամանակը, երբ զարկերակը մնում է ցածր: Դա պարզեցնում է իրերը, քանի որ հաղորդագրության սկիզբը/համաժամացումը ցածր մակարդակի զարկերակ է, և բիթերը կարող են որոշվել ՝ ելնելով դրանց ցածր մակարդակի ժամանակից:

Ընդհատումների կարգավորիչը նախ որոշում է, թե գրավված հաշվարկը բավականաչափ երկար է արդյոք սկզբնական/համաժամացման զարկերակ լինելու համար: Իմ ունեցած տարբեր սարքերն օգտագործում են 4, 9, 10 և 14 միլիվայրկյան համաժամացման իմպուլսներ: Նվազագույն/առավելագույն թույլատրելի համաժամացման արժեքների սահմանման հայտարարությունները ծրագրաշարում առաջ են և ներկայումս սահմանված են 3 և 16 միլիվայրկյանների համար: Բիթային ժամանակը նույնպես տարբերվում է սենսորների միջև, այնպես որ բիթերի վերծանման ալգորիթմը պետք է դա հաշվի առնի: Առաջին բիթի բիտ ժամանակը պահվում է այնպես, ինչպես հաջորդ բիթի ժամանակը, որն էական տարբերություն ունի առաջին բիտից: Հետագա բիտ ժամանակների ուղղակի համեմատությունը հնարավոր չէ, ուստի օգտագործվում է «կեղծ գործոնի» սահմանումը («տատանում»): Բիթերի վերծանումը սկսվում է ենթադրելով, որ առաջին տվյալների բիթը միշտ գրանցվում է որպես տրամաբանական 1. Այդ արժեքը պահվում է, այնուհետև օգտագործվում է հաջորդ բիթերը փորձարկելու համար: Եթե հետագա տվյալների բիտերի քանակը գտնվում է պահպանված արժեքի շեղման պատուհանում, ապա այն նույնպես գրանցվում է որպես տրամաբանություն 1. Եթե այն պահված արժեքի շեղման պատուհանից դուրս է, ապա այն գրանցվում է որպես տրամաբանություն 0. Եթե տրամաբանությունը 0 բիտ ժամանակն ավելի կարճ է, քան առաջին բիթ ժամանակը, այնուհետև դրոշ է դրված `ծրագրակազմին ասելու համար, որ բայթերը ցուցադրելուց առաջ անհրաժեշտ է շրջել: Միակ դեպքը, երբ այս ալգորիթմը ձախողվում է, այն է, երբ հաղորդագրության բիթերը բոլորը 0 են: Մենք կարող ենք ընդունել այդ սահմանափակումը, քանի որ այդ տեսակ հաղորդագրությունն անիմաստ է:

Ինձ հետաքրքրող սենսորներն ունեն հաղորդագրության երկարություն 24 տվյալների բիթ, բայց ծրագրակազմը չի սահմանափակվում այդ երկարությամբ: Կա բուֆեր մինչև յոթ բայթ (ավելին կարող է ավելացվել) և սահմանում է բայթերով հաղորդագրության նվազագույն և առավելագույն երկարությունը: Theրագրակազմը ստեղծվել է բիթերը հավաքելու, դրանք բայթերի վերածելու, ժամանակավորապես պահելու, այնուհետև սերիական պորտի միջոցով դրանք ASCII ձևաչափով թողարկելու համար: Հաղորդագրության ելքը խթանող իրադարձությունը նոր մեկնարկի/համաժամացման զարկերակի ստացումն է:

Քայլ 4: Տվյալների գրանցում

Տվյալների գրանցում
Տվյալների գրանցում

Theրագրակազմը ստեղծված է այնպես, որ փոխարկված տվյալները թողարկվեն որպես ASCII նիշ Arduino- ի սերիական (TX) ելքի միջոցով: Երբ կազմեցի PIC- ի տարբերակը, ես պետք է միացնեի համակարգչի տերմինալային ծրագրին `տվյալները ցուցադրելու համար: Arduino IDE- ի մեկ առավելությունն այն է, որ ներկառուցված է Serial Monitor գործառույթը: Ես սերիայի նավահանգստի փոխարժեքը սահմանեցի 115.2k, այնուհետև Serial Monitor- ի պատուհանը դրեցի նույն մակարդակի վրա: Այստեղ նկարահանված էկրանը ցույց է տալիս տիպիկ ցուցադրում ՝ իմ ունեցած տարբեր սենսորների ելքերով: Ինչպես տեսնում եք, տվյալները երբեմն կատարյալ չեն, բայց հեշտությամբ կարող եք որոշել, թե որն է յուրաքանչյուր սենսորի իրական արժեքը:

Քայլ 5: Նմուշ ստացողի ծրագրակազմ

Նմուշ ստացողի ծրագրակազմ
Նմուշ ստացողի ծրագրակազմ

Ես ներառել եմ ծրագրաշարի օրինակելի ցուցակ, որը ցույց է տալիս, թե ինչպես կարող եք օգտագործել հավաքված տեղեկատվությունը ՝ ձեր դիմումի համար հատուկ ծածկագրեր ստանալու համար: Այս օրինակը ստեղծվել է ՝ նմանակելու իմ Etekcity հեռավոր վարդակներից մեկը: Մեկ հրամանը միացնում է Nano- ում (D13) ներկառուցված LED- ը, իսկ մյուս հրամանը ՝ LED- ն: Եթե ձեր Arduino- ում ներկառուցված LED չկա, ապա ավելացրեք դիմադրիչը և LED- ը, ինչպես ցույց է տրված դիագրամում: Իրական կիրառման դեպքում այս ֆունկցիան միացնելու/անջատելու է էլեկտրական վարդակից (օգտագործելով ռելե կամ տրիակ): Համաժամացման ժամանակը, բիթը և տվյալների ակնկալվող բայթերը բոլորը նախապես սահմանվում են փոփոխման հեշտության համար: Դուք կարող եք օգտագործել տվյալների մնացած տողերից որևէ մեկը ՝ ձեր որոշակի ծրագրի համար իրերը միացնելու/անջատելու և այլն: Պարզապես ավելացրեք կիրառելի հրամանի ծածկագիրը և փոխարինեք LED միացման/անջատման տրամաբանությունը «հանգույցում» `ձեր կարիքներին համապատասխան:

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