### 4.3.8 PM2.5 Feinstaub-Erkennung #### 4.3.8.1 Übersicht ![Img](./media/top1.png) 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](./media/bottom1.png) #### 4.3.8.2 Komponentenkenntnisse ![Img](./media/2top.png) **PM2.5-Staubsensor** ![Img](./media/PM2.5.png) 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](./media/2bottom.png) #### 4.3.8.3 Benötigte Komponenten | ![Img](./media/microbitV2.png)|![Img](./media/ExpansionBoard.png)|![Img](./media/Atomization1.png)| | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 |Zerstäubungsmodul ×1| |![Img](./media/PM2.5-1.png)|![Img](./media/OLED.png)| ![Img](./media/AAbattery.png)| |PM2.5 Staubsensor ×1|OLED display ×1 |AA-Batterien (**selbst bereitstellen**) ×6| |![Img](./media/batterycase.png) |![Img](./media/4pin.png)|![Img](./media/3pin.png)| |Batteriehalter ×1|4-poliges Kabel ×2 |3-poliges Kabel ×1 | |![Img](./media/usb.png) | | | | 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](./media/couj8.png) #### 4.3.8.5 Programmablauf ![Img](./media/flow-chart-08.png) #### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tipp 2: Der Schwellwert 500 in der if()-Bedingung kann je nach tatsächlicher Situation angepasst werden.** **Vollständiger Code:** ```Python ''' 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](./media/line1.png) **Kurze Erklärung:** ① Bibliotheken microbit, oled_ssd1306, music und time importieren. ```Python from microbit import * from oled_ssd1306 import * import music import time ``` ② OLED initialisieren und löschen. ```Python initialize() clear_oled() ``` ③ Die Pins des PM2.5-Staubsensors initialisieren. ```Python led_Pin = pin1 out_Pin = pin2 ``` ④ Das Zerstäubungsmodul an Pin P16 anschließen und zunächst ausschalten. ```Python pin16.write_digital(1) ``` ⑤ Anfangswerte der Zeitvariablen setzen. ```Python delayTime = 280 delayTime2 = 40 offTime = 9680 ``` ⑥ Eine Unterfunktion für mikrosekunden-genaue Verzögerung definieren. ```Python 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. ```Python 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. ```Python 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](./media/ab2.png) und der Lautsprecher gibt Alarm. Nach 1 Sekunde sprüht das Zerstäubungsmodul Wasserdampf. Andernfalls zeigt die 5×5-LED ![Img](./media/ab3.png), der Lautsprecher löst keinen Alarm aus und das Zerstäubungsmodul arbeitet nicht. ```Python 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](./media/4top.png) 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](./media/A130.png) Nach dem Hochladen des Testcodes drücken Sie die Reset-Taste auf der Rückseite des micro:bit. ![Img](./media/A455.png) 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](./media/ab2.png) und der Lautsprecher gibt Alarm. Nach 1 Sekunde sprüht das Zerstäubungsmodul Wasserdampf. Andernfalls zeigt die 5×5-LED ![Img](./media/ab3.png), 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](./media/dongtu-8.gif) ⚠️ **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](./media/4bottom.png)