4.3.8 PM2.5 Feinstaub-Erkennung

4.3.8.1 Übersicht

Img

Bei der PM2.5-Feinstaub-Erkennung wird ein Laser-Staubsensor verwendet, um die Konzentration von PM2.5 in der Luft zu messen. Er kann die Staubkonzentration kontinuierlich überwachen, während Partikel gesammelt und deren Bestandteile analysiert werden. Partikel mit einem aerodynamischen Durchmesser von weniger als 2,5 Mikrometern nennt man PM2.5. Bei kleinerer Partikelgröße steigt die Aufnahme im Atmungssystem.

In diesem Projekt bauen wir ein PM2.5-Feinstaub-Erkennungssystem mit einem micro:bit-Board, PM2.5-Staubsensor, OLED-Anzeige, Zerstäubungsmodul und dem eingebauten Lautsprecher. Der PM2.5-Staubsensor erkennt PM2.5-Partikel in der Luft, und das OLED zeigt den erfassten PM2.5-Wert in Echtzeit an. Wenn der Wert einen Schwellenwert erreicht, löst der Lautsprecher Alarm aus und das Zerstäubungsmodul sprüht Wasserdampf, um den Staub zu reduzieren.

Img

4.3.8.2 Komponentenkenntnisse

Img

PM2.5-Staubsensor

Img

Der PM2.5-Staubsensor ist mit einem GP2Y1014AU0F-Chip ausgestattet, um sehr feine Partikel mit einem Durchmesser größer als 0,8 μm, wie Zigarettenrauch, effektiv zu erkennen. Er verfügt außerdem über eine Infrarot-LED und einen diagonal angeordneten Phototransistor, die das von Staubpartikeln in der Luft reflektierte Licht erfassen. Er zeichnet sich durch sehr geringen Stromverbrauch aus (maximal 20 mA, typisch 11 mA) und sein analoger Spannungsausgang variiert linear mit der Staubdichte, weshalb er häufig in Luftreinigern, Luftqualitätsmonitoren von Klimaanlagen, PM2.5-Detektoren usw. eingesetzt wird.

⚠️ Hinweis: Der PM2.5-Staubsensor mit GP2Y1014AU0F-Chip benötigt mindestens 30 Sekunden bis 2 Minuten Einschaltaufheizzeit, um relativ genaue Messwerte zu erhalten.

Parameter:

  • Versorgungsspannung: DC 5 ~ 7V

  • Betriebsstrom: 20mA(Max)

  • Minimale Partikelgröße zur Erkennung: 0.8μm

  • Empfindlichkeit: 0.5V/(0.1mg/m³)

  • Spannung in sauberer Luft: 0.9V (typisch)

  • Betriebstemperatur: -10℃~65℃

Img

4.3.8.3 Benötigte Komponenten

Img

Img

Img

micro:bit V2 main board ×1

micro:bit shield ×1

Zerstäubungsmodul ×1

Img

Img

Img

PM2.5 Staubsensor ×1

OLED display ×1

AA-Batterien (selbst bereitstellen) ×6

Img

Img

Img

Batteriehalter ×1

4-poliges Kabel ×2

3-poliges Kabel ×1

Img

micro USB Kabel ×1

4.3.8.4 Verdrahtungsdiagramm

⚠️ Beim Verdrahten bitte auf die Kabelfarben achten.

PM2.5 Staubsensor

Kabelfarbe

micro:bit shield Pin

micro:bit Board Pin

GND

schwarz

G

G

VCC

rot

V2

V

LED

blau

1

P1

OUT

grün

2

P2

OLED display

Kabelfarbe

micro:bit shield Pin

micro:bit Board Pin

GND

schwarz

G

G

VCC

rot

V2

V

SDA

blau

20

P20

SCL

grün

19

P19

Zerstäubungsmodul

Kabelfarbe

micro:bit shield Pin

micro:bit Board Pin

G

schwarz

G

G

V

rot

V2

V

S

gelb

16

P16

Img

4.3.8.5 Programmablauf

Img

4.3.8.6 Testcode

⚠️ Tipp 1: Bevor Sie den Code auf das Microbit-Board herunterladen, importieren Sie bitte die Bibliotheksdatei “oled_ssd1306.py” entsprechend Import Library on MU” .

Img

⚠️ Tipp 2: Der Schwellwert 500 in der if()-Bedingung kann je nach tatsächlicher Situation angepasst werden.

Vollständiger 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
'''
# import related libraries
from microbit import *
from oled_ssd1306 import *
import music
import time

# initialize and clear oled
initialize()
clear_oled()

# Pin configuration
led_Pin = pin1
out_Pin = pin2

pin16.write_digital(1) # set P16 pin to high level

# Time parameter
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:
    # Measurement sequence
    led_Pin.write_digital(0)      # LED OFF
    microsecond_delay(delayTime)   # 280μs

    dustVal = out_Pin.read_analog()  # Read the sensor

    microsecond_delay(delayTime2)  # 40μs
    led_Pin.write_digital(1)      # LED ON
    microsecond_delay(offTime)     # 9680μs

    # Calculation and display
    if dustVal > 36.455:
        # The exact same calculation formula
        voltage = dustVal / 1024.0
        pm25 = (voltage - 0.0356) * 120000 * 0.035

        # OLED displays detailed information
        add_text(0, 0, "PM2.5 dust: ") # Display the value of PM2.5 in the corresponding position of OLED
        add_text(0, 2, str(round(pm25)) + " ug/m3") # Display the value of PM2.5 in the corresponding position of OLED

        # Quality indication
        if pm25  > 500 :    # PM2.5 value > 500
            display.show(Image.SAD) # LED matrix displays a sad pattern
            music.play("E5:4")       # speaker plays E5 tone
            sleep(1000)
            pin16.write_digital(0) # set P16 pin to low level
            sleep(200)
            pin16.write_digital(1) # set P16 pin to high level
            sleep(3000)
            pin16.write_digital(0) # set P16 pin to low level
            sleep(200)
            pin16.write_digital(1) # set P16 pin to high level
            sleep(1000)
        else: # or
            display.show(Image.HAPPY) # LED matrix displays a happy pattern
            music.reset()             # no tone
            pin16.write_digital(1) # set P16 pin to high level
    else:
        print("Low value:", dustVal)
        display.show(Image.NO)

    # delay 0.2s
    sleep(200)
    clear_oled()   # clear OLED

Img

Kurze Erklärung:

① Bibliotheken microbit, oled_ssd1306, music und time importieren.

from microbit import *
from oled_ssd1306 import *
import music
import time

② OLED initialisieren und löschen.

initialize()
clear_oled()

③ Die Pins des PM2.5-Staubsensors initialisieren.

led_Pin = pin1
out_Pin = pin2

④ Das Zerstäubungsmodul an Pin P16 anschließen und zunächst ausschalten.

pin16.write_digital(1)

⑤ Anfangswerte der Zeitvariablen setzen.

delayTime = 280
delayTime2 = 40
offTime = 9680

⑥ Eine Unterfunktion für mikrosekunden-genaue Verzögerung definieren.

def microsecond_delay(us):
    """Precise microsecond delay"""
    start = time.ticks_us()
    while time.ticks_diff(time.ticks_us(), start) < us:
        pass

⑦ Steuerung der Messzeitpunkte des PM2.5-Staubsensors einstellen, hauptsächlich zur Erfassung der Staubkonzentration in der Luft.

led_Pin.write_digital(0)      # LED AUS
microsecond_delay(delayTime)   # 280μs

dustVal = out_Pin.read_analog()  # Sensor auslesen

microsecond_delay(delayTime2)  # 40μs
led_Pin.write_digital(1)      # LED EIN
microsecond_delay(offTime)     # 9680μs

⑧ Verzweigung: if()…else…

Wenn der analoge Wert des PM2.5-Staubsensors größer als 36.455 ist, kann der Konzentrationswert berechnet und auf dem OLED angezeigt werden.

Andernfalls gibt der serielle Monitor die entsprechenden analogen Staubwerte aus.

if dustVal > 36.455:
    # The exact same calculation formula
    voltage = dustVal / 1024.0
    pm25 = (voltage - 0.0356) * 120000 * 0.035

    # OLED displays detailed information
    add_text(0, 0, "PM2.5 dust: ") # Display the value of PM2.5 in the corresponding position of OLED
    add_text(0, 2, str(round(pm25)) + " ug/m3") # Display the value of PM2.5 in the corresponding position of OLED

else:
    print("Low value:", dustVal)
    display.show(Image.NO)

⑨ Verzweigung: if()…else…

Wenn die ermittelte PM2.5-Konzentration 500ug/m³ überschreitet, zeigt die 5×5-LED-Matrix Img und der Lautsprecher gibt Alarm. Nach 1 Sekunde sprüht das Zerstäubungsmodul Wasserdampf.

Andernfalls zeigt die 5×5-LED Img, der Lautsprecher löst keinen Alarm aus und das Zerstäubungsmodul arbeitet nicht.

if pm25  > 500 :    # PM2.5 value > 500
    display.show(Image.SAD) # LED matrix displays a sad pattern
    music.play("E5:4")       # speaker plays E5 tone
    sleep(1000)
    pin16.write_digital(0) # set P16 pin to low level
    sleep(200)
    pin16.write_digital(1) # set P16 pin to high level
    sleep(3000)
    pin16.write_digital(0) # set P16 pin to low level
    sleep(200)
    pin16.write_digital(1) # set P16 pin to high level
    sleep(1000)
else: # or
    display.show(Image.HAPPY) # LED matrix displays a happy pattern
    music.reset()             # no tone
    pin16.write_digital(1) # set P16 pin to high level

4.3.8.7 Testergebnis

Img

Nach dem Verdrahten und dem Einschalten über das micro USB-Kabel, schließen Sie die externe Stromversorgung (6 AA-Batterien) an, um eine ausreichende Stromversorgung sicherzustellen, und klicken Sie “Flash”, um den Code auf das micro:bit-Board zu übertragen.

Img

Nach dem Hochladen des Testcodes drücken Sie die Reset-Taste auf der Rückseite des micro:bit.

Img

Fegen Sie den Boden im Innenraum / zünden Sie ein leichtes Streichholz / verbrennen Sie sicher eine kleine Menge Papier, um deutlich sichtbare PM2.5-Partikel zu erzeugen. Diese werden vom PM2.5-Staubsensor erkannt und ihre Konzentration wird in Echtzeit auf dem OLED angezeigt.

Wenn die ermittelte PM2.5-Konzentration 500ug/m³ überschreitet, zeigt die 5×5-LED-Matrix Img und der Lautsprecher gibt Alarm. Nach 1 Sekunde sprüht das Zerstäubungsmodul Wasserdampf. Andernfalls zeigt die 5×5-LED Img, der Lautsprecher löst keinen Alarm aus und das Zerstäubungsmodul arbeitet nicht.

Auf dem OLED erkannte Werte

Luftqualität

0-75

Ausgezeichnet

75-150

Sehr gut

150-300

Gut

300-1050

Normal

1050-3000

Schlecht

3000 +

Sehr schlecht

Img

⚠️ Hinweis: Die Bausteine für das Experiment sind nicht in diesem Bausatz enthalten.

(Tipp: Wenn kein Ergebnis angezeigt wird, drücken Sie bitte die Reset-Taste des micro:bit-Boards.)

Img