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

Super Simple Raspberry Pi 433MHz տնային ավտոմատացում ՝ 7 քայլ
Super Simple Raspberry Pi 433MHz տնային ավտոմատացում ՝ 7 քայլ

Video: Super Simple Raspberry Pi 433MHz տնային ավտոմատացում ՝ 7 քայլ

Video: Super Simple Raspberry Pi 433MHz տնային ավտոմատացում ՝ 7 քայլ
Video: LoRa for Home Automation 2024, Նոյեմբեր
Anonim
Super Simple Raspberry Pi 433MHz տնային ավտոմատացում
Super Simple Raspberry Pi 433MHz տնային ավտոմատացում

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

Ինչու՞ ստեղծեցի այս ձեռնարկը, եթե այդքանն արդեն գոյություն ունեն: Հիմնականում այն պատճառով, որ գրեթե բոլոր մյուս ձեռնարկները, որոնց ես հանդիպեցի, կարծես չափազանց բարդ էին, հատկապես ծրագրային ապահովման մասում: Ես նկատեցի, որ նրանք մեծապես ապավինում էին երրորդ կողմի գրադարաններին, սցենարներին կամ ծածկագրերին ՝ ամբողջ աշխատանքը կատարելու համար: Շատերը չեն էլ բացատրում, թե ինչ է անում հիմքում ընկած ծածկագիրը. Նրանք պարզապես կխնդրեին ձեր Pi- ի վրա տեղադրել երկու -երեք ծրագրակազմ և կատարել մի շարք հրամաններ, առանց հարցերի: Ես իսկապես ուզում էի փորձել և օգտագործել իմ Pi- ն ՝ իմ տան շուրջ էլեկտրական սարքերը միացնելու և անջատելու համար ՝ օգտագործելով 433 ՄՀց հեռակառավարվող վարդակների հավաքածու, բայց ես ուզում էի ստեղծել իմ սեփական տարբերակը, որը ես կարող էի հասկանալ ՝ հուսով եմ, որ վերացնելով դրա անհրաժեշտությունը օգտագործել ուրիշի գրադարանները կամ սցենարները:

Այս մասին է այս ձեռնարկը: Այս համակարգի ծրագրային կողմը բաղկացած է Python- ի երկու շատ պարզ սցենարներից `մեկը ազդանշաններ ընդունելու և ձայնագրելու համար, և մեկը` այս ազդանշանները անլար հոսանքի վարդակներին հետ փոխանցելու համար: Ազդանշանի իրական ընդունումը/փոխանցումը հիմնված է միայն հեշտ օգտագործման RPi. GPIO գրադարանի վրա, որը, գոնե ինձ համար, նախապես տեղադրված էր Raspbian- ի հետ: Այս գրադարանը կարող է նաև ուղղակիորեն ներմուծվել Python:

Այս նախագծի համար ձեզ հարկավոր է

Ազնվամորի Պի: Modelանկացած մոդել պետք է աշխատի, ես օգտագործել եմ համակցված մեկնարկային հավաքածու, բայց գուցե ձեզ անհրաժեշտ է միայն կենտրոնական միավորը:

433 ՄՀց հաղորդիչ/ընդունիչ զույգ: Այս տիպի նախագծերում ամենից հաճախ օգտագործվողները սրանք են: Կապվածի պես հինգ տուփ գնելը ապահովում է, որ դուք ունեք մի քանի պահեստամաս:

433 ՄՀց հեռակառավարվող էլեկտրական վարդակների հավաքածու: Ես օգտագործեցի դրանք, որոնք ես շատ խորհուրդ կտայի, բայց կան անհամար մոդելներ: Պարզապես համոզվեք, որ նրանք գործում են այս հաճախականությամբ:

Շղթայի կառուցման որոշ պարագաներ: Ես խորհուրդ կտայի օգտագործել տախտակամած և մի քանի մալուխներ, որպեսզի հնարավորինս դյուրին դարձնեն շրջանի կառուցման գործընթացը:

[Եթե որոշեք գնել այս ապրանքներից որևէ մեկը, ես մեծապես կգնահատեի դա, եթե մուտք գործեիք ցուցակներին ՝ օգտագործելով վերը նշված հղումները, այդպիսով, ես ստանում եմ շահույթի չնչին մասնաբաժինը ՝ առանց որևէ լրացուցիչ ծախսերի ձեզ համար]:

Քայլ 1: Ստեղծեք ընդունիչի միավորը

Ստացողի միավորի տեղադրում
Ստացողի միավորի տեղադրում

Նախքան ձեր Pi- ն կարող եք հրամաններ ուղարկել հեռակառավարվող վարդակների վրա, դուք պետք է իմանաք, թե կոնկրետ ինչ ազդանշանների են նրանք արձագանքում: Հեռակառավարվող վարդակների մեծ մասը առաքվում է հեռախոսով, որը կարող է օգտագործվել որոշակի միավորները միացնելու կամ անջատելու համար: Իմ գնածների դեպքում հեռախոսը ունի չորս տող զուգված ON/OFF կոճակներ, որոնցից յուրաքանչյուրը ON կամ OFF ազդանշան է ուղարկում որոշակի վարդակից:

Սա հարց է առաջացնում. Ինչպես կարող ենք իմանալ, թե որ կոճակները որ վարդակին են համապատասխանում: Սա իրականում կախված է ձեր ունեցած մոդելից: Հիմնական պատճառներից մեկը, որ ես ընտրեցի վարդակի հատուկ ոճը (ներածության մեջ) այն է, որ միավորները կարող են կազմաձևվել ֆիզիկական անջատիչով, որպեսզի որոշակի վարդակից արձագանքի հեռախոսի վրա գտնվող ON/OFF կոճակների որոշակի փաթեթին: Սա նաև նշանակում է, որ դուք կարող եք վարդակից անջատել և տեղափոխել տան շուրջը ՝ իմանալով, որ յուրաքանչյուր միավոր միշտ կպատասխանի նույն ON/OFF ազդանշաններին:

Երբ պարզեք, թե ինչպես են ձեր վարդակները փոխազդում հեռախոսի հետ, ձեզ հարկավոր է օգտագործել ձեր 433 ՄՀց ընդունիչ սարքը (նկարը վերևում) `« հոտոտելու »հեռախոսի կողմից ուղարկվող կոդերը: Այս կոդերի ալիքի ձևերը գրանցելուց հետո կարող եք դրանք կրկնօրինակել Python- ի միջոցով և դրանք ուղարկել հաղորդիչ միավորի միջոցով:

Առաջին բանը, որ պետք է անել այստեղ, ձեր ստացողի կապումներն ամրացրեք Pi- ի GPIO- ի ճիշտ կապումներին: Ընդունիչի միավորն ունի չորս կապում, սակայն դրանցից միայն երեքն են անհրաժեշտ: Կարծում եմ, որ կենտրոնական երկու կապում տրվում է նույն ելքը, այնպես որ դուք միայն պետք է միանաք դրանցից մեկին (եթե չեք ցանկանում ստացված ազդանշանները հոսել GPIO- ի երկու առանձին կապում):

Վերևի պատկերը բավականին ամփոփում է էլեկտրագծերը: Ստացողի յուրաքանչյուր քորոց կարելի է ուղղակիորեն միացնել Pi- ի համապատասխան քորոցին: Գործընթացը մի փոքր էլեգանտ դարձնելու համար ես օգտագործում եմ տախտակամած և ցատկող մալուխներ: Նկատի ունեցեք, որ կարող եք ընտրել GPIO- ի տվյալների ցանկացած քորոց `կենտրոնական ընդունիչի ցանկացած կապակցիչին միանալու համար: Ես օգտագործել եմ «23» նշած քորոցը իմ Pi վերնագրում:

ԿԱՐԵՎՈՐ. Եթե վերը նշված պատկերի «3v3» նշումով կապը միացնեք Pi- ի ավելի բարձր լարման պինին (օրինակ ՝ 5v), ապա, ամենայն հավանականությամբ, կվնասեք Pi- ին, քանի որ GPIO կապանքները չեն կարող հանդուրժել 3v3- ից բարձր լարումները: Այլապես, դուք կարող եք այն սնուցել 5 վ լարման միջոցով և տեղադրել լարման բաժանարար ՝ անվտանգ լարում ՏՎՅԱԼՆԵՐԻ քորոցին ուղարկելու համար:

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

Քայլ 2: Հոտոտեք հեռախոսի կոդերը

Հոտոտելով հեռախոսի ծածկագրերը
Հոտոտելով հեռախոսի ծածկագրերը

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

Նախքան այս գործընթացը սկսելը, դուք պետք է համոզվեք, որ ունեք Python գրադարաններ, որոնք անհրաժեշտ են դիպուկ գրիչը գործարկելու համար: Դրանք թվարկված են սցենարի վերևում.

datetime- ից ներմուծել datetime

ներմուծել matplotlib.pyplot որպես pyplot ներմուծել RPi. GPIO որպես GPIO

RPi. GPIO- ն և ժամանակի գրադարանները ներառված էին իմ Raspbian բաշխման մեջ, բայց ես ստիպված էի տեղադրել matplotlib գրադարանը հետևյալ կերպ.

sudo apt-get տեղադրել python-matplotlib

Այս գրադարանը սովորաբար օգտագործվող գրաֆիկական գծագրման գրադարան է, որը շատ օգտակար է նույնիսկ այս նախագծից դուրս, ուստի այն տեղադրելը հաստատ չի կարող վնասել: Երբ ձեր գրադարանները արդիական կլինեն, դուք պատրաստ եք սկսել տվյալների գրանցումը: Ահա թե ինչպես է աշխատում սցենարը.

Երբ այն գործարկվում է (օգտագործելով «python ReceiveRF.py» հրամանը), այն կկարգավորի սահմանված GPIO- ի քորոցը որպես տվյալների մուտքագրում (լռելյայն 23 -րդ փին): Այնուհետև անընդհատ նմուշառում է քորոցը և մուտքագրում ՝ ստանում է թվային 1 թե 0: Սա շարունակվում է սահմանված տևողությամբ (կանխադրված 5 վայրկյան): Երբ այս ժամկետը լրանա, սցենարը կդադարեցնի տվյալների գրանցումը և կփակվի GPIO մուտքը: Այնուհետև այն կատարում է մի փոքր հետամշակում և գծագրում է ստացված մուտքային արժեքը ժամանակի համեմատ: Կրկին, եթե ունեք հարցեր այն մասին, թե ինչ է անում սցենարը, հավանաբար ինքներդ կարող եք պատասխանել դրանց նայելուն, թե ինչպես է այն աշխատում: Ես փորձել եմ ծածկագիրը հնարավորինս ընթեռնելի և պարզ դարձնել:

Այն, ինչ դուք պետք է անեք, պետք է ուշադրություն դարձնել, երբ սցենարը ցույց տա, որ այն ** սկսել է ձայնագրումը **: Երբ այս հաղորդագրությունը հայտնվի, դուք պետք է սեղմեք և պահեք հեռախոսի կոճակներից մեկը մոտ մեկ վայրկյան: Անպայման պահեք այն ընդունիչին մոտ: Երբ սցենարը ավարտի ձայնագրությունը, այն matplotlib- ի միջոցով կօգտագործի ձայնագրման միջակայքում ստացած ազդանշանի գրաֆիկական ալիքի ձևը: Խնդրում ենք նկատի ունենալ, եթե ձեր Pi- ին միացված եք SSH հաճախորդի միջոցով, ինչպիսին է PuTTY- ը, ապա ձեզ նույնպես պետք է բացել X11 ծրագիր, որը թույլ կտա ալիքի ձևի ցուցադրմանը: Ես օգտագործում եմ xMing- ը դրա համար (և այլ բաների համար, ինչպիսիք են ՝ իմ Pi- ում հեռավոր աշխատասեղան տեղադրելը): Հողամասի ցուցադրումը թույլ տալու համար պարզապես սկսեք xMing- ը, նախքան սցենարը գործարկելը և սպասեք արդյունքների հայտնվելուն:

Երբ հայտնվի ձեր matplotlib պատուհանը, հողամասի հետաքրքրության տարածքը պետք է բավականին ակնհայտ լինի: Դուք կարող եք պատուհանի ներքևի մասի հսկիչ սարքերը մեծացնելու համար, քանի դեռ չեք կարողացել ընտրել հեռախոսի փոխանցած ազդանշանի բարձր և ցածր կետերը, մինչ կոճակը պահված էր: Տե՛ս վերը նշված պատկերը ՝ ամբողջական կոդի օրինակ: Հավանաբար, ազդանշանը բաղկացած կլինի շատ կարճ իմպուլսներից, որոնք բաժանված են նմանատիպ ժամանակաշրջաններով, որտեղ ազդանշան չի ստացվում: Կարճ իմպուլսների այս բլոկին, հավանաբար, կհաջորդի ավելի երկար ժամանակաշրջան, որտեղ ոչինչ չի ստացվում, որից հետո օրինակը կկրկնվի: Կոդի մեկ օրինակին պատկանող օրինակը պարզելուց հետո այս էջի վերևում վերցրեք սքրինշոթը և շարունակեք հաջորդ քայլին ՝ այն մեկնաբանելու համար:

Քայլ 3. Արդյունքային ազդանշանի տառադարձում

Արդյունքային ազդանշանի տառադարձում
Արդյունքային ազդանշանի տառադարձում

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

1 = կարճ_ոն + երկար_վերջ 0 = երկար_ոն + կարճ_հեռացում

Նորից նայեք պիտակավորված ալիքի ձևին և կտեսնեք, թե ինչ նկատի ունեմ: Ձեր ազդանշանի համարժեք օրինաչափությունները հայտնաբերելուց հետո ձեզ մնում է հաշվել 1 -ը և 0 -ը `հաջորդականությունը կառուցելու համար: Երբ տառադարձվում է, վերը նշված ազդանշանը կարող է գրվել հետևյալ կերպ.

1111111111111010101011101

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

Նախքան հաղորդիչի միջոցով ազդանշանները նորից ուղարկելը, մի փոքր ավելի շատ աշխատանք կա անելու: 1 -ին կամ 0 -ին համապատասխանող բարձունքների և ցածրերի միջև ընկած ժամանակը շատ կարևոր է, և դուք պետք է համոզվեք, որ դուք գիտեք, թե իրականում որքան է տևում «կարճ_ոն» կամ «երկար_վերջը»: Իմ ծածկագրերի համար կար երեք ժամանակային տեղեկատվություն, որոնք ես պետք է քաղեի ազդանշանները կրկնօրինակելու համար.

  • «Կարճ» միջակայքի տևողությունը, այսինքն ՝ 1 -ի սկիզբը կամ 0 -ի վերջը:
  • «Երկար» միջակայքի տևողությունը, այսինքն ՝ 1 -ի վերջը կամ 0 -ի սկիզբը:
  • «Ընդլայնված» միջակայքի տևողությունը: Ես նկատեցի, որ երբ հեռախոսը պահում էի կոճակը, ազդանշանի բլոկի յուրաքանչյուր կրկնվող օրինակի միջև կար «ընդլայնված_ անջատում» ժամանակահատված: Այս հետաձգումը օգտագործվում է համաժամացման համար և ունի ֆիքսված տևողություն:

Timամկետների այս արժեքները որոշելու համար կարող եք օգտագործել matplotlib պատուհանի խոշորացման գործառույթը `ամբողջովին մեծացնելու և կուրսորը տեղադրելու համար ազդանշանի համապատասխան մասերի վրա: Պատուհանի ներքևում գտնվող կուրսորը տեղադրելու ընթերցումը պետք է թույլ տա ձեզ որոշել, թե որքան լայն է ազդանշանի յուրաքանչյուր հատվածը, որը համապատասխանում է երկար, կարճ կամ ընդլայնված ընդմիջմանը: Նկատի ունեցեք, որ գծագրի x առանցքը ներկայացնում է ժամանակը, իսկ ցուցիչի ընթերցման x բաղադրիչը վայրկյանների միավորն է: Ինձ համար լայնությունները հետևյալն էին (վայրկյանների ընթացքում).

  • կարճ_հետաձգում = 0.00045
  • long_delay = 0.00090 (երկու անգամ ավելի երկար, քան «կարճ»)
  • երկարաձգված_հետաձգում = 0,0096

Քայլ 4: Հաղորդիչի միավորի ստեղծում

Հաղորդիչի միավորի ստեղծում
Հաղորդիչի միավորի ստեղծում

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

Այս դեպքում, նորմալ է էներգիան օգտագործել Pi- ից 5 վ սնուցման միջոցով, քանի որ ՏՎՅԱԼՆԵՐԻ քորոցը Pi- ին ազդանշաններ չի ուղարկի, այլ միայն դրանք կստանա: Բացի այդ, 5 վ էլեկտրամատակարարումը կապահովի ավելի մեծ փոխանցման տիրույթ, քան 3v3 մատակարարման օգտագործումը: Կրկին, դուք կարող եք միացնել Տվյալների կապը Pi- ի ցանկացած համապատասխան քորոցին: Ես օգտագործեցի 23 կապը (նույնը, ինչ ընդունիչի համար):

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

Հաղորդիչը միացնելուց հետո սարքաշարի կարգավորումն ավարտված է: Միակ բանը, որ այժմ պետք է անեք, ձեր վարդակները տեղադրեք տան շուրջը և դիտեք հաղորդիչների ծրագիրը:

Քայլ 5. Ազդանշանների փոխանցում Pi- ի միջոցով

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

Այս գրությունը գործարկելու համար անհրաժեշտ գրադարանները բոլորը նախապես տեղադրված էին իմ Pi- ի վրա, ուստի լրացուցիչ տեղադրման կարիք չկար: Դրանք թվարկված են սցենարի վերևում.

ներմուծման ժամանակը

ներմուծել sys ներմուծել RPi. GPIO որպես GPIO

Գրադարանի ներմուծման տակ կա այն տեղեկատվությունը, որը դուք պետք է խմբագրեք: Ահա, թե ինչ տեսք ունի այն լռելյայն (սա 3 -րդ քայլի միջոցով որոշված իմ վարդակների համապատասխան տեղեկատվությունն է).

a_on = '111111111111101010101011101'

a_off = '1111111111111010101010111' b_on = '1111111111101110101011101' b_off = '1111111111101110101010111' c_on = '1111111111101011101011101' c_off = '1111111111101011101010111' d_on = '1111111111101010111011101' d_off = '1111111111101010111010111' short_delay = 0,00045 long_delay = 0,00090 extended_delay = 0,0096

Այստեղ մենք ունենք ութ կոդի տող (իմ հեռախոսի յուրաքանչյուր զույգ միացման/անջատման կոճակների համար - դուք կարող եք ունենալ ավելի կամ ավելի քիչ կոդ), որին հաջորդում են ժամանակի մասին երեք տեղեկությունները, որոնք նույնպես որոշված են 3 -րդ քայլում: ճիշտ է մուտքագրել այս տեղեկատվությունը:

Երբ գոհ եք սցենարի մեջ մուտքագրված կոդերից/ուշացումներից (ցանկության դեպքում կարող եք վերանվանել ծածկագրի տողերի փոփոխականները), գրեթե պատրաստ եք համակարգը փորձարկել: Նախքան դա անելը, դիտեք սցենարի transmit_code () գործառույթը: Այստեղ է, որ տեղի է ունենում հաղորդակցության հետ իրական փոխազդեցությունը: Այս գործառույթը ակնկալում է, որ կոդի տողերից մեկը կուղարկվի որպես արգումենտ: Այնուհետև այն բացում է սահմանված քորոցը որպես GPIO ելք և շրջանցում կոդի տողի յուրաքանչյուր բնույթ: Այնուհետև այն միացնում կամ անջատում է հաղորդիչը ՝ ըստ ձեր մուտքագրած ժամանակային տեղեկատվության ՝ ծածկագրի տողին համապատասխանող ալիքի ձև ստեղծելու համար: Այն յուրաքանչյուր կոդ է ուղարկում մի քանի անգամ (լռելյայն ՝ 10) ՝ այն բաց թողնելու հավանականությունը նվազեցնելու համար և թողնում է երկարաձգված հետաձգում յուրաքանչյուր կոդի բլոկի միջև, ինչպես և հեռախոսը:

Սցենարը գործարկելու համար կարող եք օգտագործել հետևյալ հրամանների շարահյուսությունը.

python TransmitRF.py code_1 code_2…

Դուք կարող եք փոխանցել բազմաթիվ կոդերի տող `սցենարի մեկ գործարկմամբ: Օրինակ, (a) և (b) վարդակները միացնելու և վարդակից (c) անջատելու համար գործարկեք սցենարը հետևյալ հրամանով.

python TransmitRF.py a_on b_on c_off- ում

Քայլ 6. Նշում ժամանակի ճշգրտության վերաբերյալ

Ինչպես նշվեց, փոխանցվող միացման/անջատման իմպուլսների միջև ընկած ժամանակահատվածը բավականին կարևոր է: TransmitRF.py սցենարը օգտագործում է python- ի time.sleep () գործառույթը `ալիքների ձևերը ճիշտ զարկերակային ընդմիջումներով կառուցելու համար, սակայն հարկ է նշել, որ այս գործառույթը ամբողջովին ճշգրիտ չէ: Այն տևողությունը, որի համար այն ստիպում է սցենարին սպասել հաջորդ գործողությունը կատարելուն, կարող է կախված լինել տվյալ պահին պրոցեսորի բեռից: Դա ևս մեկ պատճառ է, թե ինչու է TransmitRF.py- ն յուրաքանչյուր կոդը մի քանի անգամ ուղարկում `միայն այն դեպքում, եթե time.sleep () գործառույթը ի վիճակի չլինի ճիշտ կառուցել ծածկագրի տվյալ օրինակը:

Անձամբ ես երբեք խնդիրներ չեմ ունեցել time.sleep () - ի հետ, երբ խոսքը վերաբերում է կոդերի ուղարկմանը: Այնուամենայնիվ, ես գիտեմ, որ իմ time.sleep () հակված է ունենալ մոտ 0.1ms սխալ: Ես դա որոշեցի ՝ օգտագործելով կից SleepTest.py սցենարը, որը կարող է օգտագործվել գնահատելու, թե որքան ճշգրիտ է ձեր Pi- ի time.sleep () գործառույթը: Իմ հատուկ հեռակառավարվող վարդակների համար ամենակարճ ուշացումը, որն ինձ անհրաժեշտ էր իրականացնել, 0.45 մ էր: Ինչպես ասացի, ես խնդիրներ չեմ ունեցել ոչ արձագանքող վարդակների հետ, ուստի թվում է, որ 0.45 ± 0.1ms- ը բավական լավ է:

Կան այլ մեթոդներ `ապահովելու համար, որ ուշացումն ավելի ճշգրիտ է. օրինակ, դուք կարող եք օգտագործել հատուկ PIC չիպ ՝ ծածկագրեր ստեղծելու համար, բայց նման բաները դուրս են այս ձեռնարկի շրջանակներից:

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

Եզրակացություն
Եզրակացություն

Այս նախագիծը ներկայացրել է Raspberry Pi- ի և 433 ՄՀց հեռակառավարվող վարդակների միջոցով ցանկացած էլեկտրական սարքի կառավարման մեթոդ ՝ կենտրոնանալով պարզության և թափանցիկության վրա: Սա ամենահետաքրքիր և ճկուն նախագիծն է, որի համար ես օգտագործել եմ իմ Pi- ն, և դրա համար կան անսահմանափակ ծրագրեր: Ահա որոշ բաներ, որոնք այժմ կարող եմ անել իմ Pi- ի շնորհիվ.

  • Միացրեք էլեկտրական տաքացուցիչը իմ մահճակալի կողքին, ահազանգիցս կես ժամ առաջ:
  • Անջատեք ջեռուցիչը քնելուց մեկ ժամ անց:
  • Միացրեք իմ մահճակալի լույսը, երբ ահազանգս անջատվում է, որպեսզի նորից չքնեմ:
  • եւ շատ ավելի…

Այս առաջադրանքներից շատերի համար ես օգտագործում եմ crontab գործառույթը Linux- ում: Սա թույլ է տալիս ստեղծել ավտոմատ պլանավորված առաջադրանքներ ՝ որոշակի ժամանակներում TransmitRF.py սցենարը գործարկելու համար: Դուք կարող եք նաև օգտագործել Linux- ը հրամանով ՝ միանգամյա առաջադրանքներ կատարելու համար (որոնք, ինձ համար, անհրաժեշտ էր տեղադրել առանձին ՝ օգտագործելով «sudo apt-get install at»): Օրինակ, հաջորդ առավոտ առավոտյան ահազանգիցս կես ժամ առաջ վառարանս միացնելու համար ինձ մնում է միայն մուտքագրել.

ժամը 05: 30 -ին

python TransmitRF.py c_on

Դուք կարող եք նաև օգտագործել այս նախագիծը ՝ իմ Dropbox- ի տնային մոնիտորինգի համակարգի հետ համատեղ, սարքերը ինտերնետով կառավարելու համար: Շնորհակալություն կարդալու համար, և եթե ցանկանում եք ինչ -որ բան պարզաբանել կամ կիսել ձեր կարծիքը, խնդրում ենք տեղադրել մեկնաբանություն:

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