電子工作74 – ポータブル振動アラームの製作

 

 

概要

   前の電子工作73で使ったどんな角度でも待機時に内部接点がOFF状態を保つ振動センサを用いて携帯式振動アラームを作成してみることにした。バックの中などに忍ばせてアラームの電源スイッチを入れて置いて外から揺らすなどの振動を与えるとブザーが鳴るという簡単なものです。

 

製作にあたって考えていたこと

1)     出来るだけコンパクトであること。

2)     振動センサ(スイッチ)の感度や省エネ性能を評価する。

2) PICマイコン(12F629)と割込みを使って省エネを図る。

3) プログラムは出来るだけ簡単にする。

 

材料

1)    振動(傾斜)スイッチ(センサ): SW-18010P  検出方向は全方向  反応時間は約0.1ms  静止時は導通なし 完全密閉式  aitendoにて¥100

2)    その他の材料: 12F629  ホトモスリレー 3Vリチウムコイン電池  23A12V電池  電子ブザー 基板  スイッチ類  電池ケース 合計約¥600

 

回路図

下に回路図を示す。 外部から振動が加わると振動スイッチ(センサ)が一瞬閉じて12F629のGP0に割込み信号が入る(GP0がHからLに落ちる)。 すると組込まれたプログラムでホトモスリレーの内部LEDを点灯し電子ブザー回路が導通して音を出す。ブザー音の鳴る時間はShortとLongをスイッチ(SW)で選択できる。リセットSWはブザー音を止めたり、システムを再スタートさせる時に使う。もう1個のブザーテストSWはブザー用電池が動作するかどうかをテストするために設置。 電源は3Vリチウムコイン電池(容量165mAhほど)。システム全体の待機時の消費電流は0.1microA以下と低いので、この電池で十分と考えられる。一方12Vの電子ブザーは最大で21mAほど電流を消費するので100 ohmの抵抗を入れて15mA位に下げた。12V電池の容量は60mAhほどなので60/15=4hrsとそんなには持たない。LED(Y)は電源投入時やリセットSWを押したとき1.5秒間ほど点滅して動作状態に入ったことを知らせてくれる。

 

完成したポータブル振動アラーム: キーパーツの振動SWはコイン電池(左)と12V電池(右)の間の上方部に挟まれた形で見える黒い筒状のもの。スイッチは合計4個で、下方左の細長いものはスライドSWである。8本ピンの12F629と6本ピンのホトモスリレーは中央下方部に見える。下方右の黒く丸いものはブザーである。

Size: W50xL70xH20 mm  (Photo 1)

 

振動スイッチ(センサ)の特性

 写真は振動スイッチでサイズは直径4.5mmX長さ15.0mmで、下から2本の線が出ていて振動を加えると一瞬この2線が導通する。通常は非導通。完全密閉式で耐水や耐埃性を持つ。

(Photo 2)

 

(Fig 1)

 

下図は上記のような回路を組んで振動スイッチに軽い衝撃を与えた時のオシロ出力である。何度も実験したところ、いろんな形の波形が出ることが判明、これはその一例。はっきり分かったことは静止状態に戻ると0Vになる、つまり導通が完全に切れるということです。この特性はある傾き範囲で導通/非導通を保持する通常の金属ボール/水銀式傾斜センサなどと一線を画するところ

(Fig 2)

 

結果&コメント

1)     軽い振動を加えるとブザーが鳴ること確認した。

2)     今回の製作は前の電子工作73で使った新しいタイプの振動センサ(スイッチ)の動作の再確認の意味もある。実際振動を加えると導通し静止状態に戻ると完全に導通が切れることがオシロを使った実験から判明した。振動センサの細いワイヤ端子は破損し易いので取扱い要注意。

3)     材料費の合計は¥1000ほど。

4)     使用するスイッチ類を基板に直接取り付けたためフタが付けられない。要改良。

5)     2種類の電池がどれぐらい持つか検討していきたい。

6)     後で分かったことだが、焼き込み時のconfigのBODENをEnableにしていたら待機時の電池の消耗が55microAと大きいことを発見、Disableにして燒き直したら0.1microA以下に下がった。勿論Watchdog TimerもDisableでないといけない。動作モードのLong でもShortでも消費電流に差はなかった。

 

プログラム

このプログラムでは、軽い衝撃で振動SWからの短い導通ON/OFF信号が割込みとして入ると、メインのプログラムに飛んでブザーを鳴らす信号をホトモスリレーを通じて送る。この際外部スイッチでブザーの鳴る長さShortとLong のいずれかを選択できるようにしてある。また、電源投入時やリセットSWを押して再スタートさせる時には、LED(Y)が1.5秒間だけ点滅するようにもしてある。動作が終了した後や割込みのない場合は12F629を超低電流消費のSleep状態になり、次の割込みを待つことになる。なお、プログラムを12F629に焼込む時configurationのWatchdog timer(WDTE) をDisableにする必要がある。そうしないと電源投入時やリセット時にブザーが鳴り始めて止まらないという誤動作を起こす。更にBrown-out Reset (BODEN)もDisableにする必要がある。そうしないと待機時に55microAほどの電流を消費する

'****************************************************************

'Name of program: PortableAlarmA                                    

'Using 12F629 and PicBasic Pro V2.50A

'2014/09/11                                      

'********Pin connection********

'Pin 1: Vdd (3V) coin battery

'Pin 8: Vss (GND)

'Pin 7: GPIO.0 - Vibration SW

'Pin 6: GPIO.1 - Photo relay

'Pin 2: GPIO.5 - LED(Y) SW -> ON indicator

'Pin 4: GPIO.3 - Reset

'Pin 3: GPIO.4 - Buzzer beep time select SW (Long or Short time)

'********Program************

VibrationSW var GPIO.0

PhotoRelay var GPIO.1

Bzbeeptime var GPIO.4

LEDY var GPIO.5

I var byte

K var Byte

Clear

 

TRISIO=%011001

LEDY=0  ‘これ以下の7行でLED(Y)を1.5秒間点滅させ、システムが動作状態に入ったことを知らせてくれる

For I=1 To 10

High LEDY

Pause 100  '100 ms

Low LEDY

Pause 50  '50 ms

NEXT

CMCON=7  'Comparator disabled

WPU=%000001 'Weak Pull-up for GPIO.0  ‘これ以下の9行が割込みのための設定。 この行のコマンドで12F629のGP0はVdd(3V)になる。

OPTION_REG.7=0  'Weak Pull-up enabled

IOC.0=1  'Detect input at GPIO.0

INTCON.3=1  'Enable port input-level change interrupt

SleepLoop:

PhotoRelay=0  '?

INTCON.0=0  'Clear GPIF

@Sleep  'Assembler command

INTCON.0=0  'Clear GPIF

'*******Routine to turn on PhotoMOS relay********

If Bzbeeptime=1 then ‘ここでブザーの鳴る長さを調べLongbeepやShortbeepに飛ぶ

Goto Longbeep

Else

Goto Shortbeep

Endif

 

Longbeep:  ‘ブザーを長時間鳴らすルーチン 合計126秒(実測値)

K=0

Kreturn:

K=K+1

IF K=20 then

Goto Kfinish

Else

Endif

I=0

For I=1 to 20

High PhotoRelay

Pause 200  '200 ms

Low PhotoRelay

Pause 50  '50 ms

Next

Pause 2000  '2 sec

Goto Kreturn

Kfinish:

Goto SleepLoop

 

Shortbeep:  ‘ブザーを短時間鳴らすルーチン 合計38秒(実測値)

K=0

Kreturn1:

K=K+1

IF K=7 then

Goto Kfinish1

Else

Endif

I=0

For I=1 to 20

High PhotoRelay

Pause 200  '200 ms

Low PhotoRelay

Pause 50  '50 ms

Next

Pause 2000  '2 sec

Goto Kreturn1

Kfinish1:

Goto SleepLoop

'*****End of Program******

'Note:

'melabs U2 Programmer's configurations for 12F629:

'Oscillator - INTOSC, WDTE - Disable, PWRTE - Disable, MCLR - Reset, BODEN - Disable, CD - Disable, CDP - Disable

' WDTE and BODEN must be set to Disable.

 

 

Portable Vibration Alarm (English version of the above Electronics Project 74 in Japanese)

  Using a unique shake switch that was used in Electronics Project 73 and closes its internal contact terminals for about 0.1ms or so and then keeps opening the contact terminals when no shake is given, I decided to build this portable vibration alarm. Its circuit is similar to that in Wireless Alarm Sensor Circuit of Electronics Project 73 except that a buzzer and its drive circuit are used in place of Transmitter, as well as the addition of a buzzer beeping time select SW, Reset SW and LED (Y) indicator. When a vibration is added to the shake switch, a level change signal is sent to GP0 of 12F629, which leads to the execution of the main buzzer-beeping routines in the built-in program. You can chose the length of buzzer beeping with the buzzer beeping time select SW (Short=38 seconds, Long=126 seconds). Of course, you can change the beeping time by changing the program.

A 3V lithium-ion button cell (its capacity: about 165 mAh) is considered to be sufficient enough because the power consumption of the 12F629 system in the state of waiting (sleep mode) drops to as low as less than 0.1 microA. The buzzer is powered with a 12V 23A type battery (about 60mAh) and consumes about 15mA in its beeping. This alarm can be inserted in your bag and set for use by turning on its power switch.

 

Completed Portable Vibration Alarm inserted in plastic case (size: W55XL75XH20)

 

Explanation of Photo 2 and Fig 1- 2 shown above in the section written in Japanese

Photo 2: Enlarged photograph of shake switch (size: diameter 4.5mm, length 15 mm), water and dust proof (purchased at aitendo in Akihabara, Tokyo, 100 Yen)

Fig 1: Shake switch testing circuit

Fig 2: Oscilloscope output when a slight vibration is added to the shake switch of Fig 1. The shape of output pulses varies significantly every time tested but no pulses appear when there is no vibration, staying at 0V or L level. This test has proven that this shake switch becomes conductive between its two lead wires only when a vibration is given and non-conductive when there is no vibration.

 

Comments and conclusions

1)       Giving a slight vibration to the alarm triggers its buzzer.

2)       A small button cell can maintain the operation of the system for many months due to its quite lower power consumption.

3)       What I wanted to achieve in this project are to understand the characteristics of the shake switch and how to lower the power consumption of 12F629 system using the interrupt function.

4)       Buzzer's sound level is approximately 90 dB at a point 10cm above the top of the buzzer.

5)       Total cost is about 1000 Yen.

 

 

Program

 The program is simple, that is, the input signal from the shake switch is used as an interrupt to wake up the system from its sleep state and then leads to the buzzer-beeping routines. There are two buzzer-beeping routines Short and Long, which can be selected by the external buzzer beeping time select SW. In the configuration selection, it is important for WDTE and BODEN to be set to Disable in order to prevent the erroneous operation (WDTE - never-ending beeping once started) and lower the power consumption of the system as low as possible (BODEN – power consumption significantly drops from 55microA to 0.1microA by changing Enable to Disable).

'****************************************************************

'Name of program: PortableAlarmA                                    

'Using 12F629 and PicBasic Pro V2.50A

'2014/09/11                                      

 

 '********Pin connection********

'Pin 1: Vdd (3V) coin battery

'Pin 8: Vss (GND)

'Pin 7: GPIO.0 - Vibration SW

'Pin 6: GPIO.1 - Photo relay

'Pin 2: GPIO.5 - LED (Y) SW -> ON indicator

'Pin 4: GPIO.3 - Reset

'Pin 3: GPIO.4 - Buzzer beep time select SW (Long or Short time)

'********Program************

VibrationSW var GPIO.0

PhotoRelay var GPIO.1

Bzbeeptime var GPIO.4

LEDY var GPIO.5

I var byte

K var Byte

Clear

 

TRISIO=%011001

LEDY=0   'The following 7 lines blink LED (Y) to inform the start of the system's operation.

For I=1 To 10

High LEDY

Pause 100  '100 ms

Low LEDY

Pause 50  '50 ms

NEXT

CMCON=7  'Comparator disabled

WPU=%000001 'Weak Pull-up for GPIO.0  'The following 9 lines are for the interrupt setting.

OPTION_REG.7=0  'Weak Pull-up enabled

IOC.0=1  'Detect input at GPIO.0

INTCON.3=1  'Enable port input-level change interrupt

SleepLoop:

PhotoRelay=0

INTCON.0=0  'Clear GPIF

@Sleep  'Assembler command  'Used for the system's sleep

INTCON.0=0  'Clear GPIF

'*******Routine to turn on PhotoMOS relay********

If Bzbeeptime=1 then  'The following 5 lines select the length of buzzer beeping time.

Goto Longbeep

Else

Goto Shortbeep

Endif

 

Longbeep:   'Long beeping time routine (about 126 seconds)

K=0

Kreturn:

K=K+1

IF K=20 then

Goto Kfinish

Else

Endif

I=0

For I=1 to 20

High PhotoRelay

Pause 200  '200 ms

Low PhotoRelay

Pause 50  '50 ms

Next

Pause 2000  '2 sec

Goto Kreturn

Kfinish:

Goto SleepLoop

 

Shortbeep:   'Short beeping time routine (about 38 seconds)

K=0

Kreturn1:

K=K+1

IF K=7 then

Goto Kfinish1

Else

Endif

I=0

For I=1 to 20

High PhotoRelay

Pause 200  '200 ms

Low PhotoRelay

Pause 50  '50 ms

Next

Pause 2000  '2 sec

Goto Kreturn1

Kfinish1:

Goto SleepLoop

'*****End of Program******

'Note:

'melabs U2 Programmer's configurations for 12F629:

'Oscillator - INTOSC, WDTE - Disable, PWRTE - Disable, MCLR - Reset, BODEN - Disable, CD - Disable, CDP - Disable

'WDTE and BODEN must be set to Disable.

 

Menu Pageへ戻る

Topへもどる