Arduinoの基礎 - PIRモーションセンサ

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要

ここでは、ArduinoでPIR(Passive Infrared)センサを使用する方法を記載する。

使用するセンサは、PIRモーションセンサ(JST)(Sparkfun ID : SEN-13285)である。
このセンサの動作電圧は5[V]〜12[V]まで可能で、ピン配置は、赤がパワー、白がグラウンド、黒がアラームである。

このセンサは、電源投入後、約2秒ほど周囲の状況のスナップショットを取得した後、
赤外線の動きによって何かの動作を検出した時、アラームピンをLowにセットする。

アラームピンはオープンコレクタなので、プルアップ抵抗が必要である。
Arduinoにはビルトインのプルアップ抵抗を持っており、ピンの設定時にINPUT_PULLUPを指定すれば、それを利用することができる。
具体的には、pinMode関数を使用して、PIRモーションセンサからの入力ピンはINPUT_PULLUPとしてプルアップする。

Arduino PIR 1.png



サンプルコード

以下の例では、PIRセンサで人の動きを検出して、モーションを検出した場合にLEDを点滅させている。

 const int PIN_PIR_SIG = 5;
 const int PIN_LED = 10;
 
 void setup()
 {
    pinMode( PIN_PIR_SIG, INPUT_PULLUP );
    pinMode( PIN_LED, OUTPUT );
 }
 
 void loop()
 {
    int i = digitalRead( PIN_PIR_SIG );
    if( i == LOW )
    {
       for( int j = 0; j < 5; j++ )
       {
          digitalWrite( PIN_LED, HIGH );
          delay( 50 );
          digitalWrite( PIN_LED, LOW );
          delay( 50 );
       }
    }
 }


また、以下の例では、LEDの点滅に加えて、ブザーを使用して音を再生する盗難防止警報システムである。

Arduino PIR 2.jpg
 const int PIN_PIR_SIG = 2
 const int PIN_LED = 7
 const int PIN_BUZZER = 3
 
 bool state = false;
 
 void setup()
 {
    pinMode(PIN_LED, OUTPUT);
    pinMode(PIN_PIR_SIG, INPUT_PULLUP);
    pinMode(PIN_BUZZER, OUTPUT);
 }
 
 void loop()
 {
    if(digitalRead(PIN_PIR_SIG) == LOW)
    {
       if(!state)
       {
          state = true;
       }
 
       digitalWrite(PIN_LED, millis() / 100 % 2);
       tone(PIN_BUZZER, millis() % 1000 + 200);
    }
    else
    {
       if(state)
       {
          digitalWrite(PIN_LED, LOW);
          noTone(PIN_BUZZER);
          state = false;
       }
    }
 
    delay(100);
 }