Raspberry Pi-basert innendørs klimaovervåkingssystem: 6 trinn
Raspberry Pi-basert innendørs klimaovervåkingssystem: 6 trinn
Anonim
Raspberry Pi-basert innendørs klimaovervåkingssystem
Raspberry Pi-basert innendørs klimaovervåkingssystem

Les denne bloggen og bygg ditt eget system slik at du kan motta varsler når rommet ditt er for tørt eller fuktig.

Hva er et innendørs klimaovervåkingssystem, og hvorfor trenger vi det?

Innendørs klimaovervåkingssystemer gir et raskt blikk på viktige klimarelaterte statistikker som temperatur og relativ fuktighet. Å kunne se denne statistikken og motta varsler på telefonen når rommet er for fuktig eller tørt, kan være veldig nyttig. Ved å bruke varslene kan du iverksette raske nødvendige tiltak for å oppnå maksimal komfort i rommet ved å slå på varmeren eller åpne vinduene. I dette prosjektet vil vi se hvordan du bruker Simulink til å:

1) ta inn klimastatistikk (temperatur, relativ fuktighet og trykk) fra Sense HAT til Raspberry Pi

2) vise målte data på 8x8 LED -matrisen til Sense HAT

3) utform en algoritme for å avgjøre om innendørs luftfuktighet er 'bra', 'dårlig' eller 'stygg'.

4) logg dataene i nettskyen og send et varsel hvis dataene er kategorisert ‘Ugly’ (for fuktig eller tørr).

Rekvisita

Raspberry Pi 3 Model B

Raspberry Pi Sense HAT

Trinn 1: Programvare nødvendig

Programvare som trengs
Programvare som trengs

Du trenger MATLAB, Simulink og velg tillegg for å følge med og bygge ditt eget innendørs klimaovervåkingssystem.

Åpne MATLAB med administratortilgang (Høyreklikk på MATLAB -ikonet og velg Kjør som administrator). Velg tillegg fra MATLAB Toolstrip og klikk på Få tillegg.

Søk her etter støttepakker med navnene nedenfor og ‘Legg til’ dem.

en. MATLAB -støttepakke for Raspberry Pi -maskinvare: Skaff innganger og send utganger til Raspberry Pi -kort og tilkoblede enheter

b. Simulink -støttepakke for Raspberry Pi -maskinvare: Kjør Simulink -modeller på Raspberry Pi -kort

c. RPi_Indoor_Climate_Monitoring_System: Eksempelmodeller som trengs for dette prosjektet

Merk - Under installasjonen, følg instruksjonene på skjermen for å konfigurere Pi -en til å fungere med MATLAB og Simulink.

Trinn 2: Ta med sensordata til Raspberry Pi ved hjelp av Simulink

Ta med sensordata til Raspberry Pi ved hjelp av Simulink
Ta med sensordata til Raspberry Pi ved hjelp av Simulink

For de som ikke er kjent med Simulink, er det et grafisk programmeringsmiljø som brukes til å modellere og simulere dynamiske systemer. Når du har designet algoritmen din i Simulink, kan du automatisk generere kode og legge den inn på en Raspberry Pi eller annen maskinvare.

Skriv inn følgende i MATLAB -kommandovinduet for å åpne den første eksempelmodellen. Vi vil bruke denne modellen til å bringe data om temperatur, trykk og relativ fuktighet inn i Raspberry Pi.

> rpiSenseHatBringSensorData

Blokkene LPS25H trykksensor og HTS221 fuktighetssensor er fra Sense HAT -biblioteket under Simulink Support Package for Raspberry Pi Hardware -biblioteker.

Omfangsblokkene er fra vaskebiblioteket under Simulink -biblioteker. For å sikre at modellen din er riktig konfigurert, klikker du på tannhjulikonet i Simulink -modellen. Naviger til Maskinvareimplementering> Innstillinger for maskinvarekort> Målrett maskinvareressurser.

Merk - Du trenger ikke å konfigurere hvis du fulgte oppsettsinstruksjonene mens du installerte Simulink Support Package for Raspberry Pi. Enhetsadressen blir automatisk befolket til Pi -en din.

Sørg for at enhetsadressen her samsvarer med IP -adressen du hører når Pi starter opp. Du må kanskje slå på strømmen til Pi igjen med en øretelefon koblet til kontakten for å høre enhetsadressen.

Klikk på OK og trykk på Kjør -knappen som vist nedenfor. Sørg for at Pi enten er fysisk koblet til PCen via USB-kabel eller er på samme Wi-Fi-nettverk som PCen.

Når du trykker på Kjør -knappen i ekstern modus, genererer Simulink automatisk C -koden som tilsvarer modellen din og laster ned en kjørbar til Raspberry Pi. Begge omfangsblokkene er konfigurert til å åpne når modellen begynner å kjøre. Når Simulink er ferdig med å distribuere koden til Raspberry Pi, vil du se dataene for trykk, temperatur og relativ fuktighet på scopes som vist nedenfor.

Merk - Koden kjører på Raspberry Pi, og du ser de faktiske signalene gjennom Simulink -omfangsblokkene, akkurat som du ville gjort hvis du hadde et oscilloskop koblet til selve maskinvaren. Temperaturverdien fra de to sensorene er litt avhengig av hverandre. Velg gjerne den som gjenspeiler den faktiske temperaturen i rommet ditt nærmere, og bruk den i påfølgende seksjoner. I alle testene med Sense HAT som vi hadde, var HTS221 fuktighetssensors temperaturverdier nærmere den faktiske temperaturen i rommet. Med det har vi sett det grunnleggende om hvordan vi kan hente inn sensordata fra Sense HAT til Raspberry Pi.

Trinn 3: Vis sensordata på 8x8 LED Matrix

Vis sensordata på 8x8 LED -matrisen
Vis sensordata på 8x8 LED -matrisen
Vis sensordata på 8x8 LED -matrisen
Vis sensordata på 8x8 LED -matrisen

I denne delen vil vi se hvordan den visuelle visningsdelen av dette prosjektet ble lagt til i den siste modellen. Sense HAT -elementene som brukes i denne delen er fuktighetssensoren (for å få relativ fuktighet og temperatur), trykksensor, LED -matrise og joysticken. Styrespaken brukes til å velge hvilken sensor vi vil vise.

For å åpne den neste eksempelmodellen, skriver du inn følgende i kommandovinduet MATLAB.

> rpiSenseHatDisplay

Joystick -blokken er fra Sense HAT -biblioteket. Det hjelper oss med å bringe joystickdataene til Raspberry Pi, akkurat som trykk- og fuktighetssensorblokkene gjorde i forrige eksempel. Foreløpig bruker vi Test Comfort -blokken til å vise "bra" (når blokkens verdi er 1) på LED -matrisen. Det vil vise "dårlig" når blokkverdien er 2 eller "stygg" når verdien er enten 3 eller 4. I neste avsnitt vil vi se den faktiske algoritmen som avgjør om innendørs fuktighet er god, dårlig eller stygg. La oss utforske velgerblokken ved å dobbeltklikke på den. MATLAB -funksjonsblokker brukes til å integrere MATLAB -kode i Simulink -modellen. I dette tilfellet tar vi inn SelectorFcn gitt nedenfor.

funksjon [verdi, tilstand] = SelectorFcn (JoyStickIn, trykk, fuktighet, temp, ihval)

vedvarende JoyStickCount

hvis isempty (JoyStickCount)

JoyStickCount = 1;

slutt

hvis JoyStickIn == 1

JoyStickCount = JoyStickCount + 1;

hvis JoyStickCount == 6

JoyStickCount = 1;

slutt

slutt

bytt JoyStickCount

tilfelle 1 % Visningstemperatur i C

verdi = temp;

Stat = 1;

case 2 % Displaytrykk i atm

verdi = trykk/1013,25;

Stat = 2;

tilfelle 3 % Vis relativ luftfuktighet i %

verdi = fuktighet;

Stat = 3;

case 4 % Displaytemperatur i F

verdi = temp*(9/5) +32;

Stat = 4;

case 5 % Display Good/Bad/Ugly

verdi = ihval;

Stat = 5;

ellers % Ikke vis/vis 0

verdi = 0;

Stat = 6;

slutt

Byttesaker brukes vanligvis som en valgkontrollmekanisme. I vårt tilfelle vil vi at joystickinngangen skal være valgkontrollen og velge de neste dataene som skal vises hver gang du trykker på joystick -knappen. For dette setter vi opp en if -løkke som øker JoyStickCount -variabelen for hvert knappetrykk (JoyStickIn -verdien er 1 hvis det er et knappetrykk). I samme sløyfe, for å sikre at vi bare sykler mellom de fem alternativene gitt ovenfor, la vi til en annen betingelse som tilbakestiller variabelverdien til 1. Ved å bruke denne velger vi hvilken verdi som skal vises på LED -matrisen. Case 1 vil være standard når vi definerer JoyStickCount til å starte med 1, og dette betyr at LED -matrisen vil vise temperaturen i Celsius. Tilstandsvariabelen brukes av rulledatablokken for å forstå hvilken sensorverdi som vises og hvilken enhet som skal vises. Nå som vi vet hvordan vi velger riktig sensor for å vise, la oss se på hvordan selve displayet fungerer.

Viser tegn og tall

For å vise på Sense HAT LED -matrisen har vi laget 8x8 matriser for:

1) alle tall (0-9)

2) alle enheter (° C, A, % og ° F)

3) desimaltegn

4) alfabeter fra ordene god, dårlig og stygg.

Disse 8x8 matrisene ble brukt som inngang til 8x8 RGB LED Matrix -blokken. Denne blokken lyser lysdiodene som tilsvarer elementene på matrisen som har verdien 1 som vist nedenfor.

Rulling av teksten

Rulledatablokken i modellen vår ruller gjennom strenger som kan være opptil 6 tegn lange. Verdien på 6 ble valgt som det er den lengste strengen vi kommer til å skrive ut i dette prosjektet, eksempel 23,8 ° C eller 99,1 ° F. Merk, her regnes ° C som ett tegn. Den samme ideen kan utvides til å bla strenger av andre lengder også.

Her er en-g.webp

www.element14.com/community/videos/29400/l/gif

For å vise en streng på 6 tegn hver på 8x8 -matrisen, trenger vi et bilde på 8x48 totalt. For å vise en streng på maksimalt 4 tegn, må vi lage en 8x32 matrise. La oss nå se det hele inaktiv ved å trykke på Kjør -knappen. Standardvisningen på LED -matrisen er temperaturverdien i ° C. Omfangsblokken viser tilstand og verdi fra velgeren. Trykk på joystick -knappen på Sense HAT og hold inne et sekund for å bekrefte at verdien endres til neste sensorutgang og gjenta denne prosessen til den når tilstandsverdien til 5. For å observere algoritmen som går gjennom alle tilfeller av innendørs fuktighetskategorisering, endre verdien av Test Comfort -blokken til et hvilket som helst tall mellom 1 og 4. Legg merke til hvordan endring av verdien til en blokk på Simulink -modellen umiddelbart endrer måten koden oppfører seg på maskinvaren. Dette kan være nyttig i situasjoner der man ønsker å endre hvordan koden oppfører seg fra et eksternt sted. Med det har vi sett nøkkelelementene bak visualiseringsaspektet ved klimaanleggssystemet. I neste avsnitt lærer vi hvordan vi fullfører vårt innendørs klimaovervåkingssystem.

Trinn 4: Utform en algoritme i Simulink for å avgjøre om innendørs fuktighet er 'god', 'dårlig' eller 'stygg'

Design en algoritme i Simulink for å avgjøre om innendørs fuktighet er 'god', 'dårlig' eller 'stygg'
Design en algoritme i Simulink for å avgjøre om innendørs fuktighet er 'god', 'dårlig' eller 'stygg'

Det er flere metoder for å forstå om rommet ditt er for fuktig/tørt eller for å vite hvilket innendørs fuktighetsnivå som er behagelig. Ved å bruke denne artikkelen etablerte vi en arealkurve for å koble innendørs relativ fuktighet og utetemperaturer som vist ovenfor.

Enhver relativ fuktighetsverdi i dette området betyr at rommet ditt er i en komfortabel setting. For eksempel, hvis utetemperaturen er -30 ° F, er en relativ fuktighetsverdi under 15% akseptabel. På samme måte, hvis utetemperaturen er 60 ° F, er relativ luftfuktighet under 50% akseptabelt. For å kategorisere innendørs fuktighet i maksimal komfort (god), gjennomsnittlig komfort (dårlig) eller for fuktig/tørr (stygg), trenger du utetemperatur og relativ fuktighet. Vi har sett hvordan vi får inn relativ fuktighet i Raspberry Pi. Så, la oss fokusere på å få inn utetemperaturen. Skriv inn følgende i MATLAB -kommandovinduet for å åpne modellen:

> rpiOutdoorWeatherData

WeatherData -blokken brukes til å hente inn ekstern temperatur i byen din (i K) ved hjelp av https://openweathermap.org/. For å konfigurere denne blokken trenger du en API -nøkkel fra nettstedet. Etter at du har opprettet en gratis konto på dette nettstedet, går du til kontosiden. Fanen API -nøkler vist nedenfor gir deg nøkkelen.

WeatherData -blokken trenger innspill av bynavnet ditt i et bestemt format. Besøk denne siden og skriv inn bynavnet ditt, deretter komma -symbolet etterfulgt av 2 bokstaver for å angi land. Eksempler - Natick, USA og Chennai, IN. Hvis søket gir et resultat for byen din, bruker du det i WeatherData -blokken i det spesifikke formatet. Hvis byen din ikke er tilgjengelig, kan du bruke en nærliggende by hvis værforhold er nærmere deg. Dobbeltklikk nå på WeatherData -blokken og skriv inn bynavnet ditt og API -nøkkelen din fra nettstedet.

Trykk på Kjør på denne Simulink -modellen for å kontrollere at blokken kan bringe temperaturen i byen din inn i Raspberry Pi. La oss nå se algoritmen som avgjør om innendørs fuktighet er god, dårlig eller stygg. Skriv inn følgende i MATLAB -kommandovinduet for å åpne neste eksempel:

> rpisenseHatIHval

Du har kanskje lagt merke til at Test Comfort -blokken fra den forrige modellen mangler, og en ny blokk kalt FindRoom Comfort leverer ihval til Selector -blokken. Dobbeltklikk på denne blokken for å åpne og utforske.

Vi bruker WeatherData -blokken for å få inn utetemperatur. Delsystemet Fuktighetsgrenser representerer diagrammet for relativ fuktighet vs utetemperatur som vi så ovenfor. Avhengig av utetemperaturen, vil den avgi hva maksimal fuktighetsgrenseverdi skal være. La oss åpne funksjonsblokken DecideIH MATLAB ved å dobbeltklikke på den.

Hvis den relative fuktighetsverdien overskrider maksimal fuktighetsgrense, vil skiltet være positivt basert på måten vi trekker dataene på, noe som betyr at rommet er for fuktig. Vi legger ut en 3 (stygg) for dette scenariet. Årsaken bak å bruke tall i stedet for strenger er at det er lett å vise på grafer og lage varsler fra. Resten av klassifiseringene i MATLAB -funksjonen er basert på vilkårlige kriterier som vi kom med. Når forskjellen er mindre enn 10 er den kategorisert maksimal komfort, og når den er mindre enn 20 er den gjennomsnittlig komfort og over det er for tørr. Kjør gjerne denne modellen og sjekk komforten på rommet ditt.

Trinn 5: Logg inneklimadata og kategoriserte data på nettskyen

Logg inneklimadata og kategoriserte data på skyen
Logg inneklimadata og kategoriserte data på skyen

I denne neste delen vil vi se hvordan du logger data på skyen. For å åpne dette eksemplet, skriver du inn følgende i MATLAB -kommandovinduet.

> rpiSenseHatLogData

I denne modellen blir visningsdelen av den forrige eksempelmodellen målrettet fjernet, ettersom vi ikke trenger at overvåkingssystemet viser statistikken mens du logger data og sender ut varsler. Vi bruker ThingSpeak, en gratis IoT-plattform med åpen kildekode som inkluderer MATLAB-analyse, for datalogging. Vi valgte ThingSpeak siden det er direkte måter å programmere Raspberry Pi og andre rimelige maskinvarekort til å sende data til ThingSpeak ved hjelp av Simulink. ThingSpeak Write -blokken er fra Simulink Support Package for Raspberry Pi Hardware -bibliotek, og kan konfigureres ved hjelp av Write API -nøkkelen fra ThingSpeak -kanalen din. Detaljerte instruksjoner om hvordan du oppretter kanalen er gitt nedenfor. For å kontinuerlig logge data på skyen, vil du at Pi skal fungere uavhengig av Simulink. For dette kan du trykke på "Distribuer til maskinvare" -knappen i din Simulink -modell.

Lag din egen ThingSpeak -kanal

De som ikke har en konto, kan registrere seg på ThingSpeak -nettstedet. Hvis du har en MathWorks -konto, har du automatisk en ThingSpeak -konto.

  • Når du har logget deg på, kan du opprette en kanal ved å gå til Kanaler> Mine kanaler og klikke på Ny kanal.
  • Alt du trenger er et navn på kanalen og navn på feltene du skal logge som vist nedenfor.
  • Alternativet Vis kanalplassering trenger byens breddegrad og lengdegrad som inngang og kan vise plasseringen inne i kanalen på et kart. (Eksempelverdier som brukes her er for Natick, MA)
  • Trykk deretter på Lagre kanal for å lage kanalen din ferdig.

4a. Varsle hvis dataene er kategorisert "stygge"

For å fullføre vårt inneklimakontrollsystem må vi se hvordan vi mottar varsler basert på skydata. Dette er kritisk fordi du uten det ikke vil være i stand til å iverksette nødvendige tiltak for å endre komfortnivået i rommet. I denne delen vil vi se hvordan du mottar et varsel på telefonen din når skydata indikerer at rommet er for fuktig eller tørt. Vi vil oppnå dette ved å bruke to tjenester: IFTTT Webhooks og ThingSpeak TimeControl. IFTTT (står for If this, then that) er en nettjeneste som kan håndtere hendelser og utløse handlinger basert på hendelsene.

Fremgangsmåte for å sette opp IFTTT Webhooks

Merk: Prøv disse på en datamaskin for best resultat.

1) Opprett en konto på ifttt.com (hvis du ikke har en) og opprett en ny applett fra siden Mine appleter.

2) Klikk på den blå "denne" -knappen for å velge utløsertjeneste.

3) Søk etter og velg Webhooks som tjenesten.

4) Velg Motta en nettforespørsel og oppgi et navn på hendelsen.

5) Velg opprett utløser.

6) Velg "det" på neste side og søk etter varsler.

7) Velg send et varsel fra IFTTT -appen.

8) Skriv inn hendelsesnavnet du opprettet i trinn 2 i IFTTT, og velg opprett handling.

9) Fortsett til du når det siste trinnet, gå gjennom og trykk på ferdig.

10) Gå til https://ifttt.com/maker_webhooks og klikk på Innstillinger -knappen øverst på siden.

11) Gå til nettadressen i delen Kontoinformasjon.

12) Skriv inn navnet på arrangementet ditt her og klikk på "Test det".

13) Kopier nettadressen på den siste linjen for fremtidig bruk (med nøkkelen).

Trinn for å sette opp ThingSpeak TimeControl

1) Velg Apper> MATLAB -analyse

2) Klikk på Ny på neste side, velg Trigger Email fra IFTTT og klikk på Opprett.

De viktige delene her i malkoden er:

Kanal -ID - Skriv inn ThingSpeak -kanalen din som har informasjon om innendørs fuktighet.

IFTTTURL - Skriv inn nettadressen som ble kopiert fra forrige seksjon Trinn 13.

readAPIKey - Enter -nøkkelen til ThingSpeak Channel. Action -delen - den som virker på den siste verdien. Endre det til følgende for å utløse varsler.

3) Klikk på Apps> TimeControl på ThingSpeak -nettstedet.

4) Velg Gjentagende og velg en tidsfrekvens.

5) Klikk på Save TimeControl.

Nå kjører MATLAB Analyse automatisk hver halve time og sender en utløser til IFTTT Webhooks -tjenesten hvis verdien er større enn eller lik 3. Deretter vil IFTTT -telefonappen varsle brukeren med et varsel som vist i begynnelsen av denne delen.

Trinn 6: Konklusjon

Med det har vi sett alle de viktige aspektene ved hvordan du bygger ditt eget klimaovervåkingssystem. I dette prosjektet så vi hvordan Simulink kan brukes til å -

  • programmer en Raspberry Pi for å hente inn data fra Sense HAT. Høydepunkt - Visualiser dataene i Simulink ettersom koden fremdeles kjører på Raspberry Pi.
  • bygge den visuelle visningen av innendørs klimaovervåkingssystem. Høydepunkt - Endre måten koden din oppfører seg på maskinvaren fra Simulink.
  • utforme innendørs klimaovervåkningssystemets algoritme.
  • logg dataene fra Raspberry Pi på skyen og opprett varsler fra de loggede dataene.

Hva er noen av endringene du ville gjort med dette innendørs klimaovervåkingssystemet? Vennligst del forslagene dine via kommentarer.