換気扇タイマー2

以前に作った換気扇タイマーですが、やはりアナログ的なところが使い勝手が悪いと言うことで、ディジタル式を作ってみました。
すべてロジックで作ることも考えたのですが、ハードロジックの場合、仕様変更ごとに回路を設計し直さなくてはならないので、 やはりソフト屋さんらしくマイコンを使うことにします。

マイコンは色々出回っていますが、AVRかPICがお手軽ですね。ディジタル信号処理専用のdsも出たのでPICを使用することにしました。
(個人的にdsを使う予定はありませんが・・)


図1.携帯電話充電器を分解
今回はPICマイコンを使用するので、5V前後の電源が必要になってきます。 しかし、小型・軽量化という事で、なるべくトランスは使いたくありません。また、7セグメントLEDを光らせるので、 コンデンサ電圧降下型だと電流が大きい分、コンデンサも大きくなります。
そこで、不要になった携帯電話の充電器に目をつけました。
これだと、かなり軽量小型化できますし、出力容量も、5.4V/800mAと目的にぴったりです。(と、言うかちょっとオーバースペックですが)


図2.回路図
とりあえず、図2が今回製作する回路図です。
なるべく部品点数を削減するためにPICの空きポートは出力にして、LEDのダイナミック点灯も高輝度型を使用して電流を極力抑えて(3mA程度)、 マイコンのポートで直接ドライブしています。 16F628を使うならダイナミック点灯でなくてもいいのですが、当初16F84で設計・試作していたのですが16F84が1つしかなかったので、16F628に変更しました。(こっちの方が安いし)
R12、R13はアノード側のドライブTrのベースキャリア放電用です。ダイナミック点灯の残像が気にならないならこれも削除することができます。
入力スイッチは、RB0にチャタリングキャンセラーを通して割り込み処理します。チャタリングをソフトで除去するならこの部分も不要ですが、ソフトが面倒なのでCRのフィルタで処理しました。
リレーも、当初SSRを使おうと思っていたのですが、やはり「カチッ」と音がしないと電源が入った気がしないので、メカニカルリレーにしました。

プログラムリスト
実は、今回はじめてPICをプログラムしました。
開発は、IDEをMicrochipのMPLAB(v8.0)を使用し、ライターは秋月さんのAKI-PICを使用しました。
PICはRISCマイコンなので、Z80やx86のようなCISCに比べるとかなり命令に貧弱さを感じます。(でもRISCなので、インストラクションあたりの速度は速い)
会社員だった頃は、ほとんどのマイコンはCでの開発が主でしたので、RISCのアセンブラは今回初めてです。
タイマーや、スイッチの管理はすべて割り込みで処理をしています。(よってメインループは、NOPのみ)
ダイナミック点灯も10msのタイマー割り込みで処理しています。

SWを押す回数 初期設定時間(分)
1 2
2 5
3 10
4 20
5 30
6 60
7 常時ON
8 OFF
9 1へ戻る
インターフェイスは前回と同様、スイッチ1つで操作なので、表1のようにサイクリックに変化するようにしました。
初期時間をプリセット後、LEDはカウントダウンを開始します。 また、動作中に1回押した場合は、直上近の値(のこり8分で押した場合は10分)にプリセットするようにしました。
このテーブルは、ソースコードのラベル:STEP_MINのテーブルを変更することによって変えられます。(これがソフトで組むことの利点ですね)

図3.完成基板(表) 図4.完成基板(裏)
ACソケットに値札が・・
図5.ケースに入れたところ
携帯充電基板は配線の関係上逆にしました
図6.正面からみたところ
LEDにはスモークの塩ビ板をかぶせました
 
図7.実験中  

なんとか完成して、現在エージング中です。
マイコンを利用すると何かと便利ですね。
ただ、マイコンを動かす電源をどうするかが一番ネックになってきます。
(一応今回の回路の消費電力は0.2W程度なのでかなり小さな電源でもいいのですが・・)