### 4.3.8 PM2.5 Stofdetectie #### 4.3.8.1 Overzicht ![Img](./media/top1.png) 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](./media/bottom1.png) #### 4.3.8.2 Componentkennis ![Img](./media/2top.png) **PM2.5 Stofsensor** ![Img](./media/PM2.5.png) 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](./media/2bottom.png) #### 4.3.8.3 Benodigde componenten | ![Img](./media/microbitV2.png)|![Img](./media/ExpansionBoard.png)|![Img](./media/Atomization1.png)| | :--: | :--: | :--: | | micro:bit V2 hoofdboard ×1 | micro:bit shield ×1 |vernevelingsmodule ×1| |![Img](./media/PM2.5-1.png)|![Img](./media/OLED.png)| ![Img](./media/AAbattery.png)| |PM2.5-stofsensor ×1|OLED-display ×1 |AA-batterij(**zelf mee te brengen**) ×6| |![Img](./media/batterycase.png) |![Img](./media/4pin.png)|![Img](./media/3pin.png)| |batterijhouder ×1|4-pins kabel ×2 |3-pins kabel ×1 | |![Img](./media/usb.png) | | | | 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](./media/couj8.png) #### 4.3.8.5 Codeflow ![Img](./media/flow-chart-08.png) #### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tip 2: De drempelwaarde 500 in de if()-voorwaarde kan worden aangepast aan de werkelijke situatie.** **Volledige 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 ''' # 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](./media/line1.png) **Korte uitleg:** ① Importeer de bibliotheken microbit, oled_ssd1306, music en time. ```Python from microbit import * from oled_ssd1306 import * import music import time ``` ② Initialiseer de OLED-pixels, wis de OLED. ```Python initialize() clear_oled() ``` ③ Initialiseer de pinnen van de PM2.5-stofsensor. ```Python led_Pin = pin1 out_Pin = pin2 ``` ④ Verbind de vernevelingsmodule met pin P16 en zet deze aanvankelijk uit. ```Python pin16.write_digital(1) ``` ⑤ Stel de beginwaarden van de tijdvariabelen in. ```Python delayTime = 280 delayTime2 = 40 offTime = 9680 ``` ⑥ Definieer een subfunctie voor microsecondevertraging. ```Python 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. ```Python 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. ```Python 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](./media/ab2.png) en geeft de luidspreker alarm. Na 1 seconde sproeit de vernevelingsmodule waternevel. Anders toont de 5×5 LED ![Img](./media/ab3.png), geeft de luidspreker geen alarm en werkt de vernevelingsmodule niet. ```Python 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](./media/4top.png) 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](./media/A130.png) Na het uploaden van de testcode, druk op de resetknop aan de achterkant van de micro:bit. ![Img](./media/A455.png) 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](./media/ab2.png) en geeft de luidspreker alarm. Na 1 seconde sproeit de vernevelingsmodule waternevel. Anders toont de 5×5 LED ![Img](./media/ab3.png), 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](./media/dongtu-8.gif) ⚠️ **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](./media/4bottom.png)