4.3.8 PM2.5 ダスト検出

4.3.8.1 概要

Img

PM2.5 ダスト検出では、レーザー式粉塵計を使用して空気中のPM2.5濃度を測定します。微粒子を捕集してその成分を分析しながら、粉塵濃度を連続的に監視できます。空気力学的直径が2.5マイクロメートル未満の粒子をPM2.5と呼びます。粒径が小さくなるほど、呼吸器系への取り込み率が高くなります。

このプロジェクトでは、micro:bit ボード、PM2.5ダストセンサ、OLEDディスプレイ、噴霧(atomization)モジュール、オンボードスピーカーを使ってPM2.5ダスト検出システムを構築します。PM2.5ダストセンサが空気中のPM2.5粒子を検出し、OLEDは検出されたPM2.5値をリアルタイムで表示します。値が閾値に達するとスピーカーがアラームを鳴らし、噴霧モジュールが水霧を噴射して粉塵を抑制します。

Img

4.3.8.2 コンポーネントの知識

Img

PM2.5 ダストセンサ

Img

このPM2.5ダストセンサはGP2Y1014AU0Fチップを搭載しており、タバコの煙のような直径0.8μm以上の極めて微細な粒子を効果的に検出できます。赤外LEDとフォトトランジスタが斜めに配置され、空気中の粉塵の反射光を検出します。超低消費電力(最大20mA、典型11mA)を特徴とし、アナログ電圧出力は粉塵密度と線形に変化するため、空気清浄機、空調の空気モニタ、PM2.5検出器などに広く応用されています。

⚠️ 注意: GP2Y1014AU0Fチップ搭載のPM2.5ダストセンサは、比較的正確な測定値を得るために電源投入後少なくとも30秒~2分の予熱時間が必要です。

仕様:

  • 電源電圧: DC 5 ~ 7V

  • 動作電流: 20mA(Max)

  • 最小検出粒子径: 0.8μm

  • 感度: 0.5V/(0.1mg/m³)

  • クリーンエア時電圧: 0.9V (typical)

  • 動作温度: -10℃~65℃

Img

4.3.8.3 必要部品

Img

Img

Img

micro:bit V2 メインボード ×1

micro:bit シールド ×1

噴霧モジュール ×1

Img

Img

Img

PM2.5 ダストセンサ ×1

OLEDディスプレイ ×1

AA電池(自分で用意) ×6

Img

Img

Img

電池ホルダー ×1

4ピンケーブル ×2

3ピンケーブル ×1

Img

micro USB ケーブル ×1

4.3.8.4 配線図

⚠️ 配線の際は、ワイヤーの色にご注意ください。

PM2.5 ダストセンサ

ワイヤー色

micro:bit シールド ピン

micro:bit ボード ピン

GND

G

G

VCC

V2

V

LED

1

P1

OUT

2

P2

OLED ディスプレイ

ワイヤー色

micro:bit シールド ピン

micro:bit ボード ピン

GND

G

G

VCC

V2

V

SDA

20

P20

SCL

19

P19

噴霧モジュール

ワイヤー色

micro:bit シールド ピン

micro:bit ボード ピン

G

G

G

V

V2

V

S

16

P16

Img

4.3.8.5 コードフロー

Img

4.3.8.6 テスト用コード

⚠️ ヒント1: micro:bit ボードにコードをダウンロードする前に、ライブラリファイル “oled_ssd1306.py” をインポートしてください。参照: Import Library on MU” .

Img

⚠️ ヒント2: if() 条件の閾値 500 は、実際の状況に応じて変更できます。

完全なコード:

'''
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
'''
# import related libraries
from microbit import *
from oled_ssd1306 import *
import music
import time

# initialize and clear oled
initialize()
clear_oled()

# Pin configuration
led_Pin = pin1
out_Pin = pin2

pin16.write_digital(1) # set P16 pin to high level

# Time parameter
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:
    # Measurement sequence
    led_Pin.write_digital(0)      # LED OFF
    microsecond_delay(delayTime)   # 280μs

    dustVal = out_Pin.read_analog()  # Read the sensor

    microsecond_delay(delayTime2)  # 40μs
    led_Pin.write_digital(1)      # LED ON
    microsecond_delay(offTime)     # 9680μs

    # Calculation and display
    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

        # Quality indication
        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
    else:
        print("Low value:", dustVal)
        display.show(Image.NO)

    # delay 0.2s
    sleep(200)
    clear_oled()   # clear OLED

Img

簡単な説明:

① microbit、oled_ssd1306、music、time のライブラリをインポートします。

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

② OLED を初期化し、クリアします。

initialize()
clear_oled()

③ PM2.5 ダストセンサのピンを初期化します。

led_Pin = pin1
out_Pin = pin2

④ 噴霧モジュールをピン P16 に接続し、初期状態をオフにします。

pin16.write_digital(1)

⑤ 時間変数の初期値を設定します。

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

⑦ PM2.5 ダストセンサの測定タイミング制御を設定します。これは主に空気中の粉塵濃度を検出するために使用します。

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

dustVal = out_Pin.read_analog()  # Read the sensor

microsecond_delay(delayTime2)  # 40μs
led_Pin.write_digital(1)      # LED ON
microsecond_delay(offTime)     # 9680μs

⑧ 判定文: if()…else…

PM2.5 のアナログ値が 36.455 を超えた場合、濃度値を計算して OLED に表示します。

それ以外の場合は、シリアルモニタに対応する粉塵アナログ値を出力します。

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)

⑨ 判定文: if()…else…

検出されたPM2.5粉塵の濃度が500 μg/m³を超えると、5×5 LEDマトリクスは Img を表示し、スピーカーがアラームを鳴らします。1秒後に噴霧モジュールが水霧を噴射します。

それ以外の場合は、5×5 LEDは Img を表示し、スピーカーは鳴らず、噴霧モジュールは動作しません。

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 テスト結果

Img

配線後に micro USB ケーブルで給電し、さらに十分な電源を確保するために外部電源(単3電池6本)を接続し、「Flash」をクリックしてコードを micro:bit ボードにダウンロードします。

Img

テストコードをアップロードしたら、micro:bit の背面にあるリセットボタンを押します。

Img

室内の床を掃く、ライターの火花をつける、安全に少量の紙を燃やすなどして明確なPM2.5粒子を発生させると、PM2.5ダストセンサがそれらを検出し、その濃度がOLEDにリアルタイムで表示されます。

検出されたPM2.5粉塵濃度が500 μg/m³を超えると、5×5 LEDマトリクスは Img を表示し、スピーカーがアラームを鳴らします。1秒後に噴霧モジュールが水霧を噴射します。そうでない場合は、5×5 LEDは Img を表示し、スピーカーは鳴らず、噴霧モジュールは作動しません。

OLED に表示される値

空気の状態

0-75

優良

75-150

良好

150-300

普通

300-1050

注意

1050-3000

悪い

3000 +

非常に悪い

Img

⚠️ 注意: 実験で使用されているビルディングブロックは本キットに含まれていません。

(Tip: 結果が観察できない場合は、micro:bit ボードのリセットボタンを押してください。)

Img