4.3.8 PM2.5 Stofdetectie

4.3.8.1 Overzicht

Img

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.

Img

4.3.8.2 Componentkennis

Img

PM2.5 Stofsensor

Img

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℃

Img

4.3.8.3 Benodigde componenten

Img

Img

Img

micro:bit V2 hoofdboard ×1

micro:bit shield ×1

vernevelingsmodule ×1

Img

Img

Img

PM2.5-stofsensor ×1

OLED-display ×1

AA-batterij(zelf mee te brengen) ×6

Img

Img

Img

batterijhouder ×1

4-pins kabel ×2

3-pins kabel ×1

Img

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

Img

4.3.8.5 Codeflow

Img

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” .

Img

⚠️ 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

Img

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 Img en geeft de luidspreker alarm. Na 1 seconde sproeit de vernevelingsmodule waternevel.

Anders toont de 5×5 LED Img, 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

Img

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.

Img

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

Img

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 Img en geeft de luidspreker alarm. Na 1 seconde sproeit de vernevelingsmodule waternevel. Anders toont de 5×5 LED Img, 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

Img

⚠️ 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.)

Img