
Főbb tézisek, avagy miről szól ez a cikk
Folytatjuk a cikkek ciklusát a ShIoTiny — vizuálisan programozható vezérlőről, amely chip alapú ESP8266.
Ebben a cikkben bemutatásra kerül a fürdőszoba vagy más, magas páratartalmú helyiségek szellőzésének vezérlésének példáján, hogy hogyan épül fel a program a ShIoTiny.
A sorozat korábbi cikkei.
Hivatkozások
Bevezetés
Tapasztalat nélkül nincs megértés. Ez egy idővel és generációkkal kipróbált igazság. Így nincs is jobb a gyakorlati készségek megszerzésére, mint saját magunk valami megvalósítása. Az olyan példák, amelyek bemutatják, hogy mit érdemes tenni, és mit nem, rendkívül hasznosak lesznek. A külső hibák természetesen nem tudják megelőzni a saját hibáink előfordulását, de segíthetnek csökkenteni azok számát.
Az előző cikkek olvasóinak kérdései és levelei arra ösztönöztek, hogy készítsek egy kis projektpéldát a szellőzés vezérlésére, hogy bemutassam, hogyan működnek a ShIoTiny modulok.
Az alapötlet, amely alapján a vezérlő létrejött ShIoTiny — a szivattyúzási és öntözési állomás — nem biztos, hogy mindenki számára megfelelő és érdekes. Ezért egy mindenki által érthető és sokak számára hasznos szellőzésvezérlési rendszert választottam példaként.
Azt mondom, hogy a projekt ötlete nem az enyém, hanem és aztán alkalmaztam a ShIoTiny.
Először is értsd meg, mit akarsz
A fejlesztési folyamat végtelen. Pontosan ez a tulajdonság pusztította el számos jó ötletet és projektet. A fejlesztő, ahelyett, hogy kiadott volna egy nem tökéletes, de működő dolgot - folytatta annak tökéletesítését. És addig tökéletesítette, amíg a versenytársak megelőzték őt, kiadva nem tökéletes (s gyakran nyíltan pocsék), de működő megoldásokat.
Ezért nagyon fontos tudni, hol kell pontot tenni a projekt végére. Más szavakkal, meg kell határozni, hogy mit szeretnénk elérni a projekt végén abból, amink van a kezdetén. Az orosz nyelvben a dokumentumra, amelyet kifejezetten arra készítenek, hogy leírják valami létrehozásának folyamatát, van egy csodálatos, rövid és tömör szó: „terv”, amelyet az értelemben hátramaradt fordítók és hibás menedzserek mostanában „úti tervnek” kezdenek hinni. Hát, legyenek áldottak.
A tervünk a következőképpen alakul. Tételezzük fel, hogy van egy helyiség, ahol a páratartalom időnként intenzíven megnőhet. Például egy fürdőszoba vagy konyha. A magas páratartalom kellemetlen, és a harc vele olyan régi, mint a világ: szellőztetni kell a helyiséget. Szellőztetési módszerek számosak. De mi inkább lemondunk az egzotikus és elavult módszerekről, mint például a legyesekről, és maradunk a sima ventilátornál. A ventilátorok olcsóbbak és könnyebben találhatók a mi vidékünkön.
Egy szóval, azt szeretnénk, hogy a ventilátorunk működjön: be- és kikapcsolhatjuk. Pontosabban, azt szeretnénk, hogy ő maga kapcsoljon be és ki, amikor szükséges.
Meg kell határoznunk, hogy milyen körülmények között kell a ventilátornak bekapcsolnia és mikor kikapcsolnia.
Ez nyilvánvaló: ha a páratartalom meghalad egy adott küszöbértéket, a ventilátor bekapcsol és eltávolítja a levegőt; ha a páratartalom normalizálódik, a ventilátor kikapcsol.
A figyelmes olvasó azonnal felfigyel a 'megadott' szóra. Ki adta meg? Hogyan adta meg?
A küszöb páratartalom megadásának több módja is van. Két módszert fogunk megnézni: az egyik egy változtatható ellenállás segítségével, a másik pedig a hálózaton keresztül, MQTT protokoll használatával. Mindkét módszernek megvannak a maguk előnyei és hátrányai, amelyeket később tárgyalunk.
Aki nem érti, annak elmagyarázom, hogy a 'küszöb páratartalom' az a páratartalom szint, amelynek túllépése esetén a ventilátor bekapcsolása szükséges.
A következő kérdés: adjunk-e a felhasználónak lehetőséget a ventilátor közvetlen bekapcsolására? Vagyis függetlenül a páratartalom szintjétől, egy gombnyomással? Ezt a lehetőséget biztosítani fogjuk. Hiszen a ventilátor nemcsak megnövekedett páratartalom esetén lehet szükséges, hanem például a helyiségből kellemetlen szagok eltávolítására is, amit népnyelven 'büdösségnek' hívnak.
Tehát megértettük, hogy mit szeretnénk, és már egy kicsit azt is, hogyan fog működni. Röviden felsoroljuk az általunk tervezett szellőzőrendszer funkcióit:
- küszöb páratartalom beállítása (két lehetőség);
- páratartalom mérése;
- automatikus ventilátor bekapcsolás;
- automatikus ventilátor kikapcsolás;
- kézi ventilátor bekapcsolás (gombnyomásra).
Tehát, a terv világos. Meg kell valósítani az összes fent említett funkciót a programunkban. Ezen „terv” alapján fogunk cselekedni. Először is, rajzoljunk egy struktúrált ábrát az eszközről.
Az eszköz struktúrált ábrája
Általában véve, ilyen ábránk két lesz. Az első — a variáció, ahol a küszöbérték nedvességet változó ellenállás határozza meg. A második ábra — a variáció, ahol a küszöbérték nedvességet hálózaton keresztül, MQTT protokollal állítják be.
De mivel ezek az ábrák csak egy elemben fognak eltérni — a változó ellenállás „kültéri nedvesség küszöbbeállítása”, ezért csak egy struktúrált ábrát fogunk rajzolni. Természetesen a struktúrált ábra a GOST szerint máshogy néz ki. De nem a mérnökökre orientálódunk, hanem a fiatalabb generációra. Ezért a szemléltetés fontosabb.

Tehát, mit látunk a képen? A ventilátor a reléhez csatlakozik Relay1 vezérlőjéhez ShIoTiny. Felhívom a figyelmet, hogy a ventilátor olyan eszköz, amely magas feszültség alatt működik. Ezért, ha valaki maga akarja elkészíteni ezt — legyen óvatos. Vagyis, legalábbis mielőtt ujjakat vagy mérőeszközöket dugna a sémába — áramtalanítsa legalább a ventilátort. A második megjegyzés: Ha a ventilátora nagyobb teljesítményű, mint 250W, akkor közvetlenül a ShIoTiny nem szabad csatlakoztatni — csak indítóval.
A ventilátorról most már beszéltünk. Most nézzük meg a „kézi bekapcsolás” gombot a ventilátor számára. Ez az Input1betétjéhez csatlakozik. Itt már nem is érdemes többet magyarázni.
A hőmérséklet- és nedvességérzékelő DHT-11 SysWOW64 DHT-22 vagy hasonlóik). A csatlakoztatására a vezérlőn speciális bemenet áll rendelkezésre ShIoTiny. Amint látható a képen — ennek a szenzor csatlakoztatása semmilyen problémát nem okoz.
Végül pedig a változó ellenállás, amely meghatározza a küszöbérték nedvességet. Pontosabban — osztó, amely változó és állandó ellenállásokból áll. Nincs probléma a csatlakoztatásával, de megjegyzem, hogy a beépített ADC a ESP8266 maximum 1 Voltra van kalibrálva. Ezért szükség van egy feszültségosztóra körülbelül 5 szoros.
És ismét emlékeztetem, hogy erre az osztóra nincs szükség, ha a küszöbérték nedvességet a hálózaton keresztül MQTT protokollal állítják be.
Kezdjük el a berendezés működési algoritmusának összeállítását az ElDraw ShIoTiny szerkesztőben. Arról, hogyan juthatunk el ebbe a szerkesztőbe, a korábbi cikkekben vagy az utasításokban található hivatkozásban olvashat.
Első lehetőség, a legegyszerűbb
Kezdjük azzal, hogy a relét bekapcsoljuk Relay1 a meghatározott időre túllépett páratartalom küszöbértéke alapján.

Ahogy látjuk, semmi bonyolult: mindössze négy csomópontunk van, a kommentáló csomópontokat nem számítva. DHT11 — ez a hőmérséklet- és páratartság-érzékelő (cserélhető a DHT22).
Állandó CONST — a páratartalom küszöbértéke, százalékban.
A komparátor — egy csomópont, amely két számot hasonlít össze, és 1-et ad a kimenetre, ha a megadott feltétel teljesül, és 0-t, ha a feltétel nem teljesül.
A mi esetünkben ilyen feltétel lesz A>B, ahol A — az érzékelő által mért páratartalom szintje, míg B — a páratartalom küszöbértéke.
Amint a mért páratartalom (A) meghaladja a páratartalom küszöbértékét (B), a komparátor kimenetén megjelenik a 1, és a relé bekapcsol. Épp ellenkezőleg, amint a páratartalom normális szintre csökken (vagyis A>B A<=B megjelenik a 0, és a relé kikapcsol.), a komparátor kimenetén megjelenik a 1, és a relé bekapcsol. Épp ellenkezőleg, amint a páratartalom normális szintre csökken (vagyis A>B Minden világos? Akinek nem, olvassa el újra, vagy nézze meg a csomópontok működésének leírását az utasításokban.
Megjegyzem, hogy az érzékelőből származó adatok körülbelül 10 másodpercenként frissülnek. Ezért a relé nem tud kapcsolódni vagy kikapcsolni gyakrabban, mint 10 másodpercenként.
Minden rendben lenne, de szeretnénk a páratartalom küszöbértékét változó ellenállással beállítani. Ez nem egyszerűbb! DHT11 Egyszerűen kicseréljük a konstans csomópontot egy ADC csomóponttal. Hiszen éppen az ADC-hez csatlakoztattuk a változó ellenállású feszültségosztót.
Az ADC bemeneti feszültsége 0-tól 1 Voltig változik. A szenzorból mért páratartalom viszont 0-tól 100%-ig terjed. Hogyan hasonlítjuk össze őket? Egyszerűen. Az ADC csomópont nemcsak méri a bemeneti feszültséget, hanem képes azt

skálázni és eltoltni.
Tehát az ADC1 (A/D átalakító) csomópont kimenetén a következő érték lesz ShIoTiny , amelyet a következő képlettel számítunk ki: - a bemeneti feszültség ADC-n (0-tól 1-ig);.
- a tartomány (ADC range) és X- a eltolás (ADC offset). Így ha beállítjuk

, ahol
k=100 k b=0 b, akkor az 0-tól 1-ig terjedő változás esetén a kimeneti érték az ADC csomópont kimenetén 0-tól 100-ig terjed. Vagyis ez numerikusan megegyezik a páratartalom 0-tól 100%-ig terjedő változási tartományával. és b=0, ha változás történik
az 0 és 1 közötti tartományban, az érték X az ADC A-csomópont kimenete 0 és 100 között fog változni. Tehát, számértékben megegyezik a páratartalom 0 és 100% közötti változási tartományával.
Egyszerűen fogalmazva, az ellenállásmotor forgatásával beállíthatjuk a küszöbérték páratartalmát 0 és 100 között. Az egyetlen hátrány, hogy nincsenek megjelenítő eszközök. De a gyakorlatban, ha az ellenállásmotoron 6 osztást csinálunk 0%, 20%, 40%, 60%, 80%, 100% -ig, akkor ez elegendő a páratartalom küszöbértékének beállításához.
Hogyan állíthatjuk be a koefficienseket k b=0 b-eltolás (ADC offset)? Egyszerűbb, mint a héj! Kattintsunk az egérmutatóval a csomópontba, ADC1 és azonnal megjelenik a beállító ablak. Ebben mindent beállíthat, amire szüksége van. A mi esetünkben ez egy olyan ablak lesz, mint a képen.

Tehát van egy egyszerű működő megoldásunk. Kezdjük el finomítani.
Egyébként az egyszerű megoldásnak van egy előnye - nem szükséges hozzá internet. Teljesen önálló.
Második lehetőség, csatlakoztassunk egy gombot.
Minden működik és mindenki boldog. De van egy probléma, nem tudunk kényszeríteni a szellőzést. Már megállapodtunk abban, hogy a bemenethez Input1 csatlakoztatva lesz egy gomb, amely kényszeríteni fogja a ventilátort, figyelmen kívül hagyva a páratartalom érzékelőt.
Itt az idő, hogy feldolgozzuk ezt a gombot a sémánkban.

A gombnyomás feldolgozó blokk narancssárga vonallal van kiemelve. Ez egy olyan nyomásszámláló, amely nullára áll, amikor a kimeneti érték meghaladja az egyet (zöld vonal, a csomópont kimenete). CT).
Itt minden olyan egyszerű, mint korábban: a számláló CT számolja a gombnyomásokat, amely a bemenetre van csatlakoztatva. Input1Tehát a számláló kimeneti értéke minden gombnyomás után 1-el nő.
Amint ez az érték eléri a kettőt (tehát nagyobb mint 1), azonnal a komparátor kimenetén A>B megjelenik egy 1. Ez a 1 reseteli a számlálót CT nullára. Itt a komparátorra gondolok, az ábrán alul!
Így a gombunknak két állapota van - 0 és 1. Ha több állapotra lenne szükségünk (3, 4 vagy még több) - elegendő lenne a konstans értékét CONST egyről másik értékre változtatni.
Tehát van két feltétel a ventilátor bekapcsolására: a megadott páratartalom szint túllépése és egy egyszeri gombnyomás. Bármelyik feltétel teljesülésekor a ventilátor bekapcsol. És működni fog, amíg újra meg nem nyomják a gombot, és amíg a páratartalom vissza nem áll a normál szintre.
Természetesen tovább is bonyolíthatnánk az algoritmust, de ezt most nem tesszük – hagyjunk teret a kreativitásnak, akinek kedve van hozzá.
Harmadik opció, csatlakozunk az internetre.
Minden, amit leírtunk – teljesen működőképes. De mi a helyzet a presztízzsel? Bárki, aki az ujjaival tapogatja a telefonját, nevetni fog azon, aki tekeri a gombot és nyomogatja a gombot, ahelyett, hogy okostelefonról irányítaná! Gombot tekergetni – ez „nem divatos”. De ujjal végigsimítani a telefon kijelzőjén, úgy, hogy a bőr is vérezzen – na, ez tényleg a hipster-hacker-csóka vágyainak csúcsa (soha nem tudtam megkülönböztetni őket – ha tévedtem, elnézést).
De legyünk elnézőek az említett személyekkel. Az interneten keresztüli irányításnak van valódi előnye is. Először is, áttekinthetőség. Rengeteg applikáció létezik minden platformra, amelyek egy pár koppintással teljesen használható vezérlőpanelt hoznak létre az irányítónkhoz. Másodsorban, lehetőség van távolról figyelni a helyiség páratartalmát. Harmadsorban látható, hogy a ventilátor mit csinál – forog-e vagy sem, és milyen küszöbértéket állítottunk be. Az is látható, hogy a ventilátor automatikusan vagy kézzel kapcsolt be. Szóval mindent megtehetünk, amit csak kívánunk.
Persze, hogy egy ventilátor esetében sok ez a figyelem. De ez csak példa.
Tehát az internetre való csatlakozáshoz használni fogjuk a MQTT és az azonos nevű protokollt.
Ehhez a technológiához szükségünk van MQTT brokerre. Ez egy speciális szerver, amely kiszolgálja MQTT klienseket, például ShIoTIny és az ön okostelefonját.
A technológia lényegét az adja, hogy bármely kliens közzétehet a MQTT broker (szerver) számára tetszőleges adatokat egy bizonyos név alatt (amit MQTT a terminológiában téma ). Más kliensek feliratkozhatnak a tetszőleges adatokra a nevük alapján ( MQTT) és megkaphatják az újonnan közzétett adatokat. Azaz az egész adatcsere a kliens-broker-kliens elve alapján működik.témanem fogok
Én részletekbe bocsátkozni. Az interneten rengeteg cikk és tananyag található arról, hogyan működik és milyen programok állnak rendelkezésre a vezérlőpanelek létrehozásához. Csak megmutatom, hogyan fogadhatunk és oszthatunk meg adatokat a MQTT Brokerként használtam ShIoTiny.
, de az elv mindenütt ugyanaz. Tehát tegyük fel, hogy regisztrált a
MQTT brokerre. MQTT-brokerre. Általánosságban a bróker kiad egy (vagy kér, hogy találj ki) felhasználónevet és jelszót (a hitelesítési folyamathoz), valamint egy portot a csatlakozáshoz. Csatlakozás ShIoTiny refs MQTT-brókerhez kétféleképpen lehetséges — hagyományos csatlakozás és TLS (SSL).
Mindezek a paraméterek ShIoTiny a fülön kerülnek megadásra Hálózatkezelés, szekció MQTT kapcsolat a szerverhez.

Ha az Ön MQTT brokerre nem igényel hitelesítést — ne adjon meg felhasználónevet és jelszót (hagyja ezeket a mezőket üresen).
A parameter MQTT téma prefix külön magyarázatra szorul.
A MQTT-paraméterek előtagja egy karakterlánc, amely hozzáadódik a téma nevéhez (téma) a MQTT-brókerre való közzététel és feliratkozás során. A MQTT előtag megadásához a vezérlőben egyszerűen be kell írni a mezőbe „MQTT téma prefix» («MQTT téma prefix”). Az előtag mindig perjel-lel kezdődik («/»)! Ha nem ad perjelet a mezőbe — az automatikusan hozzáadódik. Az előtagban nem használhatók különböző karakterek «#» és «+». Más korlátozások nincsenek.
Például ha közzéteszi a „status” paramétert (vagy feliratkozik rá), és az Ön előtagja „/shiotiny/” értékre van állítva, akkor a bróker alatt ez a paraméter az alábbi néven lesz közzé téve: „/shiotiny/status”. Ha nincs megadva előtag, akkor minden paraméter a bróker alatt perjellel fog kezdődni («/»): «status” úgy fog megjelenni, mint „/status».
Most számoljuk meg, hogy regisztrált az MQTT-brokerre és megkapta a felhasználónevet, jelszót és portot. Ezután ezeket a paramétereket beírta a fülre. Hálózatkezelés, szekció MQTT kapcsolat a szerverhez vezérlőjéhez ShIoTiny.
Tegyük fel, hogy az előtagot „/room/».
értékre állítottuk. Kezdjük azzal, hogy közzétesszük az összes kulcs paraméter állapotát: relé Realay1, a kézi bekapcsolás állapota, az automatikus bekapcsolás állapota, és végül a küszöb és a jelenlegi páratartalom szintje. És bónuszként — a helyiség hőmérséklete. Ezt hogyan tegyük, lásd az ábrán.

Ahogy látjuk, a különbség az előző verzióhoz képest — csak a „MQTT Közzététel” csomópontok. Az előtag figyelembevételével a következő paraméterek közzétételre kerülnek:

Ahogy látjuk, az összes rendszerállapot itt van előttünk!
De nem csak látni akarunk, hanem irányítani is. Mi a teendő? Nagyon egyszerű. Lemondunk arról, hogy a páratartalom küszöbértékét az ADC és a változó ellenállás segítségével állítsuk be, és ezt a küszöbértéket közvetlenül a MQTT okostelefonról fogjuk megadni!

Töröljük az ADC csomópontot a sémából, és elhelyezünk három új csomópontot: FLASH tárolás, FLASH visszaállítás és MQTT leíró.
A csomópont funkciója MQTT leíró nyilvánvaló: megkapja a paramétert /room/trigHset (páratartalom küszöbérték) a MQTT brókerből. De mi történik az adatokkal ezután? Egyszerűen továbbítja őket a csomópontnak FLASH tárolás, amely ezeket az adatokat egy energialekötés nélküli memóriában az alábbi néven tárolja trigH. Ezt követően a csomópont FLASH visszaállítás kiolvassa az energialekötés nélküli memóriából az adatokat az alábbi néven trigH és hogy mi történik ezután, azt már tudjuk.
Miért ennyi bonyodalom? Miért nem lehet azonnal átadni a kapott adatokat a komparátornak?
Ahogy azt mondta Sz. Holmes — ez elemi! Senki sem garantálja, hogy amikor a készülékeid csatlakoznak, úgy fog. MQTT-brókerhez. A páratartalmat mérni kell. És a ventilátort be kell kapcsolni. De anélkül, hogy tudnánk a páratartalom küszöbértékét, ez lehetetlen! Ezért a készülékünk bekapcsoláskor kiolvassa az energialekötés nélküli memóriából a korábban eltárolt páratartalom küszöbértéket, és ezt használja döntések meghozatalához. Amikor pedig létesül a kapcsolat a MQTT-brokerrel és valaki közzétesz egy új értéket /room/trigHset, akkor ezt az új értéket fogják használni.
Tovább kitalálhatsz bármit. Például a páratartalom mellett be lehet vezetni a hőmérsékletet is. Vagy hozzá lehet adni a "okos" világításvezérlést (még két relé és két bemenet áll rendelkezésre). Minden a te kezedben van!
Zárás
Itt van, hogy néhány egyszerű, alapvetően ShIoTiny alapú szabályozó megvalósítását megvizsgáltuk. Talán valaki hasznosnak találja.
Mint mindig, javaslatokat, kívánságokat, kérdéseket, elírásokat és egyebeket a következő e-mail címre várunk: shiotiny@yandex.ru
Forrás: habr.com
