電子工作 28 – キッチンタイマでAC100V機器をON/OFFする

概要

    冬の長屋の朝は結構冷える。小さいキッチンで湯を沸かす時、ガスコンロの上部に囲いがあるので上に逃げた熱が部屋の方にまわらない。”モッタイナイ”ので小さい扇風機を囲いの境に下向けに取り付けて回すと暖かい空気が部屋の方に移動する。湯沸かしを終え、ガス栓を切った後もしばらく暖気が残っているので、扇風機を一定時間回し自動的に停止したい。この目的を満たすために100円ショップで売っているキッチンタイマとPIC12F629を組み合わせてAC100Vの機器をON/OFFできる簡易タイマを製作した。

 

回路と実験ボード

 キッチンタイマ: キッチンタイマ丸型No.13634(グリーンオーナメント販売、ダイエーで入手)、0ー99分59秒まで設定可能。

           

分解してみると写真のように基板にスピーカがハンダ付けしてある。その2個所のハンダ付けポイントに2本の線をハンダ付して外部に取り出す(極性があり赤線がプラス)。電池が小さいLR41(1.5V)なので、設定時間に達すると必ず60秒間鳴るスピーカに電気が消費されて、あまりもたないことが分かった(60秒間x20回位?)。そこで実験では一部外付けした単四アルカリ電池も使用した。

 

波形の説明

  最初の3枚 (a),  (b),  (c) はキッチンタイマからの出力をそのままオシロで測定したもの。 (a) はSTART/STOPボタンを押した時(ピーと鳴る)。まず出力0Vを中心に振れる小さいパルスが発生し(スタートパルス)、設定時間の3秒終了後に連続波(アラーム)が60秒間発生して終了する。 (b)はその小さいスタートパルスと連続波の一部を10倍に拡大したもの。 (c) は小さいスタートパルスだけを50倍に拡大してものである。これらの波形をPICで読込むのは難しい。

一方、(d)と(e)はキッチンタイマからの出力をトランジスタで増幅し積分回路で処理して12F629のGP0に入力させたものである。ここでは入力電圧は5Vになり、そしてSTART/STOPボタンを押した時に下向きの鋭い谷状の波形のパルスが発生する。 (d) を10倍拡大した(e)から分かるように、その2V以下(デジタル信号のLに相当)になる部分の幅は110−140mS程度になるので、プログラムでの検知(HまたはL)が可能になる。つまり、このLの部分を検知してスタートパルスが来たと判断しSSRの駆動を開始し、次いで設定時間が終わると発生するタイマ終了の連続波の最初の2V以下になる部分をLと検知して, プログラムはSSRの駆動を停止することが出来るようになる。

 

(a)                                                             (b)                                                            

    

(c)

 

(d)                                                                                (e)

   

 

 

下に回路図と実験で使ったボード、それに完成した装置を示す。5.0V電源はACアダプタと三端子レギュレータ 317でつくった。 キッチンタイマのスピーカの正極からの出力(赤線)を2SC1815で増幅し、次いで47Kと3.3uFの積分回路で平滑・遅延化する。つまり、上記の図 (d)や(e) のような PIC が読めるようなきれいな波形が、1個のトランジスタと4個の抵抗、それに2個のコンデンサを用いてつくり出せるのである。 特に 3.3uFのコンデンサがキーパーツで実験的に決めた。容量の大きさが波形や2V以下の部分の幅に関係する。実際この部分が回路製作の際の最重要ポイントであった。

AC100Vの機器のON/OFFさせるのに手元にあった SSR (秋月ソリッドステートリレーキット25A)を使った。 PIC のピンで直接ドライブ出来るので便利である。 またリレーが動作中であることを知らせるため、GP2に緑の点滅型LEDを取り付けた。 

   写真のボード上、左下の丸い緑のプラスチック筺体がキッチンタイマ、真ん中に12F629、右下にSSR が見える。 左上方には三端子レギュレータ 317が見える。 完成した装置では、長持ちする単四電池1本をキッチンタイマの電源に使用しAC100V側にフューズを組み入れた。

     

 

[このタイマの使い方]

A) 設定時間だけONになり、終了するとOFFになる

1) キッチンタイマの時間を設定する。

2) システムの電源を入れる。

3) キッチンタイマのSTART/STOPボタンを押す。

   :AC100Vの外部機器のSWが入る。

   :設定時間に達するとSWが切れ、タイマのアラームが60秒間

   鳴り停止する (アラームはSTART/STOPボタンで途中停止可能)。

再度、同じ設定時間で利用するには、

4) 60秒間待つ (なぜ待たなければならないのか今のところ不明?)。

5) START/STOPボタンを押す。

   :AC100Vの外部機器のSWが入る。

   :設定時間に達するとSWが切れ、タイマのアラームが60秒間

   鳴り停止する。

また、3)の後にすぐ利用するには、

6) PICのリセットボタンを押すか、または電源を切って、また入れる。

 

B) カウントアップしている時間中ONなり、停止するとOFFになる

キッチンタイマをリセット(MinとSecボタンを同時に押す)して液晶表示を0にし、PICのリセットを押すか電源を一度切ってまた入れなおした後、START/STOPボタンを押すとストップウオッチのように時間のカウントアップが始まり、同時にSSRもONになる。もう一度START/STOPボタンを押すとSSRはOFFになる。通電時間が知りたい目的に利用できる。

 

プログラム

  出来るだけ簡単を目標につくった。電源ONでタイマスタートパルスの到着を待つルーチイン(If TimerIN=0 Then.) が動作し、到着が確認されると、 SSRや緑のLEDをONにする部分に飛び実行する。到着がないとLoop1の中をぐるぐるまわって待つ。SSRや緑のLEDをONにした後今度はタイマ終了パルスの到着を待つLooP2に入り、到着すると、SSRや緑のLEDをOFFにする部分に飛び実行する。到着がないと、Loop2の中をぐるぐるまわって待つ。SSRや緑のLEDをOFFにした後は@goto 0 でシステムをリセットする。 ただ理由が不明だが、この場合START/STOPボタンを押しての再スタートには60秒程待つ必要がある。すぐに再びプログラムを最初から実行したい時は、リセットボタンを押すか電源を一度切って入れ直す。ちなみにこのプログラムは12F629の全メモリの5分の1も使っていない。

 

**************** 備忘録 **********

'KTimer1.bas  using 12F629  2008.1.15  Works but requiring 1-min wait to restart.

‘Internal 4MHz clock used

 

'**************** ピン結合 *********

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 2: GP5 to GND via 100K R

'Pin 3: GP4 to GND via 100K R

'Pin 4: GP3/MCLR (Reset) to Vdd via 10K

'Pin 5: GP2 - Output to LED Green (SSR-ON indicator)

'Pin 6: GP1 - Output to SSR (+pole)                       

'Pin 7: GP0 - Input from Kitchen Timer (+pole)

 

'********* プログラム本体 *********

TRISIO=%001001      'GP0,GP3 - Inputs, GP1,GP2 - Outputs

CMCON=7           'Disable Comparators,. found essential!!(これが無いと動かない)

TimerIN var GPIO.0   'Input from Kitchen Timer

ToSSR var GPIO.1    'Output to SSR (Solid State Relay, +pole)

ToLED var GPIO.2    'Output to LED green

 

Low ToSSR

Low ToLED

 

Loop1:              'START/STOP pulse check routine

If TimerIN=0 then

Goto GPIOchange1

Else

Goto Loop1

Endif

 

GPIOchange1:

Pause 1000  'Wait 1 sec till the end of 1st pulse

High ToSSR  'SSR -> ON

High ToLED  'LED green -> ON

 

Loop2:              'Alarm ending pulse check routine

IF TimerIN=0 then

Goto GPIOchange2

Else

Goto Loop2

Endif

 

GPIOchange2:

Low ToSSR   'SSR -> OFF

Low ToLED   'LED green -> OFF

Pause 63000 'Wait 63 sec till the end of buzzer

@goto 0     'Assembler code – Resetting (Return to the top of program) and start again)!

End

'******* プログラムの終わり  *******

 

'Note:

'Aki programmer's configuration:

'FOSC - INTOSC(automatically 4MHz, GP4:I/O)

'WDTE - Enable, PWRTE - Enable, MCLR - MCLRin

'BODEN - Enable,CP - Not_Protect, CDP - Not_Protect

 

気づいたことなど

1)   キッチンタイマは安くても石英クロックを使っているので時間が正確である。

2)   設定時間がそのまま残るので、同じ設定時間を繰り返し使う場合(例えばラーメン3分間)はそのつど再設定の必要がない。

3)   PIC リセットや電源OFF―>ON リセットなしで、プログラムを再び実行させるのに60秒ほど待たなければならないのはちょっと不便。なぜ60秒なのかまだ分からない。

4)   ストップウオッチにAC100VのON/OFF機能がついたような使い方ができる。

5)   アラームを多用すると電池の消耗がはやい。

6)    使用するキッチンタイマが今回のものと違う場合、あらためて出力波形を調べ、回路を変え、プログラムをつくり変える必要がある。しかし、大きく変える必要はない。

 

余談

  いちど実験してみたいテーマだった。 キッチンタイマからのパルスの取り込みのための積分回路というのがあり、得体の知れない入力波形を整えてくれる、エエこと知りました。 また、PICBasic Pro の中で、ソフトリセットをかけることが出来るらしい @goto 0 というアッセンブラコマンドがあるのを見つけたのも収穫。かかった費用1000円未満のエコプロジェクトでした。

 

 

改良型の制作 (2008.2.20)

  上記の装置を使っているうち以下のようなことが気になった。

1)    100V機器を一定時間ONに保ちOFFにした後、アラームが60秒間鳴るがその終了直後に一瞬100V機器をONにする現象が時折起こること分かった。 まずい。

2)   PICリセットや電源OFF―>ON リセットなしでプログラムを再び実行させるのに、60秒ほど待たなければならない(理由不明)のはいかにも不便。

 

これらの不具合を一気に解決しようともがき続けて約一か月。 ソフトウエアリセット(@goto を使う)をやめて、もう一つの12F629(2) (主PICは12F629(1)とする)を使うハードウエアリセットを思いついた。その原理は、約60秒間のアラームが終了したら12F629(1)からパルス出し、それを12F629(2)に読み込ませ、一定の時間稼ぎ(遅れ)をさせた後、そのGP4ピンよりLowパルスを500ms出させて12F629(1)のGP3ピンをLowにしてリセットをかける方法である。つまり12F629(2)をDelayをつくり出すチップとして使うのである。以下に回路図と写真を示す。2個目の12F629(2)がキッチンタイマ本体のすぐ右手に見える。

これで約60秒間のアラームが終了後、1秒間ほど待ってキッチンタイマのSTART/STOPボタンを押すと再度同じ設定時間で利用出来るようになる。


 

プログラム

      使用した 主12F629(1) と 副12F629(2) にそれぞれ以下のようなプログラムを組み込んだ。  動作は、まず12F629(1)がプログラムを実行し、まさに終了直前にパルスを12F629(2)に送り、そして終了する(Endで終わる)。パルスを受けて12F629(2)はプログラムで時間稼ぎし(3秒間)、次いで完全に停止している12F629(1)にパルスを送ってリセットをかけてやる。これでキッチンタイマ)は、すぐまたSTART/STOPボタンを押して利用できるようになる。

 

12F629(1)のプログラム  (KTimer4a.bas)

アラームの終了後に200 ms のLowパルスを12F629(2)に送るため、 Pause 64800 とPause 10000の2個で時間稼ぎ(合計74.8 sec、実際はPICが4MHz以下で動作しているようで10%ほど短いようである)をさせる部分がポイントであった。必ずアラームの終了後にLowパルスが出るようにしないといけないつまり時間稼ぎの設定時間がアラーム終了時より若干遅れて終わる必要がある。Lowパルスは設定時間が終了した直後に出る。その発生は12F629(2)のGP5に接続した赤いLEDが80ms点灯することで確認できる。

 

**************** 備忘録 **********

'KTimer4a.bas  2008.2.20  At last succeeded!

'**************** 12F629 (1) のピン結合*********

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 2: GP5 to GND via 100K R

'Pin 3: GP4 to GP0 of 12F629 (2)

'Pin 4: GP3/MCLR (Reset) to Vdd via 10K and to GP4 of 12F629 (2)

'Pin 5: GP2 - Output to LED Green (SSR-ON indicator)

'Pin 6: GP1 - Output to SSR (+pole)                       

'Pin 7: GP0 - Input from Kitchen Timer (+pole)

 

'********* プログラム本体 *********

TRISIO=%001001      'GP0,GP3 - Inputs, GP1,GP2,GP4 - Outputs

CMCON=7           'Disable Comparators,. found essential!!

 

TimerIN var GPIO.0   'Input from Kitchen Timer

ToSSR var GPIO.1    'Output to SSR (Solid State Relay, +pole)

ToLED var GPIO.2    'Output to LED green (indicator)

DelayPIC var GPIO.4  'Output to 12F629 (2) for making a delayed reset pulse

 

Low ToSSR

Low ToLED

High DelayPIC

 

Loop1:             'START/STOPパルス検知ルーチン

If TimerIN=0 then

Goto GPIOchange1

Else

Goto Loop1

Endif

 

GPIOchange1:      ‘SSRとLED greenをONにする

Pause 1000  'Wait 1 sec till the end of 1st pulse

High ToSSR  'SSR -> ON

High ToLED  'LED green -> ON

 

Loop2:             'アラームパルス検知ルーチン

IF TimerIN=0 then

Goto GPIOchange2

Else

Goto Loop2

Endif

 

GPIOchange2:    ‘SSRとLED greenをOFFにする

Low ToSSR    'SSR -> OFF

Low ToLED    'LED green -> OFF

 

Pause 64800  'Wait 64.8 sec till the end of alarm (65000 max)

Pause 10000  'Wait 10 sec  Key point! Total of 74.8 sec (in theory)

Low DelayPIC  'Send a 200-ms pulse (+5V -> 0 -> +5V) to GP0 of 12F629 (2)

Pause 200    '200 ms (実測値 約180 ms)

High DelayPIC

 

End

'*********** プログラムの終わり ************

 

'Note:

'Programmer's configuration:

'FOSC - INTOSC(automatically 4MHz, GP4:I/O)

'WDTE - Enable, PWRTE - Enable, MCLR - MCLRin

'BODEN - Enable,CP - Not_Protect, CDP - Not_Protect

 

12F629(2)のプログラム (KTimerA.bas)

  主12F629(1)のGP4からのパルスを12F629(2)のGP0から取り込むためには、GP0をプルアップ(to Vdd via 10K)しておいて、GP4からのLowパルスをプログラムの中で検知(If PlsIn=0 Thenを使って)してやる必要がある。逆、つまりGP4からHighパルスを出し12F629(2)のGP0で読み込み、If PlsIn=1 Then で検知しようとしたがダメであった。これが分からずてこずった。PICとPICを接続する場合に注意すべきポイントである。

 

’**************** 備忘録 **********

'KTimerA.bas  2008.2.20  Succeeded!

'Pull-up/PlsIn=0 (negative logic! connected to Vdd via 10k) was keypoint!

'This 2nd 12F629 is used as delay timer for reset

'**************** 12F629 (2) のピン結合 *********

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 2: GP5 - Output to light up LEDred as reset-pulse sending indicator

'Pin 3: GP4 - Output to GP3 of 12F629 (1) to reset 12F629 (1)

'Pin 4: GP3 - Input for reset

'Pin 7: GP0 - Input from GP4 of 12F629 (1) to take a trigger pulse

 

'********* プログラム本体 *********

TRISIO=%001001      'GP0, GP3 - Inputs, GP4 - Output

CMCON=7           'Disable Comparators. found essential!!

 

PlsIn var GPIO.0     'Input from GP4 of 12F629 (1) - 200 ms

ToReset var GPIO.4  'Output to GP3 of 12F629 (1) to send a reset pulse 500 ms

 

Loop:               '主12F629(1)のGP4からのパルス読み込み

High ToReset        'Keep ToReset output high     

Low LEDred

If PlsIn=0 then       'If the input is low, goto WaitR (Lowを検知している – 大切!)

Goto WaitR

Endif

Goto Loop

 

WaitR:       ‘3秒待って500 msのLowパルスをリセットのため12F629(1)のGP3の送る

Pause 3000   'Wait 3 sec (delay)

High LEDred  ‘リセットパルスをこれから送ることを通知する。この点灯はアラーム終了後でないといけない。

Pause 80     '80 ms

Low LEDred

Low ToReset  'Keep ToReset low for 500 ms to low GP3 of 12F629 (1)

Pause 500    '500 ms

High ToReset

Goto Loop

 

End

'*********** プログラムの終わり ************

 

'Note:

'Programmer's configuration:

'FOSC - INTOSC(automatically 4MHz, GP4:I/O)

'WDTE - Enable, PWRTE - Enable, MCLR - MCLRin

'BODEN - Enable,CP - Not_Protect, CDP - Not_Protect

 

余談

  分からないことが次々に起こって正直途中で投げ出したくなった。こらえて粘って何とか乗り切った。今回は入力の検知にHigh −> Low ロジック (If PlsIn=0 then の部分)の使用の必要性を知ったのと、PICを使ってDelayをつくることが出来たのは収穫。

 

Menu Pageへ戻る    

Topへ戻る