Toen Tweakers verhuisde van de bovenste verdieping van een pand in Amsterdam-Noord naar een tussenverdieping in Amsterdam-Oost, was dat even wennen. Het uitzicht werd minder en voor velen verviel de tweemaal dagelijkse vaart met het pontje. Ook was de nieuwe ruimte minder licht en was de luchtkwaliteit, merkten veel collega’s op, minder goed dan in het vorige gebouw. Meten is weten en omdat ook de medewerkers van Tweakers dat adagium hoog in het vaandel dragen, verschenen er op veel bureaus weerstationnetjes, die temperatuur en luchtvochtigheid kunnen meten.
Te midden van alle weerstationnetjes ontstond het idee om zelf een luchtkwaliteitsmeter te bouwen, met behulp van een Arduino-achtige microcontroller en sensors voor de luchtkwaliteit. Die sensors kun je voor een appel en een ei aanschaffen bij de bekende Chinese webwinkels, maar zijn ook voor een wat hogere prijs bij Europese winkels te bestellen.
In dit artikel bouwen we een standalone luchtkwaliteitsmeter op basis van een aantal sensors en een microcontroller. We hebben gekozen voor een BME280-sensor van Bosch, een CCS811-sensor van AMS en een zuurstofsensor. Tezamen kunnen ze nogal wat metingen aan de lucht verrichten, waaronder luchtdruk, luchtvochtigheid, kooldioxide- en zuurstofconcentratie. We ontwerpen een behuizing om de sensors heen en geven de meetwaarden weer op een oled-scherm. De code en de stl-bestanden zijn in het artikel gelinkt, zodat je eventueel zelf de luchtkwaliteitsmeter kunt nabouwen.
Sensors: zuurstof, luchtvochtigheid en kooldioxide
BME 280
De BME 280-sensor van Bosch kun je al voor een paar euro kant en klaar op een bordje bestellen uit China. De sensor meet slechts 2,5x2,5mm, maar kan een aantal heel relevante waarden meten voor dit project: temperatuur en relatieve luchtvochtigheid, en daarnaast luchtdruk en hoogte. De hoogte wordt berekend op basis van de luchtdruk. De sensor merkt relatieve verschillen goed op, maar voor het berekenen van de absolute hoogte is hij niet geschikt. Bovendien is de hoogte niet direct relevant voor de luchtkwaliteit.
Temperatuur en luchtvochtigheid zijn dat wel. De invloed van de temperatuur op de luchtkwaliteit is vanzelfsprekend; te warme of te koude lucht kan oncomfortabel zijn en het verschilt per persoon waar die grens precies ligt. De relatieve luchtvochtigheid is wat lastiger te beoordelen. Deze wordt weergegeven als een percentage van de maximale hoeveelheid vocht die de lucht kan bevatten. Heel vochtige lucht kan tot gevolg hebben dat de omgeving klam aanvoelt en leiden tot schimmelvorming.
Droge lucht kan veroorzaakt worden door kachels, doordat warme lucht minder vocht bevat, of juist airconditioners die droge lucht produceren; ook dat kan onprettig zijn. Er zijn veel onderzoeken naar luchtvochtigheid gedaan, en onder andere het RIVM constateert dat mensen met allergieën en huidklachten bij een luchtvochtigheid van dertig procent en lager last kunnen krijgen van bijvoorbeeld droge ogen en een droge huid. Bij een relatieve luchtvochtigheid van minder dan tien procent worden ook de slijmvliezen van de neus droger, wat de kans op een infectie aan de luchtwegen verhoogt. De arbodienst stelt dan ook dat een relatieve luchtvochtigheid van dertig tot zeventig procent als behaaglijk wordt ervaren, hoewel je ook vaak de vuistregel van veertig tot zestig procent tegenkomt.
SparkFun Environmental Combo Breakout, met links de CCS811 en rechts de BME280
CCS 811
De CCS 811 is een sensor die door AMS wordt gemaakt en die vooral wordt gebruikt om kooldioxideniveaus te meten, maar hij kan ook vluchtige organische koolwaterstoffen meten. CO₂ is een gas dat bij verbranding van organische stoffen vrijkomt, maar ook het gas dat je uitademt. Als er veel mensen in een slecht geventileerde ruimte zitten, kan het CO₂-niveau flink stijgen en tot gevolg hebben dat mensen zich slechter kunnen concentreren.
De hoeveelheid CO₂ wordt weergegeven in parts per million. In de buitenlucht verschilt die concentratie. Ze bevindt zich daar in de orde van grootte van 400ppm en neemt ieder jaar met ongeveer 2,5ppm toe. CO₂ draagt bij aan het broeikaseffect, maar de concentratie in de buitenlucht is niet direct schadelijk voor de gezondheid. De mic-waarde van CO₂, oftewel de maximale waarde waarbij op lange termijn geen gezondheidsproblemen ontstaan, is 3000ppm. Toch kun je ook bij een lagere waarde al klachten krijgen, zoals hoofdpijn of verminderde concentratie. Er is geen harde grens waarbij dat zich voordoet, maar in een richtlijn die het in samenwerking met GGD’en heeft opgesteld, noemt het RIVM een concentratie van 1200ppm binnenshuis al te hoog.
De andere meting die de CCS811 kan doen, is het meten van tvocs, wat een afkorting is van total volatile organic compounds, oftewel vluchtige organische stoffen (vos). De herkomst van die vluchtige stoffen kan uiteenlopen, van de lucht die lijm achterlaat tot de stoffen die een luchtverfrisser produceert en de ethanol die je uitademt als je een alcoholisch drankje hebt genuttigd. De sensor identificeert die stoffen niet, maar geeft alleen de totale concentratie in ppb (parts per billion) weer. Normaliter zijn deze stoffen nauwelijks aanwezig in de lucht, dus een uitschieter kan een goede reden zijn om op onderzoek uit te gaan naar de oorzaak van hoge tvos-waarden.
Grove zuurstofsensor
Zuurstofsensor
De laatste sensor die we willen aansturen, is een zuurstofsensor. De zuurstofsensor is veruit het duurste onderdeel (~65 euro). Als je voor weinig geld de luchtkwaliteit wil meten, kom je al een heel eind met de BME280 en CCS811, en kun je een speciale zuurstofsensor eventueel weglaten. In de meeste gevallen ontstaat een lage zuurstofconcentratie namelijk doordat de zuurstof in een ruimte wordt omgezet in CO₂, bijvoorbeeld door verbranding. Een lage concentratie kan ook worden veroorzaakt doordat veel mensen in dezelfde ruimte het inademen. De zuurstofconcentratie in de buitenlucht is ongeveer 20,95 procent en de arbodienst spreekt van onvoldoende zuurstof als de concentratie lager is dan 18 procent. Bij een concentratie van 10 procent treedt bewusteloosheid op, waarna al snel hersenletsel het gevolg is en binnen enkele minuten de dood kan intreden.
Aansluiten en kalibreren
We willen de drie sensors aansturen en uitlezen met een microcontroller. De bekendste zijn de Arduino-microcontrollers met de talloze klonen die daarvan zijn gemaakt. Al voor een paar euro zijn bijna identieke kopieën van de Arduino te krijgen, maar ook microcontrollers waaraan fabrikanten een eigen draai hebben gegeven. Grove verkoopt bijvoorbeeld een speciaal uitbreidingsbordje dat je boven op een Arduino kunt schroeven, met connectors, zodat je gemakkelijk sensors met de speciale Grove-connector kunt aansluiten zonder dat je hoeft te solderen.
Onderdelen (door ons gebruikt)
Sparkfun BME280/CCS811-combibord: € 32,63
Qwiic-kabel (2x): € 0,86
Zio-oledscherm 128x128: € 18,15
Sparkfun Artemis Nano: € 16,95
Zuurstofsensor: € 51,48
Totaal: € 120,39
Niet solderen is een idee dat ons wel aansprak en dus kwamen we uit bij de Sparkfun R3, een Arduino Uno-kloon, met een qwiic-aansluiting. Sparkfun heeft die aansluiting ontwikkeld om Sparkfun-sensorbordjes op de I²C-bus aan te sluiten. Bovendien verkoopt Sparkfun een sensorbordje waarop een BME280- en CCS811-sensor zijn geïntegreerd, en waarmee we twee vliegen in een klap slaan. Om vervolgens de uitgelezen meetwaarden weer te geven, bestelden we een 1,5”-oledscherm met een resolutie van 128x128 pixels, met een qwiic-aansluiting, zodat ook dat gemakkelijk aan te sluiten was. Tot slot bestelden we een zuurstofsensor, maar die was alleen te krijgen met de Grove-connector, die niet compatibel is met Sparkfun-bordjes.
We dachten helemaal goed te zitten, maar hadden geen rekening gehouden met het werkgeheugen van de Arduino Uno/Sparkfun R3. Dat bedraagt namelijk 2 kilobyte. Dat moet genoeg zijn om een schermpje van 128x96 pixels over I²C aan te sturen, maar ons scherm heeft een resolutie van 128x128 pixels en eigenlijk wilden we geen kwart van het scherm opofferen. Uiteindelijk hebben we daarom een Sparkfun Artemis Nano besteld, die een stuk kleiner is dan een Arduino Uno en maar liefst 384 kilobyte werkgeheugen heeft. Bovendien zit er een qwiic-aansluiting op, waardoor we zonder solderen twee sensors en het oledscherm aan de microcontroller kunnen hangen.
Onderdelen (uit Chinese webshops)
BME280: € 2,-
CCS811: € 5,50
1,5"-oledscherm 128x128: € 7,-
ESP32-microcontroller: € 4,-
Zuurstofsensor: € 51,48
Totaal: € 69,98
In totaal waren we iets meer dan 120 euro aan onderdelen kwijt, maar die kwamen voornamelijk uit de Verenigde Staten en waren bovendien prijzig omdat ze van merken waren die de onderdelen met qwiic-aansluiting leverden. Als je zelf soldeert en de onderdelen uit Chinese webshops bestelt, kan het voor de helft van de prijs. Als je het duurste onderdeel, de zuurstofsensor, weglaat, ben je zelfs al voor twee tientjes klaar.
Het aansluiten van het oledschermpje en ons combibordje met BME280 en CCS811 via de qwiic-aansluiting is een fluitje van een cent, maar ook als je zelf aan het solderen slaat, is het niet moeilijk. Alle onderdelen maken gebruik van de I²C-bus en omdat het een bus is, kun je de onderdelen daisychainen. Op veel microcontrollers worden pinnen A4 en A5 gebruikt voor sda en scl, en uiteraard moeten de sensors en het scherm een bepaalde spanning krijgen en worden voorzien van een ground om de stroomkring te sluiten.
De enige uitzondering daarbij zit bij de CCS811, want als je die op een los bordje koopt, moet je een extra wake-draad aansluiten. Die kun je op een digitale pin aansluiten, waarmee de sensor aan en uit te zetten is, of gewoon met de groundpin verbinden, waardoor hij altijd actief is.
De zuurstofsensor kan niet op de I²C-bus worden aangesloten, omdat hij geen data, maar een spanning doorstuurt. Afhankelijk van de hoeveelheid zuurstof in de lucht laat de sensor een stroom van 80 tot 160µA door. In de stroomkring is een bekende weerstand opgenomen, wat een spanning tussen de 0 en 5V oplevert. Die draad solderen we bij de Artemis Nano op de A0-pin.
Met de voorbeeldcode op de wiki van de maker is het vervolgens een fluitje van een cent om de zuurstofsensor te kalibreren. Daarbij is het van belang om de sensor twintig minuten te laten draaien met de voorbeeldcode, het liefst buitenshuis, of in ieder geval op een plek met dezelfde zuurstofconcentratie als die van de buitenlucht. Dat levert een bepaalde spanning op, in ons geval 2,15V. Die spanning staat standaard op 2,0V en is te corrigeren in regel 51 van de voorbeeldcode, waardoor het er zo uit komt te zien:
float Concentration = MeasuredVout * 0.21 / 2.15;
Vervolgens is de zuurstofconcentratie bij die spanning gekalibreerd op 21 procent. Ook de CCS811 kun je niet ‘zomaar’ in gebruik nemen, want de sensor heeft een inbrandtijd van 48 uur nodig voordat hij betrouwbare meetresultaten geeft.
Software en de Arduino IDE
Met alle hardware aangesloten en een gekalibreerde zuurstofsensor zijn we er nog niet, want het is de bedoeling om alle meetwaarden op het oledscherm te tonen. Aanvankelijk was het idee om die waarden gewoon onder elkaar te tonen, tot het moment waarop de behuizing vorm begon te krijgen, we voor een rond scherm kozen en er niet meer genoeg ruimte was om alle informatie leesbaar te tonen. In onze Arduino-sketch hebben we daarom verschillende pagina’s gezet om de uitgelezen sensordata weer te geven. Ga je zelf met die code aan de slag, dan kun je gemakkelijk een aantal aanpassingen maken. Kopieer daarvoor onderstaande code naar de Arduino IDE.
#include <Arduino.h>#include <U8g2lib.h>#include <Wire.h>#include "SparkFunBME280.h"#include "SparkFunCCS811.h"#define CCS811_ADDR 0x5B //Default I2C Address
CCS811 myCcs811(CCS811_ADDR);
BME280 myBme280;
U8G2_SSD1327_MIDAS_128X128_F_HW_I2C u8g2(U8G2_R0,/* reset=*/ U8X8_PIN_NONE);constfloat VRefer =3.3;// voltage of adc referenceconstint pinAdc = A0;// Analog pin for reading O2 sensor voltage.constint pageDelay =4000;// Delay in milliseconds before showing next page.float tempValue;float rhValue;float o2Value;int co2Value;int tvocValue;int co2WarningValue =2000;// CO2 warning threshold. Values lower than 2000ppm (parts per million) are considered safe.float o2WarningValue =19.5;// O2 warning threshold. Values higher than 19.5% are considered safe.int blinkNTimes =4;// Number of times to blink as warning.void setup(void){
Serial.begin(9600);
Wire.begin();if(myBme280.beginI2C()==false){
Serial.println("BME280 error. Please check wiring. Freezing...");while(1);//Freeze}if(myCcs811.begin()==false){
Serial.print("CCS811 error. Please check wiring. Freezing...");while(1);//Freeze}
u8g2.begin();
u8g2.enableUTF8Print();// Enable printing of UTF8 characters
u8g2.setFontMode(1);// Enable transparent mode, which is faster.
u8g2.setBusClock(400000);// Set I2C bus speed to 400 kHz.}void o2page(){
u8g2.clearBuffer();// clear the internal memory
u8g2.setFont(u8g2_font_helvB12_tr);String data =String(o2Value,1)+"%";int width = u8g2.getUTF8Width(data.c_str());int xpos = u8g2.getDisplayWidth()/2- width /2;
u8g2.drawStr(xpos,86,data.c_str());
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(34,116,"TRLING_01");
u8g2.sendBuffer();int iMax =1;if( o2Value < o2WarningValue ){
iMax = blinkNTimes *2+1;}for(int i =1; i <= iMax; i++){
u8g2.setDrawColor(i%2);
u8g2.setFont(u8g2_font_inb38_mr);
u8g2.drawStr(44,50,"O");
u8g2.setFont(u8g2_font_inb16_mr);
u8g2.drawStr(70,56,"2");
u8g2.updateDisplayArea(0,0,16,8);
delay(400);}}void co2page(){
u8g2.clearBuffer();// clear the internal memory
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(34,116,"TRLING_01");
u8g2.setFont(u8g2_font_helvB12_tr);String data =String(co2Value)+"ppm";if(co2Value <=400){
data ="< "+data;}int width = u8g2.getStrWidth(data.c_str());int xpos = u8g2.getDisplayWidth()/2- width /2;
u8g2.drawStr(xpos,86,data.c_str());
u8g2.sendBuffer();int iMax =1;if( co2Value > co2WarningValue ){
iMax = blinkNTimes *2+1;}for(int i =1; i <= iMax; i++){
u8g2.setDrawColor(i%2);
u8g2.setFont(u8g2_font_inb38_mr);
u8g2.drawStr(28,50,"CO");
u8g2.setFont(u8g2_font_inb16_mr);
u8g2.drawStr(86,56,"2");
u8g2.updateDisplayArea(0,0,16,8);
delay(400);}}void rhpage(){
u8g2.clearBuffer();// clear the internal memory
u8g2.setFont(u8g2_font_inb38_mr);
u8g2.drawStr(32,50,"rh");
u8g2.setFont(u8g2_font_helvB12_tr);String data =String(rhValue,0)+"%";int width = u8g2.getUTF8Width(data.c_str());int xpos = u8g2.getDisplayWidth()/2- width /2;
u8g2.drawStr(xpos,86,data.c_str());
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(34,116,"TRLING_01");
u8g2.sendBuffer();}void temppage(){
u8g2.clearBuffer();// clear the internal memory
u8g2.setFont(u8g2_font_inb27_mr);
u8g2.drawStr(20,50,"Temp");
u8g2.setFont(u8g2_font_helvB12_tf);String data =String(tempValue,1)+"°C";int width = u8g2.getUTF8Width(data.c_str());int xpos = u8g2.getDisplayWidth()/2- width /2;
u8g2.drawUTF8(xpos,86,data.c_str());
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(34,116,"TRLING_01");
u8g2.sendBuffer();}void tvocpage(){
u8g2.clearBuffer();// clear the internal memory
u8g2.setFont(u8g2_font_inb27_mr);
u8g2.drawStr(20,50,"Tvoc");
u8g2.setFont(u8g2_font_helvB12_tr);String data =String(tvocValue)+"ppb";int width = u8g2.getUTF8Width(data.c_str());int xpos = u8g2.getDisplayWidth()/2- width /2;
u8g2.drawStr(xpos,86,data.c_str());
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(34,116,"TRLING_01");
u8g2.sendBuffer();}void loop(void){
tempValue = myBme280.readTempC();
rhValue = myBme280.readFloatHumidity();
o2Value = readO2Concentration();while(! myCcs811.dataAvailable());
myCcs811.readAlgorithmResults();
co2Value = myCcs811.getCO2();
tvocValue = myCcs811.getTVOC();
o2page();
delay(pageDelay);
co2page();
delay(pageDelay);
rhpage();
delay(pageDelay);
temppage();
delay(pageDelay);
tvocpage();
delay(pageDelay);// Print O2 calibration data to Serial:
Serial.print("O2 sensor calibration data: Vout=");
Serial.print(readO2Vout());
Serial.print("V, concentration of O2 = ");
Serial.print(readO2Concentration());
Serial.println("%");}float readO2Vout(){long sum =0;for(int i=0; i<32; i++){
sum += analogRead(pinAdc);}
sum >>=5;return sum *(VRefer /1023.0);}float readO2Concentration(){// Vout samples are with reference to 3.3Vfloat MeasuredVout = readO2Vout();float Concentration = MeasuredVout *0.21/2.15;float Concentration_Percentage=Concentration*100;return Concentration_Percentage;}
Om te beginnen kun je, als je de zuurstofsensor op een andere analoge pin dan A0 hebt aangesloten, de analoge pin aan te passen in de regel:
const int pinAdc = A0;
Vervolgens is er een tijd ingesteld om iedere pagina weer te geven, die staat standaard op 4 seconden, ofwel 4000ms.
const int pageDelay = 4000;
Er zijn ook drempelwaarden ingesteld voor een te hoge CO₂- of een te lage O₂-concentratie.
int co2WarningValue = 2000; float o2WarningValue = 19.5;
Standaard staan die waarden op 2000ppm en 19,5 procent, maar je kunt ze naar wens aanpassen. Als de drempelwaarde wordt overschreden, knippert het O₂- of CO₂-symbool bovenaan de pagina vier keer.
int blinkNTimes = 4;
Je kunt het ook vaker laten knipperen door de bovenstaande waarde aan te passen.
Tijdens het testen bleek ook dat het aansturen van schermpjes via I²C niet ideaal is. Voor dit project voldoet het, maar we hebben nog wel een aantal dingen getweakt om het scherm sneller te laten werken.
u8g2.setFontMode(1); u8g2.setBusClock(400000);
Voor het aansturen van het scherm gebruiken we de u8g2-library, waarin we de FontMode op transparent zetten. Daardoor worden niet alle pixels op het scherm getekend, maar alleen de witte. We zetten bovendien de snelheid van de bus op 400kHz, in plaats van de standaard 100kHz.
De u8g2-library heeft enkele beperkingen en kan bijvoorbeeld alleen strings weergeven. De rest van de code bouwt de waarden die als integers van de CCS811 en als floats van de BME280 komen, om in strings. Vervolgens wordt de lengte van de string berekend, zodat hij netjes in het midden van het scherm kan worden geplaatst. Het scherm laat nu in een loopje vijf pagina’s zien, die de relatieve luchtvochtigheid, CO₂-concentratie, temperatuur, tvoc- en O₂-concentratie weergeven.
Behuizing
We hebben nu een stapeltje sensors met een microcontroller en een oledscherm. Het enige dat nog ontbreekt, is een behuizing. Doordat we van een behoorlijk grote Arduino Uno- naar een compacte Artemis Nano-microcontroller zijn gegaan, kan die behuizing ook wat kleiner worden dan we eerder hadden voorzien. Het plan was om een kubusvormige behuizing te ontwerpen om het geheel in te monteren, maar een standaardkubus is natuurlijk een beetje saai. Bovendien zijn er veel leukere kubussen in de wereld, zoals de ‘companion cube’ uit de Portal-games.
Het namaken van een companion cube bleek nog niet eenvoudig. Stap één was dan ook het downloaden en printen van een model dat op Thingiverse stond, om een idee te krijgen van alle hoekjes die op de kubus zitten. Vervolgens besloten we de kubus aan de binnenkant ribben van 50mm te geven en printten we een bovenkant om te zien in hoeverre het ontwerp klopte, en daarna een dekseltje om dat later op het andere deel van de kubus te laten passen.
Dit was het moment waarop het idee voor een rond scherm ontstond, doordat de zijden van de kubus een ronde uitstulping hebben waarin de hartjes zitten. Door het ronde deel helemaal weg te halen, kregen we genoeg ruimte om ons oledscherm erachter te plaatsen. Vervolgens was het een kwestie van de componenten zo mooi mogelijk verwerken. Om de lijnen van de companion cube zo weinig mogelijk te verstoren, hebben we de usb-c-aansluiting van de Artemis Nano in het midden van de ronding geplaatst. Dat heeft tot gevolg dat de microcontroller niet netjes midden in de kubus zit. Dat komt eigenlijk wel goed uit, want de zuurstofsensor heeft veel meer ruimte nodig dan het combibordje van de BME280 en CCS811. Voor beide boards is een uitsparing gemaakt waar de pcb’s in glijden, waardoor de sensors recht voor de opening zitten. Ook voor het oledscherm zijn haakjes gemaakt die het op zijn plek houden.
Het ontwerp van de kubus staat op Thingiverse en is daar te downloaden. Het doosje heeft een printtijd van een uur of acht op een Creality Ender 3-printer, met een printsnelheid van 75mm/s. Belangrijk is om in Cura de support overhang angle op 77 in te stellen, zodat de hartjes voor de sensors nog net support krijgen, hoewel er op andere plekken ook support wordt meegeprint. In principe zijn de hartjes de enige plek waar support nodig is, dus als je dat handmatig alleen op die plekken toevoegt in je favoriete slicersoftware, is de printtijd nog wat te verkorten.
Het deksel is veruit het gemakkelijkste ondersteboven te printen. Je hebt dan de minste support nodig, maar het levert, afhankelijk van de printer, niet de mooiste print op. Het mooiste is dus om het deksel rechtop te printen, maar reken dan op een printtijd van vier in plaats van twee en een half uur met eerder genoemde instellingen en bovendien een hoop support om te verwijderen.
Vervolgens is het een kwestie van de onderdelen aansluiten, in de kubus plaatsen en de code met behulp van de Arduino IDE uploaden… Et voìlà: de luchtkwaliteitsmeter is af! Vanaf nu kunnen we de luchtkwaliteit op de redactie kwantificeren dankzij de kubus vol sensors. Mocht je dit ontwerp willen nabouwen, dan moeten we er wel voor waarschuwen dat je niet blind op de, niet perfect gekalibreerde, sensors moet vertrouwen. Je moet ook je gezonde verstand gebruiken en dus niet meteen hele ruimtes evacueren als de CO₂-meting een uitschieter laat zien. Het is wel een leuke manier om erachter te komen of de lucht in een ruimte te droog of te vochtig is, of dat het tijd wordt om een raampje open te zetten.
Voor ons is het nog even afwachten om de kubus te testen voor het doel waarvoor hij is bedoeld, namelijk de luchtkwaliteit op de redactie meten. Toen het idee voor deze kubus ontstond, waren er nog geen coronamaatregelen, maar dat is voorlopig wel anders, dus die meting stellen we nog even uit.
Tot slot
Een project als dit is natuurlijk niets zonder een coole naam en daarom hebben we de kubus TRLING_01 genoemd, wat staat voor Tweakers Rigoureuze Luchtidentificator en Gasmeter. En zoals met ieder zelf bedacht project, zijn er ook al ideeën voor een TRLING_02 ontstaan, die bijvoorbeeld niet met een knipperend scherm, maar met een zoemer waarschuwt bij gevaarlijke concentraties van CO₂ en O₂. Een ander ideetje is de integratie van een lichtmeter, want genoeg licht is ook onderdeel van een prettige (werk)omgeving, of het toevoegen van een MiCS-4514-sensor, waarmee onder andere koolmonoxide gemeten kan worden. Tot slot willen we Chesta bedanken, zonder wie dit project nooit zo goed was gelukt als nu het geval is.
Allereerst: leuk dat we de laatste tijd wat meer van dit soort zelfbouwartikelen te zien krijgen!
Toen ik het artikel las in het Tweakers magazine dacht ik: huh, wat een gekke aanpak?
Nu lees ik het nog een keer en denk ik: ja, wat een gekke aanpak!
De keuze voor een dure O2-sensor snap ik niet. Als je het CO2-niveau goed meet is het weten van het zuurstofniveau compleet overbodig. Immers: een hoog CO2-niveau staat gelijk aan te weinig ventilatie en er zijn duidelijke richtlijnen m.b.t. gezonde en ongezonde CO2-niveaus. Als je ziet dat het CO2-niveau 1200ppm is en er dus meer geventileerd dient te worden, wat voegt een meting van O2 dan nog toe? Die zal de meting van de CO2-sensor alleen maar bevestigen en als dat niet zo is heb je een kapotte O2-sensor of ben je stikstof i.p.v. koolstofdioxide aan het uitademen In kant-en-klare sensoren voor thuis en op kantoor zitten ook alleen CO2-sensoren, geen O2-sensoren.
Daarnaast is de hier gebruikte CCS811 geen echte CO2-sensor, maar gebruikt hij een rekensommetje op bepaalde waardes om een benadering van een CO2-niveau voor elkaar te krijgen. Dat is jammer, want een goede CO2-sensor is goedkoper dan de in dit project gebruikte O2-sensor en die laatste is dan overbodig. Samengevat: met een goedkopere sensor meet je de waarde die er echt toe doet: CO2
MH-Z19B: een échte CO2-sensor, voor €25 (NL), €15 (CN)
BME280 (temperatuur, relatieve luchtvochtigheid en barometer)
Nu hebben we €40 bespaard t.o.v. het voorstel in het artikel met die overbodige O2-sensor. Nu kunnen we ons zelfgebouwde luchtkwaliteitsmeter een flinke boost geven door het volgende toe te voegen (en dan zijn we nog steeds goedkoper uit!):
SDS011: fijnstofmeter (PM 2.5 en PM10), voor €25 (NL), €15 (CN)
Nu is ons project nog steeds goedkoper dan de TRLING_01, maar hebben we:
Die sensor gebruikt men meestal als goedkope sensor om te bepalen wanneer je de ventilatie wat zou moeten opschroeven. Maar het zegt niets over de echte CO2 concentratie.
Om CO2 te meten, heb je bijvoorbeeld de MH-Z19 nodig of de SenseAir sensoren (bijv. S8)
Nadeel van de MH-Z19 is dat deze een zeer beperkte automatische basis kalibratie (ABC) heeft die daardoor soms een verkeerde waarde voor 400 ppm aanziet als je een dag niet voldoende geventileerd hebt.
Als je echt de juiste CO2 concentratie wilt weten, zul je toch iets dieper in de buidel moeten tasten.
MH-Z19 kost via de Chinese webshops ongeveer 20 $. De SenseAir S8 is (gek genoeg) ook voor vergelijkbare bedragen te krijgen, maar de status daarvan is onbekend omdat de verkoopprijzen via Chinese webshops lager is dan de bulkprijs van SenseAir S8 sensoren.
De BME280 zal ongetwijfeld een paar graden te hoog aangeven door alle warme sensoren in die kleine behuizing. Hierdoor is de luchtvochtigheid uiteraard te laag.
De SDS011 is een hele leuke sensor, maar ik vraag mij af of deze nuttig is in een kantoor-omgeving.
Daarnaast is de fan die erin zit wellicht een beetje storend op een bureau.
Ook moet je opletten dat de laser na elke meting uitgezet wordt, anders is de 8000 uur levensduur na 1 jaar al bereikt.
Let op: shameless plug
En voor de software voor een ESP CPU is natuurlijk ESPEasy prima geschikt
... Of de firmware van die andere Groninger, Tasmota.
Nadeel van de MH-Z19 is dat deze een zeer beperkte automatische basis kalibratie (ABC) heeft die daardoor soms een verkeerde waarde voor 400 ppm aanziet als je een dag niet voldoende geventileerd hebt.
Dat is waar, maar in een thuissituatie eigenlijk nooit een probleem. Althans, in een standaard huishouden komt het eigenlijk altijd voor dat er 8+ uur niemand in de slaapkamer of huiskamer is. Je ventilatie moet dan wel heel slecht zijn als na 8 uur de lucht nog steeds niet is ververst. En anders stel je in ESPEasy natuurlijk even in dat hij geen ABC moet doen
De SDS011 is een hele leuke sensor, maar ik vraag mij af of deze nuttig is in een kantoor-omgeving.
Daarnaast is de fan die erin zit wellicht een beetje storend op een bureau.
Ik kan me voorstellen dat bij bijvoorbeeld kopieermachines wel het een en ander aan fijnstof vrijkomt. Of een collega die tosti's loopt te (aan te) bakken... (gebeurt op mijn school regelmatig).
Zelf heb ik een SDS011 in de keuken hangen en mijn ervaring is dat het echt doodstil moet zijn in huis en je met je neus op de SDS011 moet zitten om iets te horen. Voordat ik de SDS011 in een behuizing had geplaatst viel het me eerder op dat de sensor ging meten doordat ik de fan zag draaien dan dat ik iets hoorde.
Toner verbruikende apparaten is inderdaad wel een goede.
Al zou daar een ozon-sensor ook niet misstaan
Keuken is ook een goede plek.
Ik had de SDS011 onder mijn overkapping buiten hangen en elke keer dat de sensor aan ging, kon je dat wel horen op een paar meter afstand. Misschien is mijn gehoor wel wat beter, danwel dat het in onze tuin stiller is dan menig kantoor. Of misschien is de fan na ongeveer 2 jaar buiten te hebben gehangen iets minder geruisloos geworden.
Op een bureau zou ik er wel een beetje gestoord van worden.
De MH-Z19 die ik hier op mijn kantoor heb hangen, heeft wel degelijk last van dat 'ie af en toe zijn "laagste waarde" niet haalt. Op dezelfde etage zijn onze slaapkamers en zelfs met de ramen op een kier stijgt de CO2 concentratie van de hele etage 's nachts naar zo'n 1000 ppm (of hoger)
En als ik dan overdag niet het raam van mijn kantoor open kan zetten, krijgt de sensor niet de kans om op de "400 ppm" waarde uit te komen.
Zelfs al heb ik de 3 ramen aan de achterkant van de woning dan op een kier staan.
De reden dat het raam van mijn kantoor niet altijd open kan is omdat de wind er vaak pal op staat en hier op de open vlakte kun je ruwweg 2 bft optellen bij de windsterkte van de rest van 't gebied.
De 'ABC' kalibratie is mij nog niet helemaal duidelijk.. betekent dit dat hij er vanuit gaat dat hij elke dag een minimum aantal ppm zal meten en hierop vervolgens dit minimum kalibreert als 400 ppm?
Dat is precies wat de ABC (Automatic Base Calibration) zou moeten doen inderdaad.
De MH-Z19 (die goudkleurige CO2 sensor) hanteert een interval van 24 uur hiervoor en dat is op z'n zachts gezegd niet de meest praktische.
De SenseAir S8 (zelfde formaat en pin-layout, maar volstrekt andere sensor) heeft een instelbaar interval, welke default op 7 dagen staat. Daarnaast hanteert deze ook nog eens een IIR filter, zodat je niet meteen hele grote sprongen maakt in de "400 ppm kalibratie", die je bij de MH-Z19 wel terug ziet.
Mooi dat Rivm op dezelfde site aangeeft dat juist de deeltjes die de grootste risico's veroorzaken niet gemeten kunnen worden met die sensor.
Wat ik me afvraag met deze metingen is hoe hier gebruik van wordt gemaakt. Zijn er tweakers die daadwerkelijk actie ondernemen als een waarde te hoog of laag uitslaat of is het meer een hebbeding ? Enige wat ik zo snel kan bedenken is bijv. ventilatie starten.
Mooi dat Rivm op dezelfde site aangeeft dat juist de deeltjes die de grootste risico's veroorzaken niet gemeten kunnen worden met die sensor.
Dat klopt, maar dat betekent niet dat je niks hebt aan de metingen van de iets grotere deeltjes (die ook risico's meebrengen).
In huis is de grootste bron van fijnstof verbranding tijdens het koken. Als ik iets sta te bakken vliegen de PM2.5 en PM10 waardes door het plafond (en gaat automatisch mijn mechanische ventilatie op standje turbo). Is het dan erg dat ik geen PM0.3 tot PM1 kan meten? Ik kan me zo voorstellen dat die waardes ook omhoog vliegen, maar ik weet al dat de luchtkwaliteit achteruit gaat door de PM2.5 en PM10 waardes te bekijken
De sensor buiten gebruik ik om mee te doen aan het project van sensor.community, waarbij meerdere sensoren van burgers samen metingen verrichten. Los van dat ik van statistieken hou gebruik ik de waardes ook om mezelf een seintje (berichtje via Telegram) te sturen als de waarde in de tuin hoog is. Vaak betekent dat buren met een barbecue of houtkachel/houtkorf en dan kan ik mijn was die hangt te drogen binnenhalen of een raam dichtdoen.
[Reactie gewijzigd door Gizz op 22 juli 2024 14:31]
Zelf heb ik een sds011 naast mn huis hangen in de hoop dat ik de fijnstof van een snelweg in kaart kon brengen die helaas naast ons erf is geplaatst. Nu ik wat wijzer ben blijkt dat de sds011 juist met stoffen van verbrandingsmotoren moeite heeft kon geen verschil opmerken in luchtkwaliteit voor de bouw van de snelweg vs snelweg in gebruik.
Nu vraag ik mij nog steeds af welke fijnstof zaken de sds011 werkelijk buiten oppakt
wow. Heb jij de mechanische ventilatie gekoppeld aan je sensoren? Hoe heb je dat gedaan?
Ik zit er zelf al een tijdje over na te denken, maar kom steeds op dure commerciële (duco) oplossingen die bijna een verbouwing van mijn woning vragen.
Ik heb zelf een Zehnder Comfofan voor mijn mechanische ventilatie. Die is aan te sturen met een 0-10V signaal (0V = fan uit, 10V = fan op 100% en alles daartussenin).
Tot voor kort stuurde ik de Comfofan aan met een Qubino Z-wave 0-10V dimmer. Omdat ik Z-wave aan het uitfaseren ben binnen mijn domotica heb ik nu zelf iets gemaakt met een ESP8266 en een PWM -> 0-10V converter. Ik heb daar ooit een boodschappenlijstje en stappenplan voor gemaakt
1: Ik gebruik Z-wave via een Aeotec stick in mijn Synology NAS in combinatie met Domoticz en die combinatie werkt niet echt lekker. Met enige regelmaat moet ik een z-wave node opnieuw aanmelden (includen) of mijn NAS geheel rebooten. Met o.a. Home Assistant als pakket schijnt het allemaal wel mee te vallen en werkt het wel betrouwbaar.
2: Ik ben ooit met Z-wave begonnen toen ik nog niet wist hoe ik zelf sensoren en andere apparaten op basis van de ESP8266 en ESP32 kon maken. Tegenwoordig draai ik m'n hand daar niet voor om en is het een hobby geworden, ik heb bakjes vol met onderdelen (en er is meestal iets nieuws onderweg van AliExpress ) en vind het leuk om een apparaatje in elkaar te zetten (al dan niet met geprinte behuizing). Als ik dan een kant-en-klare 0-10V dimmer kan vervangen door een zelfgebouwd alternatief, waarbij ik geen last heb van de Domoticz-Aeotec Z-wave 'ruzie', dan doe ik dat graag
Super interessant. Er komt bij mij binnenkort een nieuwe Zehnder RPMe op het dak, die heeft ook een 0-10V aansturing. Tevens zelf net begonnen met Z-Wave in domoticz, dus even zien hoe ik met stappenplannetje in elkaar ga knutselen. Thanks voor de tip.
Ik heb hier een beschrijving gemaakt hoe ik mijn mechanische ventilatie stuur obv luchtvochtigheid, co2 en fijnstof metingen in huis, incl code voor domoticz. Werkt echt mooi al zeg ik het zelf
Een mechanische ventilatie motor die niet al te oud is, zal het waarschijnlijk aangestuurd kunnen worden door een 0-10V ingang, of een 1kHz of 10kHz PWM ingang.
Als je zelf een beetje handig bent kun je je ventilatorbox open schroeven, het type motor lezen en kijken of je een datasheet daarvan kunt vinden. Dan weet je hoe je je motor kunt aansturen.
Met een arduino of ESP32 kun je al heel ver komen zonder veel te hoeven weten hoe het intern allemaal werkt.
Wat ik me afvraag met deze metingen is hoe hier gebruik van wordt gemaakt. Zijn er tweakers die daadwerkelijk actie ondernemen als een waarde te hoog of laag uitslaat of is het meer een hebbeding ? Enige wat ik zo snel kan bedenken is bijv. ventilatie starten.
Zelf heb ik aantal zelfbouw luchtkwaliteitmeters in huis hangen. Hier heb ik o.a. deze onderdelen voor gebruikt:
* Orange Pi Zero
* K30 CO2 sensor
* AM2315 I2C Temperatuur- en Vochtigheidsmeter
Afhankelijk van de locatie zijn deze met Wifi of een netwerkkabel verbonden. Enkele maken hierbij gebruik van POE als voeding.
Voor meer inzicht en onderzoek worden alle meetwaarden via MQTT in een InfluxDB geplaatst en afgebeeld m.b.v. Grafana. Door MQTT is een integratie met Home Assistant goed te doen.
Wat betreft acties worden er push notifications gestuurd als er een veel te hoge waarde wordt gemeten in een ruimte. Zo krijg ik in de keuken een tikje op mijn pols van de Apple Watch als de CO2 te hoog wordt, omdat we (nog) geen goede ventilatie in de keuken hebben zodat ik een raam open kan doen.
En voor de slaapkamer en de woonkamer heb ik zelf een ventilatiesysteem gebouwd die aangestuurd wordt door de sensoren. Op die manier heb ik een per kamer individueel CO2 en luchtvochtigheid aangestuurd ventilatiesysteem.
Voor het ventilatie systeem gebruik ik per kamer een Ruck ETAMASTER buisventilator met EC motor die ik traploos kan aansturen naar behoefte m.b.v. een PCA9685 16 Channel PWM / Servo I2C module. De stand van de ventilatie wordt ook gelogd in InfluxDB natuurlijk. De aansturing is zodanig dat de ventilatie alleen zo hard aan staat als nodig, hierbij wordt een maximale CO2 waarde aangehouden. Met meer mensen in de ruimte draait de ventilatie harder dan wanneer er maar 1 persoon aanwezig is. Omdat ik het ventilatie systeem zelf heb aangelegd kon ik er ook voor zorgen dat deze super stil is.
En ik heb een eigen webapp gebouwd om de ventilatie op handmatig of automatisch te zetten, al zou ik dit nu in Home Assistant doen.
Wat ik nog mis en op mijn roadmap staat, en ik leuk vind aan dit artikel is een OLED scherm per sensor, zodat je niet te telefoon hoeft te pakken om de huidige waarde te zien ;-)
Niet van een specifiek project, maar ik heb vast wel hier en daar inspiratie opgedaan. Ik gebruikte InfluxDB en Grafana al voor monitoring van mijn VM's. De services die draaien op de Orange PI zero's voor het verzamelen en sturen van de data, en een aantal services die draaien in VM's voor verwerking hiervan heb ik zelf geschreven in Python.
Aan welk artikel van hackster.io denk je? lijkt mij leuk om te lezen voor inspiratie :-)
Ik vermoed dat het allemaal wel gekende kost zal zijn voor je, zelf hebben we het uitgebreidt naar google cloud toe (pub/sub en cloud functions + cloud db ipv lokaal een database te draaien) maar dat is dan meer met het oog op uitbreidbaarheid.
Leuk artikel, die kende ik nog niet, ik heb al een hele tijd niet meer op hackster.io gekeken. Toen had ik mijn systeem al draaiend. Mooie grafieken, goed voor inspiratie :-)
Dit is bekende kost voor mij inderdaad. In mijn setup sturen alle devices die sensor data hebben, deze naar MQTT. Alle services die interesse hebben in deze data kunnen er dan wat mee doen, zoals storage in DB, tonen in Home Assistant of losse schermpjes, of aansturen ventilatie. Met Telegraf kun je heel mooi MQTT data (en van veel andere bronnen) eenvoudig in InfluxDB zetten. Daar zijn geen eigen scriptjes meer voor nodig.
Leuk de cloud uitbreiding. Zelf draai ik alles lokaal, ik ben juist alles aan het verplaatsen van cloud naar lokaal. Doel is onafhankelijk te zijn van Internet, alles moet blijven draaien.
Vergeef mij mijn onwetendheid, maar wat is het nut van een CO2-meter? Een koolmonoxide-meter daar kan ik mij veel bij voorstellen, maar kooldioxide is toch enkel "giftig", eerder gevaarlijk, door zuurstofverdringing. En voordat je die levels bereikt staat je huis in brand. De jaarlijkse doden in de winter door slechte geiser in combinatie met afgesloten ruimte gaat niet over CO2.
Hieronder iedereen enkel over CO2. Wat mis ik/lees ik overheen?
CO2 is een goede maat om de luchtverversing te meten. Niet alleen zorgt een hoog CO2-niveau zelf voor klachten, ook zegt een hoog niveau dat alle andere gassen en airborn deeltjes die vrijkomen in een huis (denk aan radon, lijmdampen uit meubels, fijnstof. micro-organismes etc.) ook relatief veel voorkomen, want de lucht wordt onvoldoende ververst.
Wat bronnen, helaas kan ik niet uit elk bestand makkelijk citeren omdat het vaak ingescande rapporten zijn:
TNO concludeert uit internationale aanbevelingen dat de CO2-concentratie met het oog op de gezondheid niet hoger moeten worden dan 900 ppm voor gezonde volwassenen, 700 ppm voor kinderen en 600 ppm voor de meest gevoelige personen (Pernot et al., 2003). Daarvoor zou per persoon 45 -80 m3/h geventileerd moeten worden.
Dank voor je uitleg. Zelf ben ik nog steeds meer bang voor CO dan voor een stof die resulteert in dingen als "for sore throat, nose/sinus, tight chest, and wheezing was observed", maar waarschijnlijk hoeft ongeveer niemand meer bang te zijn voor CO en is CO2 the next worst thing, naast een indicator voor van alles
Zelf ben ik nog steeds meer bang voor CO dan voor een stof die resulteert in dingen als "for sore throat, nose/sinus, tight chest, and wheezing was observed"
Gizz legt alleen uit waarom CO2 interessant is; niemand zal beweren dat CO ongevaarlijk is.
Nou ben ik geen expert, maar ik vermoed dat dit project CO2 meet omdat een hoge concentratie daarvan een realistisch scenario is; mensen ademen het uit, dus als er te weinig ventilatie is gaat het meteen fout.
De enige bron van CO die me zo snel te binnen schiet is onvolledige verbranding (lees: een slechte verwarmingsketel). Ik neem aan dat je die op de redactie van Tweakers niet zult vinden. Als er geen enkele bron is die, realistisch gezien, CO kan produceren, dan heeft het ook weinig zin om de concentratie te meten, toch?
Daarnaast, CO2 meten gaat over comfort, CO meten is een kwestie van veiligheid. Misschien ben ik geen echte tweaker hoor, maar als het op veiligheid aankomt dan zou ik er persoonlijk voor kiezen om een degelijk product te kopen, niet vertrouwen op iets wat ik zelf in elkaar geflanst heb.
Als je zoekt op 'ESP' en de naam van de sensor vind je veel uitleg, bijvoorbeeld deze tweakblog over de MH-Z19B en hier informatie over de SDS011 en BME280.
Ook kun je vaak spieken in documentatie die bij de firmware hoort die je gaat gebruiken. Zo kun je hier zien hoe je de MH-Z19B aansluit en hoe je die instelt in ESPEasy.
In het CO2-sensor topic heeft @darklord007 recent een printplaatje geplaatst als je een Wemos D1 mini (ESP8266), MH-Z19B en BME280 netjes bij elkaar wilt hebben. Maar zonder zo'n printplaatje kan het natuurlijk ook.
wow, erg bedankt. Ik wil graag een sensor station bouwen met al dit soort zaken erin. (Elke kamer in mijn home-automation krijgt een sensor station)
Heb je ook nog tips op welke plek of locatie het beste bepaalde sensoren geplaatst kunnen worden? Is het plafond een goed idee? Of werkt dat niet goed bij bepaalde type sensoren.
Hangt af van wat je wilt meten.
CO2 is een zwaarder dan de rest van de lucht in een ruimte.
Dus het beste resultaat krijg je op bureau-hoogte (of iets lager)
Een echte CO2 sensor maakt vaak gebruik van infrarood licht.
Dus let er op dat je deze niet plaatst in direcht zonlicht of een andere bron van IR straling.
BME280 raakt snel uit zijn calibratie als deze niet om de zoveel tijd een "nul"-meting krijgt. Iemand die een sensor weet welke wel in elke omgeving gekalibreerd blijft houdt ik mij aanbevolen.
Dit is gewoon een leuk project. Doordat er niet gesoldeerd hoeft te worden is het ook voor meer mensen toegankelijk dan voorgaande projecten, al zal niet iedereen over een 3D printer beschikken.
Op de keuze van de sensoren is misschien wel wat aan te merken, maar omdat er is gekozen om geen soldeer verbindingen te maken zijn andere voorgestelde sensoren niet mogelijk.
Van de Tweakers die nauwkeurig kunnen solderen mag ook wel worden verwacht dat ze de vrijheid nemen om sensoren te vervangen. De echte Tweaker zal ook niet tevreden zijn met alleen een display, maar wie wil kan kan de sensor natuurlijk ook gebruiken om een ventilator of raamuitzetter mee te bedienen. Voor gebruik in de keuken is (als je op gas kookt) het toevoegen van een gas detector en een buzzer wel zo veilig. Als je dan toch bezig bent, maak dan gelijk je afzuigkap vol automatisch.
Ik kan inderdaad niet 3D printen en solderen moet op zich wel lukken, maar wel niet nauwkeurig genoeg voor een project als dit.
Dus ik ben één van de mensen die vastzit aan deze aanpak.
Een 3D printer is niet voorhanden maar ik had in mijn hoofd al gewoon een houten doosje er van gemaakt.
Koppen om een mooie cirkel uit een stukje hout te halen heb ik wel in alle formaten en verder moet dat ook wel lukken vermoed ik.
Verder krijg je met wat schuren en verven wel een acceptabel resultaat normaal.
solderen moet op zich wel lukken, maar wel niet nauwkeurig genoeg voor een project als dit.
Ik weet natuurlijk niet hoe nauwkeurig je kunt solderen, maar het stelt qua moeilijkheidsgraad niet zoveel voor naar mijn mening
99% van onderdelen in dit soort projectjes worden met elkaar verbonden door pin headers op de onderdelen zelf, waar vervolgens dupont kabeltjes op geprikt worden.
Soms kun je onderdelen kopen waarop de pin headers al gesoldeerd zijn (daar betaal je iets extra's voor). En in vrijwel alle andere gevallen krijg je de pin headers er los bij om zelf te solderen. Het gehele soldeerwerk bij zo'n project bestaat uit een rij headers in een rij gaatjes prikken, bij elk pootje even de soldeerboot en het tin er tegenaan houden en je bent klaar.
Ik heb geen parkinson, maar wel trillende handen. Het solderen van pinheaders is voor mij echt niet meer weggelegd. De dupont-kabeltjes zijn voor mij een uitkomst, maar ik heb al vaker gemerkt dat deze niet altijd even goed werken. Zeker in een vochtige omgeving willen de contacten wel eens slechter worden.
Voor een betrouwbare fijnstofmeting is het ontwerp van de sensor erg belangrijk. De Sensirion SPS30 bijvoorbeeld meet fijnstof door een apart klein kanaaltje (contamination resistance technology), zodat dat de lens van de laser niet besmeurt wordt door het fijnstof. De SPS30 heeft daarom een levensduur van 10 jaar.
Ik weet niet of de SDS011 dit ook heeft, maar sommige fijnstof sensoren hebben geen apart meetkanaal, waardoor ze praktisch na 1-3 jaar niet meer goed kunnen werken omdat het intern te vies is geworden en de sensor dus constant smerigheid intern meet, in plaats van de gezogen lucht.
Dan betaal ik liever iets meer voor een betrouwbare sensor die langer goed kan meten, dan tussentijds 3 keer de sensor vervangen.
Daarnaast, volgens mij heeft een zuurstofsensor een houdbaarheid. Tenminste, die die in de beademingsmodules zit die we op werk bouwen, wordt in een soort tonijnblikje geleverd zodat hij niet aan zuurstof blootgesteld wordt en zodra je hem opent, begint de houdbaarheid te lopen. Uit m'n hoofd is de houdbaarheid 1 jaar, maar dat weet ik niet zeker.
De CCS811 is toch eigenlijk heel onnauwkeurig en eigenlijk compleet nutteloos om CO2 te meten? Hij kan CO2 niet eens meten, het meet VOCs en bepaalt aan de hand daarvan wat de CO2 ppm is.
This part will measure eCO2 (equivalent calculated carbon-dioxide) concentration within a range of 400 to 8192 parts per million (ppm)
Oftewel, een afgeleide equivalent CO2 concentratie.
Ik heb hem hier liggen en je kan er eigenlijk geen serieuze luchtkwaliteit meting mee doen. Hij moet sowieso 15-20 minuten opstarten (warm worden).
Helemaal eens dat de CO2 meting nauwkeuriger kan. In de Arduino wereld wordt vaak de MH-Z19B gebruikt, waarbij je de autocalibratie uit moet zetten.
Voor de liefhebber hier een link naar mijn knutselproject inclusief CO2 en fijnstof meter.
Wel heel gaaf om zo'n project op Tweakers te zien. Natuurlijk kan het beter, wij medetweakers zijn eigenwijs en wie het beter kan, moet het vooral laten zien .
Correct, op kantoor een BME680 gebruikt, ook eCO2 en VOC. Ding deed rare metingen, dus (dure, want dat zijn ze) CO2 meter ernaast gezet, deze rapporteert totaal andere en overigens veel lagere waardes.
Wij hebben al veel projecten gedaan met oa de BME280. Hebben jullie rekening gehouden dat deze extreem gevoelig is voor omgevingswarmte? Op papier een zeer nauwkeurige sensor, maar vaak verkeerd geïmplementeerd zodat de temperatuur niet nauwkeurig is (ik spreek dan van ca 2 a 3 C te hoog). Forums staan vol met verhalen van personen die niet begrijpen waarom de sensor te hoge waarden aangeeft na calibratie.
Even heel snel de code gecheckt en elke 4 seconden wordt de temperatuur uitgelezen, hoe lang duurt dit? De sensor mag maar 10% van de tijd actief zijn volgens Bosch zelf. Verder wordt ook aangeraden om de componenten te scheiden van de sensor, om die niet te beïnvloeden, hoe zit alles dan in die geprinte doos (kan geen foto vinden van hoe het in dat doosje zit)? Zelfs een beetje convectie kan al een niet nauwkeurig resultaat geven.
Klopt, de BME280 is zeer compact en warmt daardoor vrij snel op.
Met die "Ali Express" bordjes is het erg lastig om 'm thermisch geisoleerd te monteren.
Eigenlijk zou je die sensor buiten de behuizing moeten hangen en inderdaad vrijwel meteen na meting weer in slaap-mode zetten.
Alternatief is om 'm in de compacte behuizing te houden en dan ervanuit te gaan dat de hoeveelheid warme in de behuizing constant is, evenals de warmte-afgifte aan de omgeving.
Door dan de absolute luchtvochtigheid te berekenen van de gemeten temp/hum, dan de temp offset toe te passen en dan de relatieve luchtvochtigheid te berekenen kun je er wel voor compenseren.
Maar die compensatie is dan eigenlijk alleen maar bruikbaar in een vrij beperkt temperatuurbereik. (warmteuitwisseling van kastje met omgeving is afhankelijk van verschil in temperatuur)
Zeer zeker een probleem in dit ontwerp, geen enkele van deze sensoren gaat nauwkeurig zijn. Leuk hobbyprojectje, maar absoluut niet relevant om daadwerkelijk metingen mee te doen.
Ik snap niet helemaal hoe je zonder degelijke kalibratie bijvoorbeeld zuurstof wil meten. Je kalibreert nu met buitenlucht en neemt aan dat deze 20,95 Vol.% O2 bevat.
Deze aanname is onjuist, in droge buitenlucht vind je 20,94 Vol. -%. Wil je buitenlucht als spanconcentratie gebruiken dien je deze dus eerst te drogen, met een koeler (<4gr C) of zoals vroeger, met een silicagel wasser.
Ik vraag me ook af hoe je de nul vindt. Voor CO2 geldt hetzelfde, alleen de range van deze parameter ligt een orde lager.
Zonder degelijke kalibratie en justering zijn dit soort sensoren leuk voor een trend lijkt me, zeker omdat je binnen de range van 0 - 20,94 Vol-% (hopelijk) een klein bereikt beslaat.
CO2 sensoren hanteren vrijwel allemaal een base-calibratie van 400 ppm.
Deze is helaas al niet meer correct, maar de huidige wereldwijde concentratie is nog niet zoveel hoger dat je dat nauwkeurig kunt meten met dergelijke eenvoudige sensoren. (valt dus binnen de meetonnauwkeurigheid)
De MH-Z19 en de SenseAir sensoren (allemaal) hebben vanaf de fabriek een kalibratie gehad.
Hierin is de 0 ppm en 1 of meer andere punten vastgelegd in de sensor zelf.
Van SenseAir weet ik dat ze deze sensoren met meerdere zeer nauwkeurig bekende concentraties kalibreren (heb er een rondleiding gehad)
De MH-Z19 heeft functies aan boord om zowel de 0 ppm als de 400 ppm waarde opnieuw te kalibreren.
Maar in ESPEasy heb ik deze uitgezet omdat je zeer waarschijnlijk de sensor onbruikbaar maakt.
De "buitenlucht" is namelijk niet altijd 400 ppm en de meting hangt o.a. af van de absolute luchtvochtigheid en temperatuur. Buitenlucht wisselt tussen de 400 en 700 ppm (hier op 't platteland, tussen de weilanden). Dit omdat planten in de omgeving 's nachts CO2 uitstoten.
Ook moet niet onderschat worden hoe makkelijk je IR licht op de sensor laat vallen wat de meting beinvloed.
Kortom, zelf gaan klooien met kalibratie van CO2 sensoren gaat vrijwel zeker fout en moet je niet aan beginnen.
De ABC functie (bijhouden wat de laagste raw value is en dat beschouwen als 400 ppm) is het beste wat je kunt doen. Echter de MH-Z19 hanteert een interval van 24 uur hiervoor. Dus als je 1 dag iets minder goed geventileerd hebt, is je 400 ppm punt verschoven en dus ook de rest van de meting onbetrouwbaar.
Ik zie een aantal opmerkingen over de mogelijke onnauwkeurigheid van dit systeem. Die zijn allenmaal helemaal valide maar ik vind dit gewoon een supergaaf makkelijk zelf uit te voeren projectje. Dit zijn de dingen waarvoor je op tweakers komt (iig in mijn geval) Er wordt hier geen wetenschappelijk meet instrument gemaakt, en als je een nauwkeurige sensor wil hebben, dat moet je die gewoon kant en klaar kopen.
Natuurlijk zou het fijn zijn als hij nauwkeuriger zou zijn, en met de help van gekalibreerde apparatuur zal dat ook best kunnen. Gewoon verschillende waardes meten met de een gekalibreerde zuurstof meter ernaast en de volt naar O2 tabel aanpassen. Maar wat mij betreft gaat het daar in de video niet om. Het is gewoon een leuk om te kijken wat er gemaakt wordt en brengt jezelf op ideeën
[Reactie gewijzigd door jobvr op 22 juli 2024 14:31]
Ben ik zeker met je eens, waar ik alleen op wilde wijzen dat dit maar een deel van het meten is. Een sensor aansluiten en een signaal eruit krijgen is slechts deel 1.
Meten is echt ongelofelijk moeilijk, mensen zeggen wel eens, meten is weten, maar als je daadwerkelijk weet wat meten is weet je dat meten vooral zweten is.
Compleet mee eens. Als je het goed zou willen doen zou je met een gekalibreerde sensor er naast een flink aantal metingen moeten doen van het begin tot het einde van de meet mogelijkheden (grote vraag hoe je die omstandigheden stabiel houdt, ik denk niet dat dat met een CO2 blusser of een kaars onder een glaasje gaat lukken) en daarna een formule maken die de O2/CO2 naar volt verhouding beschrijft. Die formule inbouwen en de waardes weergeven. En dan hopen dat bijvoorbeeld het output voltage van de O2 meter niet wordt beïnvloed door de temperatuur. Maar ik ben bang dat je hier een hele extra video over kan maken. En de vraag is of deze sensoren de effort rechtvaardigen om dit te doen...
Het gaat hier niet om een mogelijke onnauwkeurigheid, CO2 meten met een CCS811 is even nauwkeurige als zelf een keertje diep inademen en bepalen of je het benauwd vind of niet. De CCS811 is niet eens een CO2 sensor.
Ik vind de opmerkingen juist een goede aanvulling op het artikel. Dit in tegenstelling op de zure reacties die je in benchmark artikelen wel eens terug ziet.
De BME 280 is compleet nutteloos als sensor. De waardes welke worden weergegeven wijken graden af van de werkelijkheid, hierdoor wijkt de luchtvochtigheid weer af naar beneden.Zie edit hieronder De CCS811 meet VOC, en is dus niet een "echte" co2 meter. Bak je een pizza in de oven, en de co2 waardes gaan door het plafond, terwijl dat in werkelijkheid niet zo is.
Voor thuisgebruik heb ik de sensors van Sensirion gekocht. De SHT3x range is erg goed in het accuraat weergeven van de tempratuur en luchtvochtigheid. Let wel dat deze sensor niet in dezelfde case zit als de arduino/esp32/esp8266, zelfs al verstoken die 0.1watt, je ziet het terug in de temperatuur. Heb zelf de sensor in een aparte case gezet, en met een draadje verbonden met de case met daarin de CO2 sensor. Ook deze sensor, de SCD30 van Sensirion, heeft een SHT3x aan boord, maar door self heating gebruik ik deze niet.
De SCD30 is een "echte" co2 sensor. Deze dient wel af en toe gekalibreerd te worden door te plaatsen in een ruimte met +- 400ppm. Gezien de buitenlucht nu al iets is van 405ppm, zal de afwijking ook in die range zitten.
Ik gebruik zelf de SCD30 in de slaapkamer, en als de ruimte overdag niet gebruikt wordt met het raam open, is de kalibratie ook weer voltooid.
Er is ook ergens een topic op Tweakers met chinees "echte" CO2 sensors.
*edit * BME 280 wijkt blijkbaar af bij niet juist gebruikt, zaols nils83 aan geeft. De SHT3x heeft deze problemen niet.
[Reactie gewijzigd door desert spider op 22 juli 2024 14:31]
De BME280 is zeker niet compleet nutteloos, ze wordt alleen te vaak onvakkundig gebruikt waardoor mensen niet snappen waarom het afwijkt, zie mijn reactie boven. Hier wordt ook voor gewaarschuwd door Bosch zelf.
Wij gebruiken de BME280 vaak voor onze projecten, en bij ons zijn ze allemaal nauwkeurig tot 0,2C, wat min or meer binnen de foutemarge valt.
[...]
BME 280 wijkt blijkbaar af bij niet juist gebruikt, zaols nils83 aan geeft. De SHT3x heeft deze problemen niet.
De SHT3x heeft ook prima mogelijkheden om verkeerd gebruikt te worden.
De SHT3x is niet heel groot en dus is deze vrij makkelijk op te warmen in een compacte behuizing.
Feit is wel dat deze sensor een iets voorspelbaarder gedrag lijkt te vertonen dan de Bosch sensoren in "hobby-toepassingen".
De Bosch sensoren hebben ook nog een bijkomend probleem dat je de registers echt in 1 I2C run uit moet lezen, omdat je anders registerwaarden uitleest van een andere meting en dan een afwijking ziet in de meetwaarden. Hierdoor lijkt de temperatuur een tikkeltje hoger te zijn en correleert de humidity niet meer met de gemeten temperatuur.
De plantower PMS sensoren zijn hier handig voor. De grootte is afhankelijk van het type (zover ik weet is de A003 de kleinste), maar ze zijn allemaal hetzelfde uit te lezen. Er zit een kleine ventilator in, maar die maakt nauwelijks geluid.
Ik heb er één in de woonkamer met open keuken die elke 5 min 30 sec aan gaat om een waarde te nemen. Over het algemeen is de fijnstof zeer laag (enkele ug/cm3) maar dat veranderd hard als je gaat koken. Een broodrooster veroorzaakt ook een partij fijnstof.
Gas sensoren (en fijnstof ook) zijn zoals boven gezegd gevoelig voor luchtvochtigheid. Maar mijn SGP30 kan je hiervoor corrigeren, elke 30 min stuur ik de luchtvochtigheid van de temperatuur en luchtvochtigheid sensor door naar de SGP30. Je moet ze ook niet te dicht bij elkaar zetten, want die gas sensoren worden best warm (verbruiken tientallen mW tot zelfs 100 mW) en kunnen je temperatuursensor beïnvloeden.
Inderdaad, ook die kun je eenvoudig meten, al zal de concentratie binnen gauw lager zijn dan buiten. (Tenzij je staat te koken). Die kun je evt ook zelf bouwen en op de kaart van luftdaten.info bekijken.
Voor zover ik weet is de hoeveelheid fijnstof binnen hoger dan buiten. Al zal mijn best doen om een bron te vinden en die nog toe te voegen... Binnen is de lucht niet in beweging wat hiervoor zorgt en koken maakt dat alleen erger.
De concentratie kan buiten wel degelijk hoger zijn dan binnen. Ik heb zowel buiten in mijn tuin als in mijn keuken een fijnstofmeter hangen en het gebeurt regelmatig dat de lucht buiten viezer is dan binnen.
Factoren die helpen om het fijnstofniveau binnenshuis te verlagen:
Goede ventilatie (ik heb dat thuis aangestuurd op basis van CO2 en fijnstof)
WTW ventilatie met een fijnstoffilter in de inlaat van buitenlucht (heb ik zelf niet)
Extra reiniging in de kamer (in de huiskamer met open keuken en de slaapkamer heb ik Sharp luchtreinigers met HEPA-filters)
Factoren die het fijnstofniveau buitenshuis verhogen:
Verkeer, industrie
Buren die in hun tuin staan te roken
Barbecueënde buren
Buren die hout stoken (open haard, pelletkachel, houtkachel)
Geen buren hebben scheelt qua fijnstof
[Reactie gewijzigd door Gizz op 22 juli 2024 14:31]
Jij hebt maatregelen genomen om het binnenshuis te verbeteren, wat aangeeft dat jij niet de norm bent. Buiten waait de fijnstof over het algemeen weer weg en is van tijdelijke aard en binnen blijft het veel langer hangen. Ik ben het natuurlijk me jou argumenten eens.
Tja het hangt af waar je woont, de snelweg Den Haag-Rotterdam is berucht. Volgens de GGD is ter plekke, Zestienhoven de flats aan de weg een zo hoge concentratie stoffen gemeten dta het iovereenkomt met het roken van een pakje sigarettten per dag. Dat schijnt gemiddeld 10 jaar eerder sterven te betekenen.
Je vergeet een andere factor om fijnstof binnenshuis te verlagen. Deze is alleen wat lastig zelf toe te passen in een bestaande omgeving.
Verwarming met radiatoren geeft een luchtcirculatie die tevens meer stofdeeltjes in de ruimte laat ronddwarrelen.
Met vloerverwarming heb je dat veel minder.
Klopt! Heb hier hele tijden een SDS011 in huis gehad en de waardes waren echt abnormaal. Naar aanleiding daarvan eens flink de ventilatie in huis aangepast.
Idd, ik zou dan eigenlijk het liefst de fijnstof, NOx en SOx willen weten, dat zijn de grote boosdoeners. Hoewel binnenshuis natuurlijk een CO meter ook belangrijk is.
CO is toch alleen van belang als je een oude houtkachel of gaskachel gebruikt? Dat lijkt me met een moderne CV-ketel geen issue. En als je geen gas hebt zoals ik dan al helemaal niet natuurlijk.
Wat fijne informatie. Dit is Tweakers en niet Facebook. Geef dan wat meer info. Wat voor onderdelen, welke code, hoe bevalt hij, wat doe je nu anders etc..
Mocht je dit ontwerp willen nabouwen, dan moeten we er wel voor waarschuwen dat je niet blind op de, niet perfect gekalibreerde, sensors moet vertrouwen
Kan iemand toelichten hoe (on)betrouwbaar deze sensoren daadwerkelijk zijn?
Ik heb een jaar geleden dit plan ook gehad, en ben toen hiermee gestopt omdat ik gelezen had dat voornamelijk de co2 waardes met de hoge luchtvochtigheid in NL zeer onbetrouwbaar zouden zijn. Is mijn informatie correct? Of kan deze sensor wel enigszins realistisch metingen doen?
Jouw informatie is correct. Zie mijn reactie verderop. M.i. is het onmogelijk deze metingen te verrichten met een ongekalibreerd en ongejusteerd systeem. Deze kalibratie en justering is zeer kort wordevol en dient periodiek te worden herhaald.
Een normale paragmanetische cel (O2) kent een verloop van tienden van procenten gedurende een periode van 12 uur, zirkonium (O2) idemdito overigens
Wanneer je niet gebruik maakt van genormaliseerde condities zijn dit soort sensors leuk voor trend
edit:
O2 is een component die volumepercentages voorkomt in de omgevingslucht. CO2 meet je in ppm, je kan deze wel uitdrukken als Vol.-%, immers, % is per 100, ppm is per miljoen, zelfde principe.
Waterdamp is ook in volumepercentages aanwezig (absolute percentages, weliswaar laag (bij 30 graden kan er maximaal 4,2 vol.-% of 35 gr/Nm3) vocht in lucht zitten en geloof me, dat maak je niet mee, dat is echt heel oncomfortabel ,
maar neem aan dat het dauwpunt op 20 gr ligt, dan nog heb je het over 1,7 vol.% absoluut dat is een forse onnauwkeurigheid wanneer je een parameter wil meten die een orde lage ligt, namelijk rond de 400 ppm (1000 ppm is 0,1 vol.-%) dus ja...
[Reactie gewijzigd door DeDooieVent op 22 juli 2024 14:31]
Dit soort sensoren op batterijen zijn bijna niet mogelijk. Een simpele thermometer en dergelijke lukt wel lange tijd op een batterij, maar een goede CO2 of fijnstofmeter verbruikt vele malen meer energie. De enige manier waarop je daarmee weg kunt komen is bij een meter buiten met een flink zonnepaneeltje erbij zodat de batterij voldoende wordt bijgeladen.
In de IoT wereld circuleren veel claims over apparaten die vijf jaar kunnen werken op een batterij.
In de praktijk is het vaak veel minder en in een wereld waar 25 IoT devices in een huis het minimum lijkt te worden wil je geen 25 stroom-slurpende adapters in jij e stopcontacten, maar ook niet elk jaar de batterijen van 25 verschillende apparaatjes vervangen.
Energy harvesting is leuk, maar prijzig, in 1960 werden ons tenminste nog nucleaire batterijen belooft, voorlopig blijft het IoT best een uitdaging voor wat betreft de stroomvoorziening.
In het geval van een ESP8266/ESP32 in plaats van een Arduino is je sensor aan je wifi-netwerk verbonden. Vanaf dat moment kun je makkelijk bij de data. Vaak wordt hier MQTT als protocol voor gebruikt, dat door veel software en apparaten die met domotica / internet of things te maken hebben wordt ondersteund. Bijvoorbeeld software als Domoticz, Home Assistant. Ook voor Homekit zijn er mogelijkheden om MQTT te 'praten'.