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

Smart Home Thermostat: 4 քայլ
Smart Home Thermostat: 4 քայլ

Video: Smart Home Thermostat: 4 քայլ

Video: Smart Home Thermostat: 4 քայլ
Video: Aqara S1 ZNCJMB14LM - ինտերակտիվ սենսորային վահանակ և եռագիծ անջատիչ խելացի տան համար 2024, Հուլիսի
Anonim
Խելացի տան ջերմոստատ
Խելացի տան ջերմոստատ

Մեր Smart Home Thermostat- ը ծրագիր է, որը կարող է ինքնաբերաբար տնային տնտեսությունները խնայել կոմունալ ծառայությունների վճարների վրա `ելնելով անձի նախասիրություններից:

Քայլ 1: Ակնարկ

Smart Home Thermostat- ը օգտագործում է ջերմաստիճանի տվիչ ՝ տան ջերմաստիճանը ստանալու համար: Temperatureերմաստիճանի այս ցուցանիշը դրվում է ծրագրի մեջ, որտեղ կորոշվի `արդյո՞ք օդորակման համակարգին անհրաժեշտ է տունը տաքացնել կամ հովացնել` ելնելով տանտիրոջ ցանկալի ջերմաստիճանից:

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

Քայլ 2: Մասեր և նյութեր

(15) Jumper լարերը

(4) 220 Օմ դիմադրիչներ

(1) 10K Օմ դիմադրություն

(1) pերմաստիճանի ցուցիչ

(1) Լուսանկարի դիմադրություն

(1) DAGU Mini DC փոխանցումատուփ

(1) դիոդ

(1) տրանզիստոր

(1) Ֆոտոռեզիստոր

(1) Գրատախտակ

(1) Arduino MKR

Քայլ 3: Շղթա

Շրջան
Շրջան
Շրջան
Շրջան
Շրջան
Շրջան
Շրջան
Շրջան

Նկար 1 = Մեծ ձախ նկար

Նկար 2 = Վերին աջ

Նկար 3 = Միջին աջ

Նկար 4 = Ստորին Աջ

Գծապատկեր 1

Օգտագործելով վերևի դիագրամը, մենք միացրեցինք մեր երեք LED- ներից յուրաքանչյուրը: Մենք լուսավորեցինք յուրաքանչյուր LED, քանի որ աշխատում էինք հացի մեծ տախտակով: Փոքր հացի տախտակների համար գուցե անհրաժեշտ լինի LED- ները ավելի մոտ դնել: Բացի այդ, ավելորդ է սնուցող տախտակի սնուցումը, քանի որ LED- ները այնքան քիչ էներգիա են խլում: Մենք LED լուսադիոդների համար չօգտագործեցինք տախտակի վրա 5 Վ կապը: LED- երից մինչև Arduino- ի յուրաքանչյուր միացում կատարվել է այնպես, ինչպես կանաչ մետաղալարն է վերևում: Մեր կարմիր, կապույտ և կանաչ LED- ները միացված են համապատասխանաբար Թվային 8 -րդ, 9 -րդ և 10 -րդ փիներին, որոնք նշանակված են մեր նկարում կարմիր, կապույտ և կանաչ մետաղալարերով:

Գծապատկեր 2

Վերոնշյալ դիագրամը օգտագործվել է ֆոտոընդդիմադիրը միացնելու համար: Մենք ինքներս մի քանի ուղղումներ կատարեցինք. սակայն հասկացությունները դեռ նույնն են: Ֆոտոռեզիստորը պետք է միացված լինի անալոգային քորոցին, որը մենք ունենք A1 կապում: Համոզվեք, որ 10K Օմ դիմադրիչ օգտագործեք ֆոտոընդդիմանչին ամենամոտ դիմադրության համար:

Գծապատկեր 3

Սա դիագրամ է, որն օգտագործվում է ջերմաստիճանի տվիչը միացնելու համար: Համոզված եղեք, որ այստեղ օգտագործվող տրանզիստորը չսխալեք ջերմաստիճանի տվիչի հետ: Նրանք գրեթե նույնական տեսք ունեն: Likelyերմաստիճանի տվիչի վրա, ամենայն հավանականությամբ, սենսորի հարթ կողմում գրված կլինի TMP կամ այլ սցենար: Այստեղ էլեկտրագծերը շատ պարզ են, մեր ջերմաստիճանի տվիչը միացված է սպիտակ մետաղալարով A0 անալոգային կապին:

Գծապատկեր 4

Վերոնշյալ նկարը օգտագործվել է DAGU Mini DC փոխանցման տուփը միացնելու համար: Փոխանցման տուփին ամրացված կանաչ մետաղալարն իրականում մեր նկարում դրան միացված կարմիր մետաղալարն է: Մեր մոդելի փոխանցման տուփը միացված է թվային կապիչ 11 -ին `նարնջագույն մետաղալարով: Համոզված եղեք, որ այստեղ օգտագործվող տրանզիստորը չսխալեք ջերմաստիճանի տվիչի հետ: Նրանք գրեթե նույնական տեսք ունեն: Likelyերմաստիճանի տվիչի վրա, ամենայն հավանականությամբ, սենսորի հարթ կողմում գրված կլինի TMP կամ այլ սցենար: Դուք այստեղ պետք է օգտագործեք տրանզիստորը, այլ ոչ թե ջերմաստիճանի տվիչը:

Քայլ 4: Arduino կոդ

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

Thermրագրավորվող թերմոստատի ծածկագիրը ստեղծելիս առաջին բաներից մեկն այն է, որ կարգավորեք սենսորները և ստեղծեք մի օղակ, որն անընդհատ ջերմաստիճանի ցուցիչներ կստանա ջերմաստիճանի ցուցիչից:

Temերմաստիճանի տվիչի և LED- ի կարգավորում.

tempPin = 'A0';%-ը սահմանում է անանուն գործառույթ, որը լարումը փոխարկում է ջերմաստիճանի tempCfromVolts = @(վոլտ) (վոլտ -0.5)*100; samplingDuration = 5; %վայրկյան: Որքա՞ն ժամանակ ենք մենք ցանկանում նմուշառել samplingInterval = 1; %Քանի՞ վայրկյան ջերմաստիճանի ընթերցումների միջև %սահմանեց ընտրանքի ժամանակների վեկտոր samplingTimes = 0: samplingInterval: samplingDuration; %հաշվարկել նմուշների քանակը `տևողության և ընդմիջման հիման վրա numSamples = երկարություն (samplingTimes); %վերաբաշխել ջերմաստիճանի փոփոխականներ և փոփոխական ընթերցումների քանակի համար, որը կպահի tempC = զրո (numSamples, 1); tempF = tempC; Այս անգամ մենք կօգտագործենք for loop ՝ ջերմաստիճանի նախնական որոշված քանակի համար ՝ ջերմաստիճանի ընթերցումների համար

For for loop:

ինդեքսի համար = 1: numSamples %կարդալ լարումը tempPin- ում և պահել փոփոխական վոլտերում = readVoltage (a, tempPin); tempC (ինդեքս) = -1*tempCfromVolts (վոլտ+0.3); tempF (ինդեքս) = tempC (ինդեքս)*(9/5) +32; %Displayուցադրել ֆորմատավորված ելք, որը փոխանցում է ընթացիկ ջերմաստիճանի ընթերցումը fprintf ('%երմաստիճանը %d վայրկյանում կազմում է %5.2f C կամ %5.2f F. / n',… samplingTimes (ինդեքս), tempC (ինդեքս), tempF (ինդեքս)); %նշեք, որ այս ցուցադրման ելքը տեսանելի կդառնա միայն միանգամից, երբ կոդը ավարտվի %կատարելուց հետո, եթե ծածկագիրը պատճենեք/տեղադրեք պարզ սկրիպտային ֆայլում: դադար (samplingInterval) %հետաձգում մինչև հաջորդ նմուշի ավարտը

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

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

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

Մենյուի կարգավորում.

ընտրություններ = {'Ավտոմատ', 'Ձեռնարկ'}; imode = ընտրացանկ ('Ռեժիմ, ընտրանքներ], եթե imode> 0 h = msgbox ([' Դուք ընտրեցիք 'ընտրանքներ {imode}]); else h = warndlg ('Դուք փակեցիք ընտրացանկը `առանց ընտրություն կատարելու') ավարտեք սպասել (h);

Ձեռնարկի ռեժիմը պահանջում է, որ օգտագործողը մուտքագրի ջերմաստիճան ջերմաստիճանի համար, այնուհետև ջերմաստիճանի տվիչից ստացված ցուցանիշների հիման վրա այն կսկսի կամ սառեցնել տունը տաքացնելու համար: Եթե ջերմաստիճանի տվիչի ընթերցումը ավելի բարձր է, քան սահմանված ջերմաստիճանը, այն կսկսի սառեցնել տունը: Եթե ջերմաստիճանի տվիչի ընթերցումը սահմանված ջերմաստիճանից ցածր է, այն կջերմացնի տունը:

Ձեռնարկի ռեժիմը կսկսվի.

if imode == 2 dlg_prompts = {'Ո՞ր ջերմաստիճանը կնախընտրեիք:'}; dlg_title = 'Temերմաստիճան'; dlg_defaults = {'68'}; opts. Resize = 'միացված'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); եթե դատարկ է (dlg_ans) h = warndlg ('Դուք չեղարկել եք inputdlg հրամանը'); else temp_manual = str2double (dlg_ans {1}) %[Ավելացնել ջերմաստիճանի կարգավորման կարգավորման սլայդ ներքևում] վերջ

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

Երմաստիճանի կարգավորման կարգավորում.

իսկ temp_manual <tempF writeDigitalPin (a, 'D9', 1) writeDigitalPin (a, 'D11', 1); ավարտել, մինչ temp_manual> tempF writeDigitalPin (a, 'D8', 1) writeDigitalPin (a, 'D11', 1); վերջ

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

Կարգավորեք ավտոմատ ռեժիմը.

elseif imode == 1 dlg_prompts = {'Նորմալ', 'Հեռու'}; dlg_title = 'Temերմաստիճանի կարգավորումներ'; dlg_defaults = {'68', '64'}; opts. Resize = 'միացված'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); եթե դատարկ է (dlg_ans) h = warndlg ('Դուք չեղարկել եք inputdlg հրամանը'); այլապես temp_normal = str2double (dlg_ans {1}) temp_away = str2double (dlg_ans {2}) end waitfor (h); %[Ավելացնել շարժման հայտնաբերման քայլ ներքևում]

Մենք նաև պետք է տեղադրենք շարժման սենսորը «Ավտոմատ» ռեժիմի կարգավորումների համար: Երբ շարժիչային դետեկտորը շարժում է կատարում, այն կպահպանի ջերմաստիճանը ներկա ջերմաստիճանի պարամետրում, հակառակ դեպքում այն կդնի հեռավոր ջերմաստիճանը:

Run_Motion_Detector (a, inf) while lightStr == 0 temp = temp_away while temp tempF writeDigitalPin (a, 'D6', 1) անկախ նրանից, թե ինչ կարմիր կապույտ լույս կա նաև շարժիչի մեջ օդափոխիչի գրելու համար DigitPin (a, 'D9', 1); ավարտը, երբ լույս շարժիչ երկրպագուների համար writeDigitalPin (a, 'D9', 1); վերջ վերջ

Ամբողջական կոդը կարելի է գտնել այստեղ:

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