Inhoudsopgave:

Op Raspberry Pi gebaseerd monitoringsysteem voor binnenklimaat - Ajarnpa
Op Raspberry Pi gebaseerd monitoringsysteem voor binnenklimaat - Ajarnpa

Video: Op Raspberry Pi gebaseerd monitoringsysteem voor binnenklimaat - Ajarnpa

Video: Op Raspberry Pi gebaseerd monitoringsysteem voor binnenklimaat - Ajarnpa
Video: selfmade LED-Monitoringsystem with Raspberry-PI (GPIO-Ports) 2024, November
Anonim
Op Raspberry Pi gebaseerd bewakingssysteem voor binnenklimaat
Op Raspberry Pi gebaseerd bewakingssysteem voor binnenklimaat

Lees deze blog en bouw je eigen systeem zodat je meldingen kunt ontvangen als je kamer te droog of vochtig is.

Wat is een binnenklimaatmonitoringsysteem en waarom hebben we er een nodig?

Binnenklimaatmonitoringsystemen bieden een snelle blik op belangrijke klimaatgerelateerde statistieken, zoals temperatuur en relatieve vochtigheid. Het kan erg handig zijn om deze statistieken te kunnen zien en waarschuwingen op je telefoon te ontvangen wanneer de kamer te vochtig of droog is. Met behulp van de waarschuwingen kunt u snel de nodige acties ondernemen om maximaal comfort in de kamer te bereiken door de verwarming aan te zetten of de ramen te openen. In dit project zullen we zien hoe we Simulink kunnen gebruiken om:

1) klimaatstatistieken (temperatuur, relatieve vochtigheid en druk) van de Sense HAT naar de Raspberry Pi brengen

2) meetgegevens weergeven op de 8x8 LED-matrix van de Sense HAT

3) ontwerp een algoritme om te bepalen of de luchtvochtigheid binnenshuis 'Goed', 'Slecht' of 'Lelijk' is.

4) log de gegevens in de cloud en stuur een waarschuwing als de gegevens zijn gecategoriseerd als 'Lelijk' (te vochtig of droog).

Benodigdheden

Raspberry Pi 3 Model B

Raspberry Pi Sense HOED

Stap 1: Software nodig

Software nodig
Software nodig

U hebt MATLAB, Simulink en geselecteerde add-ons nodig om uw eigen binnenklimaatmonitoringsysteem te bouwen.

Open MATLAB met beheerderstoegang (klik met de rechtermuisknop op het MATLAB-pictogram en selecteer Als administrator uitvoeren). Selecteer Add-Ons in de MATLAB Toolstrip en klik op Get Add-Ons.

Zoek hier naar de ondersteuningspakketten met hun namen hieronder en 'Voeg toe'.

A. MATLAB-ondersteuningspakket voor Raspberry Pi-hardware: verkrijg ingangen en stuur uitgangen naar Raspberry Pi-kaarten en aangesloten apparaten

B. Simulink-ondersteuningspakket voor Raspberry Pi-hardware: Simulink-modellen uitvoeren op Raspberry Pi-kaarten

C. RPi_Indoor_Climate_Monitoring_System: voorbeeldmodellen die nodig zijn voor dit project

Opmerking - Volg tijdens de installatie de instructies op het scherm om uw Pi in te stellen voor gebruik met MATLAB en Simulink.

Stap 2: Breng sensorgegevens naar Raspberry Pi met Simulink

Breng sensorgegevens naar de Raspberry Pi met Simulink
Breng sensorgegevens naar de Raspberry Pi met Simulink

Voor degenen die niet bekend zijn met Simulink, het is een grafische programmeeromgeving die wordt gebruikt om dynamische systemen te modelleren en te simuleren. Nadat u uw algoritme in Simulink hebt ontworpen, kunt u automatisch code genereren en deze insluiten op een Raspberry Pi of andere hardware.

Typ het volgende in het MATLAB-opdrachtvenster om het eerste voorbeeldmodel te openen. We zullen dit model gebruiken om temperatuur-, druk- en relatieve vochtigheidsgegevens in de Raspberry Pi te brengen.

>rpiSenseHatBringSensorData

De blokken LPS25H-druksensor en HTS221-vochtigheidssensor komen uit de Sense HAT-bibliotheek onder Simulink Support Package voor Raspberry Pi-hardwarebibliotheken.

De scope-blokken komen uit de Sinks-bibliotheek onder Simulink-bibliotheken. Om ervoor te zorgen dat uw model correct is geconfigureerd, klikt u op het tandwielpictogram in uw Simulink-model. Navigeer naar Hardware-implementatie > Hardwarekaartinstellingen > Doelhardwarebronnen.

Opmerking – U hoeft niet te configureren als u de installatie-instructies hebt gevolgd tijdens het installeren van het Simulink Support Package voor Raspberry Pi. Het apparaatadres wordt automatisch ingevuld met dat van uw Pi.

Zorg ervoor dat het apparaatadres hier overeenkomt met het IP-adres dat u hoort wanneer uw Pi opstart. Mogelijk moet u uw Pi opnieuw van stroom voorzien met een oortelefoon aangesloten op de aansluiting om het apparaatadres te horen.

Klik op OK en druk op de knop Uitvoeren zoals hieronder weergegeven. Zorg ervoor dat uw Pi fysiek is verbonden met de pc via een USB-kabel of zich op hetzelfde wifi-netwerk bevindt als uw pc.

Wanneer u op de knop Uitvoeren drukt in de externe modus, genereert Simulink automatisch de C-code die overeenkomt met uw model en downloadt het een uitvoerbaar bestand naar de Raspberry Pi. Beide scope-blokken zijn geconfigureerd om te openen zodra het model begint te lopen. Wanneer Simulink klaar is met het implementeren van de code op de Raspberry Pi, ziet u de druk-, temperatuur- en relatieve vochtigheidsgegevens op de scopes zoals hieronder weergegeven.

Opmerking - De code wordt uitgevoerd op de Raspberry Pi en u bekijkt de daadwerkelijke signalen via de Simulink-scope-blokken, net zoals u zou doen als u een oscilloscoop op de hardware zelf had aangesloten. De temperatuurwaarde van de twee sensoren wijkt iets af van elkaar. Voel je vrij om degene te kiezen die de werkelijke temperatuur in je kamer beter weerspiegelt en die in de volgende secties te gebruiken. In alle tests met de Sense HAT die we hadden, lagen de temperatuurwaarden van de HTS221-vochtigheidssensor dichter bij de werkelijke temperatuur in de kamer. Daarmee hebben we de basis gezien van hoe je sensorgegevens van de Sense HAT in de Raspberry Pi kunt brengen.

Stap 3: Geef sensorgegevens weer op de 8x8 LED-matrix

Sensorgegevens weergeven op de 8x8 LED-matrix
Sensorgegevens weergeven op de 8x8 LED-matrix
Sensorgegevens weergeven op de 8x8 LED-matrix
Sensorgegevens weergeven op de 8x8 LED-matrix

In deze sectie zullen we zien hoe het visuele weergavegedeelte van dit project aan het laatste model is toegevoegd. De Sense HAT-elementen die in deze sectie worden gebruikt, zijn de vochtigheidssensor (om relatieve vochtigheid en temperatuur te krijgen), druksensor, LED-matrix en de joystick. De joystick wordt gebruikt om te selecteren welke sensor we willen weergeven.

Typ het volgende in het MATLAB-opdrachtvenster om het volgende voorbeeldmodel te openen.

> rpiSenseHatDisplay

Het Joystick-blok komt uit de Sense HAT-bibliotheek. Het helpt ons de joystickgegevens naar de Raspberry Pi te brengen, net zoals de druk- en vochtigheidssensorblokken in het vorige voorbeeld deden. Voorlopig gebruiken we het Test Comfort-blok om 'goed' (wanneer de waarde van het blok 1 is) op de LED-matrix weer te geven. Het zal 'slecht' weergeven wanneer de blokwaarde 2 is of 'lelijk' wanneer de waarde 3 of 4 is. In het volgende gedeelte zullen we het daadwerkelijke algoritme zien dat beslist of de luchtvochtigheid binnenshuis goed, slecht of lelijk is. Laten we het Selector-blok verkennen door erop te dubbelklikken. MATLAB-functieblokken worden gebruikt om MATLAB-code te integreren in uw Simulink-model. In dit geval brengen we SelectorFcn hieronder weergegeven.

functie [waarde, staat] = SelectorFcn (JoyStickIn, druk, vochtigheid, temp, ihval)

aanhoudende JoyStickCount

indien leeg (JoyStickCount)

JoyStickCount = 1;

einde

als JoyStickIn == 1

JoyStickCount = JoyStickCount + 1;

als JoyStickCount == 6

JoyStickCount = 1;

einde

einde

schakelaar JoyStickCount

geval 1 % Weergavetemperatuur in C

waarde = temperatuur;

Staat = 1;

geval 2 % Weergave druk in atm

waarde = druk/1013,25;

Staat = 2;

geval 3 % Weergave relatieve vochtigheid in %

waarde = vochtigheid;

Staat = 3;

geval 4 % Weergavetemperatuur in F

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

Staat = 4;

geval 5 % Weergave Goed/Slecht/Lelijk

waarde = ihval;

Staat = 5;

anders % Niet weergeven/weergeven 0

waarde = 0;

Staat = 6;

einde

Switch-case-statements worden over het algemeen gebruikt als selectiecontrolemechanisme. In ons geval willen we dat de joystickinvoer de selectiebesturing is en de volgende gegevens selecteren die moeten worden weergegeven telkens wanneer de joystickknop wordt ingedrukt. Hiervoor hebben we een if-lus opgezet die de JoyStickCount-variabele verhoogt bij elke druk op de knop (JoyStickIn-waarde is 1 als er op een knop wordt gedrukt). Om ervoor te zorgen dat we alleen tussen de vijf hierboven gegeven opties fietsen, hebben we in dezelfde lus nog een voorwaarde toegevoegd die de variabelewaarde terugzet op 1. Hiermee selecteren we welke waarde op de LED-matrix wordt weergegeven. Geval 1 is de standaard omdat we JoyStickCount definiëren om te beginnen bij 1, en dit betekent dat de LED-matrix de temperatuur in Celsius weergeeft. De State-variabele wordt gebruikt door het Scroll-gegevensblok om te begrijpen welke sensorwaarde momenteel wordt weergegeven en welke eenheid moet worden weergegeven. Nu we weten hoe we de juiste sensor moeten selecteren om weer te geven, laten we eens kijken hoe de eigenlijke weergave werkt.

Tekens en cijfers weergeven

Voor weergave op de Sense HAT LED-matrix hebben we 8x8-matrices gemaakt voor:

1) alle nummers (0-9)

2) alle eenheden (°C, A, % en °F)

3) decimale punt

4) alfabetten van de woorden goed, slecht en lelijk.

Deze 8x8-matrices werden gebruikt als invoer voor het 8x8 RGB LED Matrix-blok. Dit blok verlicht de LED's die overeenkomen met die elementen op de matrix die een waarde van 1 hebben, zoals hieronder weergegeven.

Door de tekst scrollen

Het Scroll-gegevensblok in ons model scrolt door strings die maximaal 6 tekens lang kunnen zijn. De waarde van 6 is gekozen omdat dat de langste string is die we in dit project zullen uitvoeren, bijvoorbeeld 23,8 °C of 99,1 °F. Let op, hier wordt °C als één teken beschouwd. Hetzelfde idee kan ook worden uitgebreid om strings van andere lengtes te scrollen.

Hier is een-g.webp

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

Om een reeks van elk 6 karakters op de 8x8-matrix weer te geven, hebben we een afbeelding van in totaal 8x48 nodig. Om een tekenreeks weer te geven die maximaal 4 tekens lang is, moeten we een 8x32-matrix maken. Laten we nu het hele ding inactiviteit bekijken door op de knop Uitvoeren te drukken. De standaardweergave op de LED-matrix is de temperatuurwaarde in °C. Het Scope-blok toont de State en waarde van het Selector-blok. Druk op de joystickknop op de Sense HAT en houd deze een seconde ingedrukt om te controleren of de waarde verandert naar de volgende sensoruitgang en herhaal dit proces totdat deze de statuswaarde van 5 bereikt. Om te zien hoe het algoritme door alle gevallen van de vochtigheidscategorisatie binnenshuis schakelt, verander de waarde van het Test Comfort-blok in een getal tussen 1 en 4. Merk op hoe het veranderen van de waarde van een blok op het Simulink-model onmiddellijk de manier verandert waarop de code zich op de hardware gedraagt. Dit kan handig zijn in situaties waarin men het gedrag van de code vanaf een externe locatie wil wijzigen. Daarmee hebben we de belangrijkste elementen achter het visualisatieaspect van klimaatmonitoringsysteem gezien. In de volgende sectie zullen we leren hoe we ons binnenklimaatmonitoringsysteem kunnen voltooien.

Stap 4: Ontwerp een algoritme in Simulink om te beslissen of de luchtvochtigheid binnenshuis 'goed', 'slecht' of 'lelijk' is

Ontwerp een algoritme in Simulink om te beslissen of de luchtvochtigheid binnenshuis 'goed', 'slecht' of 'lelijk' is
Ontwerp een algoritme in Simulink om te beslissen of de luchtvochtigheid binnenshuis 'goed', 'slecht' of 'lelijk' is

Om te begrijpen of uw kamer te vochtig/droog is of om te weten welk vochtigheidsniveau binnenshuis als comfortabel wordt beschouwd, zijn er verschillende methoden. Met behulp van dit artikel hebben we een oppervlaktecurve opgesteld om de relatieve vochtigheid binnen en buitentemperaturen met elkaar te verbinden, zoals hierboven weergegeven.

Elke relatieve vochtigheidswaarde in dit gebied betekent dat uw kamer zich in een comfortabele omgeving bevindt. Als de buitentemperatuur bijvoorbeeld -30 °F is, is elke relatieve vochtigheidswaarde van minder dan 15% acceptabel. Evenzo, als de buitentemperatuur 60 °F is, is een relatieve vochtigheid van minder dan 50% acceptabel. Om de luchtvochtigheid binnenshuis in te delen in maximaal comfort (goed), gemiddeld comfort (slecht) of te vochtig/droog (lelijk), heb je buitentemperatuur en relatieve vochtigheid nodig. We hebben gezien hoe we relatieve vochtigheid in de Raspberry Pi kunnen brengen. Laten we ons dus concentreren op het binnenhalen van de buitentemperatuur. Typ het volgende in het MATLAB-opdrachtvenster om het model te openen:

> rpiOutdoorWeergegevens

Het WeatherData-blok wordt gebruikt om de buitentemperatuur van uw stad (in K) in te voeren via https://openweathermap.org/. Om dit blok te configureren heb je een API Key van de website nodig. Nadat u uw gratis account op deze website heeft aangemaakt, gaat u naar uw accountpagina. Het hieronder getoonde tabblad API-sleutels geeft u de sleutel.

Het WeatherData-blok heeft de invoer van uw stadsnaam in een specifiek formaat nodig. Bezoek deze pagina en voer uw plaatsnaam in en vervolgens het kommasymbool gevolgd door 2 letters om het land aan te duiden. Voorbeelden - Natick, VS en Chennai, IN. Als de zoekopdracht een resultaat voor uw stad oplevert, gebruikt u dat in het WeatherData-blok in dat specifieke formaat. Als je stad niet beschikbaar is, gebruik dan een naburige stad waarvan de weersomstandigheden dichter bij die van jou liggen. Dubbelklik nu op het WeatherData-blok en voer uw plaatsnaam en uw API-sleutel van de website in.

Druk op Uitvoeren op dit Simulink-model om te controleren of het blok de temperatuur van je stad in de Raspberry Pi kan brengen. Laten we nu eens kijken naar het algoritme dat bepaalt of de luchtvochtigheid binnenshuis goed, slecht of lelijk is. Typ het volgende in het MATLAB-opdrachtvenster om het volgende voorbeeld te openen:

>rpisenseHatIHval

Je hebt misschien gemerkt dat het Test Comfort-blok van het vorige model ontbreekt en dat een nieuw blok met de naam FindRoom Comfort het blok ihval to Selector levert. Dubbelklik op dit blok om te openen en te verkennen.

We gebruiken het WeatherData-blok om de buitentemperatuur binnen te halen. Het subsysteem Vochtigheidslimieten vertegenwoordigt de grafiek Relatieve vochtigheid versus buitentemperatuur die we hierboven hebben gezien. Afhankelijk van de buitentemperatuur geeft hij aan wat de maximale vochtigheidsgrenswaarde zou moeten zijn. Laten we het DecideIH MATLAB-functieblok openen door erop te dubbelklikken.

Als de relatieve vochtigheidswaarde de maximale vochtigheidslimiet overschrijdt, zal het teken positief zijn op basis van de manier waarop we de gegevens aftrekken, wat impliceert dat de kamer te vochtig is. We geven een 3 (lelijk) af voor dit scenario. De reden achter het gebruik van cijfers in plaats van tekenreeksen is dat het gemakkelijk in grafieken kan worden weergegeven en er waarschuwingen van kunnen worden gemaakt. De rest van de classificaties in de MATLAB-functie zijn gebaseerd op willekeurige criteria die we hebben bedacht. Als het verschil minder dan 10 is, wordt het gecategoriseerd als maximaal comfort en als het minder dan 20 is, is het gemiddeld comfort en daarboven is het te droog. Voel je vrij om dit model te gebruiken en het comfortniveau van je kamer te controleren.

Stap 5: Log binnenklimaatgegevens en de gecategoriseerde gegevens in de cloud

Log binnenklimaatgegevens en de gecategoriseerde gegevens in de cloud
Log binnenklimaatgegevens en de gecategoriseerde gegevens in de cloud

In dit volgende gedeelte zullen we zien hoe u gegevens in de cloud kunt loggen. Typ het volgende in het MATLAB-opdrachtvenster om dit voorbeeld te openen.

> rpiSenseHatLogData

In dit model is het weergavegedeelte van het vorige voorbeeldmodel opzettelijk verwijderd, omdat we het monitoringsysteem niet nodig hebben om de statistieken weer te geven tijdens het loggen van gegevens en het verzenden van waarschuwingen. We gebruiken ThingSpeak, een gratis open-source IoT-platform met MATLAB-analyse, voor het datalogging-aspect. We kozen voor ThingSpeak omdat er directe manieren zijn om Raspberry Pi en andere goedkope hardwarekaarten te programmeren om gegevens naar ThingSpeak te sturen met Simulink. Het ThingSpeak Write-blok komt uit het Simulink Support Package voor Raspberry Pi Hardware-bibliotheek en kan worden geconfigureerd met behulp van de Write API Key van uw ThingSpeak-kanaal. Hieronder vindt u gedetailleerde instructies voor het maken van het kanaal. Om continu gegevens in de cloud te loggen, wil je dat je Pi onafhankelijk van Simulink werkt. Hiervoor kunt u in uw Simulink-model op de knop “Deploy to Hardware” drukken.

Maak je eigen ThingSpeak-kanaal

Degenen die geen account hebben, kunnen zich aanmelden op de ThingSpeak-website. Als je een MathWorks-account hebt, heb je automatisch een ThingSpeak-account.

  • Nadat je bent ingelogd, kun je een kanaal maken door naar Kanalen > Mijn kanalen te gaan en op Nieuw kanaal te klikken.
  • Het enige dat u nodig hebt, is een naam voor het kanaal en namen voor de velden die u gaat loggen, zoals hieronder weergegeven.
  • De optie Kanaallocatie tonen heeft de breedte- en lengtegraad van uw stad nodig als invoer en kan de locatie binnen het kanaal op een kaart weergeven. (Voorbeeldwaarden die hier worden gebruikt, zijn voor Natick, MA)
  • Druk vervolgens op Kanaal opslaan om het maken van uw kanaal te voltooien.

4a. Waarschuwing als de gegevens als 'lelijk' zijn gecategoriseerd

Om ons monitoringsysteem voor het binnenklimaat te voltooien, moeten we zien hoe we waarschuwingen kunnen ontvangen op basis van cloudgegevens. Dit is van cruciaal belang omdat u zonder dit niet in staat zult zijn om de nodige acties te ondernemen om het comfortniveau in de kamer te veranderen. In dit gedeelte zullen we zien hoe u een melding op uw telefoon kunt ontvangen wanneer de cloudgegevens aangeven dat de kamer te vochtig of droog is. We zullen dit bereiken door gebruik te maken van twee diensten: IFTTT Webhooks en ThingSpeak TimeControl. IFTTT (staat voor If this, then that) is een online service die gebeurtenissen kan afhandelen en acties kan starten op basis van de gebeurtenissen.

Stappen om IFTTT-webhooks in te stellen

Opmerking: probeer deze op een computer voor de beste resultaten.

1) Maak een account aan op ifttt.com (als u er nog geen heeft) en maak een nieuwe applet aan op de pagina Mijn applets.

2) Klik op de blauwe "this"-knop om uw triggerservice te selecteren.

3) Zoek naar en kies Webhooks als service.

4) Selecteer Een webverzoek ontvangen en geef een naam op voor de gebeurtenis.

5) Selecteer trigger maken.

6) Selecteer "dat" op de volgende pagina en zoek naar meldingen.

7) Selecteer een melding verzenden vanuit de IFTTT-app.

8) Voer de gebeurtenisnaam in die u in stap 2 van IFTTT hebt gemaakt en selecteer actie maken.

9) Ga door tot u bij de laatste stap bent, bekijk en druk op voltooien.

10) Ga naar https://ifttt.com/maker_webhooks en klik op de knop Instellingen bovenaan de pagina.

11) Ga naar de URL in het gedeelte Accountinfo.

12) Voer hier uw evenementnaam in en klik op 'Test It'.

13) Kopieer de URL op de laatste regel voor toekomstig gebruik (met de sleutel).

Stappen om ThingSpeak TimeControl in te stellen

1) Selecteer Apps> MATLAB-analyse

2) Klik op Nieuw op de volgende pagina en kies Trigger E-mail van IFTTT en klik op Maken.

De belangrijke stukken hier in de sjablooncode zijn:

Kanaal-ID - Voer uw ThingSpeak-kanaal in dat de informatie over de "binnenvochtigheidswaarde" heeft.

IFTTTURL - Voer de URL in die is gekopieerd uit de vorige sectie Stap 13.

readAPIKey - Voer de sleutel in van de ThingSpeak Channel. Action-sectie - degene die op de laatste waarde werkt. Wijzig dit in het volgende om waarschuwingen te activeren.

3) Klik op de ThingSpeak-website op Apps > TimeControl.

4) Selecteer Terugkerend en kies een tijdfrequentie.

5) Klik op TimeControl opslaan.

MATLAB-analyse wordt nu elk half uur automatisch uitgevoerd en stuurt een trigger naar de IFTTT Webhooks-service als de waarde groter is dan of gelijk is aan 3. Vervolgens zal de IFTTT-telefoonapp de gebruiker waarschuwen met een melding zoals weergegeven aan het begin van dit gedeelte.

Stap 6: Conclusie

Daarmee hebben we alle belangrijke aspecten gezien van hoe u uw eigen klimaatmonitoringsysteem kunt bouwen. In dit project hebben we gezien hoe Simulink kan worden gebruikt om:

  • programmeer een Raspberry Pi om gegevens van Sense HAT binnen te halen. Markeer - Visualiseer de gegevens in Simulink terwijl de code nog steeds op de Raspberry Pi draait.
  • bouw de visuele weergave van het monitoringsysteem voor het binnenklimaat. Markeren - Verander de manier waarop uw code zich gedraagt op de hardware van Simulink.
  • ontwerp het algoritme van het binnenklimaatmonitoringsysteem.
  • log de gegevens van de Raspberry Pi in de cloud en maak waarschuwingen van de gelogde gegevens.

Wat zijn enkele van de veranderingen die u zou doen aan dit monitoringsysteem voor het binnenklimaat? Deel uw suggesties via opmerkingen.

Aanbevolen: