
Osnovnye tezisy ili o chem eta stat'ya
Nadaljujemo s ciklom člankov o ShIoTiny — vizualno programirljivem krmilniku na osnovi čipa ESP8266.
V tem članku je razloženo na primeru projekta upravljanja zračenjem v kopalnici ali drugem prostoru z visoko vlažnostjo, kako zgraditi program za ShIoTiny.
Prejšnji članki v seriji.
Povezave
Uvod
Razumevanje brez izkušenj ne obstaja. To je resnica, ki jo potrjuje čas in generacije. Zato ni nič boljšega za učenje praktičnih veščin, kot so poskusi samostojnega ustvarjanja nečesa. Primeri, ki prikazujejo, kaj je mogoče narediti in česa se je bolje izogibati, bodo več kot dobrodošli. Tuje napake, seveda, ne morejo preprečiti nastanka lastnih napak, lahko pa pomagajo zmanjšati število slednjih.
Vprašanja in pisma bralcev prejšnjih člankov so me spodbudila, da naredim majhen projekt-primer upravljanja zračenjem, da pokažem, kako delujejo enote ShIoTiny.
Prvotna ideja, na kateri je temeljil krmilnik ShIoTiny — črpališče za namakanje — ni vsem primerna in zanimiva. Zato sem vzel vsem razumljivo in mnogim koristno sistem za upravljanje zračenja kot primer.
Povem, da ideja projekta ni moja, ampak in nato prilagodil k ShIoTiny.
Najprej razumi, kaj želiš
Proces izboljševanja je neskončen. In prav ta lastnost je pokopala številne dobre ideje in projekte. Razvijalec namesto, da bi izdal morda neidealno, a delujočo stvar, je nadaljeval z njenim popolnjevanjem. In je izboljševal, dokler konkurenti niso začeli prehitevati, izdajo morda neidealno (včasih povsem grozljivo), a delujočo rešitev.
Zato je zelo pomembno vedeti, kje postaviti piko v projektu. Ali, drugače povedano, moramo določiti, kaj želimo doseči na koncu projekta iz tistega, kar imamo na začetku. V ruščini obstaja čudovita kratka in jedrnata beseda 'načrt', ki se uporablja za dokument, ki se pripravlja prav z namenom opisati pot do nastanka nečesa, katerega duševno zaostali prevajalci in defektni menedžerji v zadnjem času nekako začeli imenovati 'cestna karta'. No, naj bog poskrbi za njih.
Naš načrt bo takšen. Predpostavimo, da obstaja prostor, v katerem lahko vlaga občasno močno naraste. Na primer, kopalnica ali kuhinja. Vlaga je neprijetna in načinov, kako se z njo boriti, je veliko: prezračevati prostor. Načinov prezračevanja je precej, vendar se bomo verjetno izognili eksotičnim in zastarelim metodam, kot so sužnji s podobami, in se osredotočili na običajen ventilator. Ventilatorji so cenejši, pa tudi lažje jih je najti pri nas.
Na kratko, želimo upravljati ventilator: ga vklopiti in, seveda, izklopiti. Natančneje, želimo, da se sam vklopi in izklopi, ko je to potrebno.
Preostalo je, da določimo: pod kakšnimi pogoji se mora ventilator vklopiti in pod kakšnimi izklopiti.
Tu je vse očitno: če je vlaga nad določeno mejno vrednostjo, se ventilator vklopi in odpuha zrak; ko se vlaga vrne nazaj v normalo, se ventilator izklopi.
Pozorni bralec bo takoj opazil besedo 'določene'. Kdo jo je določil? Kako je bila določena?
Mejno vlago lahko določimo na več načinov. Obravnavali bomo dva: prvi - z uporabo spremenljivega upora in drugi - prek omrežja s protokolom MQTT. Vsak od teh načinov ima svoje prednosti in slabosti, ki jih bomo obravnavali pozneje.
Za tiste, ki niso razumeli, pojasnjujem, da je 'mejna vlaga' določena raven vlage, pri kateri je potrebno vključiti ventilator.
Naslednje vprašanje: ali naj uporabniku omogočimo, da ventilator aktivira neposredno? To pomeni, da ne glede na raven vlage, s pritiskom na gumb? To možnost bomo predvideli. Ventilator je namreč potreben ne le pri povečani vlagi, temveč tudi za odstranjevanje neprijetnih vonjav iz prostora, ki jih ljudje imenujejo 'smrad'.
Torej, razumeli smo, kaj želimo, in tudi nekoliko, kako bo to delovalo. Na kratko povzemimo vse funkcije našega sistema upravljanja prezračevanja:
- nastavitev mejne ravni vlage (dve možnosti);
- merjenje ravni vlage;
- samodejno vklop ventilatorja;
- samodejno izklop ventilatorja;
- ročno vklop ventilatorja (s pritiskom na gumb).
Torej, načrt je jasen. Potrebno je uresničiti vse zgoraj navedene funkcije v našem programu. Na podlagi tega "načrta" bomo ukrepali. Najprej bomo narisali strukturalno shemo naprave.
Strukturalna shema naprave
Na splošno bomo imeli takšne sheme dve. Prva je za različico, kjer je pragovna raven vlage določena z variabilnim upornikom. Druga shema pa je za različico, kjer je pragovna raven vlage določena preko omrežja po protokolu MQTT.
Toda ker se ti shemi razlikujeta le po enem elementu — variabilnem uporniku "nastavitve pragovne ravni vlage", bomo narisali le eno strukturalno shemo. Seveda strukturalna shema po GOST-u izgleda drugače. Vendar se ne osredotočamo na stare inženirje, temveč na mlado generacijo. Zato je razumljivost pomembnejša.

Torej, kaj vidimo na sliki? Ventilator je povezan na rele Relay1 kontrolerja. ShIoTinyOpozarjam, da je ventilator naprava, ki deluje pod visokim napetostjo. Zato, če kdo stori to sam — bodite previdni. To pomeni, da je predno svoje prste ali merilne naprave vstavite v shemo — izklopite vsaj ventilator. In še en nasvet. Če vaš ventilator presega 250W, ga ne povezujejte neposredno na ShIoTiny — samo preko zaganjača.
Torej, glede ventilatorja imamo vse jasno. Zdaj gumb "ročnega vklopa" ventilatorja. Povezan je na vhod Input1. Tukaj ni več kaj razlagati.
Senzor temperature in ravni vlage DHT-11 (ali DHT-22 ali njihovi analogi). Za njegovo povezovanje je predviden poseben vhod na kontrolerju. ShIoTinyKot je razvidno na sliki — povezovanje takšnega senzorja tudi ne predstavlja težav.
Nazadnje pa variabilni upornik, ki določa pragovno raven vlage. Natančneje — delilnik, sestavljen iz variabilnega in stacionarnega upornika. Težav s povezovanjem ni, vendar pojasnim, da je vgrajen ADC na ESP8266 preračunan na maksimalno 1 Volt. Zato potrebujemo napetostni delilnik približno 5-krat.
In še enkrat naj spomnim, da ta delilnik ni potreben, če je pragovna raven vlage določena preko omrežja po protokolu MQTT.
Začnemo z ustvarjanjem algoritma delovanja naprave v urejevalniku ElDraw ShIoTiny. Kako priti do tega urejevalnika, lahko preberete v prejšnjih člankih ali v navodilih, povezava do katerih je na začetku članka.
Prva možnost, najpreprostejša
Začnimo s preprostim: vklop relaja Relay1 ob preseženju praga vlažnosti za določen čas.

Kot vidimo, ni nič zapletenega: le štirje vozli, razen vozlov-komentarjev. DHT11 — to je senzor temperature in vlažnosti (lahko ga zamenjate s DHT22).
Konstanta CONST — prag vlažnosti, v odstotkih.
Primerjalnik — vozlišče, ki primerja dve številki in daje na izhodu 1, če je predpogoj izpolnjen, in 0, če pogoj ni izpolnjen.
V našem primeru bo tak pogoj A>B, gde A — izmerjena raven vlažnosti, merjena s senzorjem, in B — prag iste vlažnosti.
Ko izmerjena raven vlažnosti (A) preseže prag vlažnosti (B), se na izhodu primerjalnika A>B pojavi 1 in relé se vklopi. In obratno, ko raven vlažnosti pride v normalo (to pomeni, da A<=B), se na izhodu primerjalnika A>B se pojavi 0 in relé se izklopi.
Vse jasno? Kdor ne, naj prebere še enkrat ali si ogleda opis delovanja vozlov v navodilih.
Opažam, da se podatki s senzorja DHT11 osvežujejo približno enkrat na 10 sekund. Zato se relé ne more vklopiti in izklopiti pogosteje kot enkrat na 10 sekund.
Vse bi bilo v redu, vendar bi radi prag vlažnosti nastavili s pomočjo potenciometra. Nič lažjega!

Preprosto zamenjamo vozlišče-konstanto z vozliščem ADC. Saj smo prav na ADC priključili delilec napetosti s potenciometrom.
Napetost na vhodu ADC se spreminja od 0 do 1 V. Medtem pa se vlažnost na izhodu senzorja spreminja od 0 do 100 %. Kako jih primerjamo? Preprosto. Vozlišče ADC v ShIoTiny ne le, da meri napetost na vhodu, ampak jo zna tudi skalirati in premakniti.
To pomeni, da bo na izhodu vozlišča ADC1 (ADC) vrednost X, izračunana po formuli

, gde
— napetost na vhodu ADC (od 0 do 1 V); k — razpon (ADC range) in b— pomik (ADC offset). Tako, če nastavimo k=100 in b=0, se bo pri spremembi
v razponu od 0 do 1, vrednost X na izhodu vozlišča ADC spreminjala v razponu od 0 do 100. Torej, numerično enaka razponu spremembe vlažnosti od 0 do 100%.
Ali, poenostavljeno, z vrtenjem motorja z nastavljivim upornostjo lahko nastavite pragovno raven vlažnosti od 0 do 100. Edina nevšečnost je, da ni nobenih prikazovalnih naprav. Ampak v praksi, če na motorju z nastavljivim upornostjo naredimo 6 delitev 0%, 20%, 40%, 60%, 80%, 100%), je to dovolj za nastavitev pragovne ravni vlažnosti.
Kako nastaviti faktorje k — razpon (ADC range) in b-odstopanje (ADC offset)? Preprosto kot tvorba jabolka! Kliknite z miško na vozlišče ADC1 in pred vašimi očmi se bo odprlo nastavitveno okno. V njem lahko nastavite vse, kar potrebujete. Za naš primer bo to takšno okno, kot je na sliki.

Torej, imamo preprosto delujočo rešitev. Začnimo jo izboljševati.
Mimogrede, preprosta rešitev ima eno prednost — ne potrebuje interneta. Je povsem avtonomna.
Druga različica, priključimo gumb
Vse deluje in vsi so veseli. Ampak imamo težavo, ne moremo vklopiti prezračevanja prisilno. Že smo se dogovorili, da bo na vhodu Input1 priključen gumb, ki bo vklapljal in izklapljal ventilator prisilno, ne glede na senzor vlažnosti.
Prišel je čas, da obdelamo ta gumb v naši shemi-programu.

Blok obdelave pritiska gumba je označen z oranžno črto. Predstavlja števec pritiska gumba, ki se ponastavi na nič, ko vrednost na njegovem izhodu preseže enko (zelena črta, izhod vozlišča CT).
Vse deluje tako preprosto, kot prej: števec CT šteje pritiske gumba, priključenega na vhod Input1. To pomeni, da se vrednost na izhodu tega števeca z vsakim pritiskom gumba povečuje za 1.
Ko ta vrednost postane enaka dvema (to je več kot 1), se na izhodu komparatorja A>B pojavlja 1. In ta 1 ponastavi števec CT na nič. Misli se komparator, spodnji po shemi!
Tako imamo dve stanja našega gumba — 0 in 1. Če bi potrebovali več stanj (3 ali 4 ali še več) — bi bilo dovolj spremeniti konstanto CONST z enke na drugo vrednost.
Torej imamo dva pogoja za vklop ventilatorja: presežek nastavljene ravni vlažnosti in enkratno pritiskanje gumba. Ko je izpolnjen kateri koli od pogojev, se ventilator vklopi. In deloval bo, dokler ne pritisnejo gumba In ravni vlažnosti ne pride v normalo.
Seveda, algoritem lahko še dodatno zapleteš, vendar tega ne bomo počeli — pustimo prostor za ustvarjalnost tistim, ki to želijo.
Tretja možnost, povezujemo se z internetom
Vse, kar smo opisali, deluje povsem dobro. Ampak, kje so? Kajti vsak najstniški hipster-haker-skrivar se bo posmehoval tistemu, ki obrača gumb in pritiska tipko, namesto da bi upravljal s pametnim telefonom! Obrat gumbov — to je 'ne moderno'. Ampak drgnjenje prsta po pametnem telefonu, dokler prst ne krvavi — to je vrhunec želja hipster-hakerja-skrivarja (nikoli nisem mogel ločiti vseh — tako da, če sem se zmotil, oprosti).
Toda bodimo milostni do omenjenih oseb. Upravljanje preko interneta ima tudi resnične prednosti. Prvič, to je preglednost. Obstaja množica aplikacij za vse platforme, ki omogočajo s par dotiki ustvariti povsem uporabno nadzorno ploščo našega kontrolerja-karlsona. Drugič, to je možnost oddaljenega spremljanja vlažnosti v prostoru. In, tretjič, lahko vidimo ne samo to, ali ventilator deluje — se vrti ali ne, ampak tudi, kakšna je nastavljena meja vlažnosti. In če se ventilator vklopi samodejno ali ročno. Na splošno vse, kar si želite.
Seveda, za nek ventilator je velika čast — toliko pozornosti. Ampak to je le primer.
Torej, za povezavo z internetom bomo uporabili tehnologijo MQTT in istoimenski protokol.
Da bi lahko uporabili to tehnologijo, potrebujemo MQTT-broker. To je poseben strežnik, ki oskrbuje MQTT-stranke, na primer ShIoTIny in vaš pametni telefon.
Osnovna ideja tehnologije MQTT je, da vsak od strank objavi na MQTT-brokerju (strežniku) poljubne podatke pod določenim imenom (to imenujemo topic v terminologiji MQTT). Druge stranke se lahko naročijo na poljubne podatke po njihovem imenu (topic) in prejemajo novo objavljene podatke. To pomeni, da se izmenjava podatkov odvija po principu klient-broker-klient.
Jaz ne bom se osredotočil na podrobnosti. Na internetu je množica člankov in učnih vsebin o tem, kako deluje MQTT in kakšne so obstoječe aplikacije za ustvarjanje nadzornih plošč. Preprosto bom pokazal, kako sprejemati in objavljati podatke preko ShIoTiny.
Kot broker sem uporabljal , ampak princip je povsod enak.
Torej, predpostavimo, da ste se registrirali na MQTT-brokerju. Na splošno vam posrednik izda (ali zahteva, da ustvarite) uporabniško ime in geslo (za avtorizacijo) ter vrata za povezavo. Povežite se ShIoTiny k z MQTT posrednikom na dva načina — z običajno povezavo in , čeprav se tega zelo sramuje. (SSL).
Vse te nastavitve ShIoTiny vnesite na zavihku Omrežje, odseku MQTT povezava do strežnika.

Če vaš MQTT-broker ne zahteva avtorizacije — pustite polji za uporabniško ime in geslo prazni.
Parametri MQTT predpon zahteva posebno razlago.
Predpon MQTT parametrov je niz, ki se doda imenu teme (topic) pri objavi in naročanju na MQTT posredniku. Da določite MQTT predpon za vaš krmilnik, ga morate preprosto vnesti v polje „Predpon teme MQTT» («MQTT predpon“). Predpon vedno začne s poševnico («/»)! Če v polju ne vnesete poševnice — se ta doda samodejno. V predponu ni mogoče uporabljati znakov «#» in «+». Druge omejitve ni.
Na primer, če objavite parameter „status“ (ali se nanj naročate), in je vaš predpon določen kot „/shiotiny/“, bo ta parameter objavljen na posredniku z imenom „/shiotiny/status“. Če je vaš predpon prazen, bodo vsi parametri na posredniku začeli s poševnico («/»): «status“ se bo objavil kot „/status».
Torej, predpostavimo, da ste se registrirali na MQTT-brokerju in ste dobili uporabniško ime, geslo in vrata. Nato ste te nastavitve vnesli na zavihku Omrežje, odseku MQTT povezava do strežnika kontrolerja. ShIoTiny.
Predpostavimo, da je predpon nastavljen na „/room/».
Začeli bomo s tem, da bomo objavili stanje vseh ključnih parametrov: rele Realay1, stanje ročnega vključevanja, stanje samodejnega vključevanja in na koncu pragovnih ter trenutnih nivojev vlažnosti. In kot bonus — temperaturo v prostoru. Kako to doseči, si oglejte na sliki.

Kot vidite, se razlikuje od prejšnje različice — le vozlišča „MQTT objava“. Ob upoštevanju predpona se objavljajo naslednji parametri:

Kot vidite, je stanje sistema pred nami!
Toda ne želimo le opazovati, temveč tudi upravljati. Kaj storiti? Zelo preprosto. Odrekli se bomo nastavljanju pragovne ravni vlažnosti s pomočjo ADC in uporabnega upornika ter bomo določali to pragovno raven vlažnosti direktno s pametnim telefonom! MQTT Odstranimo vozlišče ADC iz sheme in vanjo vključimo tri nova vozlišča:

FLASH shranjevanje FLASH obnova, MQTT opis in Funkcija vozlišča.
je očitna: prejme parameter Funkcija vozlišča (pragovna raven vlažnosti) s /room/trigHset MQTT posrednika . Kaj pa potem stori z podatki? Preprosto jih vrne vozlišču. FLASH obnova, ki v tem primeru shrani te podatke v neizbrisljivo spomin pod imenom trigH. Po tem, vozlišče MQTT opis prebere iz neizbrisljivega spomina podatke pod imenom trigH in kaj se zgodi naprej, že vemo.
Zakaj vse te zapletenosti? Zakaj ne bi takoj predali pridobljenih podatkov vhodu komparatorja?
Kot je dejal tovariš Š. Holmes — to je elementarno! Nihče ne garantira, da se bo vaše naprave po vklopu povezalo z z MQTT posrednikom. Vlažnost je treba meriti. In ventilator je treba vključiti. Brez informacij o pragu vlažnosti pa to ni mogoče! Zato naše naprave ob vklopu pridobijo prej shranjen prag vlažnosti iz neizbrisljivega spomina in ga uporabijo za sprejemanje odločitev. Ko pa se vzpostavi povezava z MQTT posrednikom in nekdo objavi novo vrednost /room/trigHset, se bo ta nova vrednost uporabljala.
Nato lahko izmislite vse, kar želite. Na primer, poleg vlažnosti vključite še merjenje temperature. Ali dodajte 'pametno' upravljanje osvetlitve (imamo še dve neizkoriščeni rele in dva vhoda). Vse je v vaših rokah!
Zaključek
Tako smo obravnavali nekaj primerov izvajanja najpreprostejšega kontrolerja, temelječega na ShIoTiny. Morda bo to nekomu koristilo.
Kot vedno, predloge, želje, vprašanja, tiskarske napake in drugo — na email: shiotiny@yandex.ru
Izvor: habr.com
