### 4.3.8 Detección de polvo PM2.5
#### 4.3.8.1 Descripción general

En la detección de polvo PM2.5 se utiliza un medidor láser de polvo para medir la concentración de PM2.5 en el aire. Puede monitorizar continuamente la concentración de polvo mientras recoge materia particulada y analiza sus componentes. La materia particulada con un diámetro aerodinámico inferior a 2.5 micrómetros es lo que denominamos PM2.5. Si su tamaño de partícula se reduce, la tasa de absorción del sistema respiratorio aumentará.
En este proyecto construiremos un sistema de detección de polvo PM2.5 con una placa micro:bit, un sensor de polvo PM2.5, una pantalla OLED, un módulo de atomización y el altavoz integrado. El sensor de polvo PM2.5 detecta las partículas PM2.5 en el aire, y la OLED muestra el valor detectado de PM2.5 en tiempo real. Cuando el valor alcanza un umbral, el altavoz emite alarma y el módulo de atomización pulveriza niebla de agua para reducir el polvo.

#### 4.3.8.2 Conocimientos sobre los componentes

**Sensor de polvo PM2.5**

El sensor de polvo PM2.5 incorpora un chip GP2Y1014AU0F para detectar eficazmente partículas extremadamente finas con un diámetro superior a 0.8μm, como el humo de cigarrillo. También está equipado con un LED infrarrojo y un fototransistor dispuestos en diagonal para detectar la luz reflejada por el polvo en el aire. Presenta un consumo de energía ultra bajo (máximo 20mA, típico 11mA), y su salida de voltaje analógico varía linealmente con la densidad de polvo, por lo que se aplica ampliamente en purificadores de aire, monitores de aire de aire acondicionado, detectores PM2.5, etc.
⚠️ **Nota: El sensor de polvo PM2.5 con chip GP2Y1014AU0F requiere al menos de 30 segundos a 2 minutos de precalentamiento tras encenderse para obtener lecturas relativamente precisas.**
**Parámetros:**
- Tensión de alimentación: DC 5 ~ 7V
- Corriente de funcionamiento: 20mA (Máx)
- Valor mínimo de detección de partículas: 0.8μm
- Sensibilidad: 0.5V/(0.1mg/m³)
- Voltaje en aire limpio: 0.9V (típico)
- Temperatura de funcionamiento: -10℃~65℃

#### 4.3.8.3 Componentes requeridos
| |||
| :--: | :--: | :--: |
| placa principal micro:bit V2 ×1 | shield para micro:bit ×1 |módulo de atomización ×1|
||| |
|sensor de polvo PM2.5 ×1|OLED display ×1 |Baterías AA(**suministradas por el usuario**) ×6|
| |||
|porta baterías ×1|cable de 4 pines ×2 |cable de 3 pines ×1 |
| | | |
| cable micro USB ×1 | | |
#### 4.3.8.4 Diagrama de cableado
⚠️ **Al cablear, por favor preste atención al color de los cables.**
| 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 Flujo del código

#### 4.3.8.6 Código de prueba
⚠️ **Consejo 1: Antes de descargar el código a la placa micro:bit, por favor importe el archivo de biblioteca “oled_ssd1306\.py” refiriéndose a ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

⚠️ **Consejo 2: El umbral 500 en la condición if() se puede modificar según la situación real.**
**Código 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
'''
# importar librerías relacionadas
from microbit import *
from oled_ssd1306 import *
import music
import time
# inicializar y limpiar oled
initialize()
clear_oled()
# Configuración de pines
led_Pin = pin1
out_Pin = pin2
pin16.write_digital(1) # establecer P16 en nivel alto
# Parámetros de tiempo
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:
# Secuencia de medición
led_Pin.write_digital(0) # LED APAGADO
microsecond_delay(delayTime) # 280μs
dustVal = out_Pin.read_analog() # Leer el sensor
microsecond_delay(delayTime2) # 40μs
led_Pin.write_digital(1) # LED ENCENDIDO
microsecond_delay(offTime) # 9680μs
# Cálculo y visualización
if dustVal > 36.455:
# Misma fórmula de cálculo
voltage = dustVal / 1024.0
pm25 = (voltage - 0.0356) * 120000 * 0.035
# OLED muestra información detallada
add_text(0, 0, "PM2.5 dust: ") # Muestra el valor de PM2.5 en la posición correspondiente del OLED
add_text(0, 2, str(round(pm25)) + " ug/m3") # Muestra el valor de PM2.5 en la posición correspondiente del OLED
# Indicación de calidad
if pm25 > 500 : # valor de PM2.5 > 500
display.show(Image.SAD) # La matriz LED muestra un patrón triste
music.play("E5:4") # el altavoz reproduce el tono E5
sleep(1000)
pin16.write_digital(0) # establecer P16 en nivel bajo
sleep(200)
pin16.write_digital(1) # establecer P16 en nivel alto
sleep(3000)
pin16.write_digital(0) # establecer P16 en nivel bajo
sleep(200)
pin16.write_digital(1) # establecer P16 en nivel alto
sleep(1000)
else: # de lo contrario
display.show(Image.HAPPY) # La matriz LED muestra un patrón feliz
music.reset() # sin tono
pin16.write_digital(1) # establecer P16 en nivel alto
else:
print("Low value:", dustVal)
display.show(Image.NO)
# espera 0.2s
sleep(200)
clear_oled() # limpiar OLED
```

**Breve explicación:**
① Importar las librerías microbit, oled_ssd1306, music y time.
```Python
from microbit import *
from oled_ssd1306 import *
import music
import time
```
② Inicializar los píxeles de la OLED, limpiar la OLED.
```Python
initialize()
clear_oled()
```
③ Inicializar los pines del sensor de polvo PM2.5.
```Python
led_Pin = pin1
out_Pin = pin2
```
④ Conectar el módulo de atomización al pin P16 y configurarlo inicialmente apagado.
```Python
pin16.write_digital(1)
```
⑤ Establecer el valor inicial de la variable de tiempo.
```Python
delayTime = 280
delayTime2 = 40
offTime = 9680
```
⑥ Definir una sub-función de retardo en microsegundos.
```Python
def microsecond_delay(us):
"""Precise microsecond delay"""
start = time.ticks_us()
while time.ticks_diff(time.ticks_us(), start) < us:
pass
```
⑦ Establecer el control del tiempo de medición del sensor de polvo PM2.5, que se utiliza principalmente para detectar la concentración de polvo en el aire.
```Python
led_Pin.write_digital(0) # LED APAGADO
microsecond_delay(delayTime) # 280μs
dustVal = out_Pin.read_analog() # Leer el sensor
microsecond_delay(delayTime2) # 40μs
led_Pin.write_digital(1) # LED ENCENDIDO
microsecond_delay(offTime) # 9680μs
```
⑧ Sentencia de decisión: if()...else...
Cuando el valor analógico de las partículas de polvo PM2.5 supera 36.455, su valor de concentración puede calcularse y mostrarse en la OLED.
De lo contrario, el monitor serie imprime los valores analógicos correspondientes del polvo.
```Python
if dustVal > 36.455:
# Misma fórmula de cálculo
voltage = dustVal / 1024.0
pm25 = (voltage - 0.0356) * 120000 * 0.035
# OLED muestra información detallada
add_text(0, 0, "PM2.5 dust: ") # Muestra el valor de PM2.5 en la posición correspondiente del OLED
add_text(0, 2, str(round(pm25)) + " ug/m3") # Muestra el valor de PM2.5 en la posición correspondiente del OLED
else:
print("Low value:", dustVal)
display.show(Image.NO)
```
⑨ Sentencia de decisión: if()...else...
Cuando la concentración detectada de partículas de polvo PM2.5 supera 500 ug/m³, la matriz LED 5×5 muestra , y el altavoz emite alarma. Tras 1 segundo, el módulo de atomización pulveriza niebla de agua.
De lo contrario, la matriz 5×5 muestra , el altavoz no emite alarma y el módulo de atomización no funciona.
```Python
if pm25 > 500 : # valor de PM2.5 > 500
display.show(Image.SAD) # La matriz LED muestra un patrón triste
music.play("E5:4") # el altavoz reproduce el tono E5
sleep(1000)
pin16.write_digital(0) # establecer P16 en nivel bajo
sleep(200)
pin16.write_digital(1) # establecer P16 en nivel alto
sleep(3000)
pin16.write_digital(0) # establecer P16 en nivel bajo
sleep(200)
pin16.write_digital(1) # establecer P16 en nivel alto
sleep(1000)
else: # de lo contrario
display.show(Image.HAPPY) # La matriz LED muestra un patrón feliz
music.reset() # sin tono
pin16.write_digital(1) # establecer P16 en nivel alto
```
#### 4.3.8.7 Resultado de la prueba

Después de cablear y encender mediante el cable micro USB, conecte la alimentación externa (6 pilas AA) para asegurar un suministro eléctrico suficiente, y haga clic “Flash” para descargar el código a la placa micro:bit.

Tras subir el código de prueba, presione el botón de reinicio en la parte trasera de la micro:bit.

Barra el suelo en interiores / encienda cerillas / queme una pequeña cantidad de papel de forma segura para producir partículas PM2.5 evidentes; serán detectadas por el sensor de polvo PM2.5 y su concentración se mostrará en la OLED en tiempo real.
Cuando la concentración detectada de partículas de polvo PM2.5 supera 500 ug/m³, la matriz LED 5×5 muestra , y el altavoz emite alarma. Tras 1 segundo, el módulo de atomización pulveriza niebla de agua. De lo contrario, la matriz 5×5 muestra , el altavoz no emite alarma y el módulo de atomización no funciona.
| Detected values on OLED | Calidad del aire |
| :---------------------: | :--------------: |
| 0-75 | Excelente |
| 75-150 | Muy buena |
| 150-300 | Buena |
| 300-1050 | Normal |
| 1050-3000 | Pobre |
| 3000 + | Muy pobre |

⚠️ **Nota: Los bloques de construcción utilizados en el experimento no están incluidos en este kit.**
(**Consejo:** Si no se observa ningún resultado, por favor presione el botón de reinicio de la placa micro:bit.)
