Grove ほこりセンサーを買ってみた

どうもこんにちは、
ROS2対応の自律走行ロボットを制作中ですが、自律走行だけでは面白くないので、ほこりセンサーをつけて環境モニター機能を搭載しようと思います。
早速、ほこりセンサーを買ってみました。
Groveほこりセンサー
購入したのは、Grove ほこりセンサー。

ほこりセンサー本体の基盤、ケーブル、簡単な説明の紙が入ってました。
以下に英語のページですが製品のWiKiがあります。
Grove – Dust Sensor(WiKi)
配線図
ほこりセンサーの簡単な計測処理を動かす
ラズパイ5でgpioを使うため、gpiozeroを入れます。
sudo apt install python3-gpiozero python3-lgpio
空気中のほこり(粒子)やPM2.5濃度を図るスクリプト(dust_sensor.py)を作ります。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from gpiozero import DigitalInputDevice
import time
# HIGH or LOWの時計測(gpiozero版)
def pulseIn(sensor, start=1, end=0):
if start == 0:
end = 1
# 指定状態になるまで待機
while sensor.value == end:
pass
t_start = time.time()
while sensor.value == start:
pass
t_end = time.time()
return t_end - t_start
# 単位をμg/m^3に変換
def pcs2ugm3(pcs):
pi = 3.14159
density = 1.65 * pow(10, 12)
r25 = 0.44 * pow(10, -6)
vol25 = (4 / 3) * pi * pow(r25, 3)
mass25 = density * vol25
K = 3531.5
return pcs * K * mass25
# pm2.5計測
def get_pm25(sensor):
t0 = time.time()
t = 0
ts = 30 # サンプリング時間(秒)
while True:
dt = pulseIn(sensor, 0)
if dt < 1:
t += dt
if (time.time() - t0) > ts:
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 = 26 # BCM番号
sensor = DigitalInputDevice(PIN, pull_up=False)
for i in range(10):
get_pm25(sensor)
スクリプトに実行権限を付与します
chmod +x dust_sensor.py
以下でスクリプト実行します
./dust_sensor.py
30秒間ほこりを計測します。結果を以下の様に出力してそれを10回繰り返します。

各単位の意味を調べました。
sec
30秒間の中で LOW 信号(=ホコリが通過して光が遮られた時間)の合計秒数。
つまり、この時間が長い ⇒ たくさんホコリが通っている ⇒ 濃度が高い。
%
この割合が高いほど、空気中に浮遊する粒子が多いことを示す
pcs/0.01cf
0.01 立方フィート(cf)あたりの粒子数(pieces)
(1立方フィート = 約28.3リットル)
この値が高いほど、空気中にたくさんの粒子(ほこり)がある。
µg/m³
これはPM2.5濃度の推定値(マイクログラム/立方メートル)。 日本の環境基準や WHO もこの単位を使っている。
| 空気の質レベル | PM2.5(µg/m³) |
|---|---|
| 緊急事態 | 251〜 |
| 大いに危険 | 151〜250 |
| 危険 | 66〜150 |
| 弱者に危険 | 41〜65 |
| 許容範囲内 | 16〜40 |
| 良好 | 0〜15 |
アメリカ環境保護庁EPAによる空気の質分類より
最後に
とりあえず、おためしで動かしましたが、注意点としてGroveほこりセンサーは、直立状態(銀色の部分が上向き)で使わないと正確なデータが取れないそうです。
次は、ちゃんと直立させるような箱を作って、ロボットに装着して使ってみようと思います。
また、取得できたデータは、PCに通知してグラフ化など、色々機能を拡張させていこうと思います。
それでは!


