電子工作57 – 電池式ラジオ用簡易外付けスリープタイマ−(30分、2時間)の製作
概要
携帯式の電池で動くラジオを数台持っているが、いずれも一定時間が来たら自動的に電源が切れるいわゆるスリープタイマー(=オフタイマ−)機能を備えていない。そんな訳でPICとPICBasic Proを使って外付けの簡単なスリープタイマーを製作してみることにした。
製作にあたって考えていたこと;
1) 電源電池の直列ラインの一部(電池電極とケースの接触部)を物理的に離し、そこから2本の線を出しPICとフォトリレーでその部分の導通を制御する。
2) 出来るだけ簡単な構造にする。
3) 電池駆動なので省エネ方法を検討する。
回路図
下の様に簡単な回路になった。ラジオの電源電池の一個所をスプリング力に抗して物理的に離し、その間にプラスチック片(絶縁体)を挟んだ2枚の導線付き銅片を入れる(似たような構造ならどんな形でもOK)。この部分は自作する必要がある。また電池収納フタがきちんと閉まるようにする必要もある。このラジオから取りだした2本の線をフォトリレーに接続する。途中に連続/タイマー選択SWを入れてある。連続にすればラジオは電源SWを入れると連続して動作する。またタイマーを選べばタイマー時間選択SWで電源がOFFになる時間を30分か2時間に設定出来る。フォトリレーの内蔵LEDが点灯すると、そのピン4と6間が数メガWから数Wに低下し導通してラジオの電源が入る。外付けのLEDが導通しているかどうかを示す。このスリープタイマーはプログラムがEndコマンドで終わるルーチンのためか電池の電源SWをONにして起動させようとすると誤動作を起こす。したがって起動は原則Reset SWを押して行う。スリープタイマーの消費電流は動作中で約1.25mA、Endコマンドで終了した後(待機電流)は1.1mAと極端に低下する。単4電池を2本でも結構長持ちしそうだ。例えば、1日5時間スリープタイマーを動作させるとすると1.25mAx5h=6.25mAh。月30日とすると6.25mAhx30=187.5mAh。単4乾電池で450mAh位とされているので優に2カ月以上は持ちそうだ。
自作したラジオ電源の分離取り出し端子: プラスチック板が挟んであり、
一方は電池電極、他方はケースの端子に接触する 左の端子が電池ケースの中で挟まれている状態
実験中: 12F629が上方の中央に見える。下方右手の黒い物体が電池ボックス。
下方にはSONYのICF−4900IIラジオが見える。電源SWは電子式である。
使用する部品の数が少ないのが分かる。
結果&コメント
1) 使用法 (SONYのICF−4900IIでタイマーモード30分を使う場合)
a) 連続/タイマー選択SWでタイマーを、タイマー時間選択SWで30分を選択する。
b) 電池の電源SWを入れる。
c) Reset SWを押し、LEDの点灯を確認する。
d) ラジオの電源SWを押し、ラジオのLEDの点灯を確認する。
e) 後は選局、音量調整などしてラジオを聴く。
f) タイマーの30分が切れ、再び再生したければ、上の” c) Reset SWを押す” 以下の操作を繰り返す。
注: バックアップ電流が1mA前後と小さいので通常は電源SWをONにしておいて良い。連続/タイマー選択SWで連続を選ぶ場合は省エネのため電源SWを切っておく。
2) 最初PBPのSleepコマンドを使って超省エネを図ろうとした。しかし今回の目的には“End”コマンドで同じ役目を果たすことが分かった。複雑な割込みも使わずに済んだ。
3) SONYのICF−4900IIの電源を入れラジオを聴くと7−20mAの電流を消費することが分かった。このフォトリレーは200mA以上の電流を扱えるので問題なし。
4) メカニカル電源SWを持つ電池式ラジオの場合、ResetSWを押すと直ぐ電源が入るので、上記電子式電源SW を持つSONYの場合より操作が一つ省ける。
5) 使ってみるとなかなか便利。上記SONYの場合、設定時間が来る前にReset SWを短く押すと時間が再設定され、さらにラジオの電源も切れない。
6) 今回はタイマーの選択時間は2つであったが、その数を増やす場合は省エネに関して検討が必要(例えばWeak pull-upを使うとか)
7) 材料費は合計で1000円ほど・
プログラム
このプログラムは以下のように簡単である。PBPのEndコマンドで終わると省エネモードに入り SleepコマンドがLoopをつくって実行し続けるのと同じ役目をするという。実際Endで停止すると消費電流は1.1mAに低下した。
'**********************************************
'RadioControllerSimpA.bas 2011.6. 10 Works!!
'12F629 used
'Compiled by PICBasic Pro
'Continuous, 30-min and 2-hrs timer (3 modes)
'***** Pin Connection *****
'Pin 1 - Vdd (+3V) batteries
'Pin 8 - GND
'Pin 4 (GP3) - to Reset SW and Vdd via 10K
'Pin 5 (GP2) - Photo relay drive
'Pin 6 (GP1) - Time select SW (30min or 2hrs)
'***** Program *****
CMCON=7
TRISIO=%001010
TimeSltSWIn var GPIO.1
RelayDrvOut var GPIO.2
I var Byte '<256
TimeSltSWIn=0
RelayDrvOut=0
If TimeSltSWIn=1 Then Timer30min '30-min or 2-hr Select SW ここで30分か2時間いずれを選択したかの情報を取り込む
Goto Timer2hr
Timer30min: '30分タイマー
High RelayDrvOut 'Relay -> ON
I=0
For I=1 To 30 '30--min timer
Pause 60000 '60 sec
Next I
Low RelayDrvOut 'Relay -> OFF
Goto Finishing
Timer2hr: '2時間タイマー
High RelayDrvOut 'Relay -> ON
I=0
For I=1 To 120 '2-hr timer
Pause 60000 '60 sec
Next I
Low RelayDrvOut 'Relay -> OFF
Goto Finishing
Finishing:
End 'Entering into a semi-sleep mode consuming little power このEndコマンドはSleepコマンドと同じような役目をする。ただし無限に停止。Resetで起きる。最重要!!!
'****** End of program*******
'Note:
'melabs U2 Programmer's configurations for 12F629:
'Oscillator - INTOSC; WDTE - Enable; PWRTE – Enable
'MCLR - Reset; BODEN - Diable; CD - Disable; CDP - Disable. *BODENをEnableにすると消費電流が40−50mA上昇するのでDisableにしないといけない。
電池式ラジオ用簡易外付けスリープタイマ−改良版(30分、1時間、2時間、3時間)の製作 (2011.6.12追加)
タイマーの設定時間を2個増やして4個にした。今回課題になった点は、出来るだけ電池が持つようにタイマー時間選択SWに接続するプルアップ抵抗(500KW)とGNDに落とす抵抗(47KW)の値をどうするかであった。実験を行って決めた。その結果、スリープタイマーの消費電流は動作中で約1.40mA、Endコマンドで終了した後(待機電流)は約7.0mAと前述の場合に比べ多少増加したが、それでも電池は十分長持ちすると思われる。
プログラム
このプログラムは基本的には上記の'RadioControllerSimpA.basと同じで、1時間と3時間を数えるルーチンを新たに加えただけである。
'**********************************************
'RadioControllerSimpMSW1.bas 2011.6.12 works OK
'12F629 used
'Compiled by PICBasic Pro
'Continuous, 30-min, 1-m 2- and 3-hr timer (4 modes)
'***** Pin Connection *****
'Pin 1 - Vdd (+3V) batteries
'Pin 8 - GND
'Pin 4 (GP3) - to Reset SW and Vdd via 10K
'Pin 5 (GP2) - Photo relay drive
'Pin 7 (GP0) - SW 30 min
'Pin 6 (GP1) - SW 1 hr
'Pin 3 (GP4) - SW 2 hr
'Pin 2 (GP5) - SW 3 hr
'***** Program *****
CMCON=7
TRISIO=%111011
TMR30min var GPIO.0
TMR1hr var GPIO.1
TMR2hr var GPIO.4
TMR3hr var GPIO.5
RelayDrvOut var GPIO.2
I var Byte '<256
RelayDrvOut=0
If TMR30min=0 Then Timer30min '4 SW selections 30分、1,2,3時間と4つの選択肢
If TMR1hr=0 Then Timer1hr
If TMR2hr=0 Then Timer2hr
If TMR3hr=0 Then Timer3hr
Timer30min:
High RelayDrvOut 'Relay -> ON
I=0
For I=1 To 30 '30-min timer
'For I=1 To 2 'Temp 6.11
Pause 60000 '60 sec
Next I
Low RelayDrvOut 'Relay -> OFF
Goto Finishing
Timer1hr:
High RelayDrvOut 'Relay -> ON
I=0
For I=1 To 60 '1-hr timer
Pause 60000 '60 sec
Next I
Low RelayDrvOut 'Relay -> OFF
Goto Finishing
Timer2hr:
High RelayDrvOut 'Relay -> ON
I=0
For I=1 To 120 '2-hr timer
Pause 60000 '60 sec
Next I
Low RelayDrvOut 'Relay -> OFF
Goto Finishing
Timer3hr:
High RelayDrvOut 'Relay -> ON
I=0
For I=1 To 180 '3-hr timer
Pause 60000 '60 sec
Next I
Low RelayDrvOut 'Relay -> OFF
Goto Finishing
Finishing:
End
'****** End of program*******
'Note:
'melabs U2 Programmer's configurations for 12F629:
'Oscillator - INTOSC; WDTE - Enable; PWRTE - Enable
'MCLR - Reset; BODEN - Diable; CD - Disable; CDP - Disable.