IOT:ラズベリーパイ パーティクルセンサー

どーもご無沙汰しております、Keita_Nakamori(´・ω・`)です。

先日、パーティクルセンサーが届きましたので、使ってみようと思います。

Particle Sensor Model PPD42NS

ヒーターで空気を温めて上昇気流を作り、光学式センサーを通過させることによって、粒子数をカウントするとのことです。なので、向きが大事です。

スペック

スペック的にPM2.5なんてのも取れそうです。

安定するまでに1分間必要と書いてあるので、スクリプトの中で”現在立ち上げ中です。”とか”カウントダウン”とかを入れてあげると良いと思います。

  • 検出可能な粒子サイズ: 1μm (minimum.)
  • 検出濃度範囲: 0~28,000 pcs/L (0~8,000pcs/0.01 CF=283mL)
  • 供給電圧: DC5V ±10% (CN1コネクタ:ピン1=GND , ピン3=+5V)
  • 作動温度範囲: 0~45°C
  • 作動湿度範囲: 相対湿度95% 以下 (結露なきこと)
  • 電力消費: 90mA
  • 周囲温度: -30~60°C
  • 安定するまでの立上時間:1分
  • 電源ONから安定に必要な時間:1分
  • 寸法: 59(W) × 45(H) × 22(D) [mm]
  • 出力方式:負論理、デジタル出力 ← ここは後で解説します。
  • Hi :  4.0V以上  Low :  0.7V以下

コネクタ

右から 黒 赤 黄 のケーブルがついた脱着可能なコネクタがついていました

しかし、これ、ブレッドボードに刺さるわけでも、ブレッドボード用のケーブルがささるわけでもないので、取っ払ってしまいました。

コネクタケーブルを引き抜くと、ちょうどラズパイのGPIOと同じサイズのピンが出てきますので黒 赤 黄の3本のメス型ケーブルに差し替えました。

説明書によると 右から

CN : S5B-EH(JST)
1 : COMMON(GND)
2 : OUTPUT(P2)
3 : INPUT(5VDC 90mA)
4 : OUTPUT(P1)
5 : INPUT(T1)・・・FOR THRESHOLD FOR [P2]

となっていますので、使用するのは、黒:GND 赤:5V 黄:出力P1 の3つになります。

ラズパイ側のGPIO

事前に必要な知識として、ラズパイGPIOピンの指定方法には2種類の表現があります。

1.BOARD番号で指定する場合

PythonではGPIO.setmode(GPIO.BOARD)と書きます。

ラズパイのボード(基盤)の配置順に番号が振られていて、たとえばpin=40とした場合はGPIO21のことを指します

2.BCM番号で指定する場合

こちらはGPIO.setmode(GPIO.BCM)と書きます。
GPIO21を指定したいときは、そのままpin=21と書きます。

こちらのほうがわかりやすいので私はこちらを使っています。どっちでもOKです。

出力データと処理の話

  • 出力はパルスで出力されます。
  • 低パルスの状態が30秒間に占める割合(LPO:Low Plulse Occupancy time)を粒子数として換算するようです。

「1μm以上の粒子が283mLの中に何個入っているか」と「低パルス占有率」の関係を測定したサンプルデータです。(メーカーHPより)

 

スクリプト

では、センサーから出力されたLowパルスの占有率を算出しましょう。

まずは、うまく行かなかった例です。

改良

動かないので、改良ついでにクラス化してみました。

なおかつ30秒ごとに出力される粒子濃度のデータをconsentration.txtに随時書き出すようにしました。

 

出力:consentration.txt

中身は下記のような感じです。

データ処理

データを処理するためにpandasで読み込んで、整えましょう。

文字パターン抽出 ” .str.extract() ” で文字列を 年月日 時間 濃度 に切り分けます。

すると、こんな感じで切れました

ymd hms ms consentration
0 2019-05-30 19:16:40.318976 0.07213182909293626
1 2019-05-30 19:17:10.434010 0.0951778309901365
2 2019-05-30 19:17:40.536987 0.07830632987722516
3 2019-05-30 19:18:10.660109 0.05319190541036891
4 2019-05-30 19:18:40.774304 0.030014825256954498
5 2019-05-30 19:19:10.876265 0.01660005851583172
6 2019-05-30 19:19:40.980323 0.019892370764988204

可視化

ざっくりとグラフを書いてみます。

なんじゃこりゃ(*´﹃`*)

でもとりあえず、なんかおかしいことは分かりました。なんで階段状なんだろう。

 

もっと研究が必要ですね。