防犯アラーム(振動検知)

概要

一戸建て住宅の空き巣の侵入経路で一番多いのは、窓からの侵入だそうです。 そこで、窓からの侵入の防犯対策として、ドアや窓の振動を感知して警報機(ブザー、LED等)が作動する装置 を製作しました。

<仕様>

3方向(XYZ)の振動を検出可能とします。

振動の検出感度は、2段階(高低)に切り替え可能とします。

警報は、光(LED)と音(ブザー)で知らせます。

電池2本で動作可能とします。

動作原理

3方向(XYZ)の揺れの検出には、加速度センサー(KXM52)を使用します。 加速度センサーの詳細については、XYZ加速度(ガル)表示ユニットをご覧下さい。

<警報レベル> 無振動時のセンサー出力電圧に対して、振動時のセンサー出力電圧が、ある一定の値を超えた場合に、警報 レベルに達したものとします。

<感度切り替え> 警報レベルの2段階(高感度、低感度)切り替えは、無振動時電圧と振動時電圧の差分の大小で行います。 PICのA/D変換は、10ビットなので出力値として、0~1023の値を得ることが出来ます。 そこで無振動時電圧(V1)と振動時電圧(V2)より、次式で感度を切り替えます。 高感度=(V2-V1)>10 低感度=(V2-V1)>100

感度切り替えは、起動時のスイッチ(SW1)状態を判断することにより行います。 高感度モード=SW1がオン(Vss接地) 低感度モード=SW1がオフ(Vdd接地)

<ブザー音> PIC内臓のCCPモジュールをPWMモードで使用し、1kHzの信号(矩形波)を発生させ、圧電スピーカを駆動 することにより、ブザー音を発生させます。

回路図

ソースコード

//********************************************************************** /* 「防犯アラーム（振動検知）」 */ //********************************************************************** #define LED GPIO.F5 #define SW GPIO.F3 //********************************************************************** void Pwm_Change_DutyEx(unsigned int duty_ratio) { CCPR1L = duty_ratio >> 2; CCP1CON.DC1B0 = duty_ratio & 0b00000001; CCP1CON.DC1B1 = (duty_ratio & 0b00000010) >> 1; } //********************************************************************** unsigned long measurement(unsigned short channel) { static unsigned int cnt; static unsigned long ad; // ad = 0; for (cnt = 0; cnt < 10; cnt++) { ad += Adc_Read(channel); } return (ad / 10); } //********************************************************************** double offset_x, offset_y, offset_z; void initKXM52() { LED = 1; // offset_z = (double)measurement(0); // offset_y = (double)measurement(1); // offset_x = (double)measurement(3); // LED = 0; } //********************************************************************** void alarm() { static short cnt; // for (cnt = 0; cnt < 10; cnt++) { LED = 1; Delay_ms(100); Pwm_Start(); LED = 0; Delay_ms(100); Pwm_Stop(); } } //********************************************************************** void main() { static double ad_z, ad_y, ad_x; static int limit; // OSCCON = 0b01110000; // クロックを8Mhzに設定する。 CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00011011; // Ａ／Ｄ変換を使用する。 TRISIO = 0b00011011; // Pwm_Init(1000); // 1kHz duty=50% Pwm_Change_DutyEx((PR2 * 4) / 2); Pwm_Stop(); //感度設定 limit = 100; if (SW == 0) { while (SW == 0) { LED = 1; Delay_ms(50); LED = 0; Delay_ms(50); } limit = 10; } // Delay_ms(1000); initKXM52(); // while (1) { ad_z = measurement(0); ad_y = measurement(1); ad_x = measurement(3); // if (labs(ad_z - offset_z) > limit) { alarm(); } if (labs(ad_y - offset_y) > limit) { alarm(); } if (labs(ad_x - offset_x) > limit) { alarm(); } // while (SW == 0) { initKXM52(); Delay_ms(50); } } } //**********************************************************************

動作確認

ブレッドボードで動作を確認しました。 圧電スピーカに小さい物を使用し、電池に3Vのコイン電池を使用し、蛇の目基板に実装すれば、かなりコンパク トな防犯アラームができそうです。 左側から、KXM52、PIC12F683、LEDです。 左側から、LED、PIC12F683、圧電スピーカです。 部品を蛇の目基板に配置してみました。10円玉は比較用です。 かなりコンパクトに実装できそうです。