4.3.8 Détection de poussière PM2.5

4.3.8.1 Vue d’ensemble

Img

Dans la détection de poussière PM2.5, un compteur de poussière laser est utilisé pour mesurer la concentration de PM2.5 dans l’air. Il peut surveiller en continu la concentration de poussière tout en collectant les particules et en analysant leurs composants. Les particules dont le diamètre aérodynamique est inférieur à 2,5 micromètres sont ce que nous appelons PM2.5. Si la taille des particules diminue, le taux d’absorption par le système respiratoire augmentera.

Dans ce projet, nous allons construire un système de détection de PM2.5 avec une carte micro:bit, un capteur de poussière PM2.5, un affichage OLED, un module d’atomisation et le haut-parleur embarqué. Le capteur de poussière PM2.5 détecte les particules PM2.5 dans l’air, et l’OLED affiche la valeur PM2.5 détectée en temps réel. Lorsque la valeur atteint un seuil, le haut-parleur déclenche une alarme, et le module d’atomisation pulvérise une brume d’eau pour réduire la poussière.

Img

4.3.8.2 Connaissances sur les composants

Img

Capteur de poussière PM2.5

Img

Le capteur de poussière PM2.5 est équipé d’une puce GP2Y1014AU0F pour détecter efficacement des particules extrêmement fines d’un diamètre supérieur à 0,8μm, comme la fumée de cigarette. Il est également équipé d’une LED infrarouge et d’un phototransistor disposés en diagonale pour détecter la lumière réfléchie par la poussière dans l’air. Il présente une très faible consommation d’énergie (maximum 20mA, typique 11mA), et sa sortie de tension analogique varie linéairement avec la densité de poussière, il est donc largement utilisé dans les purificateurs d’air, les moniteurs d’air conditionné, les détecteurs PM2.5, etc.

⚠️ Remarque : le capteur de poussière PM2.5 avec la puce GP2Y1014AU0F nécessite au moins 30 secondes à 2 minutes de préchauffage sous tension pour obtenir des lectures relativement précises.

Paramètres :

  • Tension d’alimentation : DC 5 ~ 7V

  • Courant de fonctionnement : 20mA(Max)

  • Valeur minimale de détection des particules : 0.8μm

  • Sensibilité : 0.5V/(0.1mg/m³)

  • Tension en air propre : 0.9V (typique)

  • Température de fonctionnement : -10℃~65℃

Img

4.3.8.3 Composants requis

Img

Img

Img

carte principale micro:bit V2 ×1

carte d’extension micro:bit ×1

module d’atomisation ×1

Img

Img

Img

capteur de poussière PM2.5 ×1

afficheur OLED ×1

piles AA(préparées par vos soins) ×6

Img

Img

Img

porte-piles ×1

câble 4 broches ×2

câble 3 broches ×1

Img

câble micro USB ×1

4.3.8.4 Schéma de câblage

⚠️ Lors du câblage, veuillez faire attention à la couleur des fils.

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 Flux du code

Img

4.3.8.6 Code de test

⚠️ Astuce 1 : Avant de télécharger le code sur la carte Microbit, veuillez importer le fichier de bibliothèque “oled_ssd1306.py” en vous référant à Import Library on MU” .

Img

⚠️ Astuce 2 : Le seuil 500 dans la condition if() peut être modifié en fonction de la situation réelle.

Code complet :

'''
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
'''
# importer les bibliothèques associées
from microbit import *
from oled_ssd1306 import *
import music
import time

# initialiser et effacer l'oled
initialize()
clear_oled()

# Configuration des broches
led_Pin = pin1
out_Pin = pin2

pin16.write_digital(1) # définir la broche P16 à l'état haut

# Paramètres de temps
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:
    # Séquence de mesure
    led_Pin.write_digital(0)      # LED ÉTEINTE
    microsecond_delay(delayTime)   # 280μs

    dustVal = out_Pin.read_analog()  # Lire le capteur

    microsecond_delay(delayTime2)  # 40μs
    led_Pin.write_digital(1)      # LED ALLUMÉE
    microsecond_delay(offTime)     # 9680μs

    # Calcul et affichage
    if dustVal > 36.455:
        # Formule de calcul exacte
        voltage = dustVal / 1024.0
        pm25 = (voltage - 0.0356) * 120000 * 0.035

        # OLED affiche les informations détaillées
        add_text(0, 0, "PM2.5 dust: ") # Afficher la valeur de PM2.5 à la position correspondante de l'OLED
        add_text(0, 2, str(round(pm25)) + " ug/m3") # Afficher la valeur de PM2.5 à la position correspondante de l'OLED

        # Indication de la qualité
        if pm25  > 500 :    # Valeur PM2.5 > 500
            display.show(Image.SAD) # la matrice LED affiche un motif triste
            music.play("E5:4")       # le haut-parleur joue la note E5
            sleep(1000)
            pin16.write_digital(0) # définir la broche P16 à l'état bas
            sleep(200)
            pin16.write_digital(1) # définir la broche P16 à l'état haut
            sleep(3000)
            pin16.write_digital(0) # définir la broche P16 à l'état bas
            sleep(200)
            pin16.write_digital(1) # définir la broche P16 à l'état haut
            sleep(1000)
        else: # ou
            display.show(Image.HAPPY) # la matrice LED affiche un motif heureux
            music.reset()             # aucun son
            pin16.write_digital(1) # définir la broche P16 à l'état haut
    else:
        print("Low value:", dustVal)
        display.show(Image.NO)

    # délai 0.2s
    sleep(200)
    clear_oled()   # effacer l'OLED

Img

Brève explication :

① Importer les bibliothèques microbit, oled_ssd1306, music et time.

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

② Initialiser les pixels de l’OLED, effacer l’OLED.

initialize()
clear_oled()

③ Initialiser les broches du capteur de poussière PM2.5.

led_Pin = pin1
out_Pin = pin2

④ Connecter le module d’atomisation à la broche P16, et le mettre hors tension initialement.

pin16.write_digital(1)

⑤ Définir la valeur initiale des variables temporelles.

delayTime = 280
delayTime2 = 40
offTime = 9680

⑥ Définir une sous-fonction de délai en microsecondes.

def microsecond_delay(us):
    """Precise microsecond delay"""
    start = time.ticks_us()
    while time.ticks_diff(time.ticks_us(), start) < us:
        pass

⑦ Définir le contrôle du timing de mesure du capteur de poussière PM2.5, utilisé principalement pour détecter la concentration de poussière dans l’air.

led_Pin.write_digital(0)      # LED ÉTEINTE
microsecond_delay(delayTime)   # 280μs

dustVal = out_Pin.read_analog()  # Lire le capteur

microsecond_delay(delayTime2)  # 40μs
led_Pin.write_digital(1)      # LED ALLUMÉE
microsecond_delay(offTime)     # 9680μs

⑧ Instruction de jugement : if()…else…

Lorsque la valeur analogique des particules de poussière PM2.5 dépasse 36.455, sa valeur de concentration peut être calculée et affichée sur l’OLED.

Sinon, le moniteur série affiche les valeurs analogiques de poussière correspondantes.

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)

⑨ Instruction de jugement : if()…else…

Lorsque la concentration détectée de particules de poussière PM2.5 dépasse 500ug/m³, la matrice 5×5 LED affiche Img, et le haut-parleur déclenche l’alarme. Après 1 seconde, le module d’atomisation pulvérise une brume d’eau.

Sinon, la matrice 5×5 LED affiche Img, le haut-parleur ne sonne pas, et le module d’atomisation ne fonctionne pas.

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 Résultat du test

Img

Après le câblage et l’alimentation via le câble micro USB, connectez une alimentation externe (6 piles AA) pour garantir une alimentation suffisante, puis cliquez sur “Flash” pour télécharger le code sur la carte micro:bit.

Img

Après avoir téléchargé le code de test, appuyez sur le bouton reset au dos de la micro:bit.

Img

Balayez le sol à l’intérieur / allumez des allumettes / brûlez une petite quantité de papier en toute sécurité pour produire des particules PM2.5 évidentes, elles seront détectées par le capteur de poussière PM2.5 et leur concentration sera affichée en temps réel sur l’OLED.

Lorsque la concentration détectée de particules de poussière PM2.5 dépasse 500ug/m³, la matrice 5×5 LED affiche Img, et le haut-parleur déclenche l’alarme. Après 1 seconde, le module d’atomisation pulvérise une brume d’eau. Sinon, la matrice 5×5 LED affiche Img, le haut-parleur ne sonne pas, et le module d’atomisation ne fonctionne pas.

Valeurs détectées sur l’OLED

Qualité de l’air

0-75

Excellent

75-150

Très bon

150-300

Bon

300-1050

Normal

1050-3000

Mauvais

3000 +

Très mauvais

Img

⚠️ Remarque : Les blocs de construction dans l’expérience ne sont pas inclus dans ce kit.

(Astuce : Si aucun résultat n’est observé, veuillez appuyer sur le bouton reset de la carte micro:bit.)

Img