電子工作 30 – 金庫番アラームの製作
概要
長屋の住人が銭もないのに初めて金庫と言うものを購入した。専ら書類やITデータを保管する為である。ネットで探したところ耐火耐水性を有するアメリカ製のものが見つかった。10キロ以上の重さだが動かせる。そこでその上に載せて置いて金庫のフタを開けようとして動かすとブザーが鳴り出すような仕掛けのアラームを製作することにした。以下の特徴を持つ
1)電池駆動で外部との結線がなく独立している。
2)割込みを使っていて待機時の消費力は極端に小さく(0.1 - 数 uA 以下)、電池で長期間駆動できる。
回路
回路図を下の図1に示す。これは電子工作15の電池で動作する省エネ回路とほぼ同じで簡単である。12F629のGP1にReed SW 2(リードスイッチ2、外部からの磁気で開閉するもの、写真1参照)をつなぎ割込み信号(High/Lowのレベル変化)の入り口にした。またリセットピンのGP3にもう1個のReed SW1をつないで磁石でGNDに落とし、リセットかけられるようにした。GP4にはPhoto relay (TPL596A) をつないで、ブザー (昔100円ショップで買ったもの、写真2)のSWをON/OFFできるようにした。ここで使うブザーは単5電池2個を内蔵し、押して導通するSWが入っているので、そこから2本の線を外部に取り出し(写真3)、一方をPhoto relay のピン4に、もう一方をピン6につないで使う。
Reed SW を外部から磁石で開閉させる時、その接点の開閉は接点と磁石との位置関係で微妙に変化するので実験的に決めた。Reed SW の開閉に使う磁石は強力なネオジウム磁石(写真4、f25mm, KOKUYOマクー1025NTG)で、箱材に使用した8mm厚の木板を通しても確実にReed SW を駆動できた。電源とGNDの間に入っている0.1uFはノイズ除去用で、無いと誤動作する。
図1
写真1 不活性ガス入りで接点が見える。¥50で入手。 写真2 右側上方にタクトスイッチが見える。ここから2本の線を出す。
写真3 外に取り出した2線を接触させるとブザーが鳴る。 写真4 強力なネオジウム磁石
下の写真5は組み上がったアラームボックスの内部である。最上部の黒いものが電池ボックス、最下部にブザー、真中の基板上にはPICとPhoto relay が見える。右手上方には下で詳述するシーソー式割込み起動装置が見える。その先端部にはファライト磁石が載っていて、それによってその前にある黄色いプラスチック片上の Reed SW 2 が開閉される。左手の上ぶたとなる板上にはリセット用のReed SW 1が見える。これが組み上がったボックスの上ぶた上からネオジウム磁石で駆動される。
写真5 ダイソーの100円ボックスを利用
シーソー式割込み起動装置(写真6)
待機時(アラームボックスが金庫の上に載っている待機している状態)の電力消費を最小に抑えるには、Reed SW 2 が開放(非導通))の状態にないといけない。つまり磁石が Reed SW 2 から離れている必要がある。磁石が近付いていて閉じて(導通して)いる状態にあるとシステムに約
70 uA の電流が消費されるからである。ポート入力変化割込みによってシステムを起動させるためには、磁石がReed SW 2 を開放状態から、一瞬閉じさせて、また開放して停止する必要がある。それを実現するためにこのシーソー式起動装置(長さ
75 mm)をつくった。それはシーソーの支点(長いネジの部分)の後方部先端に鉄片(ネジや座金で構成)、もう一方の先端部にフェライト磁石を取り付けたもので、外力が加わらない状態ではフェライト磁石部分の方が重いので、重力でその部分が頭を下げボックスの底面に着く。フェライト磁石部が上下に動く部分の前には
Reed SW 2 (黄色いプラスチック片に載っている)が縦に設置してある。 フェライト磁石が上下動する時、途中の中間位置でのみで Reed SW 2が閉じる(導通する)ようにしてある。シーソーの後方部先端の鉄片をボックス底部の外からネオジウム磁石で引き付けておいて(写真8、実際にはこの磁石は金庫のふたの上にガムテープで貼り付けである)、磁石からボックスが離れるとシーソーのフェライト磁石が重力で最上位置から下方に動きReed
SW 2 を一瞬閉じ後、再び開放して停止する。そしてシステムが起動する。
実際にこのシーソー式割込み起動装置をセットするには、アラームボックス(写真7)の上部右下の穴から棒(細い赤い棒が見える)を差し込んでシーソーの後方部を押してその鉄片部をボックス底部外側(金庫の上ぶた表面)に設置してある磁石に固定する。この棒を差し込んでのセットアップ時、システムを一度起動するのでボックスの上部のほぼ真ん中に磁石を当て、その裏側に設置してある Reed SW 1 を閉じてシステムをリセットしてやる。
写真6 シーソー後部の鉄片がボックスの外から磁石で引き付けられている状態。
磁石から離れるとシーソー先端部が重さで頭を下げる。
写真7 完成したアラームボックス(300x140x50mm)
写真8 アラームボックスの底部。磁石がシーソーの鉄片を引き
付けている状態。磁石を離すとシステムが起動する。 完成したアラームボックスはこんな風に金庫の上に置く。
使い方
1)アラームボックスの上部真ん中あたり(その真下に Reed SW 1 がある)にシステムリセット目的でネオジウム磁石を置く。
2)アラームボックスの上部のシーソー押し込み穴より細い棒(ここでは綿棒の頭を切ったもの)を差し込んでシーソー鉄片部を押し、ボックスを動かしながら金 庫の上に固定してあるネオジウム磁石上に固定する。
3)シーソー押し込み穴より棒を抜く。
4)アラームボックスの上部に置いたネオジウム磁石を除く。
これでシステムは超小電流消費待機状態に入る。アラームボックスが金庫に固定してある磁石から離れるやいなやブザーが鳴り始める。設定時間5分間鳴り続ける。停止するにはアラームボックスの上部真ん中あたりをネオジウム磁石でなぞってリセットをかけてやる。システムを再起動するには(待機状態にする)には上記1)からの操作を繰り返す。
プログラム
待機状態からReed SW 2 に磁石が近付いて接点が閉じると、割込みが入って(ポート入力変化割込み)ブザーを鳴らすルーチンに飛び実行する。ここでは14秒間ブザーが鳴り1秒間休むことを20回繰り返す(合計5分間)。そして再びスリープ状態に入る。なお、この割込みは接点が開放状態から閉じたとき、閉じた状態から開放したとき、のいずれでも発生する。
'****************** プログラミング備忘録 *******************
'AlmS629.bas 2008.8.12 11:55
'This program functions as follows: when Reed SW 2 (GPIO.1) is closed,
'an interrupt occurs, executing Buzzer Beeping routine (5 min) and then
‘enters into the sleep mode where current consumption is below 1 uA.
'The main points here are how to use the interrupt and the low-power consuming
'sleep mode (@sleep), where battery operation becomes possible.
‘以下に示すようにINTCON、IOC, OPTION_REG、WPUなどの設定や設定位置がプログラムが動くかどうかのポイントであった。
‘そして@sleep という眠らせるコマンドが大事な役割を果たしている。動作させたいルーチンは ***ブザーを鳴らすルーチン*** と
‘ Goto SleepLoopの間に入れる。
'******** Pin connection ******************
'Pin 1: Vdd (3.0V) - battery operated
'Pin 8: Vss (GND)
'Pin 6: GPIO.1: input - connected to Reed SW 2 (normally open) via 47K resistor
'Pin 4: GPIO.3: input - connected to MCLR to reset the system via Reed SW 1 (normally open)
'Pin 3: GPIO.4: output - connected to LED of photo relay to turn on/turn off the buzzer
'********** ここからがプログラム本体 ***************
Buzzer VAR GPIO.4 'Buzzer on GPIO.4
I var byte 'Counter
CMCON=7 'Disable Comparators, GP0 & GP1 -> digital
TRISIO=%001010 'GPIO.1 (Interrupt) & GPIO.3 (Reset) - inputs
WPU=%000010 'Weak Pull-Up on GPIO.1 only 内部的にこのピンをプルアップする
OPTION_REG.7=0 'Enable Weak Pull-Up's
IOC.1=1 'Detect input at GPIO.1 - Essential !! このピンで入力データの変化検出許可
INTCON.7=1 'Newly added 08.8.11 割込み使用する
INTCON.3=1 'Enable the port input-level change interrupt GPIOポート入力レベル変化割込みを使う
SleepLoop:
Buzzer=0
INTCON.0=0 'Clear GPIF GPIOポート入力レベル変化した時1になるので、0に戻してやる
@Sleep 'Have good sleep! - This is a key command アッセンブラコマンド Sleep を使う(超小電流消費モード)
INTCON.0=0 'Clear GPIF GPIOポート入力レベル変化した時1になるので、0に戻してやる
'*** ブザーを鳴らすルーチン *** ‘Insert your routine between here and Goto SleepLoop
For I=1 To 20 'Total buzzer beeping time = 5 min 5分間ブザーを鳴らす
High Buzzer
Pause 14000 '14 sec
Low Buzzer
Pause 1000 '1 sec
Next I
Goto SleepLoop
'********** ここまでがプログラム ***************
'Note:
'AKI Programmer's configurations:
'FOSC - INTOSC(GP4:I/O); WDTE - Disable; PWRTE – Enable*
'MCLR - MCLRpin ; BODEN – Disable; CD - Disable; CDP - Disable.
‘*PWRTE - Enable は電源投入時に 75 ms のリセット時間を与えるために必要。
考察・余談
しばらくぶりでの電子工作。身近なことからと金庫番アラームの製作。ほぼ身近にあった材料で仕上げ、費用しめて1500円ほど。難しかった点は割込み用のReed SW 2 を開放の状態から、一度閉じて、また開放状態に戻す動作をボックスの外から磁石を使ってどうやって実現するかというところ。細い棒を差し込みながらシステムを待機状態にするのはちょっとおっくう。改良の余地あり。プログラムは電子工作15のものとほぼ同じ。なにより省エネなのが気に入っている。
起動にリミットスイッチも使えるように改良(2008.8.21)
金庫番アラームをもっと簡単に使えるようにするために、機械的に動作するリミットスイッチを加えた。内臓の切り替えSWで磁気SW (Reed SW 2) か リミットスイッチが選べるようした。改良した部分の回路図、リミットスイッチの外観、そして設置された様子を下に示す。磁気SW (Reed SW 2) か リミットスイッチかを選ぶスライドSWの切り替えは上ぶたを開けて行う。リミットスイッチの3本足の内、外側の二本は下のレバーが押上げられて状態で開放(非導通)、離した状態で閉じる(導通)。アラームボックスの底に写真のように取り付ける。ボックスを金庫の上(その外の平らな面)に載せるとパチンとクリック音を出して開放状態(非導通)になる。ボックスを取除こうと持ち上げるとSWが入ってシステムが起動しブザーが鳴る。勿論リセットは磁気SWの場合と同様にボックス上ぶた裏のReed SW 1を上ぶた表面から磁石でなぞって行う。 なおプログラムの変更はない。 まか不思議さが無いが、こちらの方が簡単で確実みたい。