ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Hovedpunkter eller hva denne artikkelen handler om

Vi fortsetter artikkelserien om ShioTiny - visuelt programmerbar brikkebasert kontroller ESP8266.

Denne artikkelen beskriver, ved å bruke eksempelet på et ventilasjonskontrollprosjekt på et bad eller et annet rom med høy luftfuktighet, hvordan et program er bygget for ShioTiny.

Tidligere artikler i serien.

ShioTiny: liten automatisering, tingenes internett eller «seks måneder før ferie»
ShIoTiny: noder, tilkoblinger og hendelser eller funksjoner i tegneprogrammer

referanser

Binær firmware, kontrollerkrets og dokumentasjon
Instruksjoner og beskrivelse av komponenter
Sette opp MQTT-megler cloudmqtt.com
MQTT dashbord for Android

Innledning

Det er ingen forståelse uten erfaring. Dette er en sannhet som er testet av tid og generasjoner. Derfor er det ingenting bedre for å lære praktiske ferdigheter enn å prøve å gjøre noe selv. Og eksempler som viser hva du kan gjøre og hva du ikke engang bør prøve vil komme godt med her. Andres feil kan selvfølgelig ikke forhindre at dine egne feil oppstår, men de kan bidra til å redusere antallet sistnevnte.

Spørsmål og brev fra lesere av tidligere artikler fikk meg til å lage et lite prosjekt - et eksempel på ventilasjonskontroll for å vise hvordan ShIoTiny noder fungerer.

Den opprinnelige ideen som kontrolleren ble født fra ShioTiny - pumpe- og vanningsstasjon - passer ikke for alle og vil ikke være av interesse for alle. Derfor tok jeg et ventilasjonsstyringssystem som er forståelig og nyttig for mange som eksempel.

Jeg vil si at ideen om prosjektet ikke er min, men Jeg har det herfra og deretter tilpasset ShioTiny.

Forstå først hva du vil

Forbedringsprosessen er uendelig. Og det er denne eiendommen som har ødelagt mange gode ideer og prosjekter. Utvikleren, i stedet for å gi ut noe som ikke var perfekt, men som fortsatt fungerer, fortsatte å forbedre det. Og han forbedret den inntil konkurrentene gikk utenom det, og ga ut en fungerende løsning, om enn ikke ideell (og ofte direkte dårlig), men fungerer.

Derfor er det veldig viktig å vite hvor man skal sette en stopper for prosjektet. Eller, med andre ord, vi må bestemme hva vi ønsker å få på slutten av prosjektet fra det vi har i begynnelsen. På russisk, for et dokument som er satt sammen nøyaktig med det formål å beskrive veien til å skape noe, er det et fantastisk kort og konsist ord "plan", som mentalt utviklingshemmede oversettere og defekte ledere nylig av en eller annen grunn har begynt å kalle "veien kart". Vel, Gud velsigne dem.

Planen vår blir slik. La oss anta at det er et rom der fuktigheten til tider kan stige betydelig. For eksempel som et bad eller kjøkken. Fuktighet er en ubehagelig ting, og måten å bekjempe den på er like gammel som verden: ventiler rommet. Det er ganske mange måter å ventilere på. Men vi vil kanskje forlate eksotiske og gammeldagse metoder som svarte med fans og holde oss til en vanlig fan. Vifter er billigere og lettere å finne i vårt område.

Med et ord, vi ønsker å kontrollere viften: slå den på og deretter slå den av. Mer presist vil vi at den skal slås av og på når det trengs.

Det gjenstår å bestemme: under hvilke forhold skal viften slås på og under hvilke forhold den skal slås av.

Alt er åpenbart her: hvis luftfuktigheten er over en viss grense, slås viften på og trekker ut luft; Fuktigheten har gått tilbake til normalen - viften slår seg av.

En oppmerksom leser vil umiddelbart få øye på ordet "gitt". Gitt av hvem? Som spesifisert?

Du kan stille inn terskelfuktigheten på flere måter. Vi vil se på to av dem: den første - ved hjelp av variabel motstand og den andre - over nettverket via MQTT-protokollen. Hver av disse metodene har fordeler og ulemper, som vil bli diskutert senere.

For de som ikke forstår, vil jeg forklare at "terskelfuktighet" er et fuktighetsnivå over hvilket viften må slås på.

Det neste spørsmålet er: skal brukeren gis rett til å slå på viften direkte? Det vil si, uavhengig av fuktighetsnivået, ved å trykke på en knapp? Vi vil sørge for en slik mulighet. Tross alt kan en vifte være nødvendig ikke bare når det er høy luftfuktighet, men også for å fjerne fra rommet, for eksempel en ubehagelig lukt, populært kalt "stank".

Så vi forstår hva vi ønsker og til og med litt hvordan det vil fungere. La oss kort liste opp alle funksjonene til vårt ventilasjonskontrollsystem:

  • stille inn terskelfuktighetsnivået (to alternativer);
  • måling av fuktighetsnivå;
  • automatisk slå på viften;
  • automatisk viftestans;
  • manuell vifteaktivering (ved å trykke på en knapp).

Så planen er klar. Det er nødvendig å implementere alle funksjonene ovenfor i programmet vårt. Vi vil handle på grunnlag av denne "planen". La oss først tegne et blokkdiagram av enheten.

Blokkdiagram av enheten

Generelt sett vil vi ha to slike ordninger. Den første er for alternativet der terskelfuktighetsnivået er satt av en variabel motstand. Det andre skjemaet er for alternativet der terskelfuktighetsnivået settes over nettverket via MQTT-protokollen.

Men siden disse kretsene vil avvike med bare ett element - den variable motstanden "stiller inn terskelfuktighetsnivået", vil vi tegne bare ett blokkdiagram. Selvfølgelig ser blokkdiagrammet i henhold til GOST annerledes ut. Men vi fokuserer ikke på bisoningeniører, men på den yngre generasjonen. Derfor er synlighet viktigere.

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Så hva ser vi på bildet? Viften er koblet til reléet Relay1 kontrolleren ShioTiny. Vær oppmerksom på at viften er en høyspenningsenhet. Derfor, hvis noen gjør dette selv, vær forsiktig. Det vil si, som et minimum, før du stikker fingrene eller måleinstrumentene inn i kretsen, må du i det minste slå av strømmen til viften. Og den andre noten. Hvis viften din er kraftigere enn 250W, koble den deretter direkte til ShioTiny ikke verdt det - bare gjennom starteren.

Vi sorterte ut viften. Nå knappen "skru på manuelt" viften. Den er koblet til inngangen Inngang 1. Det er ikke noe mer å forklare her.

Temperatur- og fuktighetssensor DHT-11 (eller DHT-22 eller deres analoger). Det er en spesiell inngang på kontrolleren for tilkoblingen. ShioTiny. Som du kan se på figuren, er det heller ikke noe problem å koble til en slik sensor.

Og til slutt, variabel motstand, som setter terskelnivået for fuktighet. Mer presist en skillelinje som består av variable og konstante motstander. Det er ingen problemer med tilkoblingen, men la meg forklare at den innebygde ADC er det ESP8266 designet for maksimalt 1 Volt. Derfor er det nødvendig med en spenningsdeler på ca 5 ganger.

Og la meg minne deg nok en gang om at denne deleren ikke er nødvendig hvis terskelfuktighetsnivået er satt over nettverket ved hjelp av MQTT-protokollen.

La oss begynne å lage en algoritme for enheten i ElDraw ShIoTiny-redigeringsprogrammet. Hvordan du kommer dit, til denne redaktøren, kan du lese i tidligere artikler eller i instruksjonene, lenken til denne er i begynnelsen av artikkelen.

Alternativ én, enkleste

La oss starte med noe enkelt: å slå på reléet Relay1 når terskelfuktighetsnivået overskrides i et spesifisert tidsrom.

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Som du kan se, ingenting komplisert: bare fire noder, uten å telle kommentarnoder. DHT11 - dette er selve temperatur- og fuktighetssensoren (kan erstattes med DHT22).

Konstant KONST — terskel fuktighetsnivå, i prosent.

Komparator - en node som sammenligner to tall og gir ut 1 hvis en gitt betingelse er oppfylt og 0 hvis betingelsen ikke er oppfylt.

I vårt tilfelle vil denne betingelsen være A>BDer A er fuktighetsnivået målt av sensoren, og B — terskelnivået for samme fuktighet.

Så snart det målte fuktighetsnivået (A) vil overskride terskelens fuktighetsnivå (B), akkurat der ved utgangen til komparatoren A>B 1 vises og releet slås på. Omvendt, så snart fuktighetsnivået går tilbake til normalt (dvs. A<=B), akkurat der ved utgangen til komparatoren A>B 0 vises og releet slås av.

Alt klart? For de som ikke er veldig komfortable, les det igjen eller se på beskrivelsen av enhetenes drift i instruksjonene.

Merk at dataene fra sensoren DHT11 oppdateres omtrent hvert 10. sekund. Derfor vil ikke releet kunne slå seg av og på oftere enn én gang hvert 10. sekund.

Alt ville være bra, men vi vil gjerne sette terskelfuktighetsnivået ved hjelp av en variabel motstand. Ingenting kan være enklere!

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

La oss bare erstatte den konstante noden med en ADC-node. Det var tross alt til ADC-en vi koblet en spenningsdeler med variabel motstand.

Spenningen ved ADC-inngangen varierer fra 0 til 1 Volt. Men fuktigheten ved sensorutgangen varierer fra 0 til 100 %. Hvordan sammenligner vi dem? Det er enkelt. ADC node inn ShioTiny måler ikke bare inngangsspenningen, men vet også hvordan skala og skifte.

Det vil si at utgangen fra ADC1-noden (ADC) vil ha verdien X, beregnet med formelen

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Der ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt) — spenning ved ADC-inngangen (fra 0 til 1V); k - rekkevidde (ADC-område) og b-offset (ADC offset). Dermed, hvis du setter k = 100 и b = 0, deretter ved endring ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt) i området fra 0 til 1, verdi X ved utgangen til ADC-noden vil variere i området fra 0 til 100. Det vil si numerisk lik området for endringer i fuktighet fra 0 til 100%.

Eller ganske enkelt ved å rotere glidebryteren for variabel motstand, kan du stille inn terskelfuktighetsnivået fra 0 til 100. Den eneste ulempen er at det ikke er noen skjermenheter. Men i praksis, hvis du lager 6 oppdelinger av en motor med variabel motstand (0%, 20%, 40%, 60%, 80%, 100%) - så er dette nok til å stille inn terskelfuktighetsnivået.

Hvordan setter vi odds? k - rekkevidde (ADC-område) og b-offset (ADC offset)? Ja, enklere enn dampede kålrot! Pek musepekeren mot en node ADC1 og umiddelbart vil du se et innstillingsvindu. Du kan legge alt du trenger i den. For vårt tilfelle vil det være et vindu som det på figuren.

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Så vi har den enkleste fungerende løsningen. La oss begynne å forbedre det.
Forresten, den enkleste løsningen har én fordel - den krever ikke Internett. Den er helt autonom.

Alternativ to, koble til knappen

Alt fungerer og alle er fornøyde. Men uflaks, vi kan ikke skru på ventilasjonen med makt. Det har vi allerede avtalt ved inngangen Inngang 1 vi vil ha en knapp tilkoblet som vil slå viften på og av med makt, uavhengig av fuktighetssensoren.
Det er på tide å behandle denne knappen i programdiagrammet vårt.

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Knappeklikkbehandlingsblokken er uthevet med en oransje linje. Det er en teller for knappetrykk, som tilbakestilles til null når verdien ved utgangen overstiger én (grønn linje, nodeutgang CT).

Alt her fungerer like enkelt som før: skranken CT teller trykk på en knapp koblet til inngangen Inngang 1. Det vil si at verdien ved utgangen av denne telleren øker med 1 for hvert trykk på knappen.

Så snart denne verdien blir lik to (det vil si større enn 1), umiddelbart ved utgangen av komparatoren A>B 1 vises. Og denne 1 vil nullstille telleren CT til null. Dette betyr komparatoren, den nederste i diagrammet!

Dermed har knappen vår to tilstander - 0 og 1. Hvis vi trengte flere tilstander (3 eller 4 eller enda flere) - trenger vi bare å endre konstanten KONST fra en til en annen verdi.

Så vi har to betingelser for å slå på viften: å overskride et gitt fuktighetsnivå og trykke på knappen én gang. Hvis noen av betingelsene er oppfylt, vil viften slå seg på. Og det vil fungere til knappen trykkes inn igjen И fuktighetsnivået vil ikke gå tilbake til det normale.

Du kan selvfølgelig komplisere algoritmen enda mer, men vi vil ikke gjøre dette - vi vil gi rom for kreativitet til de som ønsker det.

Alternativ tre, koble til Internett

Alt vi beskrev er ganske gjennomførbart. Hva med show-offene? Tross alt vil enhver pimply hipster-cracker-hacker le av noen som vrir på en knott og trykker på en knapp i stedet for å kontrollere den fra en smarttelefon! Å vri håndtaket er "ikke moteriktig." Men å krype med fingeren på smarttelefonen, gni denne fingeren blodig - dette er toppen av begjærene til en hipster-hacker-cracker (jeg kunne aldri skille mellom dem alle - så hvis jeg tok feil, tilgi meg).

Men la oss være milde overfor disse personene. Det er virkelige fordeler med å administrere via Internett. For det første er det synlighet. Det er mange applikasjoner for alle plattformer som lar deg lage et fullstendig brukbart kontrollpanel for vår Carlson-kontroller med et par justeringer. For det andre er det en mulighet til å fjernovervåke fuktighetstilstanden i rommet. Og for det tredje kan du ikke bare se hva viften gjør - spinner eller ikke, men også hvilket terskelfuktighetsnivå som er satt. Og så skrus viften på automatisk eller manuelt. Generelt, alt du ønsker.

Selvfølgelig er det en stor ære for en fan å få så mye oppmerksomhet. Men dette er bare et eksempel.

Så for å koble til Internett vil vi bruke teknologi MQTT og protokollen med samme navn.
For å dra nytte av denne teknologien trenger vi MQTT megler. Dette er en spesiell server som betjener MQTT-klientereksempel Skart og smarttelefonen din.

Kjernen i teknologi MQTT består i det faktum at enhver av klientene publiserer vilkårlige data til MQTT-megleren (serveren) under et spesifikt navn (kalt Tema i terminologi MQTT). Andre klienter kan abonnere på vilkårlige data ved å bruke navnet sitt (Tema) og motta nylig publiserte data. Det vil si at all datautveksling følger klient-megler-klient-prinsippet.

Я jeg vil ikke fokus på detaljer. Det er mange artikler og opplæringsprogrammer på Internett om hvordan det fungerer. MQTT og hvilke programmer som finnes for å lage kontrollpaneler. Jeg skal bare vise deg hvordan vi kan motta og publisere data ved hjelp av ShioTiny.

Som megler brukte jeg www.cloudmqtt.com, men prinsippet er det samme overalt.

Så vi antar at du har registrert deg for MQTT megler. Generelt vil megleren gi deg (eller kreve at du kommer opp med) et brukernavn og passord (for autorisasjon), samt en port for tilkobling. Å plugge ShioTiny к MQTT megler mulig på to måter - vanlig tilkobling og via TLS (SSL).

Alle disse parameterne i ShioTiny lagt inn på fanen nettverk, kapittel MQTT Tilkobling til server.

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Hvis din MQTT megler krever ikke autorisasjon - ikke skriv inn brukernavn og passord (la disse feltene stå tomme).

Parameter MQTT-emneprefiks krever en egen forklaring.

MQTT-parameterprefikset er en streng lagt til emnenavnet (Tema) når du publiserer og abonnerer på en MQTT-megler. å installere MQTT-prefiks for kontrolleren din trenger du bare å skrive den inn i inntastingsfeltet "MQTT emneprefiks"("MQTT-emneprefiks"). Prefikset starter alltid med en skråstrek ("/")! Hvis du ikke legger inn en skråstrek i inntastingsfeltet, legges det til automatisk. Du kan ikke bruke symboler i prefikset "#" и "+". Det er ingen andre restriksjoner.

Hvis du for eksempel publiserer parameteren "status" (eller abonner på det) og prefikset ditt er satt til "/shiotiny/", vil denne parameteren bli publisert på megleren under navnet "/shiotiny/status" Hvis du har et tomt prefiks, vil alle parametere på megleren begynne med en skråstrek ("/"): "status" vil bli publisert som "/status'.

Så vi tror at du har registrert deg for MQTT megler og fikk innlogging, passord og port. Deretter skrev du inn disse parameterne på fanen nettverk, kapittel MQTT Tilkobling til server kontrolleren ShioTiny.

Vi antar at prefikset er satt til "/rom/'.

La oss starte med å publisere statusen til alle nøkkelparametere: relé Realay1, manuelle koblingstilstander, automatiske koblingstilstander og til slutt terskel- og aktuelle fuktighetsnivåer. Vel, en bonus er temperaturen i rommet. Hvordan du gjør dette, se figuren.

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Som du kan se, er forskjellen fra forrige versjon bare nodene "MQTT publiserer" Tatt i betraktning prefikset, publiseres følgende parametere:
ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Som du kan se, har vi hele systemets tilstand i håndflatene våre!

Men vi vil ikke bare se, men også kontrollere. Hva burde jeg gjøre? Veldig enkelt. Vi vil nekte å sette et terskelfuktighetsnivå ved hjelp av ADC og en variabel motstand og vi vil stille inn denne terskelfuktighetsnivået i henhold til MQTT direkte fra smarttelefonen!

ShIoTiny: ventilasjon av et våtrom (eksempelprosjekt)

Vi fjerner ADC-noden fra kretsen og inkluderer tre nye noder der: FLASH-butikk, FLASH gjenoppretting и MQTT beskrive.

Nodefunksjon MQTT beskrive åpenbart: den mottar en parameter /rom/trigHset (terskel fuktighetsnivå) s MQTT megler. Men hva gjør det med dataene videre? Bare gir dem til noden FLASH-butikk, som igjen lagrer disse dataene i ikke-flyktig minne under navnet trigH. Etter dette, noden FLASH gjenoppretting leser data fra ikke-flyktig minne under navnet trigH og vi vet allerede hva som skjer videre.

Hvorfor slike vanskeligheter? Hvorfor kan ikke de mottatte dataene umiddelbart sendes til inngangen til komparatoren?

Som kamerat S. Holmes pleide å si - det er elementært! Ingen garanterer at den blir med etter at du har slått på enheten din MQTT megler. Og fuktigheten må måles. Og viften må være på. Men uten informasjon om terskelfuktighetsnivået er dette umulig! Derfor, når den er slått på, henter enheten vår det tidligere lagrede terskelfuktighetsnivået fra ikke-flyktig minne og bruker det til å ta avgjørelser. Og når forbindelsen er etablert med MQTT megler og noen vil legge ut en ny verdi /rom/trigHset, så vil denne nye verdien bli brukt.

Da kan du finne på hva du vil. For eksempel, i tillegg til fuktighet, introduser også temperaturregnskap. Eller legg til "smart" lysstyring (vi har fortsatt to releer og to innganger ubrukte). Alt i dine hender!

Konklusjon

Så vi så på flere eksempler på implementering av en i hovedsak enkel kontroller basert på ShIoTiny. Kanskje dette vil være nyttig for noen.

Som alltid, forslag, ønsker, spørsmål, skrivefeil osv. - på e-post: [e-postbeskyttet]

Kilde: www.habr.com

Legg til en kommentar