====== 防犯アラーム(振動検知) ======
===== 概要 =====
一戸建て住宅の空き巣の侵入経路で一番多いのは、窓からの侵入だそうです。
そこで、窓からの侵入の防犯対策として、ドアや窓の振動を感知して警報機(ブザー、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の信号(矩形波)を発生させ、圧電スピーカを駆動することにより、ブザー音を発生させます。
===== 回路図 =====
{{:imgpaste:202004:htmikan-20200429-112320.png}}
===== ソースコード =====
//**********************************************************************
/*
「防犯アラーム(振動検知)」
*/
//**********************************************************************
#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; // A/D変換を使用する。
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のコイン電池を使用し、蛇の目基板に実装すれば、かなりコンパクトな防犯アラームができそうです。
{{:imgpaste:202004:htmikan-20200429-112432.png?500}}
左側から、KXM52、PIC12F683、LEDです。
{{:imgpaste:202004:htmikan-20200429-112452.png?500}}
左側から、LED、PIC12F683、圧電スピーカです。
{{:imgpaste:202004:htmikan-20200429-112510.png?500}}
部品を蛇の目基板に配置してみました。10円玉は比較用です。
かなりコンパクトに実装できそうです。
{{:imgpaste:202004:htmikan-20200429-112539.png?500}}
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]