電子工作58 – 電池式メカニカルSW付きラジオ用簡易外付けスリープ・ウェークアップタイマ−(30分、1時間、2/6時間)の製作

 

概要

今回のプロジェクトでは、前の電子工作57に“一定の設定時間後に自動的にラジオの電源が入る”というウェークアップ機能を付けた。メカニカル電源スイッチ(回転、スライド式など)付き電池式ラジオに限定されるが、スリープタイマーとは違った使い方が出来そう。

 

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

1)     電池式メカニカル電源SW付きラジオ用とする。

2)     タイマー時間選択SWの3極以上(スライドSWで)が入手できないので時間の選択肢は3つに限定する。適当なSWが入手出来れば選択肢は増やせる、

3)     ポート数が多い16F688を使う。拡張にも適す。

4)     電池駆動なので省エネ方法を極力検討する。

 

回路図

  回路を下に示す。前の電子工作57と違う点は、1)ピン数が多く拡張性のある16F688を導入したこと; 2)Sleep/Wakeup選択SWを設けたこと; 3)タイマー時間選択SWで選択できる時間の数を3つに増やしたこと; そして、4)Wakeupモードを選んだ時それを点滅で知れせるLED(Green)を設置したことである。消費電流を出来る限り抑えるため、タイマー時間選択SWへつながるポートのpullup抵抗やGNDに落とす抵抗は支障のない限り大きい値のものを用いた(値は実験的に決めた)。結局、このスリープタイマーの消費電流はSleepモードで動作中(ラジオON)で約0.73mA、Endコマンドで終了した後(待機電流)は5.7mAであった。また、Wakeupモードでは設定時間待ち中(ラジオOFF)で約0.34mA、ラジオ動作中で約1.06mA,Endコマンドで終了した後(待機電流)は5.7mAであった。ポートRC5に接続するLED(Green)は15秒に1回50ms点灯する。今回単4NiMH電池(900mAh)を2本使ってみた。このスリープタイマーはプログラムがEndコマンドで終わるルーチンのためか電池の電源SWをONにして起動させようとすると誤動作を起こす。したがって起動は原則Reset SWを押して行う

 

ラジオ電源の分離2線取り出し部分、裏蓋もちゃんと閉まる

 

                                           Fig.1 Test using experimental board

実験中: メカニカル式電源SW付きのラジオを使う必要があり、電源SWを常時ONにして置く。

16F688が中央に見える。下方左手の黒い物体がSW付き電池ボックス(単4x2)。

 

 

実用機: 上が回路基板で下がラジオ (20116.28追加)

 

                                回路基板: 下の裏側に右の電池ボックスがある   単5マンガン電池(300mAh)2本で駆動

 

結果&コメント

1)     使用法例 (Wakeupモードで設定時間30分を使う場合、ラジオのメカニカル式電源SWをONにして置く)

a)       連続/タイマー選択SWでタイマーを、タイマー時間選択SWで30分を、さらに、Sleep/Wakeup選択SWWakeupを選択する。

b)       電池の電源SWを入れる。

c)       Reset SWを押す。15秒毎に1回の頻度で LED(Green)が点灯する。

30分するとラジオが鳴り始め、30分間続いて停止する。同じことを繰り返したければReset SWを再び押す。

注: バックアップ電流が5.7mA前後と依然小さいので通常は電源SWをONにしておいて良い。連続/タイマー選択SWで連続を選ぶ場合は省エネのため電源SWを切っておく。

2)        PBPのSleepコマンドとして Sleep 3600 を使うと通常のタイマールーチンFor I=1 To 60 Pause 60000 Next Iなどより省エネになることが分かった。例えば、1.2mA ->0.7mAに低下。

3)        今回使ったラジオは何年も前にジャンクショップで買ったもの。AMのみ受信でき単3電池2本で動作する。

4)        Pull-up抵抗500KとGND抵抗47Kの組合せでHレベルで2.6V位、Lレベルで0.25V位になる。これらの抵抗の選択が安定動作と省エネ実現の要であった。

5)        上記電子式電源SW を持つラジオではWakeupモードは使えない。

6)        3極以上のスライドSWが見つからず、タイマー設定時間は3つのみとしたが、適当な多極SWが見つかれば3つ以上に増やせる。例えば、6、8時間を加えると実用的なWakeupタイマーになる。

7)        材料費は合計で1000円ほど。

8)        2011.6.25追加) 実用機は組立後一発で動作。単3を2つに切った様な単5電池を収めた電池ボックスはやたら大きい。コイン電池は60mAh位なので持たない。(2011.8.23追加)上記の単5電池2本(マンガン)では2カ月ほどしか持たないことが分かった(Vdd/Vss間の電圧は1.0Vであった)。そこで単4電池(マンガン)を2本使うように改良した。新品電池でVdd/Vss間の電圧は3.2Vであった。

9)        2011.7.1追加) A) 小さいA23Sという12Vの電池をxc5202P502TBという低損失5V3端子レギュレータと共に使うアイデアが浮かび消費電力を測ってみたら4,7mAと小さかった。しかし、電池の容量が小さく長持ちしそうでなかったので実験を中止した。B) スライドSWの代わりに秋月の小さいロータリーSWを使うことを検討した0−9負論理のもの(DRR4016-Zなど、2個300円)だとCommon と他の4ピンで0−9までの設定が出来ることが分かった。将来、抵抗などをつないだ回路をボード上で組んで用途が生じたら更に検討したい。また、現在のスライドSWに加えてもう一つの2-waySW(Sleep/Wakeup選択SWのような)を加えて設定時間の選択数を2倍にすることもできる。現在のものではWakeupモードで8時間が欲しい。Sleepモードでは市販の高級ラジオと同じくらいの機能を加えたい。

 

プログラム

  このプログラムは、前の電子工作57の“設定時間がきたらラジオの電源が切れる“(Sleepモード)に、“設定時間がきたらラジオの電源が入る“(Wakeupモード)機能を加えたものである。両者に共通して3つの設定時間が使える。省エネ目的でFor I=1 To 60 Pause 60000 Next Iなどを使うタイマーの代わりにSleep 3600 などを使ったら消費電流が30%以上低下した。ただSleep 3600(秒)は1時間のスリープをする筈だが精度が低いためかSleep 3300としないと正確に1時間にはならなかった。Wakeupモードでは設定した時間を稼いでいる間は動作しているかどうか分からないのでサブルーチンを使って15秒毎に1回LED(Green)が点灯するように工夫してある。

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

'RadioControllerSW.bas  2011.6.17 works OK

'16F688 used

'Compiled by PICBasic Pro

'Sleep and wakeup timer

'Sleep command used instead of For I=1 To 30 -> Pause 60000 -> Next I

'***** Pin Connection *******

'Pin 1 - Vdd (+3V)

'Pin 14 - GND

'Pin 4 - MCLR (Reset)

'Pin 5 (RC5) - WlkupLED (Green)  Wakeup LED

'Pin 8 (RC2) - SldSW2hrsSW  Slide SW-2hrs SW

'Pin 9 (RC1) - SldSW1hrsSW

'Pin 10 (RC0) - SldSW30minSW

'Pin 12 (RA1) – RelayDrive  Relay Drive

'Pin 13 (RA0) – SlpWkupSW  Sleep/Wakeup SW

 

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

CMCON0=7 'Comparator Off

ANSEL=0   'All pins are digital.

ADCON0=0  'ADC disable

TRISA=%001001

TRISC=%000111

SlpWkupSW var PORTA.0

RelayDrvOut var PORTA.1

TMR30min var PORTC.0

TMR1hr var PORTC.1

TMR2hr var PORTC.2

WkupLED var PORTC.5

I var Word

 

RelayDrvOut=0

 

IF SlpWkupSW=0 Then SleepR 'Select Sleep or Wakeup here ここでSleepモードかWakeupモードを選ぶ

Goto WakeupR

 

SleepR  'Sleep mode routine : Sleepモードルーチン

IF TMR30min=0 Then Timer30min  'Select one of 3 times  ここで30分、1時間、2時間のいずれかを選ぶ

IF TMR1hr=0 Then Timer1hr

IF TMR2hr=0 Then Timer2hr

 

Timer30min:

High RelayDrvOut  'Relay ->1

Sleep 1650 '30 min timer (instead of 1800)  'Sleep 1650 was equal to 30 min (experimentally found)  Sleep 1650は30分に等しかった(実験で見出した。理論値では1800)

Low RelayDrvOut  'Relay ->0

Goto FinishRadio

 

Timer1hr:

High RelayDrvOut  'Relay ->1

Sleep 3300  '1 hr timer (instead of 3600)

Low RelayDrvOut  'Relay ->0

Goto FinishRadio

 

Timer2hr:

High RelayDrvOut  'Relay ->1

Sleep 6600  '2 hr timer (instead of 7200)

Low RelayDrvOut  'Relay ->0

Goto FinishRadio

 

WakeupR  'Wakeup mode routine : Wakeupモードルーチン:

IF TMR30min=0 Then Timer30minWp

IF TMR1hr=0 Then Timer1hrWp

IF TMR2hr=0 Then Timer2hrWp

 

Timer30minWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 120  '30 min timer

Pause 15000

Gosub WkupLEDFl  'Jump to subroutine to light up LED (Green) for 50 ms at a rate of once per 15 sec  LED(G)を15秒に1回点滅させるルーチンに飛ばす

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

Timer1hrWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 240  '1 hr timer

Pause 15000

Gosub WkupLEDFl

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

Timer2hrWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 480  '2 hr timer

Pause 15000

Gosub WkupLEDFl

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

WkupLEDFl: 'LED flashing subroutine LED(G)を15秒に1回点滅させるルーチン

WkupLED=0

High WkupLED

Pause 50  '50 ms

Low WkupLED

Return

 

WakeupRadio:

I=0          

For I=1 To 30 '30 min timer  'Turn on radio for 30 min  30分間ラジオを鳴らす

Pause 60000

Next I

Low RelayDrvOut

Goto FinishRadio

 

FinishRadio:

End    'Entering into sleeping state with low power consumption  Endコマンドで低電流モードに入る

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

 

'Note:                                                                                              

  'melabs U2 Programmer's configurations 16F688

  'FOSC - INTOSC; WDTE - Enable; Power-up Timer - Disable

  'MCLRpin - Reset; BODEN - Disable; Internal External Swith Over - Disable,

  'Fail-Safe Clock Monitor - Disable, CD - Disable; Dtata EPPROM - Disable

 

.

より実用的にするためWakeupモードの設定時間を2時間から6時間に変える(2011.6.19 追加)

  その目的ため上記のプログラムRadioControllerSW.basの一部を下述のように僅かに変えた。回路図では表示の一部を 2 hrs (Sleep) or 6 hrs (Wakeup) の様に変えた。これによって“6時間後にラジオが鳴って起こしてくれる”実用的な目覚ましタイマーになることが期待される

 

プログラムRadioControllerSW.basで変えた部分は以下の下線を引いた3個所である。なお新しいプログラムのリストの表示はここでは省略するが、その名称はRadioControllerSW6hr.bas である。

WakeupR:

IF TMR30min=0 Then Timer30minWp

IF TMR1hr=0 Then Timer1hrWp

IF TMR2hr=0 Then Timer6hrWp  'modified from Timer2hrWp to Timer6hrWp on 6.19

 

Timer6hrWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 1440  '6 hr timer for wakeup

Pause 15000

Gosub WkupLEDFl

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

 

Simple Sleep & Wakeup Timer for Battery-operated Radio with Mechanical Power Switch (English version of the above Electronics Project 58 in Japanese)

You may have battery-operated portable radios with simple functions. This timer will add sleep and wakeup timer functions to those radios. With it your radio will be automatically turned OFF after 30 min, 1 hour and 2 hours or turned ON after 30 min, 1 hour and 6 hours. The timer uses only a few components in addition to 16F688. PICBasic Pro compiled the program for this PIC. The circuit diagram is shown below. In this project you have to make one component by yourself, which is inserted between the metal cap of a battery and its contacting part of the radio's battery case in order to cut the serial internal power connection in the radio. The component consists of two small copper plates, to each of which a wire to be connected to the photo relay is soldered, and also a small plastic plate that electrically separates those two small copper plates (as insulator). Since the timer operates using batteries, current saving is a very important point to pay attention. The resistors 500K and 47K used in Time Selection SW were selected so that power consumption was reduced to the lowest possible level and at the same time the input levels to PORTs - RC0, RC1 and RC2 could stabilize at about 2.6V for H and about 0.25V for L. The power consumption in Sleep mode (Radio ON) was about 0.73 mA and dropped to 5.7mA after the execution of End command (in standby state). In Wakeup mode, meanwhile, when executing the time counting routine for a preset time (e.g. 30 min) (Radio OFF), a current of 0.34mA is consumed and when the radio is turned on and operating the power consumption increases to about 1.06mA. After the program finishes with End command, the power consumption similarly drops to 5.7mA. Therefore, two AAA batteries will last more than a couple of months. The use of two AAA NiMH rechargeable batteries is also recommended because it has been proven that the timer smoothly operated with a voltage of 2.4 V (1.2Vx2). Two LEDs are used; the red LED lights up when the radio is ON, while the green LED lights up for 50 ms at a rate of once every 15 seconds in Wakeup mode to indicate that a time counting routine is being executed. To start the timer, Reset SW needs to be pressed since pressing the power SW of the timer's battery to turn on the timer often won't start the timer (due to the use of Sleep and End commands). Only when the radio is not used for a long period of time, the power SW of the timer's battery should be turned off.

                                  

This is the component you have to make. Two small copper

plates with wires soldered are glued to a small plastic plate                The component shown on the left is inserted between the metal

from both sides, which works as insulator.                                       cap of battery and its contacting part of radio’s battery case.

 

Practical Timer circuit completed mounted on radio, powered by two N-size Mn batteries

(300mAh) (2011.6.25 added)

 

How to use the timer (in case Timer mode is selected)

1) Turn ON the power SW of the timer’s battery.

2) Set Continuous/Timer Selection SW to Timer, Sleep/Wakeup Selection SW and Time Selection SW as you like.

3) Push the Reset SW. to activate the timer.

l       After a preset time is expires, the radio stops working and enters into the sleep state with low power consumption after the execution of End command (Sleep mode) or the radio is turned on and operates for 30 min, followed by entering into the sleep state with low power consumption after the execution of End command (Wakeup mode).

l       With regard to the general view of testing, refer to Fig.1 Test using experimental board in the above Japanese section.

 

Program

 The program is simple and straightforward, comprising mostly of time counting routines. The unique point may be the fact that PICBasic Pro's "Sleep" command was used, which is simply counting time while consuming very low power unlike "Pause" command. In fact, if "Sleep" command  is used, the power consumption drops by about 30 percent compared with the case where "Pause" command is used. However, the accuracy of time of "Sleep" command was found to be not as high as that of "Pause" command. Accordingly, the proper time values for 30 min, 1 hour and 2 hours (e.g. Sleep 1650) were determined through experiments.

****************************************************

'RadioControllerSW6hr.bas  2011.6.19 works OK

'16F688 used

'Compiled by PICBasic Pro

'Sleep and wake-up timer

'Sleep command used instead of For I=1 To 30 -> Pause 60000 -> Next I

'2hr-Wakeup was changed to 6hr-Wakeup on 2011.6.19. 

'***** Pin Connection *******

'Pin 1 - Vdd (+3V)

'Pin 14 - GND

'Pin 4 - MCLR (Reset)

'Pin 5 (RC5) - WkupLED (Green)

'Pin 8 (RC2) - SldSW2hrsSW

'Pin 9 (RC1) - SldSW1hrsSW

'Pin 10 (RC0) - SldSW30minSW

'Pin 12 (RA1) - RelayDrive

'Pin 13 (RA0) - SlpWkupSW

 

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

CMCON0=7

ANSEL=0

ADCON0=0 'ADC disable

TRISA=%001001

TRISC=%000111

SlpWkupSW var PORTA.0

RelayDrvOut var PORTA.1

TMR30min var PORTC.0

TMR1hr var PORTC.1

TMR2hr var PORTC.2

WkupLED var PORTC.5

I var Word

 

RelayDrvOut=0

 

IF SlpWkupSW=0 Then SleepR

Goto WakeupR

 

SleepR:

IF TMR30min=0 Then Timer30min

IF TMR1hr=0 Then Timer1hr

IF TMR2hr=0 Then Timer2hr

 

Timer30min:

High RelayDrvOut  'Relay ->1

Sleep 1650 '30 min timer (instead of 1800)

Low RelayDrvOut  'Relay ->0

Goto FinishRadio

 

Timer1hr:

High RelayDrvOut  'Relay ->1

Sleep 3300  '1 hr timer (instead of 3600)

Low RelayDrvOut  'Relay ->0

Goto FinishRadio

 

Timer2hr:

High RelayDrvOut  'Relay ->1

Sleep 6600  '2 hr timer (instead of 7200)

Low RelayDrvOut  'Relay ->0

Goto FinishRadio

 

WakeupR:

IF TMR30min=0 Then Timer30minWp

IF TMR1hr=0 Then Timer1hrWp

IF TMR2hr=0 Then Timer6hrWp  'modified from Timer2hrWp to Timer6hrWp on 6.19

 

Timer30minWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 120  '30 min timer

Pause 15000

Gosub WkupLEDFl

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

Timer1hrWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 240  '1 hr timer

Pause 15000

Gosub WkupLEDFl

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

Timer6hrWp:

Low RelayDrvOut  'Relay ->0

I=0

For I=1 To 1440  '6 hr timer for wakeup

Pause 15000

Gosub WkupLEDFl

Next I

High RelayDrvOut  'Relay ->1

Goto WakeupRadio

 

WkupLEDFl: 'LED flashing subroutine

WkupLED=0

High WkupLED

Pause 50  '50 ms

Low WkupLED

Return

 

WakeupRadio:

I=0          

For I=1 To 30 '30 min timer

Pause 60000

Next I

Low RelayDrvOut

Goto FinishRadio

 

FinishRadio:

End

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

 

'Note:                                                                                             

  'melabs U2 Programmer's configurations 16F688

  'FOSC - INTOSC; WDTE – Enable*); Power-up Timer – Disable          *) Important

  'MCLRpin - Reset; BODEN - Disable; Internal External Swith Over - Disable,

  'Fail-Safe Clock Monitor - Disable, CD - Disable; Dtata EPPROM - Disable

 

Menu Pageへ戻る

Topへ戻る