電子工作66 – 経過時間をLEDの点滅で表示する、30分、1、2、3、4、5、6時間に設定可能な簡易ON/OFFタイマの製作
概要
前の電子工作54の簡易タイマの改良版である。前の実用機はあまりに大きく不格好なので以下の点に留意してコンパクトに仕上げた。
1) 街で見つけたAC100V差込付きUSB5V電源を使用した。
2) 12F629を1個加えて5個の時間経過表示LEDを1個に減らし、時間経過をLEDの点滅パターンの変化で表示するようにした。
3) 電子工作54の16F886のプログラムは全く変えず、追加した12F629のプログラムだけを新たに作成した。
注意: 危険なので製作は自分の責任で行うこと。
回路図と動作原理
回路図を下に示す。16F886から出ていた5本のLED駆動用のケーブルをそのまま新たに追加した12F629の5個のポートに直接つなぎ、その入力信号をプログラムで処理して1個の黄色LEDで5段階の点灯パターンで表示して経過時間が分かるようにした。今回はAC100V差込端子付き(メス)USB5V電源(RK−ABA11、DC5.0V−1A、ラディウス(株))を使用したので大変コンパクトに仕上がった。電源の不安定さなどによる12F629の誤動作もなかった。AC100V差込端子はアルミボックス内部でAC100Vコネクタ(オス)につないでSSR (Solid State Relay)を介して外部AC100V機器駆動用の出力端子に半田付けした。ADC(Analog-Digital Converter、16F886のPin2)の入力電圧を変えるVR100Kを回すと選択時間表示LED1−7のいずれが点灯する。各LEDに設定時間が割り当てられている(LED1=30min,LED2=1hr、LED3=2hrs、LED4=3hrs、LED5=4hrs、LED6=5hrs、LED7=6hrs)。設定した時間が来たらタイマが“切れる”または“入る”の設定はMode SW(L:“切れる”、H:“入る”) で行う。設定した時間が終了するとSSRとLED(G)がONまたはOFFする。経過時間レベル表示の黄色LED(LED(Y))は時間を設定すると点灯する。時間の経過とともに点灯していた黄色LEDは15ms消灯して点滅、50ms消灯して点滅、300ms消灯して点滅、1000ms消灯して点滅が続き、最後に黄色LEDは完全に消灯する。タイマを起動させてLEDs黄色LEDが常時点灯している時は経時間は大まかに言って設定時間の100―80%にあり、15ms消灯点滅では80−60%、50ms消灯点滅では60−40%、300ms消灯点滅では40−20%、そして1000ms消灯点滅では残り20%以下であることを示す。時間終了でこのLEDは完全に消灯する。 Reset SWを押すと同じLED表示時間でまた時間の計数が始まる。VR100Kを回して別の(または同じ)時間を選択すると、その瞬間をゼロして時間の計数がまた始まる。
完成した実用型簡易タイマ その内部、配線が結構大変だった
コンパクト化に役立ったAC100V差込付きUSB5V電源
結果&コメント
1) 電子工作54で述べたように時間の精度は結構高いはず。
2) LED(Y)の挙動と残り時間との関係を下表に示す。残り時間とは選択・設定した時間が時間の経過とともに減って行き、その時残っている時間の割合(%)のことである。
LED(Y)の挙動と残り時間との関係
LED(Y)の挙動 |
残り時間(%) |
連続点灯 |
100-80 |
5ms消灯点滅 |
80-60 |
50ms消灯点滅 |
60-40 |
300ms消灯点滅 |
40-20 |
1000ms消灯点滅 |
20 > |
3) 5ms−1000msの消灯点滅の判別は慣れると難しくない。消えてる時間を推測するとよい。
4) 総材料費は2000円ほど。組立て作業に4日ほどかかった。
プログラム
今回の回路は12F629の部分を除いて電子工作54のそれと同じ。したがって16F886のプログラムは電子工作54のそれと同じ'SimpleTimer16F886LvlsmlC.basを使っている。 以下の様に12F629のプログラムは新しく作成した。12F629のGPIO.0−GPIO.4の5本のポートに16F886からの出力をそれぞれ取り込み、プログラムで処理して12F629のGPIO..5より“H”または“L”信号を出力させて黄色LEDを駆動する。プログラム中の日本語コメントにあるように、タイマ起動後は黄色LEDは連続点灯、時間の経過とともに、15ms消灯点滅、50ms消灯点滅、300ms消灯点滅、1000ms消灯点滅、そして時間終了で完全消灯する。
‘********************************************
'SimpleTimer16F886+12F629A.bas (2013.6.16)
'*********** Program **********
TRISIO=%011111 'GPIO.5 -> output ‘初期設定
CMCON=7 'Disable Comparator
LEDOUT var GPIO.5 'Output from 12F629 ‘各ポートを定義する
LEDL1 VAR GPIO.4 'Input from 16F889
LEDL2 VAR GPIO.3 'Input from 16F889
LEDL3 VAR GPIO.2 'Input from 16F889
LEDL4 VAR GPIO.1 'Input from 16F889
LEDL5 VAR GPIO.0 'Input from 16F889
Scan:
LEDOUT=0
LEDL1=0
LEDL2=0
LEDL3=0
LEDL4=0
LEDL5=0
If (LEDL1=1) AND (LEDL2=1) AND (LEDL3=1) AND (LEDL4=1) AND (LEDL5=1) THEN SIG1 ‘16F886からポートへの入力が全部“H”の時SIG1へ飛ぶ
If (LEDL1=1) AND (LEDL2=1) AND (LEDL3=1) AND (LEDL4=1) AND (LEDL5=0) THEN SIG2 ‘16F886からポートGPIO.0(LEDL5)へ入力だけが“L”の時SIG2へ飛ぶ
If (LEDL1=1) AND (LEDL2=1) AND (LEDL3=1) AND (LEDL4=0) AND (LEDL5=0) THEN SIG3
If (LEDL1=1) AND (LEDL2=1) AND (LEDL3=0) AND (LEDL4=0) AND (LEDL5=0) THEN SIG4
If (LEDL1=1) AND (LEDL2=0) AND (LEDL3=0) AND (LEDL4=0) AND (LEDL5=0) THEN SIG5
If (LEDL1=0) AND (LEDL2=0) AND (LEDL3=0) AND (LEDL4=0) AND (LEDL5=0) THEN SIG6 ‘16F886からポートへの入力が全部“L”の時SIG6へ飛ぶ
SIG1: ‘ここに飛んで来た場合
High LEDOUT ‘:黄色LEDを点灯させる
GOTO Scan ‘Scanに飛ぶ
SIG2: ‘ここに飛んで来た場合
High LEDOUT ‘:黄色LEDを1秒間点灯させる
Pause 1000 '1 sec
LOW LEDOUT ‘黄色LEDを15ms間消灯させる
Pause 15 '15ms
High LEDOUT ‘:黄色LEDを点灯させる
GOTO Scan ‘Scanに飛ぶ
SIG3:
High LEDOUT
Pause 1000 '1 sec
LOW LEDOUT ‘黄色LEDを50ms間消灯させる
Pause 50 '50ms
High LEDOUT
GOTO Scan
SIG4:
High LEDOUT
pause 1000 '1 sec
LOW LEDOUT ‘黄色LEDを300ms間消灯させる
Pause 300 '300ms
High LEDOUT
GOTO Scan
SIG5:
High LEDOUT
Pause 1000 '1 sec
LOW LEDOUT ‘黄色LEDを1000ms(=1sec)間消灯させる
Pause 1000 '1000ms
High LEDOUT
GOTO Scan
SIG6: ‘ここに飛んで来た場合
LOW LEDOUT ‘:黄色LEDを消灯させる
GOTO Scan ‘Scanに飛ぶ
'****** End of Program ********
Note:
'Programmer's configuration must be set as follows:
'1) FOSC - INTOSC(GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Internal (so no MCLR-resistor-+Vdd connection
'required!! ); BODEN - Enable; CD - Disable; CDP - Disable.