電子工作93 – 時間が来たら電源が切れる安全タイマーの製作
Electronics Project 93 –
Settable AC100V Safety Switch
概要 Introduction
例えば、電気ヒーターとか換気扇を使っていて、ある時間が経つと自動的に切れてくれるような簡単な安全タイマーが欲しくなり製作してみた。今回は、4ピンの12F629を使って設定時間を5分と15分のいずれかを選択出来るものにした。
This simple circuit was designed to automatically stop the operation of an electrical appliance by turning off SSR after 5 minutes or 10 minutes for safety. You can select 5-min or 15-min mode while the system is operating by pressing either SW1 or SW2. If changed, the time counting starts from beginning. The LED1 and LED2 indicate the time mode. When Power SW is turned on for the first time, the time mode is 5-min and the counting goes to zero after 5 minutes if SW2 is not pressed.
回路図 Circuit Diagram
下図のように、電源としてDC5V USB ACアダプタを使う。SW1(SW:スイッチ)とSW2を読込む線は5VにPull-upされていてSWを押すとGNDになり、この変化をプログラムが読込む。SW1が選択されるとLED1が、SW2だとLED2が点灯する。いずれが選択されても、その間はSSR(Solid
State Relay)はONになる。選択した時間が終了してLEDが消灯した後で再稼動させる場合は、Reset SWを押す。LED1が点灯中に、SW2を押すとLED1は消えてLED2が点灯して、15分間モードに変わる。LED2点灯中にSW1を押すと逆のことが起こる。
実験中 Testing using experimental board
押しボタン式の青色SW1とSW2がボードの右上に見える。電源を入れると緑色の5分間LED1が点灯し、時間が経つと消灯する。LED1が点灯中にSW2を押すと15分間LED2が点灯し、時間が経つと消灯する。同じくLED2が点灯中にSW1を押すとLED1が点灯する。このように別のSWを押すごとに5分間と15分間が交互に入れ替わり、各時間モードで最初から時間のカウントが始まる。LED1またはLED2が点灯中はSSRを駆動する赤いLED(左側中央部に見える)が点灯する。
結果&コメント
1)
正常に動作することが確認された。
2) PICのピンの数が足りないので、ブザーの使用は出来なかった。
3)
プログラムがうまく動作しなくて、ほぼ1日悶悶。SW1とSW2を5VにPull-upしたら動くようになった。
4) 今回は5分間と15分間のみだが、ピン数の多いPICを使ってもっと時間モードの数を増やしたい。
5) 実機はまだ製作していないが、SSR部を加えれば実用になるはず。
プログラム Program
電源ONで、先ずShortTimeに入り、SSRとLED1をONにし、For m=1 to 3600で5分間の時間計測に入る。その途中のIf SW2=0 ThenでSW2が押されているかどうかをチェック、押されていればLongTimeに飛んで15分間の計測ルーチンに入る。押されていなければ計測を続け、終了したらSSRとLED1をOFFにして終わる。15分間計測ルーチンに入った場合は先ずSSRとLED2をONにして、For m=1 to 10800 で時間計測を開始し、同時にIf SW1=0 ThenでSW1の入力をチェックする。もし入力があればTopに戻って、最初からルーチンを再開始する。しかし、入力がなければ15分間計測ルーチンを続け、終わればSSRとLED2をOFFにして終了する。
'********************************************
'SettableACTimer629.bas 2016.11.26
'5-min and 15-min AC timer
'Program for 12F629
'*********Pin connections*********
'Pin1: Vdd(5v)
'Pin8: Vss(GND)
'Pin4 (GP3): Reset(MCLR)
'Pin5 (GP2): To SSR
'Pin7 (GP0): To SW1
'Pin6 (GP1): To SW2
'Pin3 (GP4): To LED1
'Pin2 (GP5): To LED2
'*********Program*********
CMCON=7 'Comparator off
TRISIO=%001011
SW1 var GPIO.0
SW2 var GPIO.1
SSR var GPIO.2
LED1 var GPIO.4
LED2 var GPIO.5
m var word
Top:
LED1=0
LED2=0
SSR=0
ShortTime: '5-min timer
High SSR
High LED1
For m=1 to 3600 '5 min (actually measured: 4m 55s)
Pause 100 '0.1 sec
If SW2=0 Then
Low SSR
Low LED1
Goto LongTime
Endif
Next m
Low SSR
Low LED1
Goto finish
LongTime: '15-min timer
High SSR
High LED2
For m=1 to 10800 '15 min (actually measured: 14m 44s)
Pause 100 '0.1 sec
If SW1=0 Then
Goto Top
Endif
Next m
Low SSR
Low LED2
Goto finish
finish:
Stop
End
'********* End of Program ***********
'Note:
'melabs U2 Programmer's
configurations for 12F629:
'Oscillator - INTOSC; WDTE –
Enable; PWRTE - Disable
'MCLR - Reset ; BODEN - Enable; CD - Disable; CDP – Disable
4つの設定時間が選択出来る「時間が来たら電源が切れる安全タイマー」(2016.12.1 追加)
Settable AC100V Safety Timer with 4 Time Modes (Newly added on
2016.12.1)
8ピンの12F629では設定時間が2つしかとれなかったので、手元にあった18ピンの16F628Aを使って設定時間を4つに増やしてみた。まだ、ピン数に余裕があるので設定時間をあと3つ増やせる。
Using 16F628A, the number of input switches was increased from the
previous 2 to 4 this time. Accordingly, the new program as shown below is
designed to be able to deal with the entry of SW1 – SW4 and the lighting-up of
LED1 – LED4. The 5-min, 15-min, 30-min and 1-hr software-based timers are found
to be reasonably accurate so that they are applicable for general practical
purposes.
回路図 Circuit Diagram
4個のSWと4個のLEDをRB0からRB7の8個のPORTB.0 からPORTB.7に接続した。この16F628AのPIN3にはRA4/AN4と記述されているが、実際にはAN4の機能はない。便宜上別のPICのピン配置図を流用したためにこのようになった。
実験中 Testing using
experimental board
左下部の4つの青色のものが上からSW1,SW2,SW3、SW4で、右側中央の4個の緑色LED1,LED2,LED3、LED4が対応する。
それらのすぐ上の赤色LEDはSSRの代わりに接続されている。緑色LEDが時間が来て消灯するとこの赤色LEDも消灯する。
動作中は4個のLEDの内の1個が常に点灯していて、対応していない別のSWを押すとそれと対応するLEDが点灯し、前のものは消灯する。
Programmer I use.
いつも使用しているアメリカのmicroEngineering Labs, Inc.社(PicBasic Proの開発&販売会社)製のmelabs U2 Programmerである。
5年位前に購入。8ピンから40ピンまでの500種以上のPIC microcontrollersのプログラムの焼き込みが可能だという。
MicroCode Studioという無料のIDEと一緒に使うとプログラムの作成が大変楽に出来る。勿論USB接続で使う。
プログラム Program
16F628AのPORTAとPORTBの計16個の内、PORTAのRA0とPA5はSSRのドライブとReset用にそれぞれ使用。PORTBは8個の内の4個をSWと残りの4個をLEDのドライブに使用した。今回のプログラムの中ではSWが押された時に分岐するIf SWx=0 Then Goto xxxが3行に増えている。そして、分岐して行った矢先では前に点灯していたLEDをすべて消灯させておく必要がある。時間を計測する部分、例えば5分間モードのFor m=1 to 3050では、3050は実際にストップウォッチを使って測って求めた値である。他の15分、30分、1時間モードの値も、この数値を倍数して求めた。実際に測定した時間は以外と正確であった(ただし、各1回の測定で得られた値による)。
'********************************************
'SettableACTimer628A.bas 2016.12.1
'5-min, 15-min, 30-min and 1-hr AC100V safety timer
'Program for 16F628A
'PicBasic Pro V2.50A
'*********Pin connections*********
'Pin14: Vdd(5v)
'Pin5: Vss(GND)
'Pin4(PA5): Reset(MCLR)
'Pin6(PB0): To SW1
'Pin7(PB1): To SW2
'Pin8(PB2): To SW3
'Pin9(PB3): To SW4
'Pin10(PB4): To LED4
'Pin11(PB5): To LED3
'Pin12(PB6): To LED2
'Pin13(PB7): To LED1
'Pin17(RA0): To SSR
'*********Program*********
CMCON=7 'Comparator off
TRISA=%00100000
TRISB=%00001111
SW1 var PORTB.0
SW2 var PORTB.1
SW3 var PORTB.2
SW4 var PORTB.3
LED4 var PORTB.4
LED3 var PORTB.5
LED2 var PORTB.6
LED1 var PORTB.7
SSR var PORTA.0
Reset var PORTA.5
m var word
LED1=0
LED2=0
LED3=0
LED4=0
SSR=0
A5MinTime: '5-min timer
Low SSR
Low LED2
Low LED3
Low LED4
High SSR
High LED1
For m=1 to 3050 '5 min 'experimentally value (measured value: 300 secs)
Pause 100 '0.1 sec
If SW2=0 Then Goto A15MinTime
If SW3=0 Then Goto A30MinTime
If SW4=0 Then Goto A1HrTime
Next m
Low SSR
Low LED1
Goto finish
A15MinTime: '15-min timer
Low SSR
Low LED1
Low LED3
Low LED4
High SSR
High LED2
For m=1 to 9153 '15 min 'measured value exactly 15m 00s using stopwatch
Pause 100 '0.1 sec
If SW1=0 Then Goto A5MinTime
If SW3=0 Then Goto A30MinTime
If SW4=0 Then Goto A1HrTime
Next m
Low SSR
Low LED2
Goto finish
A30MinTime: '30-min timer
Low SSR
Low LED1
Low LED2
Low LED4
High SSR
High LED3
For m=1 to 18305 '30 min measured value: 29m 44s
Pause 100 '0.1 sec
If SW1=0 Then Goto A5MinTime
If SW2=0 Then Goto A15MinTime
If SW4=0 Then Goto A1HrTime
Next m
Low SSR
Low LED3
Goto finish
A1HrTime: '1-hr timer
Low SSR
Low LED1
Low LED2
Low LED3
High SSR
High LED4
For m=1 to 36610 '1 hr measured value: 59m 56s
Pause 100 '0.1 sec
If SW1=0 Then Goto A5MinTime
If SW2=0 Then Goto A15MinTime
If SW3=0 Then Goto A30MinTime
Next m
Low SSR
Low LED4
Goto finish
finish:
Stop
End
'********* End of Program ***********
'Note:
'melabs U2 Programmer's
configurations for 16F628A
'Oscillator – INTOSCIO; WDTE –
Enabled; PWRTE – Disabled
'MCLR - Reset ;
BODEN – Enabled; LVProgramming – Disabled;
'Code – Not Protected; Data EEPROM – Not Protected
電子ブザーを取り付ける(2016.12.6 追加)
Addition of piezo transducer (buzzer) to Safety Timer (2016.12.6)
今回は電子ブザーを回路に加え、4個の時間モードの各モードが選択さた開始時にピリピリピリと鳴り、また、各モードが終了した時にピリピリピリが5回鳴る。以下に電子ブザーを加えた回路図とプログラムを表示する。
電子ブザー(直径24mmX厚さ6mm): DCの電圧をかけても鳴らず、数KHzの信号をかけると鳴る。圧電スピーカーとか圧電サウンダとも呼ばれる。
英語だと Piezo transducer と呼ばれている。
プログラム Program
各時間モードの開始時に、PicBasic
Proのコマンド(Sound)を使うSound Buzzer,[150,50]に入り、ピリピリピリと鳴るようにした。このコマンドの意味はBuzzerというPin(PORTA.1)に150(10KHz強)というホワイトノイズを、50の長さだけ発生させることを示している。各時間モードの終了時にはSound
Buzzer,[150,50]を5回繰り返して、ルーチンの終了を知らせてくれる。
'********************************************
'SettableACTimer628Am.bas 2016.12.6
'5-min, 15-min, 30-min and 1-hrAC timer
'Program for 16F628A
'PicBasic Pro V2.50A
'*********Pin connections*********
'Pin14: Vdd(5v)
'Pin5: Vss(GND)
'Pin4(PA5): Reset(MCLR)
'Pin6(PB0): To SW1
'Pin7(PB1): To SW2
'Pin8(PB2): To SW3
'Pin9(PB3): To SW4
'Pin10(PB4): To LED4
'Pin11(PB5): To LED3
'Pin12(PB6): To LED2
'Pin13(PB7): To LED1
'Pin17(RA0): To SSR
'Pin18(RA1): To Buzzer
'*********Program*********
CMCON=7 'Comparator off
TRISA=%00100000
TRISB=%00001111
SW1 var PORTB.0
SW2 var PORTB.1
SW3 var PORTB.2
SW4 var PORTB.3
LED4 var PORTB.4
LED3 var PORTB.5
LED2 var PORTB.6
LED1 var PORTB.7
SSR var PORTA.0
Reset var PORTA.5
Buzzer var PORTA.1
m var Word
n var Byte
LED1=0
LED2=0
LED3=0
LED4=0
SSR=0
Buzzer=0
A5MinTime: '5-min timer
Sound Buzzer,[150,50] 'drive the piezo buzzer piri,piri,piri when this timer is selected.
LOW SSR
LOW LED2
LOW LED3
LOW LED4
High SSR
High LED1
For m=1 to 3050 '5 min 'experimentally decided (measured value: 300 secs)
Pause 100 '0.1 sec
If SW2=0 Then Goto A15MinTime
If SW3=0 Then Goto A30MinTime
If SW4=0 Then Goto A1HrTime
Next m
Low SSR
Low LED1
Goto finish
A15MinTime: '15-min timer 'measured value: exactly 15m 00sec using stopwatch
Sound Buzzer,[150,50]
Low SSR
Low LED1
Low LED3
Low LED4
High SSR
High LED2
For m=1 to 9153 '15 min
Pause 100 '0.1 sec
If SW1=0 Then Goto A5MinTime
If SW3=0 Then Goto A30MinTime
If SW4=0 Then Goto A1HrTime
Next m
Low SSR
Low LED2
Goto finish
A30MinTime:
Sound Buzzer,[150,50]
Low SSR
Low LED1
Low LED2
Low LED4
High SSR
High LED3
For m=1 to 18305 '30 min measured value: 29m 44secs
Pause 100 '0.1 sec
If SW1=0 Then Goto A5MinTime
If SW2=0 Then Goto A15MinTime
If SW4=0 Then Goto A1HrTime
Next m
Low SSR
Low LED3
Goto finish
A1HrTime:
Sound Buzzer,[150,50]
Low SSR
Low LED1
Low LED2
Low LED3
High SSR
High LED4
For m=1 to 36610 '1 hr
Pause 100 '0.1 sec
If SW1=0 Then Goto A5MinTime
If SW2=0 Then Goto A15MinTime
If SW3=0 Then Goto A30MinTime
Next m
Low SSR
Low LED4
Goto finish
finish:
For n=1 to 5 'drive the piezo buzzer piri,piri,piri 5 times when each timer routine completes
Sound Buzzer,[150,50]
Pause 100
Next n
Stop
End
'********* End of Program ***********
'Note:
'melabs U2 Programmer's configurations
for 16F628A
'Oscillator – INTOSCIO; WDTE –
Enabled; PWRTE – Disabled
'MCLR - Reset ;
BODEN – Enabled; LVProgramming – Disabled;
'Code – Not Protected; Data EEPROM – Not Protected
Menu Pageへ戻る (Return to Menu Page)
Topへ戻る
(Return to Top of Page)