Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Software påkrævet
- Trin 2: Bring sensordata til Raspberry Pi ved hjælp af Simulink
- Trin 3: Vis sensordata på 8x8 LED Matrix
- Trin 4: Design en algoritme i Simulink for at afgøre, om indendørs luftfugtighed er 'god', 'dårlig' eller 'grim'
- Trin 5: Log indendørsklimadata og de kategoriserede data på skyen
- Trin 6: Konklusion
Video: Hindbær Pi-baseret indeklimaovervågningssystem: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Læs denne blog og opbyg dit eget system, så du kan modtage advarsler, når dit værelse er for tørt eller fugtigt.
Hvad er et indeklimaovervågningssystem, og hvorfor har vi brug for et?
Indeklimaovervågningssystemer giver et hurtigt overblik over centrale klimarelaterede statistikker som temperatur og relativ luftfugtighed. At kunne se denne statistik og modtage advarsler på din telefon, når rummet er for fugtigt eller tørt, kan være meget nyttigt. Ved hjælp af advarslerne kan du tage hurtige nødvendige handlinger for at opnå maksimal komfort i rummet ved at tænde for varmeren eller åbne vinduerne. I dette projekt vil vi se, hvordan du bruger Simulink til at:
1) Indbring klimastatistik (temperatur, relativ luftfugtighed og tryk) fra Sense HAT til Raspberry Pi
2) vis målte data på 8x8 LED matrixen til Sense HAT
3) designe en algoritme til at afgøre, om indendørs luftfugtighed er 'God', 'Dårlig' eller 'Grim'.
4) log dataene i skyen og send en advarsel, hvis dataene er kategoriseret som 'grimme' (for fugtige eller tørre).
Forbrugsvarer
Raspberry Pi 3 Model B
Raspberry Pi Sense HAT
Trin 1: Software påkrævet
Du har brug for MATLAB, Simulink og vælg tilføjelsesprogrammer til at følge med og opbygge dit eget indeklima-overvågningssystem.
Åbn MATLAB med administratoradgang (Højreklik på MATLAB -ikonet, og vælg Kør som administrator). Vælg tilføjelser fra MATLAB Toolstrip, og klik på Få tilføjelser.
Søg her efter supportpakkerne med deres navne anført nedenfor og ‘Tilføj’ dem.
en. MATLAB -supportpakke til Raspberry Pi -hardware: Anskaf input og send output til Raspberry Pi -kort og tilsluttede enheder
b. Simulink -supportpakke til Raspberry Pi -hardware: Kør Simulink -modeller på Raspberry Pi -kort
c. RPi_Indoor_Climate_Monitoring_System: Eksempelmodeller, der er nødvendige for dette projekt
Bemærk - Under installationen skal du følge instruktionerne på skærmen for at konfigurere din Pi til at fungere med MATLAB og Simulink.
Trin 2: Bring sensordata til Raspberry Pi ved hjælp af Simulink
For dem, der ikke kender Simulink, er det et grafisk programmeringsmiljø, der bruges til at modellere og simulere dynamiske systemer. Når du har designet din algoritme i Simulink, kan du automatisk generere kode og integrere den på en Raspberry Pi eller anden hardware.
Indtast følgende i MATLAB -kommandovinduet for at åbne den første eksempelmodel. Vi vil bruge denne model til at bringe data om temperatur, tryk og relativ luftfugtighed ind i Raspberry Pi.
> rpiSenseHatBringSensorData
Blokkene LPS25H tryksensor og HTS221 fugtighedssensor er fra Sense HAT -biblioteket under Simulink Support Package til Raspberry Pi Hardware -biblioteker.
Omfangsblokkene er fra Sinks -biblioteket under Simulink -biblioteker. For at sikre, at din model er konfigureret korrekt, skal du klikke på tandhjulsikonet i din Simulink -model. Naviger til Hardwareimplementering> Hardwarekortindstillinger> Mål hardware -ressourcer.
Bemærk - Du behøver ikke konfigurere, hvis du fulgte installationsvejledningen, mens du installerede Simulink -supportpakken til Raspberry Pi. Enhedsadressen bliver automatisk udfyldt til din Pi.
Sørg for, at enhedsadressen her matcher den IP -adresse, du hører, når din Pi starter op. Du skal muligvis genstarte din Pi med en øretelefon tilsluttet stikket for at høre enhedens adresse.
Klik på OK, og tryk på knappen Kør som vist herunder. Sørg for, at din Pi enten er fysisk forbundet til pc'en via USB-kabel eller er på det samme Wi-Fi-netværk som din pc.
Når du trykker på knappen Kør i ekstern tilstand, genererer Simulink automatisk C -koden svarende til din model og downloader en eksekverbar fil til Raspberry Pi. Begge omfangsblokke er konfigureret til at åbne, når modellen begynder at køre. Når Simulink er færdig med at implementere koden til Raspberry Pi, vil du se data om tryk, temperatur og relativ luftfugtighed på scopes som vist nedenfor.
Bemærk - Koden kører på Raspberry Pi, og du ser de faktiske signaler gennem Simulink -omfangsblokkene, ligesom du ville, hvis du havde et oscilloskop forbundet til selve hardwaren. Temperaturværdien fra de to sensorer er lidt fra hinanden. Vælg gerne den, der afspejler den faktiske temperatur i dit værelse nærmere, og brug den i efterfølgende afsnit. I alle testene med den Sense HAT, vi havde, var HTS221 fugtighedssensors temperaturværdier tættere på den faktiske temperatur i rummet. Med det har vi set det grundlæggende i, hvordan man indfører sensordata fra Sense HAT til Raspberry Pi.
Trin 3: Vis sensordata på 8x8 LED Matrix
I dette afsnit vil vi se, hvordan den visuelle visningsdel af dette projekt blev føjet til den sidste model. De Sense HAT -elementer, der bruges i dette afsnit, er fugtighedsføleren (for at få relativ luftfugtighed og temperatur), tryksensor, LED -matrix og joystick. Joysticket bruges til at vælge, hvilken sensor vi vil vise.
For at åbne den næste eksempelmodel skal du skrive følgende i kommandovinduet MATLAB.
> rpiSenseHatDisplay
Joystick -blokken er fra Sense HAT -biblioteket. Det hjælper os med at bringe joystickdataene ind i Raspberry Pi, ligesom tryk- og fugtighedssensorblokkene gjorde i det foregående eksempel. For nu bruger vi Test Comfort -blokken til at vise 'godt' (når blokens værdi er 1) på LED -matrixen. Den viser 'dårlig', når blokværdien er 2 eller 'grim', når værdien enten er 3 eller 4. I det næste afsnit ser vi den faktiske algoritme, der afgør, om den indendørs luftfugtighed er god, dårlig eller grim. Lad os udforske vælgerblokken ved at dobbeltklikke på den. MATLAB -funktionsblokke bruges til at integrere MATLAB -kode i din Simulink -model. I dette tilfælde indbringer vi SelectorFcn givet nedenfor.
funktion [værdi, tilstand] = SelectorFcn (JoyStickIn, tryk, fugtighed, temp, ihval)
vedvarende JoyStickCount
hvis isempty (JoyStickCount)
JoyStickCount = 1;
ende
hvis JoyStickIn == 1
JoyStickCount = JoyStickCount + 1;
hvis JoyStickCount == 6
JoyStickCount = 1;
ende
ende
skift JoyStickCount
case 1 % Displaytemperatur i C
værdi = temp;
Stat = 1;
case 2 % Displaytryk i atm
værdi = tryk/1013,25;
Stat = 2;
case 3 % Vis relativ luftfugtighed i %
værdi = fugtighed;
Stat = 3;
case 4 % Displaytemperatur i F
værdi = temp*(9/5) +32;
Stat = 4;
sag 5 % Vis godt/dårligt/grimt
værdi = ihval;
Stat = 5;
ellers % Må ikke vises/Vis 0
værdi = 0;
Stat = 6;
ende
Switch-case-sætninger bruges generelt som en selektionskontrolmekanisme. I vores tilfælde ønsker vi, at joystickindgangen skal være valgkontrol og vælge de næste data, der skal vises, hver gang der trykkes på joystick -knappen. Til dette opretter vi en if -loop, der øger varianten JoyStickCount ved hvert tryk på knappen (JoyStickIn -værdien er 1, hvis der er et tryk på knappen). I den samme sløjfe, for at sikre, at vi kun cykler mellem de fem ovenstående muligheder, tilføjede vi en anden betingelse, der nulstiller variabelværdien til 1. Ved hjælp af denne vælger vi, hvilken værdi der skal vises på LED -matrixen. Case 1 vil være standard, da vi definerer JoyStickCount til at starte med 1, og det betyder, at LED -matrixen vil vise temperaturen i Celsius. Tilstandsvariablen bruges af rulledatablokken til at forstå, hvilken sensorværdi der aktuelt vises, og hvilken enhed der skal vises. Nu hvor vi ved, hvordan vi vælger den rigtige sensor til visning, lad os se på, hvordan det faktiske display fungerer.
Visning af tegn og tal
For at vise på Sense HAT LED -matrix har vi oprettet 8x8 matricer til:
1) alle tal (0-9)
2) alle enheder (° C, A, % og ° F)
3) decimaltegn
4) alfabeter fra ordene godt, dårligt og grimt.
Disse 8x8 matricer blev brugt som input til 8x8 RGB LED Matrix -blokken. Denne blok lyser lysdioderne, der svarer til de elementer på matricen, der har en værdi på 1 som vist nedenfor.
Rulning af teksten
Rulningsblokken i vores model ruller gennem strenge, der kan være op til 6 tegn lange. Værdien af 6 blev valgt, da det er den længste streng, som vi udsender i dette projekt, f.eks. 23,8 ° C eller 99,1 ° F. Bemærk, at ° C betragtes som et tegn. Den samme idé kan også udvides til at rulle strenge af andre længder.
Her er en GIF, der viser, hvordan det fungerer -
www.element14.com/community/videos/29400/l/gif
For at vise en streng på 6 tegn hver på 8x8 -matrixen har vi brug for et billede på 8x48 i alt. For at vise en streng på maksimalt 4 tegn skal vi oprette en 8x32 matrix. Lad os nu se det hele inaktiv ved at trykke på knappen Kør. Standarddisplayet på LED -matrixen er temperaturværdien i ° C. Omfangsblokken viser tilstand og værdi fra vælgerblokken. Tryk på joystick -knappen på Sense HAT og hold den inde i et sekund for at kontrollere, at værdien ændres til den næste sensorudgang, og gentag denne proces, indtil den når tilstandsværdien på 5. For at observere algoritmen, der skifter gennem alle tilfælde af indendørs luftfugtighedskategorisering, ændre værdien af Test Comfort -blokken til et vilkårligt tal mellem 1 og 4. Bemærk, hvordan ændring af værdien af en blok på Simulink -modellen straks ændrer den måde, koden opfører sig på hardwaren på. Dette kan være nyttigt i situationer, hvor man ønsker at ændre, hvordan koden opfører sig fra et fjernt sted. Med det har vi set nøgleelementerne bag visualiseringsaspektet i klimamonitoreringssystemet. I det næste afsnit lærer vi, hvordan vi gennemfører vores indeklima -overvågningssystem.
Trin 4: Design en algoritme i Simulink for at afgøre, om indendørs luftfugtighed er 'god', 'dårlig' eller 'grim'
For at forstå, om dit værelse er for fugtigt/tørt eller for at vide, hvilket indendørs luftfugtighedsniveau der anses for behageligt, er der flere metoder. Ved hjælp af denne artikel etablerede vi en arealkurve til at forbinde indendørs relativ luftfugtighed og udendørstemperaturer som vist ovenfor.
Enhver relativ luftfugtighedsværdi i dette område betyder, at dit værelse er i behagelige omgivelser. For eksempel, hvis udetemperaturen er -30 ° F, er enhver relativ luftfugtighedsværdi under 15% acceptabel. På samme måde, hvis udetemperaturen er 60 ° F, er enhver relativ luftfugtighed under 50% acceptabel. For at kategorisere indendørs luftfugtighed i maksimal komfort (god), gennemsnitlig komfort (dårlig) eller for fugtig/tør (grim), har du brug for udetemperatur og relativ luftfugtighed. Vi har set, hvordan man indfører relativ luftfugtighed i Raspberry Pi. Så lad os fokusere på at bringe udendørs temperatur ind. Indtast følgende i MATLAB -kommandovinduet for at åbne modellen:
> rpiOutdoorWeatherData
WeatherData -blokken bruges til at hente din bys eksterne temperatur (i K) ved hjælp af https://openweathermap.org/. For at konfigurere denne blok skal du bruge en API -nøgle fra webstedet. Når du har oprettet din gratis konto på dette websted, skal du gå til din kontoside. Fanen API -nøgler vist nedenfor giver dig nøglen.
WeatherData -blokken har brug for indtastning af dit bynavn i et specifikt format. Besøg denne side, og indtast dit bynavn, derefter komma -symbolet efterfulgt af 2 bogstaver for at angive land. Eksempler - Natick, USA og Chennai, IN. Hvis søgningen returnerer et resultat for din by, skal du bruge det i WeatherData -blokken i det specifikke format. Hvis din by ikke er tilgængelig, skal du bruge en naboby, hvis vejrforhold er tættere på din. Dobbeltklik nu på WeatherData -blokken, og indtast dit bynavn og din API -nøgle fra webstedet.
Tryk på Kør på denne Simulink -model for at kontrollere, at blokken kan bringe temperaturen i din by ind i Raspberry Pi. Lad os nu se algoritmen, der afgør, om den indendørs luftfugtighed er god, dårlig eller grim. Skriv følgende i MATLAB -kommandovinduet for at åbne det næste eksempel:
> rpisenseHatIHval
Du har måske bemærket, at Test Comfort -blokken fra den tidligere model mangler, og en ny blok kaldet FindRoom Comfort leverer ihval til Selector -blokken. Dobbeltklik på denne blok for at åbne og udforske.
Vi bruger WeatherData -blokken til at indlæse udetemperaturen. Delsystemet Fugtighedsgrænser repræsenterer diagrammet over relativ luftfugtighed vs udetemperatur, som vi så ovenfor. Afhængig af udendørstemperaturen afgiver den, hvad den maksimale fugtighedsgrænseværdi skal være. Lad os åbne funktionsblokken DecideIH MATLAB ved at dobbeltklikke på den.
Hvis værdien af den relative luftfugtighed overstiger den maksimale luftfugtighedsgrænse, vil skiltet være positivt baseret på den måde, vi trækker dataene på, hvilket betyder, at rummet er for fugtigt. Vi udsender en 3 (grim) til dette scenario. Årsagen bag at bruge tal i stedet for strenge er, at det er let at vise på grafer og oprette advarsler fra. Resten af klassificeringerne i MATLAB -funktionen er baseret på vilkårlige kriterier, som vi kom frem til. Når forskellen er mindre end 10 er den kategoriseret maksimal komfort, og når den er mindre end 20 er den gennemsnitlig komfort og derover er for tør. Kør gerne denne model og tjek dit værelses komfortniveau.
Trin 5: Log indendørsklimadata og de kategoriserede data på skyen
I dette næste afsnit vil vi se, hvordan man logger data på skyen. For at åbne dette eksempel skal du skrive følgende i MATLAB -kommandovindue.
> rpiSenseHatLogData
I denne model fjernes visningsdelen af den tidligere eksempelmodel målrettet, da vi ikke har brug for, at overvågningssystemet viser statistikkerne, mens data logges og udsendes advarsler. Vi bruger ThingSpeak, en gratis open-source IoT-platform, der indeholder MATLAB-analyser, til datalogning. Vi valgte ThingSpeak, da der er direkte måder at programmere Raspberry Pi og andre billige hardware-kort til at sende data til ThingSpeak ved hjælp af Simulink. ThingSpeak -skriveblokken er fra Simulink -supportpakken til Raspberry Pi Hardware -bibliotek og kan konfigureres ved hjælp af Write API -nøglen fra din ThingSpeak -kanal. Detaljerede instruktioner om, hvordan du opretter kanalen, findes nedenfor. For løbende at logge data på skyen, vil du have, at din Pi fungerer uafhængigt af Simulink. Til dette kan du trykke på knappen "Distribuer til hardware" i din Simulink -model.
Opret din egen ThingSpeak -kanal
Dem, der ikke har en konto, kan tilmelde sig ThingSpeak -webstedet. Hvis du har en MathWorks -konto, har du automatisk en ThingSpeak -konto.
- Når du har logget ind, kan du oprette en kanal ved at gå til Kanaler> Mine kanaler og klikke på Ny kanal.
- Alt du behøver er et navn til kanalen og navne på de felter, du skal logge som vist herunder.
- Indstillingen Vis kanalplacering har brug for byens breddegrad og længdegrad som input og kan vise placeringen inde i kanalen på et kort. (Eksempelværdier, der bruges her, er for Natick, MA)
- Tryk derefter på Gem kanal for at afslutte oprettelsen af din kanal.
4a. Advarsel, hvis dataene er kategoriseret som 'grimme'
For at fuldføre vores indeklima -overvågningssystem skal vi se, hvordan vi modtager advarsler baseret på clouddata. Dette er kritisk, fordi uden det vil du ikke være i stand til at foretage nødvendige handlinger for at ændre komfortniveauet i rummet. I dette afsnit ser vi, hvordan du modtager en meddelelse på din telefon, når skydataene indikerer, at rummet er for fugtigt eller tørt. Vi opnår dette ved at bruge to tjenester: IFTTT Webhooks og ThingSpeak TimeControl. IFTTT (står for If this, then that) er en onlinetjeneste, der kan håndtere begivenheder og udløse handlinger baseret på begivenhederne.
Trin til opsætning af IFTTT Webhooks
Bemærk: Prøv disse på en computer for at få de bedste resultater.
1) Opret en konto på ifttt.com (hvis du ikke har en), og opret en ny applet fra siden Mine applets.
2) Klik på den blå "dette" -knap for at vælge din udløsertjeneste.
3) Søg efter og vælg Webhooks som tjenesten.
4) Vælg Modtag en webanmodning, og angiv et navn til begivenheden.
5) Vælg Opret trigger.
6) Vælg "det" på den næste side, og søg efter meddelelser.
7) Vælg send en meddelelse fra IFTTT -appen.
8) Indtast hændelsesnavnet, som du oprettede i trin 2 i IFTTT, og vælg Opret handling.
9) Fortsæt, indtil du når det sidste trin, gennemgå og tryk på afslut.
10) Gå til https://ifttt.com/maker_webhooks, og klik på knappen Indstillinger øverst på siden.
11) Gå til webadressen i sektionen Kontoinformation.
12) Indtast dit eventnavn her, og klik på 'Test det'.
13) Kopier webadressen på den sidste linje til fremtidig brug (med nøglen).
Trin til opsætning af ThingSpeak TimeControl
1) Vælg Apps> MATLAB -analyse
2) Klik på Ny på den næste side, og vælg Trigger Email fra IFTTT, og klik på Opret.
De vigtige stykker her i skabelonkoden er:
Kanal -id - Indtast din ThingSpeak -kanal, der har oplysninger om "indendørs luftfugtighed".
IFTTTURL - Indtast URL'en, der er kopieret fra forrige afsnit Trin 13.
readAPIKey - Enter -nøgle i ThingSpeak Channel. Action -sektionen - den, der virker på den sidste værdi. Skift det til følgende for at udløse advarsler.
3) På ThingSpeak -webstedet klikker du på Apps> TimeControl.
4) Vælg Tilbagevendende, og vælg en tidsfrekvens.
5) Klik på Save TimeControl.
Nu kører MATLAB Analyse automatisk hver halve time og sender en trigger til IFTTT Webhooks -tjenesten, hvis værdien er større end eller lig med 3. Herefter vil IFTTT -telefonappen advare brugeren med en meddelelse som vist i starten af dette afsnit.
Trin 6: Konklusion
Med det har vi set alle de vigtige aspekter af, hvordan du opbygger dit eget klimaovervågningssystem. I dette projekt så vi, hvordan Simulink kan bruges til -
- programmer en Raspberry Pi til at hente data fra Sense HAT. Fremhæv - Visualiser dataene i Simulink, da koden stadig kører på Raspberry Pi.
- bygge den visuelle visning af indeklimaovervågningssystem. Fremhæv - Skift den måde, din kode opfører sig på hardware fra Simulink.
- designe indeklimaovervågningssystemets algoritme.
- log dataene fra Raspberry Pi på skyen og opret advarsler fra de loggede data.
Hvad er nogle af de ændringer, du ville foretage i dette indeklima -overvågningssystem? Del venligst dine forslag via kommentarer.
Anbefalede:
Hindbær Pi nedlukning indikator: 6 trin
Raspberry Pi Shutdown Indicator: Det er et meget simpelt kredsløb til at vise driftsstatus for hindbær pi (i det følgende RPI). Måske er det nyttigt, når du kører RPI som hovedløs (uden skærm). Nogle gange er jeg bekymret, hvornår det er det rigtige tidspunkt for fuldstændig slukning efter nedlukning af RPI
Hindbær Pi, Python og en TB6600 Stepper Motor Driver: 9 trin
Raspberry Pi, Python og en TB6600 Stepper Motor Driver: Denne instruktion følger de trin, jeg tog for at forbinde en Raspberry Pi 3b til en TB6600 Stepper Motor Controller, en 24 VDC strømforsyning og en 6 -tråds trinmotor. Jeg er nok som mange af jer og har tilfældigvis en " gribetaske " af rest par
Læsning og tegning af lys- og temperatursensordata med hindbær Pi: 5 trin
Læsning og tegning af lys- og temperatursensordata med Raspberry Pi: I denne instruks kan du lære at læse en lys- og temperatursensor med hindbær pi og ADS1115 analog til digital konverter og tegne den ved hjælp af matplotlib. Lad os starte med de nødvendige materialer
Harry Potter IR -fjernbetjening med hindbær Pi: 5 trin
Harry Potter IR -fjernbetjening med Raspberry Pi: Denne instruktør beskriver, hvordan man laver et simpelt Python -script, der styres af Harry Potter universel fjernbetjeningsstav lavet af The Noble Collection. Det kræver en Raspberry Pi som controller og en Flirc USB IR -modtager i kombination
Måling af jordfugtighed med hindbær Pi 4: 4 trin
Måling af jordfugtighed med hindbær Pi 4: Ved du, hvor ofte du skal vande planter? Eller udgød planter og mistede dem. For at løse dette tænkte jeg, at det ville være mere omstændigt, hvis vi kan få værdien af vandindhold inde i jorden for at træffe en beslutning om vanding af planterne passende