文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 防犯アラーム(振動検知) ====== ===== 概要 ===== 一戸建て住宅の空き巣の侵入経路で一番多いのは、窓からの侵入だそうです。 そこで、窓からの侵入の防犯対策として、ドアや窓の振動を感知して警報機(ブザー、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}} ===== ソースコード ===== <code c 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); } } } //********************************************************************** </code> ===== 動作確認 ===== ブレッドボードで動作を確認しました。 圧電スピーカに小さい物を使用し、電池に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}} <callout type="warning" title="著作権表示 copyright notice"> このページは稲崎様の閉鎖した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]] </callout> elechobby/picdic/pic12f683/24.txt 最終更新: 2025/10/17 14:29by 127.0.0.1