注:すべてのOSOYOO製品は、ARDUINOコンテンツと完全に互換性のある第三者ボードです。

コンテンツ

  1. はじめに
  2. 準備
  3. PIRモーションセンサーについて

はじめに

パッシブ赤外線センサー(PIRモーションセンサー)は、視野内の物体から放射される赤外線(IR)を測定する電子センサーです。PIRモーション・センサーは、PIRベースのモーション・ディテクターによく使用されます。そのため、環境中の赤外線の変化に基づいて動きを検出することができます。人間がセンサーの範囲内に入ったか、範囲外に出たかを検知するのに理想的です。このレッスンでは、PIRセンサーがどのように動作するのか、またボードを使ってどのように動きを検出するのかを学びます。

 

準備

ハードウェア

ソフトウェア

PIRモーションセンサーについて

概要

PIRモーションセンサーは動きを感知するセンサーで、ほとんどの場合、人間がセンサーの範囲に入ったか入らないかを検知するために使用されます。PIRモーションセンサーは、小型で安価、低消費電力で使いやすく、消耗もしません。そのため、家庭や企業で使用される電化製品やガジェットによく見られる。彼らはしばしばPIR、 “パッシブ赤外線”、 “焦電”、または “IRモーション “センサーと呼ばれています。

このモーションセンサーを使用して、防犯アラームシステム、ホームオートメーションシステム、または人が部屋に入るのを防ぐシンプルなガジェットを構築します!

仕様

PIRは基本的に焦電センサー(上の写真にある、中央に長方形の結晶がついた丸い金属製の缶)でできており、赤外線のレベルを検出することができる。すべてのものは低レベルの放射線を放出し、何かが高温であればあるほど、より多くの放射線を放出する。モーション・ディテクターのセンサーは、実際には2つに分かれている。平均的な赤外線レベルではなく、動き(変化)を検知するためだ。2つの半分が互いに打ち消し合うように配線されている。片方の赤外線放射量がもう片方より多かったり少なかったりすると、出力は高くなったり低くなったりする。

このセンサーは次に多面レンズ(フレネルレンズ)の後ろに配置され、世界の視界を、視認性の高い小さな円錐と視認性の低い介在領域に「切り刻む」ことで、有用な視野角/検知角を劇的に広げる。

パイロットの検知角度図:

パイロエレクトリック・センサには、補助回路、抵抗、コンデンサが付属している。ほとんどの小型ホビー用センサーはBISS0001(「マイクロパワーPIRモーションディテクターIC」)を使用しているようだが、これは間違いなく非常に安価なチップである。このチップはセンサーの出力を取り込み、アナログセンサーからデジタル出力パルスを発するためにちょっとした処理を行う。

私たちのPIRモーションセンサーはこんな感じだった:

ピンまたは制御 機能
Delay Time Adjust 動体検知後、出力がハイのままである時間を設定する。5秒から5分まで。
Sensitivity Adjust 検出範囲を設定します。
Ground pin グランド入力
Digital Output Pin 体検知なし時はLow。動きを検知するとHighになります。Highは3.3V
Power Pin DC4.5~20V電源入力

どのように動作しますか?

ここでは、PIRモーションセンサーを使用しています。PIRはPassive InfraRedの略です。このモーションセンサーは、フレネルレンズ、赤外線検出器、およびそれをサポートする検出回路で構成されています。センサーのレンズは、赤外線検出器に向かってその周りに存在するすべての赤外線放射を集束させる。私たちの体は赤外線熱を発生し、その結果、これはモーションセンサーによってピックアップされます。センサーは人の存在を検知すると、5Vの信号を1分間出力する。検知範囲は暫定的に約6~7mで、高感度である。

PIR人感センサーが人を検知すると、Arduinに5Vの信号を出力する。こうしてArduinの割り込みがトリガーされる。Arduinが侵入者を検知したときの動作を定義します。

感度調整

前述の通り、調整可能な範囲は約3〜7mです。 下図はこの調整を示しています。 図をクリックすると拡大します。

遅延時間調整

遅延時間の調整は、PIRセンサーモジュールの出力が動きを検知した後に高い状態を維持する時間を決定します。 範囲は約5秒から5分です。 下図はこの調整を示しています。

トリガーモード選択部

トリガーモード選択ジャンパーにより、シングルトリガーと繰り返しトリガーを選択することができます。 このジャンパ設定の影響は、タイムディレイがいつ始まるかを決定することです。

タイムディレイ完了後5秒オフ – 重要

このデバイスの出力は、タイムディレイが完了した後、約5秒間LOW(またはオフ)になります。 言い換えると、この3秒間の間、すべての動き検出はブロックされます。

PIRモーションセンサー制御LED

このプロジェクトでは、osyooベーシックボードとPIRモーションセンサーを使って、動きを検出できる簡単な回路を作ります。動きが検出されるとLEDが点灯します。

接続方法

以下のように回路を作ります:

PIRセンサーとマイコンの接続はとても簡単です。PIRはデジタル出力として動作するので、必要なのはピンがハイ(検出)またはロー(非検出)に反転するのを聞くだけです。

PIRに5Vを供給し、アースをグラウンドに接続する。次に出力をデジタルピンに接続します。この例では2番ピンを使います。

コードプログラム

上記の操作が完了したら、USBケーブルを使ってボードをコンピューターに接続します。緑色の電源LED(PWRと表示されている)が点灯するはずです。Arduino IDEを開き、プロジェクトに対応するボードタイプとポートタイプを選択します。次に、以下のスケッチをボードにロードします。

int ledPin = 13; // choose the pin for the LED int inputPin = 2; // choose the input pin (for PIR sensor) int pirState = LOW; // we start, assuming no motion detected int val = 0; // variable for reading the pin status void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inputPin, INPUT); // declare sensor as input Serial.begin(9600); } void loop(){ val = digitalRead(inputPin); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin, HIGH); // turn LED ON if (pirState == LOW) { // we have just turned on Serial.println("Motion detected!"); // We only want to print on the output change, not state pirState = HIGH; } } else { digitalWrite(ledPin, LOW); // turn LED OFF if (pirState == HIGH){ // we have just turned of Serial.println("Motion ended!"); // We only want to print on the output change, not state pirState = LOW; } } }

このコードは、ピン2への入力がHighかLowかを追跡しているだけです。また、ピンの状態も追跡し、モーションが開始されたときと停止したときにメッセージを出力します。

実行結果

アップロードが終わって数秒後、Arduinの13番ピンのLEDを見てください。また、シリアルモニターを開き、ボーレートを9600bpsに設定すると、以下のように表示されます:

PIRセンサーは数秒間動かないでいる必要があります。ピン13のLEDが消灯するまで動かないようにしてください!

また、各検出後にモーションセンサーに関連付けられている遅延があることに気づくでしょう。センサーによっては、この遅延を調整できる場合があります。

PIRモーションセンサー制御リレー

このレッスンの例として、センサーが物体を検出したときにリレーをオンにして高電圧を制御する回路を作ります。

接続

以下のような回路を作ります:

センサーの出力ピンはボードの2番ピンに接続され、物体が検出されると3番ピンがリレーモジュールを作動させ、高電圧ランプが点灯します。リレーモジュールの動作の詳細については、以下のスケッチを参照してください。

コードプログラム

上記の操作が完了したら、USBケーブルを使ってボードをコンピューターに接続します。Arduino IDEを開き、プロジェクトに対応するボードタイプとポートタイプを選択します。次に、以下のスケッチをボードにロードします。

int ledPin = 13; // choose the pin for the LED int relayInput = 3; // choose the pin for the relay int inputPin = 2; // choose the input pin (for PIR sensor) int pirState = LOW; // we start, assuming no motion detected int val = 0; // variable for reading the pin status void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inputPin, INPUT); // declare sensor as input pinMode(relayInput, OUTPUT); // declare relay as output digitalWrite(relayInput, HIGH);//assuming relay is off Serial.begin(9600); } void loop(){ val = digitalRead(inputPin); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin, HIGH); // turn LED ON if (pirState == LOW) { // we have just turned on Serial.println("Motion detected!"); // We only want to print on the output change, not state pirState = HIGH; digitalWrite(relayInput, LOW); // The Relay Input works Inversly Serial.println("Turn on the Lamp!"); Serial.println("Wait for 30 seconds"); delay(30000); // delay for 30 seconds digitalWrite(relayInput, HIGH);// Relay input operation is positive Serial.println("Turn off the Lamp!"); } } else { digitalWrite(ledPin, LOW); // turn LED OFF if (pirState == HIGH) { // we have just turned of Serial.println("Motion ended!"); // We only want to print on the output change, not state pirState = LOW; } } }

これがこの例のコードだ。非常にシンプルだ。PIRセンサーピンを入力、リレーピンを出力として定義するだけです。digitalRead()関数を使用してセンサーの出力を読み取り、その出力が高い場合、または物体が検出された場合、リレーをアクティブにします。リレー入力ピンは逆に動作するため、リレーモジュールを作動させるにはロジックLowを送信します。

実行結果

アップロードが終了して数秒後、以下のように表示されます:

センサーモジュールに電源を入れた後、正しく機能するためには約20~60秒間の「ウォームアップ」が必要であることに注意してください。センサーの前に手を置くと、リレーがランプを作動させます。ただし、手を動かし続けても、PIRセンサーが “non-repeatable trigger “モードであるため、調整された遅延時間が経過するとランプは消灯しますのでご注意ください。ジャンパーでセンサーを「繰り返しトリガー」モードに変更し、常に手を動かしていれば、ランプも常に点灯し、動きがなくなって設定された遅延時間が過ぎると消灯します。

この例では高電圧を使用しているため、十分な注意が必要であることに留意してください。