この記事は最終更新日から1年以上が経過しています。
@iot
投稿日 2020/10/2
更新日 2020/10/6 ✏
ラズパイゼロでPIRモーションセンサー
以前セットアップしたラズパイゼロにPIRモーションセンサー(赤外線人感センサー)を接続し、人の接近を感知する実験をしてみましたのでメモしておきます。
目次:
前提
- 機種:Raspberry Pi Zero WH(ラズパイゼロ)
- OS:Raspberry Pi OS(32-bit) Lite (旧 Raspbian Stretch Lite) (インストール方法)
- Node.js: v10.22.1 (ラズパイゼロ(armv6l)に対応したLTSの最新版) (インストール方法)
- ジャンパーワイヤー(メスーメス)
- センサー:PIRモーションセンサーモジュール 白いカバーを外すと「GND」(GROUND)、「OUT」(GPIO output)、「VCC」(電源)という文字がそれぞれシルク印刷されていることが分かります。
モーションセンサーをラズパイに物理的接続
モーションセンサーとラズパイゼロは以下のように接続しました:
- 赤線 → 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: モーションセンサーのテスト用調整
手元のパソコンとそれに接続されたラズパイで実験したい場合は、「時間調整」ボリュームと「感度調整」ボリュームを両方「最小」にしておくとよいでしょう。この調整なら、パソコンに接続されたラズパイのセンサーに手を近づけてやることで意図的に侵入感知(&即座に感知終了)をシミュレーションできます。
以上です。