作成者:John LeDuc、最終更新日:2017年10月27日
はじめに
このページは、AdafruitのArduino互換MCU ボードGemma(品番1528-1297-ND)と、PIR(焦電型赤外線)モーションセンサを使用してアラームを作動させる方法について説明しています。
PIRセンサは、熱源と周囲との差を比較することによって、私たちの体または他のエネルギー源から放射される熱の変化を検知します。Panasonicブランドの製品は、アンプとASICが使用されており、シュミットトリガ効果に近い検出が可能で、あらゆるマイクロコントローラとのインターフェースが容易です。各PIRセンサにはプラスチック製のフレネルレンズがあり、様々なゾーンエリアを検知できます。
下図はPIRセンサの電源投入からのタイミングを示しており、センサが安定し検知できるようになるまで少し遅延があります(私のテストでは約15秒)。
回路動作: PIRセンサが熱の変化を検出すると、信号ピン(下記回路図のD0)の電圧が上昇し、MCUが入力電圧をポーリングしているときに、アラーム条件を満たせば、別のピン(D2)をオンにし、これによりオーディオアラームをオンにします(アラームはDCで動作し、独自のパルス回路を備えていることに注意してください)。ほぼ同時に、D1ピンが一連のパルス(Adafruit NEOPIXELのinclude libraryで設定)を出力し、16個のLEDを赤く点滅させます。これにより、大音量で、刺激的な明るい点滅赤色灯ができあがります-特別な目的のために誰かを怖がらせたり、アラームに最適です。Panasonic PIR Motion Sensors Datasheet Link
ハードウェア要件
このアラームプロジェクトでは、Digi-Keyの以下の品番の部品を使用しました。
- 255-3075-ND - PIRモーションセンサ
- 458-1526-ND - オーディオアラーム
- 1528-1093-ND- NEOPIXEL 16リング型
- 1528-1297-ND - Gemma - 小型ウェアラブルMCU
- MTP3055VLFS-ND - MOSFET
- L7805CV - 5V レギュレータ
- EG2350-ND - トグルスイッチ
- EJ501B-ND - パネルマウント 2.5mm内径パワージャック
- 1528-1101-ND - Perf board(配線基板)
- 102-3432-ND - 12Vウォールマウントアダプタ
- SRW032-WB-ND - 部品用のボックス/ハウジング
- 1N4001 - ダイオード 50V 1A
- 1.0KQBK-ND - 1kΩ アキシャルリード抵抗器
- 10KQBK-ND - 10 kΩアキシャルリード抵抗器
- 399-13742-1-ND - 0.33uF セラミックコンデンサ
- 399-9870-1-ND - 0.1uF セラミックコンデンサ
- 1528-1743-ND - フックアップワイヤキット
ソフトウェア要件
- Arduino IDE - このプロジェクトのコードを以下に示します。
ハードウェア設計
アプリケーション例
#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