【ラズベリーパイ3】ダストセンサーでPM2.5測定

この記事では、ラズベリーパイ3とPython、ホコリセンサー(Groveダストセンサー)でPM2.5をμg/m^3単位で測定する方法をソースコード付きで解説します。

Groveダストセンサー

Groveダストセンサーは、一定時間のLowパルスの占有時間により大気中の粒子状物質の濃度を測っています。
(占有時間と粒子状物質の濃度は比例関係)します。
直径1μmの粒子も検知できるので、PM2.5の計測もできます。

前回の記事では、ArduinoとこのセンサーでPM2.5を測定しました。
【Arduino】ダストセンサーでPM2.5測定(μg/m^3単位)

今回は、ラズベリーパイ3とGroveダストセンサーでPM2.5を測定してみました。

回路構成


赤:5V、黒:GND、黄:GPIO14

使用機器 個数
ラズベリーパイ3 1個
GROVE – ダストセンサ 1個
ブレッドボード 1個
温湿度・気圧センサモジュール 1個
ジャンパーワイヤ 数本

※使用したダストセンサ

【製造元の文献】http://wiki.seeed.cc/Grove-Dust_Sensor/

ソースコード(Python3)

サンプルプログラムのソースコードです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time

# HIGH or LOWの時計測
def pulseIn(PIN, start=1, end=0):
    if start==0: end = 1
    t_start = 0
    t_end = 0
    # ECHO_PINがHIGHである時間を計測
    while GPIO.input(PIN) == end:
        t_start = time.time()
        
    while GPIO.input(PIN) == start:
        t_end = time.time()
    return t_end - t_start

# 単位をμg/m^3に変換
def pcs2ugm3 (pcs):
  pi = 3.14159
  # 全粒子密度(1.65E12μg/ m3)
  density = 1.65 * pow (10, 12)
  # PM2.5粒子の半径(0.44μm)
  r25 = 0.44 * pow (10, -6)
  vol25 = (4/3) * pi * pow (r25, 3)
  mass25 = density * vol25 # μg
  K = 3531.5 # per m^3 
  # μg/m^3に変換して返す
  return pcs * K * mass25

# pm2.5計測
def get_pm25(PIN):
    t0 = time.time()
    t = 0
    ts = 30 # サンプリング時間
    while(1):
        # LOW状態の時間tを求める
        dt = pulseIn(PIN, 0)
        if dt<1: t = t + dt
        
        if ((time.time() - t0) > ts):
            # LOWの割合[0-100%]
            ratio = (100*t)/ts
            # ほこりの濃度を算出
            concent = 1.1 * pow(ratio,3) - 3.8 * pow(ratio,2) + 520 * ratio + 0.62
            print(t, "[sec]")
            print(ratio, " [%]")
            print(concent, " [pcs/0.01cf]")
            print(pcs2ugm3(concent), " [ug/m^3]")
            print("-------------------")
            break

PIN = 14
# ピン番号をGPIOで指定
GPIO.setmode(GPIO.BCM)
# TRIG_PINを出力, ECHO_PINを入力
GPIO.setup(PIN,GPIO.IN)
GPIO.setwarnings(False)

for i in range(10):
    get_pm25(PIN)

# ピン設定解除
GPIO.cleanup()

実行結果

サンプルプログラムの実行結果です。

関連記事
1 ラズベリーパイ3で電子工作入門
2 Python入門 サンプル集
関連記事