Je wordt wakker met een bonkend hoofd, terwijl je gewoon acht uur hebt geslapen. Of je zit ’s avonds te werken aan de keukentafel en merkt dat je concentratie na een uur compleet weg is. Slechte luchtkwaliteit is een voor de hand liggende oorzaak, maar zonder meting blijft het gissen. Met een paar goedkope sensoren en een Arduino bouw je in één middag een apparaatje dat live CO2, fijnstof en luchtvochtigheid bijhoudt. De totale kosten blijven onder de dertig euro, er is geen abonnement voor nodig en je data blijft gewoon bij jou.
Wat je straks op je scherm ziet
Voordat je een soldeerbout pakt, is het goed om te weten wat je eigenlijk meet. CO2 wordt uitgedrukt in ppm (parts per million). Buitenlucht zit rond de 420 ppm. In een slecht geventileerde slaapkamer met twee mensen stijgt dat snel naar 1500 ppm of hoger, en dan word je suf zonder dat je doorhebt waarom. Fijnstof (PM2.5) meet je in microgram per kubieke meter lucht. De WHO-richtlijn zit op maximaal 15 µg/m³ als jaargemiddelde. Luchtvochtigheid spreekt voor zich: 40 tot 60 procent is comfortabel, daarbuiten groeit schimmel of droogt je huid uit.
Stap 1: Kies je sensor op basis van je doel
Slaapkamer? Kies de MH-Z19C. Dat is een NDIR CO2-sensor (dus geen goedkope ‘eCO2′-schatting) voor rond de 20 euro. Wil je weten hoeveel fijnstof er binnendrijft als je buurman barbecuet? Pak er een SDS011 bij voor zo’n 15 euro, of de iets nauwkeurigere PMS5003 voor vergelijkbare prijs. Wil je alles in één apparaat? Combineer de MH-Z19C met een PMS5003. Beide werken prima samen op een ESP32.
Stap 2: Selecteer je microcontroller
Voor een eerste project zonder wifi: een Arduino Nano (rond de 5 euro op AliExpress, iets meer bij een Nederlandse webshop) werkt direct en vraagt weinig instelling. Wil je waarden loggen of op afstand uitlezen, dan is een ESP32-ontwikkelbord de betere keuze. Dat kost 6 tot 10 euro en heeft ingebouwde wifi en Bluetooth. Let op: de ESP32 werkt op 3,3 V logica, de Arduino Nano op 5 V. Dat is straks belangrijk bij het aansluiten.
Stap 3: Verzamel de overige onderdelen
- Een 0,96 inch OLED-display met I2C-aansluiting (SSD1306, rond de 3 euro)
- Een breadboard en een setje jumperdraden
- Een USB-voedingsadapter of powerbank
- Optioneel: een kleine projectdoos of een 3D-geprint behuizinkje
Totaal kom je uit op 25 tot 45 euro, afhankelijk van of je een combinatiesensor neemt en waar je bestelt.
Stap 4: Sluit de sensor aan op de microcontroller
De MH-Z19C communiceert via UART. Gebruik de volgende aansluitingen als je een ESP32 gebruikt:
| MH-Z19C pin | ESP32 pin | Opmerking |
|---|---|---|
| VCC (5V) | VIN of externe 5V | Niet de 3,3V-pin gebruiken |
| GND | GND | |
| TX | GPIO16 (RX2) | Kruislings aansluiten |
| RX | GPIO17 (TX2) | Kruislings aansluiten |
De SDS011 werkt ook op 5V en communiceert serieel. Sluit TX van de sensor aan op een vrije RX-pin van je microcontroller. Gebruik een levelshifter als je de 5V TX-lijn aansluit op een 3,3V ESP32-pin, want anders beschadig je hem op de lange termijn.
Stap 5: Sluit het OLED-display aan via I2C
I2C heeft maar vier draden. VCC naar 3,3V, GND naar GND, SDA naar GPIO21, SCL naar GPIO22 op de ESP32. Op een Arduino Nano zijn dat A4 (SDA) en A5 (SCL). Upload een simpele ‘Hello World’-sketch met de U8g2-bibliotheek om te controleren of het display werkt voordat je verdergaat. Zie je tekst? Dan is je hardware in orde.
Stap 6: Installeer de Arduino IDE en de bibliotheken
Download de Arduino IDE. Voeg via Bestandsvoorkeuren de ESP32-boardmanager-URL toe als je een ESP32 gebruikt, en installeer het board via de boardmanager. Installeer daarna deze bibliotheken via Schets, dan Bibliotheek beheren:
- U8g2 (voor het OLED-display)
- MHZ19 van Jonathan Dempsey (voor de CO2-sensor)
- PMserial van Alvaro Valdebenito (voor PMS5003 of SDS011)
Stap 7: Laad de basiscode op
De structuur van je sketch is eenvoudig: initialiseer de seriële verbindingen voor de sensor(en), initialiseer het display, en lees in de loop() om de vijf seconden de sensorwaarden uit. Toon CO2 op regel één, PM2.5 op regel twee, luchtvochtigheid op regel drie. De MHZ19-bibliotheek geeft de CO2-waarde terug met één functieaanroep: myMHZ19.getCO2(). Je kunt de basiscode vinden in de voorbeelden van de genoemde bibliotheken, of zoek op GitHub naar ‘MHZ19 OLED ESP32 example’ voor een kant-en-klaar startpunt dat je naar wens aanpast.
Stap 8: Kalibreer je CO2-sensor correct
De MH-Z19C heeft een automatische kalibratiemodus die ervan uitgaat dat de laagste CO2-waarde van de afgelopen 24 uur gelijk is aan buitenlucht (400 ppm). In een slaapkamer die je nooit lucht klopt dat niet. Zet de automatische kalibratie uit in je code met myMHZ19.autoCalibration(false) en doe een handmatige kalibratie: zet de sensor minstens twintig minuten buiten in frisse lucht, roep dan myMHZ19.calibrate() aan. Laat de sensor na het eerste opstarten ook minstens drie minuten warmlopen voordat je de waarden vertrouwt.
Stap 9 (optioneel): Wifi-logging met de ESP32
Heb je een ESP32 en wil je een historisch overzicht bijhouden? Stuur je waarden elke minuut via HTTP naar een Google Apps Script dat ze in een spreadsheet schrijft. Of, als je Home Assistant gebruikt, stuur ze via MQTT naar je eigen server. Beiden vragen om zo’n tien extra regels code bovenop je basissketch. Zoek naar ‘ESP32 MQTT Home Assistant luchtkwaliteit’ voor concrete voorbeelden inclusief de broker-instellingen.
Drempelwaarden: wanneer moet je actie ondernemen?
Hier is wat houvast voor de waarden op je scherm. CO2 onder de 800 ppm is prima. Tussen 800 en 1000 ppm is nog acceptabel, maar zet je raam alvast op een kier. Boven de 1000 ppm: ventileer direct. Voor PM2.5 geldt de WHO-richtlijn van 15 µg/m³ als daggemiddelde. Pieken boven de 35 µg/m³ wil je niet langdurig inademen. Luchtvochtigheid houd je het liefst tussen de 40 en 60 procent.
Veelgemaakte aansluitfouten
De seriële monitor in de Arduino IDE (Ctrl+Shift+M) is je beste vriend als er iets niet klopt. Zie je alleen nullen of onzin? Controleer dan of de baudrate in de monitor overeenkomt met die in je code. Krijg je helemaal geen output van de sensor? Controleer of TX en RX niet per ongeluk rechtdoor zijn aangesloten in plaats van kruislings. Werkt het display niet? Zoek het I2C-adres op met een I2C-scanner sketch, want niet elk display zit standaard op adres 0x3C, soms is het 0x3D.
Na deze middag heb je een meter die je precies vertelt wat er in je kamers afspeelt. Als je slaapkamer ’s nachts richting de 1600 ppm CO2 gaat, verklaart dat meteen dat gevoel waarmee je ’s ochtends wakker wordt. Ben je nieuw met elektronica, start dan met alleen de MH-Z19C op een Arduino Nano. Bevalt het, dan voeg je later de fijnstofsensor en wifi-logging toe. De stap naar meer is klein, en wat je eenmaal weet over de lucht in je eigen huis, gebruik je dagelijks.
