### 4.3.8 Rilevamento polveri PM2.5 #### 4.3.8.1 Panoramica ![Img](./media/top1.png) Nel rilevamento delle polveri PM2.5, si utilizza un rilevatore laser di polvere per misurare la concentrazione di PM2.5 nell'aria. Può monitorare continuamente la concentrazione di polvere raccogliendo le particelle e analizzandone i componenti. Le particelle con diametro aerodinamico inferiore a 2,5 micrometri sono chiamate PM2.5. Se la dimensione delle particelle diminuisce, aumenta il tasso di assorbimento da parte dell'apparato respiratorio. In questo progetto costruiremo un sistema di rilevamento PM2.5 con una scheda micro:bit, sensore polveri PM2.5, display OLED, modulo di atomizzazione e lo speaker a bordo. Il sensore PM2.5 rileva le particelle PM2.5 nell'aria e l'OLED mostra in tempo reale il valore rilevato di PM2.5. Quando il valore raggiunge una soglia, lo speaker emette un allarme e il modulo di atomizzazione spruzza una nebbia d'acqua per ridurre la polvere. ![Img](./media/bottom1.png) #### 4.3.8.2 Conoscenze dei componenti ![Img](./media/2top.png) **Sensore di polveri PM2.5** ![Img](./media/PM2.5.png) Il sensore di polveri PM2.5 è dotato del chip GP2Y1014AU0F per rilevare efficacemente particelle estremamente fini con diametro maggiore di 0,8μm, come il fumo di sigaretta. È inoltre equipaggiato con un LED a infrarossi e un fototransistor disposti diagonalmente per rilevare la luce riflessa dalla polvere nell'aria. Presenta un consumo energetico ultra-basso (massimo 20mA, tipico 11mA) e la sua uscita in tensione analogica varia linearmente con la densità di polvere, quindi è ampiamente applicato in purificatori d'aria, monitor per aria condizionata, rivelatori PM2.5, ecc. ⚠️ **Nota: il sensore di polveri PM2.5 con chip GP2Y1014AU0F richiede almeno 30 secondi fino a 2 minuti di preriscaldamento dopo l'accensione per ottenere letture relativamente accurate.** **Parametri:** - Tensione di alimentazione: DC 5 ~ 7V - Corrente di esercizio: 20mA (Max) - Valore minimo di particella rilevabile: 0.8μm - Sensibilità: 0.5V/(0.1mg/m³) - Tensione in aria pulita: 0.9V (tipica) - Temperatura di esercizio: -10℃~65℃ ![Img](./media/2bottom.png) #### 4.3.8.3 Componenti richiesti | ![Img](./media/microbitV2.png)|![Img](./media/ExpansionBoard.png)|![Img](./media/Atomization1.png)| | :--: | :--: | :--: | | micro:bit V2 scheda principale ×1 | micro:bit shield ×1 |modulo di atomizzazione ×1| |![Img](./media/PM2.5-1.png)|![Img](./media/OLED.png)| ![Img](./media/AAbattery.png)| |sensore polveri PM2.5 ×1|OLED display ×1 |Batterie AA (**autopreparate**) ×6| |![Img](./media/batterycase.png) |![Img](./media/4pin.png)|![Img](./media/3pin.png)| |porta batterie ×1|cavo a 4 pin ×2 |cavo a 3 pin ×1 | |![Img](./media/usb.png) | | | | cavo micro USB ×1 | | | #### 4.3.8.4 Schema di collegamento ⚠️ **Quando effettuate i collegamenti, prestate attenzione al colore dei fili.** | 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 | | Atomization module | 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 Flusso del codice ![Img](./media/flow-chart-08.png) #### 4.3.8.6 Codice di prova ⚠️ **Suggerimento 1: Prima di scaricare il codice sulla scheda Microbit, importare il file della libreria “oled_ssd1306\.py” facendo riferimento a ** “[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) ⚠️ **Suggerimento 2: La soglia 500 nella condizione if() può essere modificata in base alla situazione reale.** **Codice completo:** ```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 ''' # importa le librerie correlate from microbit import * from oled_ssd1306 import * import music import time # inizializza e pulisce oled initialize() clear_oled() # Configurazione dei pin led_Pin = pin1 out_Pin = pin2 pin16.write_digital(1) # imposta il pin P16 a livello alto # Parametro temporale 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: # Sequenza di misura led_Pin.write_digital(0) # LED SPENTO microsecond_delay(delayTime) # 280μs dustVal = out_Pin.read_analog() # Legge il sensore microsecond_delay(delayTime2) # 40μs led_Pin.write_digital(1) # LED ACCESO microsecond_delay(offTime) # 9680μs # Calcolo e visualizzazione if dustVal > 36.455: # The exact same calculation formula voltage = dustVal / 1024.0 pm25 = (voltage - 0.0356) * 120000 * 0.035 # OLED mostra informazioni dettagliate add_text(0, 0, "PM2.5 dust: ") # Visualizza il valore di PM2.5 nella posizione corrispondente dell'OLED add_text(0, 2, str(round(pm25)) + " ug/m3") # Visualizza il valore di PM2.5 nella posizione corrispondente dell'OLED # Indicazione della qualità if pm25 > 500 : # Valore PM2.5 > 500 display.show(Image.SAD) # La matrice LED mostra un pattern triste music.play("E5:4") # lo speaker riproduce la nota E5 sleep(1000) pin16.write_digital(0) # imposta il pin P16 a livello basso sleep(200) pin16.write_digital(1) # imposta il pin P16 a livello alto sleep(3000) pin16.write_digital(0) # imposta il pin P16 a livello basso sleep(200) pin16.write_digital(1) # imposta il pin P16 a livello alto sleep(1000) else: # altrimenti display.show(Image.HAPPY) # La matrice LED mostra un pattern felice music.reset() # nessun suono pin16.write_digital(1) # imposta il pin P16 a livello alto else: print("Low value:", dustVal) display.show(Image.NO) # ritardo 0.2s sleep(200) clear_oled() # pulisce l'OLED ``` ![Img](./media/line1.png) **Breve spiegazione:** ① Importare le librerie microbit, oled_ssd1306, music e time. ```Python from microbit import * from oled_ssd1306 import * import music import time ``` ② Inizializzare i pixel dell'OLED, pulire l'OLED. ```Python initialize() clear_oled() ``` ③ Inizializzare i pin del sensore di polveri PM2.5. ```Python led_Pin = pin1 out_Pin = pin2 ``` ④ Collegare il modulo di atomizzazione al pin P16 e impostarlo inizialmente spento. ```Python pin16.write_digital(1) ``` ⑤ Impostare il valore iniziale della variabile temporale. ```Python delayTime = 280 delayTime2 = 40 offTime = 9680 ``` ⑥ Definire una sottofunzione per il ritardo in microsecondi. ```Python def microsecond_delay(us): """Precise microsecond delay""" start = time.ticks_us() while time.ticks_diff(time.ticks_us(), start) < us: pass ``` ⑦ Impostare il controllo del timing di misura del sensore di polveri PM2.5, utilizzato principalmente per rilevare la concentrazione di polvere nell'aria. ```Python led_Pin.write_digital(0) # LED SPENTO microsecond_delay(delayTime) # 280μs dustVal = out_Pin.read_analog() # Legge il sensore microsecond_delay(delayTime2) # 40μs led_Pin.write_digital(1) # LED ACCESO microsecond_delay(offTime) # 9680μs ``` ⑧ Istruzione di giudizio: if()...else... Quando il valore analogico delle particelle PM2.5 supera 36.455, è possibile calcolarne il valore di concentrazione e visualizzarlo sull'OLED. Altrimenti, il monitor seriale stampa i corrispondenti valori analogici della polvere. ```Python if dustVal > 36.455: # The exact same calculation formula voltage = dustVal / 1024.0 pm25 = (voltage - 0.0356) * 120000 * 0.035 # OLED mostra informazioni dettagliate add_text(0, 0, "PM2.5 dust: ") # Visualizza il valore di PM2.5 nella posizione corrispondente dell'OLED add_text(0, 2, str(round(pm25)) + " ug/m3") # Visualizza il valore di PM2.5 nella posizione corrispondente dell'OLED else: print("Low value:", dustVal) display.show(Image.NO) ``` ⑨ Istruzione di giudizio: if()...else... Quando la concentrazione rilevata delle particelle PM2.5 supera 500 ug/m³, la matrice LED 5×5 mostra ![Img](./media/ab2.png), e lo speaker emette un allarme. Dopo 1 secondo, il modulo di atomizzazione spruzza una nebbia d'acqua. Altrimenti, la matrice 5×5 mostra ![Img](./media/ab3.png), lo speaker non emette allarmi e il modulo di atomizzazione non funziona. ```Python if pm25 > 500 : # Valore PM2.5 > 500 display.show(Image.SAD) # La matrice LED mostra un pattern triste music.play("E5:4") # lo speaker riproduce la nota E5 sleep(1000) pin16.write_digital(0) # imposta il pin P16 a livello basso sleep(200) pin16.write_digital(1) # imposta il pin P16 a livello alto sleep(3000) pin16.write_digital(0) # imposta il pin P16 a livello basso sleep(200) pin16.write_digital(1) # imposta il pin P16 a livello alto sleep(1000) else: # altrimenti display.show(Image.HAPPY) # La matrice LED mostra un pattern felice music.reset() # nessun suono pin16.write_digital(1) # imposta il pin P16 a livello alto ``` #### 4.3.8.7 Risultato del test ![Img](./media/4top.png) Dopo aver cablato e alimentato tramite il cavo micro USB, collegare l'alimentazione esterna (6 batterie AA) per garantire un'alimentazione sufficiente, e cliccare “Flash” per scaricare il codice sulla scheda micro:bit. ![Img](./media/A130.png) Dopo aver caricato il codice di prova, premere il pulsante di reset sul retro del micro:bit. ![Img](./media/A455.png) Spazzare il pavimento all'interno / accendere fiammiferi leggeri / bruciare una piccola quantità di carta in modo sicuro per produrre evidenti particelle PM2.5; queste verranno rilevate dal sensore PM2.5 e la loro concentrazione verrà mostrata in tempo reale sull'OLED. Quando la concentrazione rilevata di particelle PM2.5 supera 500 ug/m³, la matrice LED 5×5 mostra ![Img](./media/ab2.png), e lo speaker emette un allarme. Dopo 1 secondo, il modulo di atomizzazione spruzza nebbia d'acqua. Altrimenti, la matrice 5×5 mostra ![Img](./media/ab3.png), lo speaker non emette allarmi e il modulo di atomizzazione non funziona. | Valori rilevati su OLED | Qualità dell'aria | | :---------------------: | :---------------: | | 0-75 | Eccellente | | 75-150 | Buona | | 150-300 | Discreta | | 300-1050 | Normale | | 1050-3000 | Scadente | | 3000 + | Molto scadente | ![Img](./media/dongtu-8.gif) ⚠️ **Nota: i mattoncini (building blocks) utilizzati nell'esperimento non sono inclusi in questo kit.** (**Suggerimento:** Se non si osserva alcun risultato, premere il pulsante di reset della scheda micro:bit.) ![Img](./media/4bottom.png)