### 4.3.8 Détection de poussière PM2.5
#### 4.3.8.1 Vue d'ensemble

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.

#### 4.3.8.2 Connaissances sur les composants

**Capteur de poussière PM2.5**

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℃

#### 4.3.8.3 Composants requis
| |||
| :--: | :--: | :--: |
| carte principale micro:bit V2 ×1 | carte d'extension micro:bit ×1 |module d'atomisation ×1|
||| |
|capteur de poussière PM2.5 ×1|afficheur OLED ×1 |piles AA(**préparées par vos soins**) ×6|
| |||
|porte-piles ×1|câble 4 broches ×2 |câble 3 broches ×1 |
| | | |
| 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 |

#### 4.3.8.5 Flux du code

#### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

⚠️ **Astuce 2 : Le seuil 500 dans la condition if() peut être modifié en fonction de la situation réelle.**
**Code complet :**
```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
'''
# 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
```

**Brève explication :**
① Importer les bibliothèques microbit, oled_ssd1306, music et time.
```Python
from microbit import *
from oled_ssd1306 import *
import music
import time
```
② Initialiser les pixels de l'OLED, effacer l'OLED.
```Python
initialize()
clear_oled()
```
③ Initialiser les broches du capteur de poussière PM2.5.
```Python
led_Pin = pin1
out_Pin = pin2
```
④ Connecter le module d'atomisation à la broche P16, et le mettre hors tension initialement.
```Python
pin16.write_digital(1)
```
⑤ Définir la valeur initiale des variables temporelles.
```Python
delayTime = 280
delayTime2 = 40
offTime = 9680
```
⑥ Définir une sous-fonction de délai en microsecondes.
```Python
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.
```Python
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.
```Python
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 , 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 , le haut-parleur ne sonne pas, et le module d'atomisation ne fonctionne pas.
```Python
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

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.

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

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

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