PIR検知器HC-SR501をArduinoで動かします。
目次:
今回の目的
ELEGOOのチュートリアル「HC-SR501 PIR検知器」をチュートリアル通りに動かします。
※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。
HC-SR501 PIR検知器
PIR(Pyroelectric Infrared Ray:焦電型赤外線)センサです。
温度変化による誘電体の表面電荷が変化する現象「焦電効果」。センサ内の強誘電体(「焦電体」)に人体等からの赤外線を受け、流れる微弱な電流を検知するシステムです。
人を検知する自動照明、警報器、防犯カメラ等に使われるため「人感センサ」とも呼ばれております。
白いドーム型のフレネルレンズは着脱可能です。指でつまんで垂直に引き上げれば外れますし、押し込めばはまります(図1(1)(2))。
裏面に外部端子が3本出ておりますが、VCC、OUT、GNDのシルク表記は表面のレンズに隠れておりますので、確認する場合はレンズを外します。
裏面に実装されている16ピンIC、刻印は「BISS0001」、PIRコントローラICです。ネット検索でデータシートも見つかります。
「HC-SR501」でネット検索すると回路図情報も見つかりました。ただし、いくつものブランド(微妙に基板や実装部品が異なる)の商品が出てきますので、手元のHC-SR501と本当に対応しているのかは要注意でしょう(大体同じと思いますが)。
レンズ正面110°の範囲内で距離3~7メートルを検知できるとのこと。
器材接続
HC-SR501のVCC、OUT、GNDを、Arduinoの5V、D7、GNDに接続します。
スケッチ書き込み後はパソコンにつなぐ必要ないため、動作中のUSBはバッテリーでもパソコンでもどちらでも問題ありません。
スケッチ
オリジナルのものを少し簡略化して行数減らしました。
意外なほど短いスケッチです。Arduino側での処理はほとんど無さそうです。
int pir; // 変数「pir」を定義
void setup() {
pinMode(13, OUTPUT); // Arduino のLEDのアノードを出力に設定
pinMode(7, INPUT); // Arduino 7#ピンを入力に設定
digitalWrite(13, LOW); // Arduino のLEDのアノードをLOWに設定
}
void loop() { // 以下延々と繰り返す
pir=digitalRead(7); // 変数「pir」にArduino7#ピンのデジタル読み取り値(0,1)を代入
digitalWrite(13, pir); // 変数「pir」をLEDのアノードに入力(LOW,HIGH)
}
動作
通電後、初期化に1分間ほどかかるようです。頃合いを見て挙動を試します。
最初、センサがひっきりなしに誤動作しておりましたが、窓際から離すことで解決できました。赤外線センサですので日光に反応するのは当然でした。
PIRセンサの前方数メートルの位置に人が居たり居なかったりで、ArduinoのLED(シルク「L」)が点灯・消灯します。
HC-SR501の動作には「シングルトリガモード」、「リピータブルトリガモード」の2つあり、裏面のジャンパにより切り替えることができます(図4)。
1.シングルトリガモード:赤外線を検出→規定時間出力を継続(その間の検出は無効)→出力を停止、検出も規定時間停止する
人がセンサ前で動き続けていても一定時間毎にLEDが消灯、その数秒後にまた人の動きを検知して点灯するのがシングルトリガモードです。
2.リピータブルトリガモード:赤外線を検出→規定時間出力を継続(その間に検出あれば、出力継続を延々と延長)→出力を停止、検出も規定時間停止する
更衣室やトイレの自動照明のように、人(の動き)が無くなると消灯するシステムがリピータブルトリガモードに相当します。
所感
Arduinoでの制御はほとんどありませんでした。人感センサとしてLEDを点灯・消灯させるだけならArduinoなしで出来そうです。5V電源つないで、出力はバッファを介して所望のLEDに接続、といったところでしょうか。
工夫し甲斐のありそうなモジュールです。
0 件のコメント:
コメントを投稿