### 4.3.8 Rilevamento polveri PM2.5
#### 4.3.8.1 Panoramica

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.

#### 4.3.8.2 Conoscenze dei componenti

**Sensore di polveri PM2.5**

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℃

#### 4.3.8.3 Componenti richiesti
| |||
| :--: | :--: | :--: |
| micro:bit V2 scheda principale ×1 | micro:bit shield ×1 |modulo di atomizzazione ×1|
||| |
|sensore polveri PM2.5 ×1|OLED display ×1 |Batterie AA (**autopreparate**) ×6|
| |||
|porta batterie ×1|cavo a 4 pin ×2 |cavo a 3 pin ×1 |
| | | |
| 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 |

#### 4.3.8.5 Flusso del codice

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

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

**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 , e lo speaker emette un allarme. Dopo 1 secondo, il modulo di atomizzazione spruzza una nebbia d'acqua.
Altrimenti, la matrice 5×5 mostra , 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

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.

Dopo aver caricato il codice di prova, premere il pulsante di reset sul retro del micro:bit.

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 , e lo speaker emette un allarme. Dopo 1 secondo, il modulo di atomizzazione spruzza nebbia d'acqua. Altrimenti, la matrice 5×5 mostra , 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 |

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