4.3.8 Detección de polvo PM2.5

4.3.8.1 Descripción general

Img

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.

Img

4.3.8.2 Conocimientos sobre los componentes

Img

Sensor de polvo PM2.5

Img

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℃

Img

4.3.8.3 Componentes requeridos

Img

Img

Img

placa principal micro:bit V2 ×1

shield para micro:bit ×1

módulo de atomización ×1

Img

Img

Img

sensor de polvo PM2.5 ×1

OLED display ×1

Baterías AA(suministradas por el usuario) ×6

Img

Img

Img

porta baterías ×1

cable de 4 pines ×2

cable de 3 pines ×1

Img

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

Img

4.3.8.5 Flujo del código

Img

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

Img

⚠️ Consejo 2: El umbral 500 en la condición if() se puede modificar según la situación real.

Código 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
'''
# 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

Img

Breve explicación:

① Importar las librerías microbit, oled_ssd1306, music y time.

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

② Inicializar los píxeles de la OLED, limpiar la OLED.

initialize()
clear_oled()

③ Inicializar los pines del sensor de polvo PM2.5.

led_Pin = pin1
out_Pin = pin2

④ Conectar el módulo de atomización al pin P16 y configurarlo inicialmente apagado.

pin16.write_digital(1)

⑤ Establecer el valor inicial de la variable de tiempo.

delayTime = 280
delayTime2 = 40
offTime = 9680

⑥ Definir una sub-función de retardo en microsegundos.

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.

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.

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 Img, 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 Img, el altavoz no emite alarma y el módulo de atomización no funciona.

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

Img

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.

Img

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

Img

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

Img

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

Img