Turinys:

„Smart Home“termostatas: 4 žingsniai
„Smart Home“termostatas: 4 žingsniai

Video: „Smart Home“termostatas: 4 žingsniai

Video: „Smart Home“termostatas: 4 žingsniai
Video: Zigbee Термостат для управления теплым водяным полом MOES BHT-006GAZB 2024, Lapkritis
Anonim
Išmaniųjų namų termostatas
Išmaniųjų namų termostatas

Mūsų išmaniųjų namų termostatas yra programa, kuri gali automatiškai sutaupyti namų ūkio pinigus už komunalines paslaugas, atsižvelgiant į asmens pageidavimus.

1 žingsnis: apžvalga

„Smart Home“termostatas naudoja temperatūros jutiklį, kad nustatytų namų temperatūrą. Šis temperatūros rodmuo įtraukiamas į programą, kurioje pagal pageidaujamą būsto savininko temperatūrą bus nuspręsta, ar oro kondicionavimo sistemai reikia šildyti ar vėsinti namą.

Yra du termostato režimai: rankinis ir automatinis. Rankinis režimas, kuris sureguliuos namų temperatūrą pagal bet kurią norimą vartotojo nustatytą temperatūrą. Automatinis termostato režimas automatiškai pakeis namo temperatūrą į vartotojo nustatytą temperatūrą. Automatiniam režimui bus du temperatūros nustatymai: išvykimo temperatūra ir esama temperatūra. Išvykimo temperatūra naudojama taupyti energiją keičiant termostatą į iš anksto nustatytą energijos taupymo temperatūrą, kai vartotojas nėra namuose. Esama temperatūra bus naudojama, kai vartotojas yra namuose ir nori patogios temperatūros. Kai automatinis termostato režimas, judesio jutikliai aktyviai ieško judesio, kad nustatytų, ar kas nors yra namuose, ar ne. Remiantis jų rodmenimis, namų temperatūra bus nustatyta kaip išvykimo temperatūra arba esama temperatūra.

2 žingsnis: dalys ir medžiagos

(15) Jungiamieji laidai

(4) 220 omų rezistoriai

(1) 10K omų rezistorius

(1) Temperatūros jutiklis

(1) Nuotraukų rezistorius

(1) „DAGU Mini DC“pavarų dėžė

(1) Diodas

(1) Tranzistorius

(1) Fotorezistorius

(1) Duonos lenta

(1) Arduino MKR

3 žingsnis: grandinė

Grandinė
Grandinė
Grandinė
Grandinė
Grandinė
Grandinė
Grandinė
Grandinė

1 paveikslas = didelis vaizdas kairėje

2 paveikslas = viršuje dešinėje

3 paveikslas = vidurinė dešinė

4 paveikslas = apačioje dešinėje

figūra 1

Naudodami aukščiau pateiktą schemą, sujungėme kiekvieną iš trijų šviesos diodų. Mes išdėstėme kiekvieną šviesos diodą, nes dirbome su didele duonos lenta. Mažesnėms duonos lentoms gali prireikti šviesos diodus sujungti arčiau. Be to, nereikia maitinti duonos lentos, nes šviesos diodai sunaudoja tiek mažai energijos. Šviesos diodams nenaudojome 5V jungties ant duonos lentos. Kiekvienas ryšys nuo šviesos diodų prie mūsų „Arduino“buvo padarytas taip, kaip žalia viela yra aukščiau. Mūsų raudoni, mėlyni ir žali šviesos diodai yra prijungti prie atitinkamai 8, 9 ir 10 skaitmeninio kaiščio, mūsų paveikslėlyje pažymėti raudona, mėlyna ir žalia viela.

2 pav

Aukščiau pateikta schema buvo naudojama fotorezistoriui prijungti. Mes padarėme keletą savo pataisymų; tačiau sąvokos vis dar yra tos pačios. Fotorezistorius turi būti prijungtas prie analoginio kaiščio, kurį turime kaištyje A1. Arčiausiai fotorezistoriaus esančiam rezistoriui būtinai naudokite 10K omą.

3 pav

Ši schema naudojama temperatūros jutikliui prijungti. Nepamirškite supainioti čia naudojamo tranzistoriaus su temperatūros jutikliu. Jie atrodo beveik identiški. Temperatūros jutiklio plokščioje jutiklio pusėje greičiausiai bus parašytas TMP arba koks nors kitas scenarijus. Laidavimas čia yra labai paprastas, mūsų temperatūros jutiklis yra prijungtas prie analoginio kaiščio A0 su baltu laidu.

4 pav

Aukščiau esanti nuotrauka buvo naudojama „DAGU Mini DC“pavarų dėžės vielai prijungti. Žalia viela, pritvirtinta prie pavarų dėžės, iš tikrųjų yra raudona viela, prijungta prie mūsų paveikslėlyje. Pavarų dėžė prie mūsų modelio oranžine viela prijungta prie skaitmeninio kaiščio 11. Nepamirškite supainioti čia naudojamo tranzistoriaus su temperatūros jutikliu. Jie atrodo beveik identiški. Temperatūros jutiklio plokščioje jutiklio pusėje greičiausiai bus parašytas TMP arba koks nors kitas scenarijus. Čia turite naudoti tranzistorių, o ne temperatūros jutiklį.

4 žingsnis: „Arduino“kodas

Čia paaiškinamos svarbiausios kodo dalys. Kodas neveiks tik su tuo, kas čia pateikta. Norėdami gauti visą darbo kodą, puslapio apačioje yra nuoroda.

Kurdami programuojamo termostato kodą, vienas iš pirmųjų dalykų, kurį turite padaryti, yra nustatyti jutiklius ir sukurti kilpą, kuri nuolat gaus temperatūros rodmenis iš temperatūros jutiklio.

Temperatūros jutiklio ir šviesos diodo nustatymas:

tempPin = 'A0';%apibrėžia anoniminę funkciją, kuri įtampą paverčia temperatūra tempCfromVolts = @(voltai) (0,5 volto)*100; mėginių ėmimo trukmė = 5; %sekundžių. Kiek laiko norime imti mėginius atrankaiInterval = 1; %Kiek sekundžių tarp temperatūros rodmenų %nustatyti mėginių ėmimo laiko vektorių samplingTimes = 0: samplingInterval: samplingDuration; %apskaičiuoja mėginių skaičių pagal trukmę ir intervalą numSamples = ilgis (samplingTimes); %iš anksto paskirstyti temp kintamuosius ir rodmenų skaičiaus kintamąjį, kuriame bus saugomi tempC = nuliai (numSamples, 1); tempF = tempC; %Šį kartą naudosime ciklą, kad iš anksto nustatytume %temperatūros rodmenų skaičių

Kilpa:

indeksui = 1: numSamples %nuskaito įtampą tempPin ir saugo kintamųjų voltų voltais = readVoltage (a, tempPin); tempC (indeksas) = -1*tempCfromVolts (voltai+0,3); tempF (indeksas) = tempC (indeksas)*(9/5) +32; %Rodyti suformatuotą išvestį, perduodančią esamą temperatūros rodinį fprintf ('Temperatūra %d sekundėje yra %5,2f C arba %5,2f F. / n',… samplingTimes (indeksas), tempC (indeksas), tempF (indeksas)); %pastaba: šis rodomas vaizdas bus matomas tik iškart po to, kai kodas bus baigtas vykdyti, nebent nukopijuosite/įklijuosite kodą į paprastą scenarijaus failą. pauzė (samplingInterval) %vėlavimas iki kito mėginio pabaigos

Tada sukuriame savo vartotojo meniu, kad vartotojas galėtų nuspręsti, ar įjungti termostatą į rankinį, ar automatinį. Taip pat sukuriame klaidos kodą, jei vartotojas nepasirenka nė vienos iš dviejų parinkčių.

Rankinio režimo meniu reikalauja, kad vartotojas nustatytų termostato temperatūros numerį, tada jis, remdamasis rodmenimis, šildys namus, atvėsins namus arba veiks tuščiąja eiga. Norėdami nustatyti šią kodo dalį, naudojote temperatūros jutiklio temperatūros rodmenis ir sukūrėte kodą, kuris atvėsins namus, kai temperatūra bus aukštesnė už nustatytą temperatūrą, ir šildys namus, kai temperatūra bus žemesnė už nustatytą temperatūrą.

Gavę temperatūros rodmenis, galite sukurti kodą, kuris nurodys termostatui atvėsinti namus, kai temperatūra yra aukštesnė už nustatytą temperatūrą, ir šildyti namus, kai temperatūra yra žemesnė už nustatytą temperatūrą. Prototipo atveju mėlyna lemputė užsidega, kai termostatas turi atvėsti, o raudona lemputė užsidega, kai termostatas turi įkaisti.

Meniu sąranka:

pasirinkimai = {'Automatinis', 'Rankinis'}; imode = meniu ('Režimas', pasirinkimai), jei imode> 0 h = msgbox (['Jūs pasirinkote' pasirinkimus {imode}]); else h = warndlg ('Jūs uždarėte meniu nepasirinkę') end waitfor (h);

Rankinis režimas reikalauja, kad vartotojas įvestų termostato temperatūrą, tada, remdamasis temperatūros jutiklio rodmenimis, jis pradės arba vėsinti namo šildymo namus. Jei temperatūros jutiklio rodmenys viršys nustatytą temperatūrą, jis pradės vėsinti namus. Jei temperatūros jutiklio rodmenys yra žemesni už nustatytą temperatūrą, jis šildys namus.

Rankinis režimas prasidės:

if imode == 2 dlg_prompts = {'Kokios temperatūros norėtumėte?'}; dlg_title = 'Temperatūra'; dlg_defaults = {'68'}; opts. Resize = 'įjungtas'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty (dlg_ans) h = warndlg ('Atšaukėte komandą inputdlg'); else temp_manual = str2double (dlg_ans {1}) %[Pridėti temperatūros reguliavimo sąrankos skaidrę žemiau] pabaiga

Rankinio režimo „if“teiginio viduje turite parašyti meniu sąsają, kad vartotojas galėtų pasirinkti norimą namų temperatūrą, tada įdiekite tam tikrą teiginį, kuris reguliuos namų temperatūrą.

Temperatūros reguliavimas:

tuo tarpu temp_manual <tempF writeDigitalPin (a, 'D9', 1) writeDigitalPin (a, 'D11', 1); pabaiga, kol temp_manual> tempF writeDigitalPin (a, 'D8', 1) writeDigitalPin (a, 'D11', 1); galas

Automatinis režimas reikalauja daugiau įėjimų nei rankinis. Įjungęs automatinį režimą, vartotojas savo termostatui nustatys įprastą ir išvykimo temperatūrą. Pasirinkęs šias parinktis, atsižvelgdamas į tai, kuriame režime yra termostatas, jis grįš į temperatūros reguliavimo režimą

Nustatykite automatinį režimą:

elseif imode == 1 dlg_prompts = {'Normal', 'Away'}; dlg_title = 'Temperatūros nustatymai'; dlg_defaults = {'68', '64'}; opts. Resize = 'įjungtas'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty (dlg_ans) h = warndlg ('Atšaukėte komandą inputdlg'); else temp_normal = str2double (dlg_ans {1}) temp_away = str2double (dlg_ans {2}) pabaigos laukimas (h); %[Pridėti judesio detektoriaus žingsnį žemiau]

Taip pat turime nustatyti judesio jutiklį automatinio režimo nustatymams. Kai judesio detektorius surenka judesį, jis išlaikys esamą temperatūrą, priešingu atveju nustatys tolimą temperatūrą.

Run_Motion_Detector (a, inf), o lightStr == 0 temp = temp_away, o temp tempF writeDigitalPin (a, 'D6', 1) kokia raudona lemputė yra taip pat ventiliatoriaus rašymo variklyjeDigitalPin (a, 'D9', 1); pabaiga pabaiga, kol šviesaStr == 1 temp = temp_normal writeDigitalPin (a, 'D6', 1) %pasikeičia į bet kokį smeigtuką, kuriame yra įprasta šviesa, o temp tempF writeDigitalPin (a, 'D6', 1) taip pat įjungta raudona lemputė variklis, skirtas ventiliatoriaus rašymuiDigitalPin (a, 'D9', 1); pabaiga galas

Visą kodą rasite čia.

Rekomenduojamas: