De luchtkwaliteit in je woning is vaak slechter dan je denkt. Krijg inzicht hierin door zelf een luchtkwaliteitmonitor te bouwen met de Raspberry Pi Zero W.

Sai Yamanoor, Srihari Yamanoor en Koen Vervloesem

 

Veel mensen zijn zich bewust van de luchtvervuiling buitenshuis, maar de luchtvervuiling binnenshuis kan veel erger zijn dan buiten. En dat terwijl we ongeveer 90% van onze tijd binnen doorbrengen.

In deze workshop leer je hoe je je eigen binnenshuis luchtkwaliteitmonitor bouwt, om te ontdekken of de luchtkwaliteit bij jou thuis aan verbetering toe is. We maken daarvoor onder andere gebruik van de Raspberry Pi Zero W en de CCS811 VOC-sensor (volatile organic compounds, vluchtige organische stoffen waarvan sommige schadelijk zijn voor de gezondheid). Andere benodigde hard- en software vind je in het kader ‘Wat heb je nodig’. De verzamelde gegevens leveren een visuele aanwijzing van de luchtkwaliteit (met een rgb-ledstrip) en de gegevens slaan we op in een Google Sheets-spreadsheet. De visuele hulp is bedoeld om mensen bewust te maken van de luchtkwaliteit in hun onmiddellijke omgeving, terwijl de opgeslagen gegevens in de spreadsheet nuttig zijn om trends te ontdekken in de luchtkwaliteit van de ruimte. 

 

Wat heb je nodig

  • Raspberry Pi Zero W
  • Pimoroni Blinkt! ledstrip
  • Adafruit Perma Proto Bonnet Mini Kit
  • Sparkfun CCS811 VOC-sensor
  • Stapelbare 2×20
    vrouwelijke headers
  • 4 × mannelijk-naar-mannelijke jumperdraden
  • 3D-geprinte behuizing (bronbestanden beschikbaar bij dit artikel)
  • Python-script (naam ccs811.py) via: magpi.cc/2zrzuXP
  • Google-account (voor Google Sheets)
    De Pimoroni Blinkt! geeft een visuele aanwijzing van de luchtkwaliteit
in de onmiddellijke omgeving
Afbeelding 1 VOC Sensor setup 2   De CCS811 VOC-sensor is
met de Raspberry Pi Zero W 
gekoppeld via de I²C-interface
 
 
 Afbeelding 2 VOC Sensor setup 2  

De gegevens die de sensor verzamelt,
worden gelogd naar een Google Sheets-
spreadsheet via IFTTT (If This Then That)

   


Verbind de sensor

Afbeelding 3 CCS811 schematic 2

 

 

 

Afbeelding 3
De CCS811-sensor is verbonden met 3V3 en GND, en zijn klok- en datapinnen respectievelijk met GPIO 3 en GPIO 2

 

 



De CCS811-sensor komt met een I²C-interface en heeft een spanningsbron van 3,3 V nodig. De klok- en datapinnen van de sensor verbind je respectievelijk met de pinnen GPIO 3 en GPIO 2 (Afbeelding 3).

 

 Test de sensor

De eerste stap is om de I²C-interface in te schakelen, te verifiëren of de sensor correct is verbonden en te controleren of de Raspberry Pi de sensor op de I²C-interface detecteert.

De I²C-interface kun je inschakelen vanaf het bureaublad van de Raspberry Pi. Ga naar Menu, selecteer Preferences en vervolgens Raspberry Pi Configuration. Onder het tabbblad Interfaces schakel je de I²C-interface in.

Open nu de Terminal en typ:

sudo i2cdetect –y 1

De bovenstaande opdracht zou een opsomming moeten leveren van alle apparaten die met de I²C-interface van de Raspberry Pi zijn verbonden. Zoals je ziet in Afbeelding 5, is het adres van de CCS811-sensor 0x5A. Volgens de datasheet van de sensor is de CCS811 te configureren op het adres 0x5A of 0x5B.

De volgende stap is om de kloksnelheid van de I²C-interface in te stellen. We moeten de kloksnelheid van de I²C-interface aanpassen aan die van de sensor. Open daarvoor /boot/config.txt in de terminal:

sudo nano /boot/config.txt

Voeg de volgende regel aan het einde van het bestand toe:

dtparam=i2c_baudrate=8000

Sla de wijzigingen aan het bestand op (CTRL+X) en herstart je Raspberry Pi.

Afbeelding 4 bserved trend

Afbeelding 4
Een grafiek toont de waargenomen vluchtige organische stoffen over een periode van 24 uur.

Deze informatie is nuttig om na te gaan of en wanneer een ruimte ventilatie nodig heeft

Bibliotheken installeren

Om gegevens van de sensor uit te lezen, moeten we een aantal bibliotheken (libraries) installeren:

pip install python-periphery requests configparser
sudo apt-get install python-blinkt

We installeren de Python-periphery bibliotheek om toegang te krijgen tot de I²C-interface en de Python-requests bibliotheek om de sensorgegevens naar een Google Sheets-spreadsheet te uploaden. De bibliotheek blinkt van Pimoroni hebben we nodig om de rgb-ledstrip aan te sturen. Als je een andere rgb-led gebruikt, installeer dan de daarvoor benodigde bibliotheek.

Afbeelding 5 i2c scan 2

 

Afbeelding 5

Opsomming van alle apparaten die met de I²C-interface van de Pi zijn verbonden

 


Let wel: op het moment dat we deze gadget bouwden, waren er geen bibliotheken beschikbaar om gegevens van de CCS811-sensor te lezen. Daarom schreven we onze eigen bibliotheek. Adafruit Industries heeft sindsdien zijn eigen bibliotheek gepubliceerd (pypkg.com/pypi/adafruit-ccs811). Kies de bibliotheek die aan je behoeften voldoet. 

Visuele hulp

Gebruik een viltstift of een markeerstift om het effect van vluchtige organische stoffen te demonstreren. NB: de VOC-sensor is niet geschikt niet om de niveaus van koolstofdioxide te meten.

De sensor uitlezen

Voordat we alles in elkaar zetten, moet elke component van onze gadget getest worden, om te beginnen met de sensor. Om te controleren of de sensor werkt zoals verwacht, voeren we een eenvoudige transactie met de I²C-interface uit. Volgens de datasheet is het mogelijk om het hardware-id van de sensor uit register 0x20 uit te lezen. In dit geval is dat id 129 (hexadecimaal 0x81).

De code voor deze gadget kun je downloaden van de GitHub-repository (magpi.cc/2zrzuXP). Ga in de Terminal naar de directory met de code. Start de Python-interpreter en voer de volgende code uit:

>>> import ccs811
>>> my_ccs811 = ccs811.CCS811(device_address=0x5A)
>>> print(my_ccs811.read_byte(0x20))
129

We weten nu dat de sensor werkt, daarom gaan we verder met het testen van de rgb-ledstrip.

Rgb-ledstrip testen

Voor deze workshop gebruiken we de Pimoroni Blinkt! ledstrip (magpi.cc/2yg5Mng). Pimoroni biedt een bibliotheek aan die nodig is om de rgb-ledstrip aan te sturen. Die is dan ook heel eenvoudig in ons project te integreren. Het Python-script voor het testen van de bibliotheek:

import blinkt
from time import sleep

while True:
    blinkt.set_all(255, 0 , 0)
    blinkt.show()
    sleep(1)
    blinkt.set_all(0, 255, 0)
    blinkt.show()
    sleep(1)

Als je dit script uitvoert, zouden alle leds op de ledstrip afwisselend rood en groen moeten oplichten, met een interval van 1 seconde.

Stel je IFTTT-account in

We gebruiken IFTTT (If This Then That) om de sensorgegevens in een spreadsheet op te slaan. Als je niet bekend bent met IFTTT, lees dan dit artikel van de Engelse MagPi (magpi.cc/2yicr08). Let wel op: het Maker-kanaal heet nu de Webhooks-dienst.

Om de data in een spreadsheet op te slaan, creëren we een IFTTT-applet waarbij we een webhook met de sensorgegevens gebruiken als een trigger om een rij aan de spreadsheet toe te voegen. Kopieer de sleutel van je webhook van de documentatiepagina van je webhooks: Your Profile > Services > Webhooks > Documentation (Afbeelding 6).

Afbeelding 6 key 2

Afbeelding 6 Sla de sleutel op in het bestand key.ini

 

 

 

Sla de sleutel op in een bestand met de naam key.ini met het volgende formaat:

[CREDENTIALS]
key = YOUR_KEY

Vervang de tekst YOUR_KEY door je IFTTT-sleutel en test vervolgens of we nu een rij aan een spreadsheet kunnen toevoegen.

config = configparser.ConfigParser()
config.read('/home/pi/key.ini')
key = config.get('CREDENTIALS', 'key')
payload = {'value1': 1, 'value2': 2}
print(URL.format(key=key))
try:
    response = requests.post(URL.format(key=key), json=payload)
except requests.exceptions.ConnectionError as error:
    print(str(error))
if response.status_code == 200:
    print("Success")

Voer dit Python-script uit en controleer of er een rij aan de spreadsheet is toegevoegd.

Solderen en montage

Nu we alles gecontroleerd hebben en weten dat alle componenten werken, is het tijd om de sensor op een printplaatje te solderen. We raden aan om de Adafruit Perma Proto Bonnet Mini Kit (magpi.cc/2yg7oxk) te gebruiken, omdat die dezelfde afmetingen heeft als de Raspberry Pi Zero W. In plaats van de pinheaders te gebruiken die met de kit meegeleverd zijn, raden we aan om stapelbare headers (magpi.cc/2yid0ag) te gebruiken. Daarmee kun je de Pimoroni Blinkt! ledstrip op de Proto Bonnet Mini Kit stapelen.

Behuizing

Afbeelding 7 IMG 20171031 170539 2
Om een lichtbolachtig effect te realiseren, gebruikten we een behuizing die het licht verstrooit. Wij ontwierpen een behuizing die je door een 3D-printer zou kunnen laten bouwen (Figuur 7).

 

Afbeelding 7 De behuizing kun je 3d-printen met de stl-bestanden in de repository van het project.

 

 

Om een lichtbolachtig effect te realiseren, gebruikten we een behuizing die het licht verstrooit. Wij ontwierpen een behuizing die je door een 3D-printer zou kunnen laten bouwen (Afbeelding 7).

We raden aan om daarvoor een wit filament te gebruiken, omdat dit het beste het licht verstrooit. De behuizing bestaat uit een bovenkant die het licht verstrooit en een kant die de Raspberry Pi Zero W bevat. De ontwerpbestanden voor de behuizing zijn te vinden in de repository van het project (magpi.cc/2zrzuXP).

Alles samenbrengen

Zodra je de Raspberry Pi Zero W, CCS811-sensor en ledstrip in de behuizing hebt gemonteerd, is het tijd om je nieuwe gadget te testen. De code bestaat uit een CCS811-klasse die alle interacties met de sensor afhandelt, zoals gegevens lezen van en schrijven naar de sensor.

Als je het script draait, reset en initialiseer je de sensor. Na de initialisatie vragen we aan het statusregister of er nieuwe gegevensmonsters beschikbaar zijn. Volgens de datasheet geeft de flag DATA_READY aan of er een nieuw monster beschikbaar is.

Wanneer er een nieuw monster van de sensor beschikbaar is, haalt het programma de equivalente koolstofdioxideniveaus en de niveaus aan vluchtige organische stoffen (VOC) op. We gebruiken de VOC-niveaus om de kleur van de rgb-ledstrip in te stellen. Als de VOC-niveaus bijvoorbeeld onder de 16 pbb bedragen, zetten we de kleur op groen; als ze hoger zijn dan 60 ppb, zetten we de rgb-ledstrip op rood. We gebruiken de methode FadeInOut om een lichteffect te produceren door de helderheidsniveaus van de ledstrip aan te passen. Elke 15 minuten uploaden we bovendien een datapunt naar de Google-spreadsheet met de methode post_data. Als de flag ERROR van het register STATUS is ingesteld, reset het programma automatisch de sensor en herinitialiseert de communicatie.

Voer het Python-script uit, waarna de meter groen zou moeten gloeien. Open een markeerstift of een andere stift die een geurtje heeft, en breng het naar de behuizing. Je zult merken dat de kleur van de behuizing verandert van groen tot rood.

Let wel: De CCS811-sensor heeft 48 uur en minstens 20 minuten na het opstarten nodig om stabiele meetgegevens te kunnen leveren.

VOC-trends in de spreadsheet

Laat het apparaatje minstens 24 uur draaien en verzamel gegevens in intervallen van 15 minuten. Het is interessant om naar de trends te kijken en uit te vinden of je woonkamer (altijd) voldoende ventilatie heeft.

          voc sensor glow green 2               voc sensor glow red 2
De sensor begon rood te gloeien wanneer we een viltstift dicht bij de behuizing hielden

 

 

MagPi                           MagPi1

Dit artikel komt uit
het nieuwe Nederlandstalige magazine MagPi.