PIRモーションセンサを用いたアラームプロジェクト

作成者:John LeDuc、最終更新日:2017年10月27日

image

はじめに

このページは、AdafruitのArduino互換MCU ボードGemma(品番1528-1297-ND)と、PIR(焦電型赤外線)モーションセンサを使用してアラームを作動させる方法について説明しています。

PIRセンサは、熱源と周囲との差を比較することによって、私たちの体または他のエネルギー源から放射される熱の変化を検知します。Panasonicブランドの製品は、アンプとASICが使用されており、シュミットトリガ効果に近い検出が可能で、あらゆるマイクロコントローラとのインターフェースが容易です。各PIRセンサにはプラスチック製のフレネルレンズがあり、様々なゾーンエリアを検知できます。

下図はPIRセンサの電源投入からのタイミングを示しており、センサが安定し検知できるようになるまで少し遅延があります(私のテストでは約15秒)。

image

回路動作: PIRセンサが熱の変化を検出すると、信号ピン(下記回路図のD0)の電圧が上昇し、MCUが入力電圧をポーリングしているときに、アラーム条件を満たせば、別のピン(D2)をオンにし、これによりオーディオアラームをオンにします(アラームはDCで動作し、独自のパルス回路を備えていることに注意してください)。ほぼ同時に、D1ピンが一連のパルス(Adafruit NEOPIXELのinclude libraryで設定)を出力し、16個のLEDを赤く点滅させます。これにより、大音量で、刺激的な明るい点滅赤色灯ができあがります-特別な目的のために誰かを怖がらせたり、アラームに最適です。Panasonic PIR Motion Sensors Datasheet Link

ハードウェア要件

このアラームプロジェクトでは、Digi-Keyの以下の品番の部品を使用しました。

image

ソフトウェア要件

  • Arduino IDE - このプロジェクトのコードを以下に示します。

ハードウェア設計

Schematic drawn in Scheme-it

アプリケーション例

#include < Adafruit_NeoPixel.h >
 
// Note 1 = pin one on Gemma
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, 1, NEO_GRB + NEO_KHZ800);
 
int Pin2 = 2;
int Pin0 = 0;
 
void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
 
  strip.setPixelColor(3, 0, 0, 127); // set color to blue
  strip.setBrightness(255); // setting brightness for Neopixel to high
 
  pinMode(Pin2, OUTPUT); // output for audio alarm
  pinMode(Pin0, INPUT); // for receiving the signal from the PIR sensor
}
  
void loop() {
 
  int z = 0;
 
  if (digitalRead(Pin0 == HIGH)) // if receives a logic one (high) then process next set of instructions
  {
    digitalWrite(Pin2, HIGH); // turn on alarm (...energize the MOSFET gate)
 
    for (int i = 0; i < 16; i++) // for turning on each Neopixel
 
    {
      strip.setPixelColor(i, 255, 0, 0); // set color to red
      strip.show();
      delay(100);
      z = 20000;
    }
 
    for (int i = 0; i < 16; i++) {
      strip.setPixelColor(i, 0, 0, 0); // turn off Neopixels
      strip.show();
    }
  }
  digitalWrite(Pin2, LOW); // turn off alarm (...turning off MOSFET)           
  delay(z); // long delay to wait for the crowd to pass
}

コメント

ご質問やご意見がございましたら、TechForumへお寄せください。 TechForum




オリジナル・ソース(English)