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

一戸建て住宅の空き巣の侵入経路で一番多いのは、窓からの侵入だそうです。
そこで、窓からの侵入の防犯対策として、ドアや窓の振動を感知して警報機(ブザー、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の信号(矩形波)を発生させ、圧電スピーカを駆動することにより、ブザー音を発生させます。

vibrationDetect.c
//********************************************************************** 
/*
  「防犯アラーム(振動検知)」 
*/
//********************************************************************** 
 
#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のコイン電池を使用し、蛇の目基板に実装すれば、かなりコンパクトな防犯アラームができそうです。

左側から、KXM52、PIC12F683、LEDです。

左側から、LED、PIC12F683、圧電スピーカです。

部品を蛇の目基板に配置してみました。10円玉は比較用です。
かなりコンパクトに実装できそうです。

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/pic12f683/24.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1