Bouw Je Eigen DIY Luchtkwaliteit Monitor: PM2.5, CO2, VOC, Ozon, Temperatuur & Vochtigheid met Arduino
Heb je je ooit afgevraagd wat de kwaliteit is van de lucht die je inademt, of waarom je soms slap wordt op kantoor of 's ochtends moe bent ondanks een volle nacht slapen? Slechte luchtkwaliteit kan leiden tot veel negatieve gezondheidseffecten en moeheid, hoofdpijn, concentratieverlies, verhoogde hartslag, enz. Het monitoren van luchtkwaliteit is misschien belangrijker dan je denkt. In deze tutorial bouwen we onze eigen Luchtkwaliteit Monitor die PM2.5, CO2, VOC, Ozon, temperatuur en vochtigheid meet.
Bekijk de video of lees de handleiding hieronder.
Overzicht
Ik leg uit hoe elk luchtkwaliteitsparameter ons beïnvloedt en hoe de sensoren werken. De 'hersenen' is een Arduino Pro Mini in combinatie met een 2,8" Nextion touch display voor een fatsoenlijke gebruikersinterface.

We zien real-time metingen van alle sensoren. Klik op een sensor → waarden van de laatste 24 uur. Er is ook een dim-functie voor schermhelderheid (tot volledig uit) – handig voor nachtmetingen in de slaapkamer.

Scherm uit voor de nacht, volgende dag afzonderlijke sensorwaarden bekijken.
Nu het complete bouwproces en werking. Aan het einde kun je er zelf een bouwen. Start!
De PM2.5 Sensor – PMS5003
Deze monitor heeft vier hoofdsensoren. De PMS5003 meet PM2.5 (stofdeeltjes ~2,5 micron). Deeltjes zijn de meest schadelijke luchtverontreiniging: penetreren diep in longen, bloedstroom, hersenen → gezondheidsproblemen.

Werkt op laserverstrooiing. Een ventilator creëert gecontroleerde luchtstroom zodat deeltjes door een gefocuste laserbundel passeren.

Deeltjes veroorzaken lichtverstrooiing → gedetecteerd door fotodioden → omgerekend tot PM-concentratie door onboard microprocessor. Resultaten betrouwbaar; levert ook PM1 en PM10 waarden.
De CO2 Sensor – MH-Z19
De MH-Z19 meet CO2 (kooldioxide). Mensen uitademen CO2 → binnenruimte concentratie stijgt snel. Hoge CO2 is niet alleen gevaarlijk, maar veroorzaakt ook slapheid, moeheid, productiviteitsverlies.

Werkt op non-dispersieve infrarood (NDIR) principe. IR-bron straalt door een buis gevuld met te meten lucht. Aan de andere kant: optisch filter + IR-detector meet hoeveel IR-doorlaat.

CO2-moleculen absorberen specifieke IR-band → CO2-niveau berekend uit verschil tussen uitgezonden en ontvangen IR-licht. Resultaten nauwkeurig.
De VOC en Ozon Sensoren – MP503 en MQ-131
Voor VOC en Ozon: MP503 en MQ-131 gassensoren. Dit zijn verwarmde metalen-oxide sensoren; werking gebaseerd op weerstandsverandering bij aanwezigheid van doelgassen.

Een specifieke stroom door metaal substrate → weerstand verandert per hoeveelheid gas.
MQ-131 doelgas: alleen Ozon. In huishoudens gegenereerd door bepaalde luchtzuiverers, gezichtsstomers, UV-germicidelampen, etc.

MP503 heeft meerdere doelgassen: alcohol, rook, iso-butaan, methanaal, etc. VOC = Vluchtige Organische Stoffen: organische emissies van dagelijkse producten (wasmiddelen, reinigers, luchtverfrissers, verf, makeup, etc.). VOC's veroorzaken hoofdpijn, oogirritatie, hudreacties, duizeligheid, etc.
Schakelschema DIY Arduino Luchtkwaliteit Monitor
Bekijk het schema voor alle verbindingen.

Componenten (affiliate links):
- PMS5003 PM Sensor …………………….
- MH-Z19 CO2 Sensor ……………………..
- MQ-131 Ozon Sensor …………………..
- MP503 VOC Sensor ……………………….
- DHT22 Temp & Vocht Sensor………….
- Nextion 2,8″ Display ……………………..
- DS3231 RTC ………………………………….
- Arduino Pro Mini………………..…….…..
- Afstands/Spacer Moeren M3 ……………
- Mini USB Connector …………………….
- Pin headers ………………………………….
- 2-positie schakelaar …………………………
- Condensators: 0,1uF keramisch en 10uF elektrolytisch
- Transistoren – 2N3904
- Schakelaar
Disclaimer: Affiliate links. Als Amazon Associate verdien ik aan kwalificerende aankopen.
Correcte weerstandswaarden: R1 = 1K, R2 = 2K, R6 = 100K of 1M, R7 = 1K
PM2.5 sensor: seriële interface met Arduino. Werkt op 5V, maar RX-logica op 3,3V → spanningsdeler nodig. CO2-sensor en Nextion display: ook seriële communicatie. VOC en Ozon: analoge ingangen Arduino. DHT22: digitale pin. Twee transistoren voor sensorverwarmers activeren. DS3231 RTC voor tijdregistratie (I2C). Voeding: 5V via Mini USB.
Zie ook: De 8 Beste Arduino Starter Kits [2021 Update]
Als we alles direct aansluiten: een draadjesmess door de veelheid aan verbindingen.

Dus we hebben zeker een PCB nodig.
PCB Maken voor de Arduino Luchtkwaliteit Monitor
Voor de PCB gebruik ik Altium Designer (sponsor van deze video).

Altium Designer: decennia innovatie voor een echte unified design environment. Perfecte balans kracht en gebruiksgemak → meest gebruikte PCB-oplossing.
Hoe ik de PCB ontwierp: begint met schema. Altium heeft ingebouwde bibliotheken, maar nog beter: Manufacturer Part Search voor componenten direct bij fabrikanten (handig voor sourcing).

Voorbeeld: Mini USB connector gevonden via deze zoekfunctie. Direct toegang tot 3D-modellen, footprints, afmetingen, etc.
Eigen componentenbibliotheken aanmaken. Ik maakte de meeste componenten zelf voor eigen 3D-footprints → complete 3D PCB. Voor 3D-footprints: elke CAD-software, opslaan als .STEP, importeren in Altium.

Schema klaar → PCB genereren. Componenten rangschikken, één klik op Auto Route → alle sporen automatisch gegenereerd.

Handmatig aanpassen mogelijk. Design rules voor auto-routing, verschillende sporenbreedtes per net, etc. PCB in 3D zichtbaar, 3D-bestand exporteren voor behuizingontwerp later.
Dank aan Altium voor sponsoring. Meer info en gratis proef: Altium Designer free trial | Altium 365 viewer
Altium Designer projectbestanden (project, bibliotheken, .STEP 3D-modellen):
PCB Gerber bestand:
PCB klaar → Gerber en NC Drill bestanden genereren, in één zip → klaar voor productie.

Besteld bij JLCPCB. Zip sleepen → visuele check PCB.

Eigenschappen selecteren, bestellen tegen redelijke prijs.
PCB Assembleren
Na paar dagen PCB's ontvangen. Kwaliteit top, identiek aan ontwerp.

Assemblage: eerst kleine componenten (weerstanden, twee transistoren).
Dan Arduino Pro Mini. Eerst pin-headers solderen. Let op: niet alle pinnen nodig, maar wel A4, A5, DTR niet missen. Zorg dat je exact dezelfde Arduino Pro Mini hebt met deze pin-layout (kunnen verschillen).

DHT22 sensor: pinnen 90° buigen. Soms Blu-tack voor vastzetten tijdens solderen.
Twee condensators voor voedingsstabilisatie. Voeding via mini-USB (5V).

Boven voedingsconnector: twee schakelaars solderen. Één voor aan/uit, één voor upload-modus (sketch uploaden). Pin-headers voor USB-UART, display, PM2.5, VOC, Ozon, CO2 sensoren.
DS3231 RTC: pinnen 90° buigen, solderen, batterijje erin (tijd behoud bij stroomuitval). PCB klaar. Over: kabels voor PM2.5 sensor en display.
PM2.5 sensor kabel: male pin-headers gesoldeerd aan meegeleverde kabel → makkelijke PCB-verbinding. Display: vier draden gesoldeerd aan achterkant display-connector → naar PCB.

Luchtkwaliteit monitor is klaar. Nog: behuizing maken. Met 3D-model van PCB-assemblage (uit Altium) in CAD een behuizing ontwerpen.

Ik gebruikte SOLIDWORKS, maakte simpelste behuizing: twee delen, paar bouten/moeren. Transparant acrylaat gekozen – lekker zicht op PCB/componenten, mooi om DIY-project te tonen.
Download dit DIY Luchtkwaliteit Monitor 3D-model, bekijk in browser op Thangs.

Download 3D-model op Thangs.
Behuizing Maken voor Luchtkwaliteit Monitor
Acrylaat: 4 mm dik → past perfect met display. Geen CNC → handmatig zagen met metalsag.

Displayopening: twee gaten boren, zaagblad van mini-metalsag doorheen, vorm uitsagen. Rasp voor afwerken. 3 mm boor voor bevestigingsgaten (PCB en twee platen samen).


Beschermfolie van acrylaat afhalen (heel bevredigend). PCB op basisplaat: M3 bouten/moeren. PM2.5 sensor: M2 bouten.
Twee platen samenvoegen met afstandsmoeren. Één female + één male afstandsmoer → gewenste afstand makkelijk bereiken.

Ik vind de behuizing erg gelukt, plus functioneel: lucht circuleert vrij om sensoren.
Programmeren
Apparaat aanzetten, programma uploaden. Voeding via Mini USB: 5V USB-adapter, telefoonlader of powerbank.

Voor upload naar Arduino Pro Mini: USB-naar-seriële UART interface nodig (programmeer-header). Belangrijk: eerst hoofdboord aanvoeding AAN (voordat USB aan computer), want computer-USB (500 mA) kan ontoereikend zijn. Bij upload: upload-schakelaar op PCB inschakelen.
Download Arduino-code en Nextion Display-programma:
Arduino IDE: Board → Arduino Pro Mini, juiste processor-versie, poort, programmeermethode "USBasp".

Na Arduino-code upload: ook Nextion-display programmeren. Nextion heeft ingebouwde ARM-controller die display zelf beheert.

Alle graphics (knoppen, tekst, afbeeldingen, variabelen) worden door display zelf gegenereerd/beheerd. Nextion-editor voor aanmaken. Display en Arduino communiceren via 2 draden (seriële). Arduino stuurt sensorwaarden naar display, display stuurt data naar Arduino wanneer nodig.
Display-programma uploaden: microSD-kaart met .TFT-bestand uit Nextion-editor.


Display heeft kaartlezer: microSD erin (stroom uit), aanzetten → programma uploadt naar display. Kaart eruit, stroom weer aan → monitor werkt.
Code Uitleg
Libraries per sensor: MHZ19, PMS, MQ131, DHT, DS3231 (links in artikel). Raadpleeg documentaties en voorbeelden voor begrip.
We gebruiken SoftwareSerial omdat MH-Z19 en PMS5003 seriële communicatie gebruiken. Arduino-Nextion: hardware seriële poort.

Arduino leest sensoren, stuurt data naar Nextion. Voorbeeld:
Serial.print("tempV.val="); Serial.print(temp); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff);
Nextion-variabele "tempV" updaten: commando "tempV.val=22". Eerste twee regels doen dit; drie unieke "write" commando's (0xFF 0xFF 0xFF) nodig voor acceptatie door Nextion.
In Nextion-programma: timer loopt in lus (zoals Arduino loop), update constant getallen op scherm.

In timer-event: code voor achtergrondkleur per sensor afhankelijk van waarde.
Tweede pagina: waveform met opgeslagen waarden uit Arduino. Uren en Y-as waarden ook van Arduino.

Bovenop waveform en hoofdscherm-getallen: transparante objecten "Hotspots" in Nextion-editor → fungeren als knoppen. Druk op hotspot op waveform → Event-section toont "page 0" (terug naar hoofdpagina).
Dit is de kern van de software. Voor volledig begrip: leer hoe elke sensor met library werkt, en Nextion-display werking.
Let op: VOC-sensor: alleen ruwe analoge data (0-1024), geen ppm/ppb. Hogere waarde = VOC aanwezig.
Ozon-sensor: voor nauwkeurigere uitvoer setTimeToRead() en setR0() correct instellen per calibratie-voorbeeld van library. Lange setTimeToRead blokkeert programma tijdens sampling. Er zijn workarounds. Ik zou zelfs adviseren om ozon-sensor weg te laten tenzij echt nodig.
Ik hoop dat je deze video leuk vond en er iets van hebt geleerd. Ondersteun me op Patreon als je wilt. Vragen? Reacties hieronder. Bekijk mijn Arduino Projecten Collectie.
Productieproces
- Bouw Een Raspberry Pi Luchtkwaliteit & Weerstation Met InfluxDB & Grafana
- Luchtkwaliteit meten met OpenSensors: Een Arduino & Python Handleiding
- Helium-gebaseerde Zon-Powered Luchtsensor: Ontwerp & Implementatiegids
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Arduino Temperatuurbewaking & Realtime Klok met 3.2" TFT-display
- Bouw een DIY VR-skateboard met Arduino, Google Cardboard en Bluetooth
- Precieze Luchtkwaliteit Monitor met Sharp GP2Y1010AU0F Sensor
- Bouw een DIY Arduino Radionica EMR Behandelapparaat