電子工作 19 - ウエストバッグのファスナー閉め忘れ警報装置
概要
最近、ウエストバッグのファスナーを開けて、財布などを取り出し、また戻した後、ファスナーを閉め忘れることを、しばしば経験するようになった。ジジイに達した齢のせいだろう。そこで、閉め忘れをブザーで警告する装置を製作することにした。製作にあたり以下の条件を考慮した。
1)電池駆動で、低消費電流であること。
2)小型、簡単、メンテナンスフリー。
3)安価にできること(二千円以下)。
回路
この回路(Fig. 1)の概要は以下のようなものである。
いろいろ部分的なテストをしてみて、ファスナーが開いているか、閉じているかの検知にホールセンサ(ファスナーの務歯の裏側へ縫い付け)と磁石(ファスナーのスライダの裏側へS極がセンサに向くように瞬間接着剤で接着)、バッグが動いている(装着者が動いている)ことの検知に Ball tilt SW (Ball SW:割込みに必要)、警告装置にブザー、そして、全体の制御に12F629(内臓クロック4MHz使用)を使うことにした。
バッグを携帯中(買物などをしている時)は、回路は動作し、バッグが動いていない時は、電池駆動なので、SLEEPモードという低電流消費状態になるようにする必要がある。
このホールセンサIC(DN6851 A591)の特性を見ると、電源電圧=3.6-16V で使うこととされているが、3.6V以下でも(2.2V位まで)動作することが分かった。そこで電池2本の3Vで使うことにした。このセンサでは、”磁石のS極をセンサの裏側5-10mm程に近づけると、出力はON ("H")になり、離すとOFF ("L")になる。” この原理を閉め忘れ検知に利用する。
このセンサは、出力(”H"or”L")の如何にかかわらず3-4mAの電流を消費するので、非計測時(バッグを動かさないでいる時)には、センサの電源を切って、電池をセーブする必要がある。そこで Photo Relay(TLP596A)を導入し、センサを使うときだけ、電源が入るようにした。
バッグが動いて、Ball SW から割込みが入り、バッグから物を取り出す間(約22秒に設定)に0.5 mA程度の電流を消費し、ブザーが鳴っている時は5-7mA、そして、バッグが動かなくなりBall SW からの割込みが入らなくなると、消費電流は0.07-0.09mAほどに低下する(Sleep状態)。この値は電池でサポート出来る十分小さい値と言える。
電源とGNDの間に入っている 0.01uFのコンデンサは、回路のノイズ防止と、入れるとブザーの音が澄む、という効果をもたらした。
Ball
SW の設定角度や位置も結構微妙で、歩いている時、内部接点が常に接触、非接触を繰返しているような状態にすることが大切。
Fig.
2 で基板上で、左手の丸いものがブサー、上部の黒い四角いものがBall SW、中央下部の白いパーツがPhoto Relay、それと、PICと電源スイッチが見える。基板サイズは25X
55mm。電源は単5アルカリ電池2本。
Fig.
3 の写真では、基板が主バッグの中に入っているが、実際はバックの左側の副バックに格納した。センサとは主、副バッグの隔壁を裂いてケーブルでつないだ。
Fig. 4 この金属製の超強力磁石(ネオジウム磁石で直径10mmX厚さ3mm、KOKUYOマクー1025NTG紙保持用のものを、そのプラスチックホルダーより取出して使用。5個入りで¥315)は、瞬間接着剤で両方のスライダの下に固定してある。また、センサの表(数字など印刷してある側)には、軟鉄の小片(2.5X2.5mm)を接着した。多少、検知感度が上がるようである。
Fig. 5は、この警報装置を組込んだウエストバッグを示す。
Fig.1 回路図 Fig. 2 装置の全体図―3本足のホールセンサの前に最初に使われた金属製磁石が見える
Fig. 3 バッグの中に装着した本体部分―ファスナーの務歯の裏側にセンサが見える Fig. 4 スライダの下に接着された、実際に使われた金属磁石
Fig. 5 ウエストバッグー右手の副バッグに装置の本体が入っている
プログラム
このプログラムでは、バッグが開けたままで、BALL SW から割込みが入ると(動いていることが必要)、約22秒ほどして、ブザーが5回(変数 I)鳴り、さらに、そのルーチンを10回(変数 K)繰返し、合計50回鳴る。そして、低電流消費モードのSleep状態に入る。しかし、途中ブザー音に気づいてバッグが閉じられ、ホールセンサに磁石が近づき(ファスナーを閉じた状態)、センサ出力が”H"になると、ラベル PRelayOFF に飛んで、Photo Relay を閉じ、ホールセンサの電源を切り、上記同様にSleep状態に入る。Ball SW が動いて割込みが入ると、再び眠りからさめホールセンサの状態のチェックを始める。
例によって、外部割込みを可能にする要の部分は、以下の設定である。
:
IOC.0=1 'Detect input at GP0 - Essential !!
INTCON.3=1 'Enable the port input-level change interrupt
SleepLoop:
INTCON.0=0 'Clear GPIF
@Sleep 'Have a good sleep! - This is a key command
INTCON.0=0 'Clear GPIF
'**** Main routine ****
:
Goto SleepLoop
'******************** プログラミング備忘録 *******************
'HALLPrj2.bas - New Autostop introduced 2007.4.17 Works OK!
'If zipper is left open and a bump occurs, the buzzer begins to beep 5 x 10
'=50 times and the system goes into @sleep. Another bump wakes it up again.
'Warning system when the zipper of my waist bag is left open
'When its zipper is left open for a certain time (about 22 sec), the buzzer
' beeps.
'As @sleep is used, the current used will be very low.
'Parts: 12F629, photo relay, ball tilt sensor, hall sensor, small magnet,
'buzzer and others
'******** Pin connection ******************
'Pin 1: Vdd (3.0V) battery
'Pin 8: Vss (GND)
'Pin 7: GPIO.0 - Ball tilt SW input
'Pin 6: GPIO.1 - Output to Photo Relay
'Pin 5: GPIO.2 - Hall SW input
'Pin 3: GPIO.4 - Output to buzzer
'******** プログラムはここから始まる ***********
BallSWin var GPIO.0
ToPRelay var GPIO.1
HallSWin var GPIO.2
Buzzer var GPIO.4
I var byte 'Repeat counter
K var BYTE 'Repeat Counter
TRISIO=%000101 'GPIO.0 (Interrupt) GPIO.2 - input
CMCON=7 'Disable Comparators.
WPU=%000001 'Weak Pull-Up on GPIO.0 only
OPTION_REG.7=0 'Enable Weak Pull-Up's
IOC.0=1 'Detect input at GP0 - Essential!!
INTCON.3=1 'Enable the port input-level change interrupt
SleepLoop: ‘ここでSleep modeに入り、割込みによる入力を待つ。
INTCON.0=0 'Clear GPIF
@Sleep 'Have a good sleep! - This is a key command
INTCON.0=0 'Clear GPIF
'***** ファスナー開閉状態を検知するルーチン *****
ToPRelay=0 'Seemingly essential
Pause 25000 'Wait 25 sec for taking things out of bag (actually about 22 sec)
ToPRelay=1 'Photo Relay -> ON
Pause 100 'Wait 0.1 sec
If HallSWin=1 Then Goto PRelayOFF 'If "H" (bag closed), jump to PRelayOFF.
Pause 100 'Wait 0.1 sec
K=0 'Repeat counter
Buzzerlabel:
I=0
For I=1 to 5 'Beep the buzzer 5 times.
Buzzer=1 'Buzzer -> ON
Pause 2000 'Buzzer ON for 2 sec
Buzzer=0 'Buzzer -> OFF
Pause 500 'Buzzer OFF for 0.5 sec
Next I
K=K+1 'Repeat counter + 1
ToPRelay=1
Pause 100
If HallSWin=1 Then Goto PRelayOFF
Pause 100
If K=>10 then goto PRelayOFF 'Count up to 10 (total=5x10=50 times).
Goto Buzzerlabel
PRelayOFF: 'Routine to turn off Photo Relay and then Hall Sensor
ToPRelay=0 'Photo Relay -> OFF (current saving)
Pause 100 'Wait 0.1 sec
Goto SleepLoop
'********** ここまでがプログラム ***************
'Note:
'AKI Programmer's configurations:
'FOSC - INTOSC(GP4:I/O); WDTE - Disable; PWRTE - Disable
'MCLR - Internal ; BODEN - Disable; CD - Disable; CDP - Disable.
余談
グニャグニャした布製のバッグなので、ホールセンサと磁石のS極を交差させ、検知させるのはそう簡単ではなかった。今回使用したホールセンサICはDN6851 A591 (Panasonic製、千石電商で¥60)である。たまたま、手元にあったDN6851 251 は、多少感度が高かったが、Web上でデータが見つからなかったので、前者を使用した。
作製した装置には、最初、小さいネオジウム磁石(直径6mmX厚さ5mm、ダイソーマグネット138)を1個使用したが、務歯の下に縫い付けてあるホールセンサの真上に近づけるのが難しく、なかなか検知してくれなかった。そこで、上記のような大きいネオジウム磁石を両方のスライダに取付けたら、うまく検知するようになった。いずれにしても、前から気になっていた、ホールセンサと磁石の関係を多少なりとも検証でき、良い経験になった。
今回のシステムは、近くにAC電源が無く、非接触で検知が必要な場合へ応用できる。
すべての部品は、秋葉原、100円ショップ、東急ハンズで調達。