ラズパイゼロでPIRモーションセンサーの画像
芽萌丸IOT研究会 @iot
投稿日 2020/10/02
更新日 2020/10/06 ✏

Raspberry Pi

ラズパイゼロでPIRモーションセンサー

以前セットアップしたラズパイゼロにPIRモーションセンサー(赤外線人感センサー)を接続し、人の接近を感知する実験をしてみましたのでメモしておきます。

目次:

前提

モーションセンサーをラズパイに物理的接続

モーションセンサーとラズパイゼロは以下のように接続しました:

ラズパイゼロにモーションセンサーを接続する回路図

  • 赤線 → 5V (物理ピン番号2)
  • 黒線 → GROUND (物理ピン番号6)
  • 黄線 → GPIO12 (物理ピン番号32)

モーションセンサーで人を感知するサンプルコード

モーションセンサーからの情報を監視するNode.jsプログラムのサンプルです。 テキトーにプロジェクトを作成し、今回はpi.jsという名前でファイルを保存します。 ラズパイゼロにssh接続後、以下のようにNodeのプロジェクトを作成しました:

pi@raspberrypi:~ $ mkdir app && cd app
pi@raspberrypi:~/app $ npm init
## 'onoff' npmモジュールを利用します:
pi@raspberrypi:~/app $ npm install --save onoff
## コードを書きます:
pi@raspberrypi:~/app $ nano pi.js

pi.js

const { Gpio } = require('onoff');
// 以下の条件でモーションセンサーを監視します:
// - 第一引数: GPIO12
// - 第二引数: 'in' "入力"方向
// - 第三引数: 'both' = 'rising'(侵入感知) & 'falling'(退去感知) 両方検出
//    NOTE: 'rising'を指定すると「侵入感知のみ」認識するようになります。 
const pir = new Gpio(12, 'in', 'both');

pir.watch(function(err, val) {
  if (val === 1) {
    console.log(new Date().toLocaleString() + ': 侵入者を感知しました!');
  } else {
    console.log(new Date().toLocaleString() + ': 侵入者が去りました。');
  }
});

参考

実行してみます:

pi@raspberrypi:~/app $ node pi.js

## ここでセンサーに手を近づけると、
10/2/2020, 6:20:33 AM: 侵入者を感知しました!
10/2/2020, 6:20:34 AM: 侵入者が去りました。
## もう一度、
10/2/2020, 6:20:36 AM: 侵入者を感知しました!
10/2/2020, 6:20:37 AM: 侵入者が去りました。

正常に検知できました!🎉

モーションセンサーの調整

モーションセンサーの調整ボリューム

筆者が購入したモーションセンサーは、向かって左側の十字ボリュームが「時間調整」、右側が「感度調整」でした。 どちらも時計回りに回すと+(プラス)で、反時計回りに回すとー(マイナス)になります。

TIP: モーションセンサーのテスト用調整

手元のパソコンとそれに接続されたラズパイで実験したい場合は、「時間調整」ボリュームと「感度調整」ボリュームを両方「最小」にしておくとよいでしょう。この調整なら、パソコンに接続されたラズパイのセンサーに手を近づけてやることで意図的に侵入感知(&即座に感知終了)をシミュレーションできます。

以上です。


芽萌丸IOT研究会
芽萌丸IOT研究会 @iot
芽萌丸のIOT関連アカウント。ラズパイとか色々。記事は主に @TanakaSoftwareLab が担当。