4.3.8 PM2.5 Stofdetectie
4.3.8.1 Overzicht

Bij PM2.5-stofdetectie wordt een laser-stofmeter gebruikt om de concentratie van PM2.5 in de lucht te meten. Het kan continu de stofconcentratie monitoren terwijl het fijnstof verzamelt en de componenten analyseert. Deeltjes met een aerodynamische diameter van minder dan 2,5 micrometer noemen we PM2.5. Als de deeltjesgrootte afneemt, neemt de opname door het ademhalingssysteem toe.
In dit project bouwen we een PM2.5-stofdetectiesysteem met een micro:bit-board, PM2.5-stofsensor, OLED-display, vernevelingsmodule en de on-board luidspreker. De PM2.5-stofsensor detecteert PM2.5-deeltjes in de lucht en de OLED toont de gedetecteerde PM2.5-waarde in realtime. Wanneer de waarde een drempel bereikt, geeft de luidspreker alarm en sproeit de vernevelingsmodule waternevel om stof te verminderen.

4.3.8.2 Componentkennis

PM2.5 Stofsensor

De PM2.5-stofsensor is uitgerust met een GP2Y1014AU0F-chip om effectief extreem fijne deeltjes met een diameter groter dan 0,8 μm te detecteren, zoals sigarettenrook. Hij is ook uitgerust met een infrarode LED en een fototransistor diagonaal geplaatst om het gereflecteerde licht van stof in de lucht te detecteren. Hij kenmerkt zich door extreem laag stroomverbruik (maximaal 20mA, typisch 11mA) en de analoge spanningsuitgang varieert lineair met de stofdichtheid, waardoor hij veel wordt toegepast in luchtreinigers, airconditioner-luchtmonitoren, PM2.5-detectoren, enz.
⚠️ Opmerking: PM2.5-stofsensor met GP2Y1014AU0F-chip vereist minimaal 30 seconden tot 2 minuten opwarmtijd na inschakelen om relatief nauwkeurige metingen te verkrijgen.
Parameters:
Voedingsspanning: DC 5 ~ 7V
Bedrijfstroom: 20mA(Max)
Minimale deeltjesdetectiewaarde: 0.8μm
Gevoeligheid: 0.5V/(0.1mg/m³)
Spanning in schone lucht: 0.9V (typisch)
Bedrijfstemperatuur: -10℃~65℃

4.3.8.3 Benodigde componenten
|
|
|
|---|---|---|
micro:bit V2 hoofdboard ×1 |
micro:bit shield ×1 |
vernevelingsmodule ×1 |
|
|
|
PM2.5-stofsensor ×1 |
OLED-display ×1 |
AA-batterij(zelf mee te brengen) ×6 |
|
|
|
batterijhouder ×1 |
4-pins kabel ×2 |
3-pins kabel ×1 |
|
||
micro USB-kabel ×1 |
4.3.8.4 Bedradingsschema
⚠️ Let bij het bedraden op de kleur van de draden.
PM2.5 dust sensor |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
GND |
black |
G |
G |
VCC |
red |
V2 |
V |
LED |
blue |
1 |
P1 |
OUT |
green |
2 |
P2 |
OLED display |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
GND |
black |
G |
G |
VCC |
red |
V2 |
V |
SDA |
blue |
20 |
P20 |
SCL |
green |
19 |
P19 |
Vernevelingsmodule |
wire color |
micro:bit shield pin |
micro:bit board pin |
|---|---|---|---|
G |
black |
G |
G |
V |
red |
V2 |
V |
S |
yellow |
16 |
P16 |

4.3.8.5 Codeflow

4.3.8.6 Testcode
⚠️ Tip 1: Voordat je de code naar het micro:bit-board downloadt, importeer je het bibliotheekbestand “oled_ssd1306.py” verwijzend naar “Importeer bibliotheek op MU” .

⚠️ Tip 2: De drempelwaarde 500 in de if()-voorwaarde kan worden aangepast aan de werkelijke situatie.
Volledige code:
'''
Theme: PM2.5 dust detection
Function: OLED displays the amount of PM2.5 dust and the PM2.5 dust sensor controls the micro:bit 5×5 dot matrix, speaker and atomization module
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
# importeer gerelateerde bibliotheken
from microbit import *
from oled_ssd1306 import *
import music
import time
# initialiseer en wis oled
initialize()
clear_oled()
# pinconfiguratie
led_Pin = pin1
out_Pin = pin2
pin16.write_digital(1) # zet P16-pin op hoog niveau
# tijdparameters
delayTime = 280
delayTime2 = 40
offTime = 9680
def microsecond_delay(us):
"""Precise microsecond delay"""
start = time.ticks_us()
while time.ticks_diff(time.ticks_us(), start) < us:
pass
while True:
# Meetreeks
led_Pin.write_digital(0) # LED UIT
microsecond_delay(delayTime) # 280μs
dustVal = out_Pin.read_analog() # Lees de sensor
microsecond_delay(delayTime2) # 40μs
led_Pin.write_digital(1) # LED AAN
microsecond_delay(offTime) # 9680μs
# Berekening en weergave
if dustVal > 36.455:
# Exact dezelfde berekeningsformule
voltage = dustVal / 1024.0
pm25 = (voltage - 0.0356) * 120000 * 0.035
# OLED toont gedetailleerde informatie
add_text(0, 0, "PM2.5 dust: ") # Toon de waarde van PM2.5 op de juiste positie van de OLED
add_text(0, 2, str(round(pm25)) + " ug/m3") # Toon de waarde van PM2.5 op de juiste positie van de OLED
# Kwaliteitsindicatie
if pm25 > 500 : # PM2.5 waarde > 500
display.show(Image.SAD) # LED-matrix toont een verdrietig patroon
music.play("E5:4") # luidspreker speelt E5-toon
sleep(1000)
pin16.write_digital(0) # zet P16-pin op laag niveau
sleep(200)
pin16.write_digital(1) # zet P16-pin op hoog niveau
sleep(3000)
pin16.write_digital(0) # zet P16-pin op laag niveau
sleep(200)
pin16.write_digital(1) # zet P16-pin op hoog niveau
sleep(1000)
else: # anders
display.show(Image.HAPPY) # LED-matrix toont een blij patroon
music.reset() # geen toon
pin16.write_digital(1) # zet P16-pin op hoog niveau
else:
print("Low value:", dustVal)
display.show(Image.NO)
# vertraging 0,2 s
sleep(200)
clear_oled() # wis OLED

Korte uitleg:
① Importeer de bibliotheken microbit, oled_ssd1306, music en time.
from microbit import *
from oled_ssd1306 import *
import music
import time
② Initialiseer de OLED-pixels, wis de OLED.
initialize()
clear_oled()
③ Initialiseer de pinnen van de PM2.5-stofsensor.
led_Pin = pin1
out_Pin = pin2
④ Verbind de vernevelingsmodule met pin P16 en zet deze aanvankelijk uit.
pin16.write_digital(1)
⑤ Stel de beginwaarden van de tijdvariabelen in.
delayTime = 280
delayTime2 = 40
offTime = 9680
⑥ Definieer een subfunctie voor microsecondevertraging.
def microsecond_delay(us):
"""Precise microsecond delay"""
start = time.ticks_us()
while time.ticks_diff(time.ticks_us(), start) < us:
pass
⑦ Stel de besturing van de meettiming van de PM2.5-stofsensor in, die voornamelijk wordt gebruikt om de stofconcentratie in de lucht te detecteren.
led_Pin.write_digital(0) # LED UIT
microsecond_delay(delayTime) # 280μs
dustVal = out_Pin.read_analog() # Lees de sensor
microsecond_delay(delayTime2) # 40μs
led_Pin.write_digital(1) # LED AAN
microsecond_delay(offTime) # 9680μs
⑧ Beslissingsstructuur: if()…else…
Wanneer de analoge waarde van PM2.5-stofdeeltjes hoger is dan 36.455, kan de concentratiewaarde worden berekend en op de OLED worden weergegeven.
Anders print de seriële monitor de overeenkomstige analoge stofwaarden.
if dustVal > 36.455:
# Exact dezelfde berekeningsformule
voltage = dustVal / 1024.0
pm25 = (voltage - 0.0356) * 120000 * 0.035
# OLED toont gedetailleerde informatie
add_text(0, 0, "PM2.5 dust: ") # Toon de waarde van PM2.5 op de juiste positie van de OLED
add_text(0, 2, str(round(pm25)) + " ug/m3") # Toon de waarde van PM2.5 op de juiste positie van de OLED
else:
print("Low value:", dustVal)
display.show(Image.NO)
⑨ Beslissingsstructuur: if()…else…
Wanneer de gedetecteerde concentratie van PM2.5-stofdeeltjes hoger is dan 500 ug/m³, toont de 5×5 LED-matrix
en geeft de luidspreker alarm. Na 1 seconde sproeit de vernevelingsmodule waternevel.
Anders toont de 5×5 LED
, geeft de luidspreker geen alarm en werkt de vernevelingsmodule niet.
if pm25 > 500 : # PM2.5 waarde > 500
display.show(Image.SAD) # LED-matrix toont een verdrietig patroon
music.play("E5:4") # luidspreker speelt E5-toon
sleep(1000)
pin16.write_digital(0) # zet P16-pin op laag niveau
sleep(200)
pin16.write_digital(1) # zet P16-pin op hoog niveau
sleep(3000)
pin16.write_digital(0) # zet P16-pin op laag niveau
sleep(200)
pin16.write_digital(1) # zet P16-pin op hoog niveau
sleep(1000)
else: # anders
display.show(Image.HAPPY) # LED-matrix toont een blij patroon
music.reset() # geen toon
pin16.write_digital(1) # zet P16-pin op hoog niveau
4.3.8.7 Testresultaat

Na het aansluiten en inschakelen via de micro USB-kabel, sluit je externe voeding (6 AA-batterijen) aan om voldoende stroomvoorziening te garanderen, en klik op “Flash” om de code naar het micro:bit-board te downloaden.

Na het uploaden van de testcode, druk op de resetknop aan de achterkant van de micro:bit.

Veeg binnen de vloer / steek een lucifer aan / verbrand veilig een klein stukje papier om duidelijke PM2.5-stofdeeltjes te produceren; deze worden door de PM2.5-stofsensor gedetecteerd en hun concentratie wordt realtime op de OLED weergegeven.
Wanneer de gedetecteerde concentratie van PM2.5-stofdeeltjes hoger is dan 500 ug/m³, toont de 5×5 LED-matrix
en geeft de luidspreker alarm. Na 1 seconde sproeit de vernevelingsmodule waternevel. Anders toont de 5×5 LED
, geeft de luidspreker geen alarm en werkt de vernevelingsmodule niet.
Waargenomen waarden op OLED |
Luchtkwaliteit |
|---|---|
0-75 |
Uitstekend |
75-150 |
Zeer goed |
150-300 |
Goed |
300-1050 |
Normaal |
1050-3000 |
Slecht |
3000 + |
Zeer slecht |

⚠️ Opmerking: De bouwstenen in het experiment zijn niet inbegrepen in deze set.
(Tip: Als er geen resultaat wordt waargenomen, druk dan op de resetknop van het micro:bit-board.)










