4.3.8 Rilevamento polveri PM2.5

4.3.8.1 Panoramica

Img

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

4.3.8.2 Conoscenze dei componenti

Img

Sensore di polveri PM2.5

Img

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

4.3.8.3 Componenti richiesti

Img

Img

Img

micro:bit V2 scheda principale ×1

micro:bit shield ×1

modulo di atomizzazione ×1

Img

Img

Img

sensore polveri PM2.5 ×1

OLED display ×1

Batterie AA (autopreparate) ×6

Img

Img

Img

porta batterie ×1

cavo a 4 pin ×2

cavo a 3 pin ×1

Img

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

4.3.8.5 Flusso del codice

Img

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

Img

⚠️ Suggerimento 2: La soglia 500 nella condizione if() può essere modificata in base alla situazione reale.

Codice completo:

'''
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

Breve spiegazione:

① Importare le librerie microbit, oled_ssd1306, music e time.

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

② Inizializzare i pixel dell’OLED, pulire l’OLED.

initialize()
clear_oled()

③ Inizializzare i pin del sensore di polveri PM2.5.

led_Pin = pin1
out_Pin = pin2

④ Collegare il modulo di atomizzazione al pin P16 e impostarlo inizialmente spento.

pin16.write_digital(1)

⑤ Impostare il valore iniziale della variabile temporale.

delayTime = 280
delayTime2 = 40
offTime = 9680

⑥ Definire una sottofunzione per il ritardo in microsecondi.

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.

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.

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, 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, lo speaker non emette allarmi e il modulo di atomizzazione non funziona.

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

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

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

Img

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

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