In deze tijd van de COVID-19-pandemie zou je bijna vergeten dat er andere redenen zijn om een gezichtsmasker te dragen. En dat er plaatsen zijn waar dit al veel langer aan te raden of zelfs nodig is. Bij het wonen in grote Aziatische steden, is buitensporten zijn vaak problematisch vanwege luchtvervuiling, vooral voor deeltjes van 2,5 µm, ook wel PM2,5 genoemd. Hoge concentraties van deze kleine deeltjes in de omgevingslucht kunnen schadelijk en zelfs gevaarlijk zijn voor uw gezondheid. Het PM2.5-display, gepresenteerd in dit artikel, wordt gebruikt om de luchtkwaliteit te bewaken.

Ik had al een PM2.5 display gemaakt, oplaadbaar met een zonnepaneel maar die was niet geschikt voor binnen. Ik had ook een ESP32-gebaseerde versie ontworpen, waarmee ik verschillende sensoren heb getest en waarvan de gegevens via WiFi naar Thingspeak werden gestuurd, maar deze was niet draagbaar. Het belangrijkste idee van dit project is om een apparaat te ontwerpen dat zo compact mogelijk is, op batterijen werkt, een autonomie heeft van enkele weken en permanent de PM2.5-index van de omgevingslucht weergeeft. Dit draagbare display kan bijvoorbeeld buitenshuis worden geplaatst met een zuignap op een raam, zodat het PM2.5-niveau van binnenuit permanent zichtbaar is. Maar je kunt hem natuurlijk ook binnenshuis gebruiken.◦

Ontwerpfilosofie

De keuze van de stofdeeltjes sensor is erg belangrijk. In een eerder project had ik verschillende soorten sensoren getest, zoals een buitenversie met de Sharp GP2Y10-sensor. Als we echter een compact ontwerp willen, is van al deze sensoren alleen de Plantower PMS7003 sensor [10] bruikbaar. Het heeft een seriële interface voor het verzenden van meetgegevens. Let er bij het bestellen van deze sensor op dat u deze inclusief bijpassende connector aanschaft! Omdat de sensor tot 100 mA verbruikt bij 5 V (voornamelijk vanwege de interne miniventilator), kan hij niet continu werken, de batterijen zullen binnen de kortste keren leeg zijn. De voedingsspanning wordt geleverd door een lithiumbatterij, daarom is een DC/DC-converter (3,8 V naar 5 V) met true-shutdown vereist. 

Het geselecteerde beeldscherm is een monochroom alfanumeriek 8 x 2 karakter LCD-display. Het verbruikt minder dan 1 mA bij continu weergave. Een kleuren- of OLED-display kan niet worden gebruikt vanwege het hoge stroomverbruik, wat de autonomie niet ten goede komt. Voor een snelle weergave van de PM2.5-meting is een LED-bar-graph toegevoegd. Het niveau wordt weergegeven door een oplichtende LED, zes PM2.5-niveaus met vijf LED’s volgens de kleuren als in Tabel 1, waarbij het hoogste niveau wordt aangegeven als de rode en de blauwe LED aan zijn (donkerpaars in de tabel). Alle leds hebben een laag verbruik, bijv. Kingbright WP71xx-serie met een forward current van 2 mA. Een versie met laag verbruik en hoge helderheid kan handig zijn als de apparatuur buiten wordt geplaatst. 

Tabel 1: Uitleg AQI niveau’s.

Temperatuur- en luchtvochtigheidsweergave zijn ook toegevoegd (optioneel), met behulp van een I2C SHT20 / SHT21-sensor. De software ondersteunt ook de DS1820 1-Wire temperatuursensor, maar deze is in deze applicatie niet getest. 
 
Het hart van de applicatie is een PIC18F2520, met een MAX931 voor batterijspanningsbewaking en een LTC4054 lithiumbatterijlader als randapparatuur. 
 
Het totale stroomverbruik van de detector hangt voornamelijk af van het interval tussen de metingen. Volgens de PMS7003-specificatie moet het gedurende 30 seconden worden ingeschakeld voordat de eerste betrouwbare meting kan worden uitgevoerd. Standaard staat het interval ingesteld op 20 minuten, maar kan via het menu worden gewijzigd. Met deze standaard instelling en een 1000 mAh batterij kan de detector twee weken werken zonder op te laden. De grootte van de batterij hangt af van de behuizing. Elke lithium-, LiPo- of prismatische batterij kan worden gebruikt. Na het ontwikkelen van een compacte behuizing, kiezen we voor dit project een zo groot mogelijke batterij (qua volume) voor de resterende ruimte. Ik heb een 1100 mAh-batterij gevonden die prima past. 

Eigenschappen van het PM2.5 display

De meting van het 2,5 µm deeltjesniveau wordt met regelmatige tussenpozen uitgevoerd. Deze periode kan in het menu worden gewijzigd tussen 10 en 60 minuten, waarbij 20 minuten een goed compromis is tussen meetnauwkeurigheid en stroomverbruik. Elk uur berekent het programma het gemiddelde van de laatste metingen, er wordt slechts één gemiddelde bijgehouden en opgeslagen in een tabel. Er zijn verschillende manieren om het luchtkwaliteitsniveau (geassocieerd met PM2,5) te berekenen. In dit project zijn twee methoden beschikbaar: IQA: rekenkundig gemiddelde over 24 uur

  • Nieuwe AQI-versie: voortschrijdend gewogen gemiddelde over 12 uur (hier NQI genoemd). De meest recente meting heeft een groter gewicht dan die van 11 uur geleden.
Standaard wordt de NQI-versie weergegeven.
 
Het deeltjesmeetniveau op de LED-balk kan het volgende weergeven:
 
  • Meest recente meting (Laatste)
  • Laatste uurgemiddelde (Uur)
  • IQA or NQI

De leds kunnen ’s nachts worden uitgeschakeld om batterijen te sparen. Een LDR meet de omgevingshelderheid en verandert de (dag/nacht) modus.
 
Een interessante optie is om het huidige PM2.5-niveau realtime weer te geven. De sensor is continu actief en de weergegeven waarde wordt elke seconde vernieuwd. Deze optie verbruikt echter veel stroom en de batterij raakt in korte tijd leeg.
 
Andere waarden die kunnen worden weergegeven:
 
  • Weergave van temperatuur en luchtvochtigheid
  • 3-cijferige batterijspanningsweergave (bijvoorbeeld "384", wat 3,84 V betekent)
  • Wanneer de batterijspanning laag is, knippert het LED-display om aan te geven dat opladen nodig is.

Er is een aansluiting voor optioneel opladen van de batterij met een 5V zonnecel voor buitengebruik.
 
De menu-instellingen worden opgeslagen in de interne EEPROM van de microcontroller. Alle andere waarden, tabellen en variabelen worden gereset zodra de unit wordt uitgeschakeld of wordt herstart.

Berekening van de Air quality index

Er zijn veel methoden om de luchtkwaliteitsindex te berekenen. In dit project worden twee versies geïmplementeerd. De eerste is een gemiddelde over de afgelopen 24 uur met behulp van een Amerikaanse berekeningsmethode, details over deze methode zijn te vinden op [1]. Het nadeel van deze methode is dat er gebruik wordt gemaakt van een voortschrijdend gemiddelde over 24 uur. Daarom wordt de weergegeven waarde beïnvloed door relatief oude luchtkwaliteitsniveaus. Om deze reden wordt er een nieuwe berekening (NowCast) gebruikt die een gewogen gemiddelde oplevert. De meting van het afgelopen uur weegt in de uiteindelijke berekening zwaarder dan die van 11 uur geleden. Het is ook een glijdend gemiddelde maar van meer dan 12 uur. Dit wordt NQI (New Quality Index) genoemd, en het behoudt dezelfde limieten als de bovenstaande versie. Voor gedetaileerde uitleg van deze methode, zie link [2]. Om het simpel te houden heeft de indexwaarde van het voorgaande uur een gewicht van 50%, die van -2 uur heeft een gewicht van 25%, die van -3 uur heeft een gewicht van 12,5%, etc. Een praktische implementatie van het algoritme wordt besproken in link [3].

De hardware

Het schema in Figuur 1 toont de hardware van het luchtkwaliteitsdisplay.

PM2.5 display to monitor air quality
Figuur 1: De hardware van het PM2.5 display.

De DC/DC-boostconverter voor de PMS7003-sensor is een LT3525ESC6-5 (U6). Het is een zogenaamde "true shutdown" step-up converter. De meeste DC/DC-boostconverters hebben een uitschakelfunctie die de schakelende  transistor in het smoorspoelcircuit stoppen. Maar dan volgt de uitgangsspanning nog steeds de ingang via het diode-smoorspoelcircuit en verbruikt het nog steeds stroom. True shutdown schakelt de converter echt uit en er kan geen stroom naar de uitgang stromen. Het enige echte probleem met dit IC is het solderen. Het is echt klein, soldeerpasta en een heteluchtsoldeerstation worden aanbevolen ...
 
De LP2980 3.3 V (U7) LDO wordt aangestuurd door U1, een MAX931 comparator met hysteresis. Hij schakelt de LDO uit als de accuspanning onder 3,2 V daalt en kan alleen weer worden geactiveerd als deze spanning boven de 3,8 V stijgt. Deze functie, niet noodzakelijkerwijs nuttig in de normale modus, is nodig bij gebruik van een zonnepaneel om op te laden. De MAX931 blokkeert ook de DC/DC-converter via diode D5 om onbedoeld starten te voorkomen bij een lage batterijspanning.
 
De seriële verbinding wordt gedeeld tussen de externe connector J8 (voor tracking en downloaden) en de PMS7003 (verbonden met J1). Het Tx-signaal van de microcontroller is op beide connectoren aangesloten. Het Rx-signaal wordt verzonden via een D2-D12-diode-OR. Omdat de huidige firmware versie geen commando’s naar de PMS stuurt, is de weerstand R16 (0 Ohm) niet gemonteerd.
Voor de SHT20 / 21-sensor wordt de I2C-verbinding gemaakt door softwaresimulatie, via poort B.0, poort B.1, zonder gebruik te maken van de interne I2C van de PIC (gebruikt voor de weergave).

Het LCD-scherm dat hier wordt gebruikt, een Eastrising Serial COG 8x2 karakter I2C LCD-module Display, heeft een I2C-interface en is verbonden via U3.
 
De oplader voor de lithiumbatterij is een LTC4054 (of alternatief EUP8054, U4). Het kan worden gevoed via USB (J2) of via een extern zonnepaneel dat is aangesloten op J4. De stroom wordt begrensd door de twee weerstanden R19-R20 tot 400 mA. LED D4 geeft aan dat de batterij wordt opgeladen, deze bevindt zich naast de USB-connector. Connector J4 wordt gebruikt om een 5 V zonnepaneel aan te sluiten, die de batterij zal opladen via Schottky diode D7.
 
De vijf bar-graph-LED’s (D8 tot D11 en D13) worden aangestuurd door de PIC-controller. De stroombegrenzende weerstand van elke LED is afhankelijk van het type LED dat wordt gebruikt (laag vermogen of niet) en van de forward voltage van elke kleuren-LED. LED D1 (rood) licht op als de DC/DC-omzetter AAN is en de deeltjessensor is ingeschakeld.
 
De condensatoren C10 en C11 voor het display liggen tussen 1 µF en 2,2 µF, 10 V-versie. De achtergrondverlichting van het display wordt niet gebruikt (en kan worden verwijderd voor de montage). Het wordt met dubbelzijdig plakband op de printplaat bevestigd. Het is aanbevolen om het display inclusief connector te kopen.
 
De helderheid voor de dag- / nachtmodus wordt gedetecteerd door een LDR (C1) op het frontpaneel. Het is verbonden met analoge ingang AN0 van de microcontroller.

PCB, battery and PMS7003 sensor with the enclosure opened.
Figuur 2: PCB, batterij en PMS7003 sensor met geopende behuizing.

Assembleren van de printplaat

Het schema en de printplaat zijn ontworpen met de DipTrace CAD-software van Novarm. Download de ontwerpbestanden vanaf de Elektor Labs-projectpagina. Alle componenten behalve de LED’s zijn SMD’s. Het moeilijkste onderdeel om te solderen is de DC/DC converter, hiervoor heb ik soldeerpasta en een hetelucht soldeerstation gebruikt. Gezien de compactheid van de behuizing is het lastig om standaard connectoren te monteren om de 2 sensoren aan te sluiten. Soldeer bij voorkeur de draden direct op het circuit. Alleen de batterij en het display gebruiken een connector.
 
Er zijn twee oplossingen voor het programmeren van de microcontroller. Sluit een PicKit3 aan op J7 of via de seriële connector die wordt gedeeld met de PMS7003-sensor. In dit geval moet voor het solderen, de microcontroller worden geprogrammeerd met een bootloader en moet de PMS7003 elke keer worden losgekoppeld als de µC opnieuw wordt geprogrammeerd. Persoonlijk gebruik ik altijd de zogenaamde Tiny bootloader, die te vinden is op deze URL. Het is noodzakelijk dat de ingebedde versie van de PIC de juiste waarde heeft voor de watchdog (hier 256 ms) en dus moet de source opnieuw worden gecompileerd. De .asm en .hex van deze bootloader voor de PIC18F2520 maken ook deel uit van de softwaredownload op de Elektor Labs-projectpagina.

PM2.5 display in a 3D-printed case
Figuur 3: Voorzijde van het PM2.5 display in een 3D-geprinte behuizing.

Software

De software is ontwikkeld in C, met een oudere versie van de MikroC-compiler. Het kan worden geport naar de nieuwere versie, MikroC Pro, maar heb dat niet geprobeerd. Bron- en HEX-bestand kunnen worden gedownload vanaf de projectpagina op Elektor Labs. De firmware is vrij simpel:

  • Initialisatie
  • Oneindige loop voor het testen van een toetsaanslag
  • Weergave van de verschillende schermen, het niveau van de leds (afhankelijk van de waarde van de helderheid voor dag/nacht-omschakeling)
  • Schakel elke xx minuten de 5 V DC/DC-converter voor de deeltjessensor in. 30 seconden later wordt de PM2.5-waarde uitgelezen en wordt de DC/DC-converter uitgeschakeld.
  • Uurlijkse een berekening van de gemiddelde waarde
  • Opslag van deze waarde in een tabel met voortschrijdend gemiddelde met 24 posities (gedurende 24 uur)
  • Berekening van de IQA (voortschrijdend 24-uurgemiddelde) of NQI (voortschrijdend 12-uur gewogen gemiddelde)

De functie calculation_aqi() berekent de waarde van de luchtkwaliteitsindex, volgens het principe van een eenvoudig gemiddelde over 24 uur. Een tabel bevat de laatste 24 waarden en het gemiddelde wordt eenvoudigweg gemiddeld. De functie calculation_nqi()berekent de gewogen waarde van de luchtkwaliteitsindex. De "praktische" formule wordt uitgelegd in referentie [3]. De conversie van deze waarden in de indexen (0-500) wordt uitgevoerd door de functie conversion_aqi(), volgens de Amerikaanse formule die is aangegeven in het document [1].
 
De hoofdloop van de software wordt beëindigd door een slaapinstructie. De processor wordt gewekt wanneer de volgende watchdog cyclus wordt getriggerd, het watchdog-interval moet worden ingesteld op 256 ms (voor de PIC18F2520 moet dit worden gedaan bij het programmeren van de microcontroller). Dit interval is kort genoeg om geen toetsaanslagen te missen. Een langere tijd zou beter zijn wat het stroomverbruik betreft, maar dan zou het mogelijk zijn om een toetsaanslag van knoppen te missen. De software werkt ook zonder temperatuur- / luchtvochtigheidssensor, maar het display geeft dan natuurlijk ongeldige waarden.

Behuizing

De behuizing is ontworpen in ThinkerCad en geprint op een 3D-printer. Het is vrij eenvoudig, met openingen voor zowel de SHT-sensor aan de bovenkant als voor de PMS7003-sensor, een voor de luchtinlaat, een voor de uitlaat. De meest recente versie van het ontwerp kan worden gedownload [4]. Ook is er een beugel voor een zonnecel ontwikkeld. Het is met kleine haken aan de achterkant van de behuizing bevestigd.
 
De compacte hardware op batterijen werkt prima, maar dit ontwerp kan altijd worden verbeterd. Het schema en de PCB hebben bijvoorbeeld al een connector (J6) voor een grafisch LCD-scherm van 128 x 64 pixels met laag vermogen, maar dit is niet getest en wordt niet ondersteund in de huidige versie van de firmware, dus J6 en alle condensatoren er omheen in het schema kunnen worden weggelaten.

Helaas is luchtverontreiniging nog steeds een groeiend probleem, niet alleen in grote steden in het Verre Oosten. Het is goed om een PM2.5-display bij de hand te hebben om de luchtkwaliteit in de gaten te houden, maar om eerlijk te zijn: het is eigenlijk heel erg dat we het nodig hebben.

(191215-01)

Vragen of Opmerkingen?
Heeft u vragen of opmerkingen over zijn artikel? E-mail de auteur op laurent.elektor@gmail.com of neem contact op met Elektor via editor@elektor.com.