Mäta luftkvalite
Pga rådande pandemi så har jag lite mindre att göra på jobbet och därav tillbringar en del tid framför datorn hemma för lite kompetensökning och egna projekt.
Ett av projekten jag tänkte redogöra för är att mäta luftkvaliten hemma med fyra parametrar:
- Temperatur
- luftfuktighet
- CO2-halt
- VOC, organiska flyktiga ämnen(enligt vad jag har förstått)
För att kunna genomföra projektet har jag genomfört 2 kurser på www.udemy.com, Python-programmering och Web-ramverket Django.
"Systemet" består av 2 delar:
- Extern sensor, från början en "Air quality IoT starter kit" från okdo som innehåller en wio-link ("arduino"), en DHT22 som mäter luftfuktighet och temperatur och en SGP30 som mäte VOC och CO2.
- En raspberry Pi 3 som "datasamlare" samt webserver för att presentera resultatet/datat.
Extern sensor
Denna sensor består av 4 delar:
- wio-link som webserver.
- DHT22, som mäter temperatur(±0,5°C) och luftfuktighet(±2%RH).
- SGP30, som mäter VOC och CO2 eller egentligen "H2based CO2eq".
- Kraftkälla, batteri eller extern kraftkälla.
Jag fick aldrig wio-link att fungerar som avsett, dvs mätvärdena skulle skickas till en server och kunna läsas på nätet.
Istället skrev jag ny kod i Arduino IDE, gjorde om den till egen webserver som presenterade resultatet på en enkel sida.
Värdena, som presenteras på sidan, är taggade som "<var id =''>" för att enkelt kunna läsa dessa från Raspberryn.
På den sidan presenteras endast aktuell information och uppdateras var tionde sekund.
Efter gjort denna del växte iden fram att samla dessa värden och kunna presentera hur dessa ändras över tiden.
Raspberry Pi
Raspberryn har 3 delar:
- En del där data hämtas och sparas ner till textfiler.
- Webserver byggd på Django och Python för att presentera resultat.
- En egen DHT22 där data från denna också preseteras på en sida.
Hämtning av data
2 st Python-script triggas av Cron-jobb och hämtar data från den interna och den exterana sensorn.
För den interna sensorn hämtas aktuellt data från sensorn och sparas till en separat textfil.
För den externa sensorn hämtas data genom att läsa html-koden och hämta de 4 taggade varaiablerna, samt spara ner datat med datum och tid i en separat fil.
Jobben körs inte samtidigt utan är förskjutna 15 min. Finns också en kontroll att fil finns och att den inte är större än 1 GB, annars så skapas en ny fil.
Webserver
Själva webservern är byggd på Django och Python. Den innehåller 3 sidor för att presentera resultat med hjälp av modulen matplotlib. Webservern tar data från de 2 textfilerna och presentera dessa som diagram. Allt sker online och inga bilder skapas på disken. Vid omstart startas ett Python-script som starta webservern igen.
Sammanfattning
Det har varit ett lärorikt projekt med en hel del testande för att få det att fungera som jag vill :)
Nu återstår att testa lite mer utförligt och korrigera ev brister samt rita och skriva ut en låda till den externa sensorn.