エレコン2000
電気通信大学エレクトロニクスコンテスト参加作品 「パソコン疲れ目チェッカー」のページ

製作の動機。
皆さんは、パソコンをどのくらい使っていますか?最近はインターネットの普及により、家庭でもパソコンをネットにつなげているのが当たり前になりました。5〜6年前は、ほんの一部の人が使っていただけだったのですけどね。今やメールアドレスを持っていることなど普通になりました。特に電通大生は、パソコン依存度が大きいのではないでしょうか(^^;
一方、多くの電通大生が眼鏡を掛けていることからわかるように(?)目の疲労も相当なものです。しばらくネットに夢中になっていて、気がつくと目が疲れきっていて痛くて涙が止まらなくて…という経験も多いでしょう。1時間モニターを見続けたら必ず休憩を取るように…と言われてもあっという間に何時間も経ってしまうのがネットの魔力(大げさ?)。大切な目を守るために、何か良いものが作れないかなぁ…と思い立って考えたのが、今回ご紹介する「パソコン疲れ目チェッカー」です。
作品の概要。
要するにタイマーです(爆)しかし、それだけじゃ何の面白みもないので、面白そうな機能を付けて、より便利にしてみちゃお〜(謎)ということで、以下のような特徴を考えてみました。
- まずは基本となる、時限タイマーがなくちゃね。
- パソコン使用経過時間を緑、黄、赤のランプで表示するといいかも?
- パソコン使用時間超過の場合に警告を発するブザーを付けちゃおう。
- パソコン使いすぎのときは、自動的にモニターの電源も切れると便利かな。
- 画面がチカチカする(ゲーム等の)時は、余計目が疲れるから、チカチカを検出して設定時間を短くしたほうがいいよね。
- 「あと、もうちょっとだけ」作業したいときに、一時的にタイマー解除のスイッチがあるといいかもね。
- あとはなんか適当に思いつきの機能があったら組み込んじゃえ。(爆)
…という会話が交わされたかどうかは定かではありませんが(注)、とにかく、成り行き任せの設計製作が始まったのでした。
(注:企画、設計、製作、全てワタクシ一人なのであります。)
回路の概要。
まず、中枢となるのはMicrochip社のワンチップマイコン「PIC」シリーズ。これは、普通のICと何ら変わりがないパッケージに、なんとマイコンを構成するのに必要な回路構成が一式組み込まれているのです。つまり、CPU、RAM、ROM、I/Oコントローラ、クロック発生回路、そして素子によってはA/Dコンバータやシリアルインターフェースまで組み込まれていると言う優れもの。こんな便利なもの使わなきゃ損でしょ?[Y]/y …と言うわけで(どういう訳だ)PICマイコンを使うことにしました。
このPICマイコンのチップですが、今回は8ピンという超小型パッケージにA/Dコンバータまで内蔵している「PIC12C671」を使用します。これに、1時間や2時間の時限タイマ、LEDコントロール、ブザー出力、モニタの電源コントロール、そして画面の「チカチカ度」を検出して疲れ目具合を判断する、超並列超高性能演算ダイアグラムを取り入れた計算ルーチン(注1)をプログラムし、超高性能演算素子として活躍してもらうわけです。これはもう常識を超えています。人類愛です。ニッポン万歳!(注2)
(注1:嘘です。ただの微分計算を行っているだけです。)
(注2:Microchip社は日本ではなくアメリカの会社です。)
次に、PICマイコンを支える周辺回路ですが、疲れ目具合を表示する超高輝度赤・黄・緑LEDランプ。これによって、時間経過と疲れ目具合を表示します。そして、パソコン画面の明るさを認識する光センサ。これによって、画面の明るさ具合を逐次取り込み、微分計算によって画面の輝度変化具合を算出し、ゲームのように画面の明るさが激しく変わる場合には目の疲労も大きいため、演算結果を用いてタイマー時間を短くする処理を行います。
マイコンの処理結果、目を守るために休憩が必要になると赤ランプが点灯して知らせますが、それでもなお休憩を取らなかった場合(ネットなんかしていると大抵そうなるでしょう:-p)ブザーが鳴り、それも無視していると最後にはモニターの電源をカットして「終了〜」させるわけです。このために、圧電素子とモニター電源コントローラを外部に構成します。
最後にケースですが、パソコンのモニターの画面のそばに貼り付けても邪魔にならない程度の大きさにします。具体的には5.5センチx4センチのケースに組み込みます。内部は非常に狭いのですが、何とか工夫して収めることに成功しました。(注3)
(注3:実はこの文章を書いている時点では、ケースに収まるかどうかすら分かりません。何せ、全く組み立てもしてないのに能書きだけこうやって書いているわけですから(爆))
マイコン書き込み器。
さて、この便利なワンチップマイコンですが、内部にデータを登録するためには専用の書き込み装置が必要になります。しかし、この書き込み器は商品として売っているものは1万円以上します。ならば、迷わず「自作。」(笑)…と言っても、実はPICマイコンは、書き込みのための回路が内蔵されていて、簡単な回路で書き込みが可能なのです。制御用のプログラムも、インターネットを通じて無料で入手できます。さらに、マイコンそのものの動作を制御するプログラム言語(アセンブラ)も無料で入手できます。いい世の中になりました(笑)。
というわけで、私のするべきことは、書き込み器の自作→制御プログラムの作成→疲れ目チェッカー自体の作成→動作確認&デバッグ、となるのでした。
製作編その1(PICライタ)
まずはこれが無くっちゃ始まらない「PIC書き込み器」を自作します。これはPC/AT互換機のパラレルポートに接続し、書き込みソフトからデータを受け取ってPICマイコンチップに与えてやる回路です。万能基板上にIC3個、トランジスタ3個、あとは多少の部品で完成しました。以下に製作の様子を載せておきます。
製作編その2(作品本体)
PICライタが出来上がれば次は作品本体です。まぁ、PICライタがちゃんと動作するかは、ちゃんと動作するプログラムを焼いて、動作させてみるまでは分からないわけではありますが、ともかく作品本体のケース加工などを行うことにしました。
ケースは前述のように5.5センチx4センチのケース。まずは部品を入れてみると…何とかギリギリ入るようです。でも狭くて組み立て大変そう!(って、苦労するのは自分なんだけど)
製作編その3(アセンブラ・プログラミング)
次に、いよいよPICアセンブラです。実はこれを書いている時点ではここまでしか完成していません。現時点では、PICアセンブラの勉強中です。
アセンブラと言っても、Z80あたりに比べればはるかに簡単な命令セットなので楽々…と言いたいところなのですが、今回使用しているPIC12C671は割合マイナーな素子のためか日本語データシートは見つからず、全て英語の128ページに渡るデータシートを読んでいるところです。さて、どうなることやら…(苦笑)。
…
以下、00年11月8日追加。
11月8日。 一週間以上の時間をかけて、ようやく プログラムが完成した(っぽい)\(^^)/
・・・と言うわけであります(笑)久々に書いたアセンブラで、しかも私の書いたアセンブラがまともに動いた試しが無いので非常に不安だったのですが、ナントカ動いてるっぽいです。えぇ。以下に私の書いたアセンブラソースの一部を載せてみたりしちゃったりして。
;
; ### Startup routine ###
;
ORG 0H
CALL _OSCCAL_DATA
BSF _STATUS,5 ;Change to BANK 1
MOVWF _OSCCAL ;OSC Calibration data set.
MOVLW 7FH
MOVWF _OPTION ;Option resister setting
MOVLW 06H
MOVWF _ADCON1 ;A/D resister setting
MOVLW 0BH
MOVWF _TRIS ;GPIO Directios configure
BCF _STATUS,5 ;Back to BANK 0
MOVLW 00H
MOVWF _INTCON ;Interrupt resister setting
MOVLW 41H
MOVWF _ADCON0
CLRF _GPIO
;
; ### Main routine ###
;
BTFSC _GPIO,1 ;Is Reset SW pushed down ?
GOTO CFGSW
MOVLW 30H
MOVWF _GPIO ;RED & YELLOW LED ON.
MOVLW 0EH ;Wait for a while.
MOVWF _TMP5
MAIN_1
CALL TIMER_1S
DECFSZ _TMP5
GOTO MAIN_1
CLRF _GPIO
BTFSC _GPIO,1
GOTO CFGSW
TEST_MODE ;Special (TEST) mode.
MOVLW 04H ;4 Minutes GREEN LED Highlight.
MOVWF _TIMER1
MOVLW 03H ;3 Minutes YELLOW LED Highlight.
MOVWF _TIMER2
MOVLW 02H ;2 Minutes RED LED Highlight.
MOVWF _TIMER3
MOVLW 02H ;1 Minutes BZ Ringing.
MOVWF _TIMER4
MOVLW 0FFH
MOVWF _CFG ;CFG = FFH
GOTO MAIN_2
CFGSW ;Nomal mode.
CLRF _CFG ;CFG = 00H
BTFSC _GPIO,3 ;Config SW reading.
GOTO LONG_TIME
MOVLW 28H ;40 Minutes GREEN LED Highlight.
MOVWF _TIMER1
MOVLW 1EH ;30 Minutes YELLOW LED Highlight.
MOVWF _TIMER2
MOVLW 14H ;20 Minutes RED LED Highlight.
MOVWF _TIMER3
MOVLW 3CH ;30 Minutes BZ Ringing.
MOVWF _TIMER4
GOTO MAIN_2
LONG_TIME
MOVLW 50H ;80 Minutes GREEN LED Highlight.
MOVWF _TIMER1
MOVLW 3CH ;60 Minutes YELLOW LED Highlight.
MOVWF _TIMER2
MOVLW 28H ;40 Minutes RED LED Highlight.
MOVWF _TIMER3
MOVLW 3CH ;30 Minutes BZ Ringing.
MOVWF _TIMER4
;
; The TIME_resistor's config.
;
; MODE TEST SHORT LONG
;_TIMER1 4 40 80
;_TIMER2 3 30 60
;_TIMER3 2 20 40
;_TIMER4 1 30 30
;(TOTAL) (10) (120) (210)
;All values in Decimal.
;
MAIN_2
MOVLW 3CH ;60 seconds.
MOVWF _TIMER5
CALL ADCON
をぉ、なんかこうやってみると凄そうに映る(笑)。ちなみにこれはプログラムソースの4分の1位です。しかし、偉そうに見える割には実際は大した事やってないんですがね。しかも、面倒なんでフローチャートも書かないで一気に書いたプログラムだから本当に合ってるのか分からん(苦笑)…ってそんなんで良いのだろうか。ま、いいよね? [N]/n
とはいえ、ハッタリ(笑)だけでもまともに動きそうなものができたので。目出度し目出度しと。
あ、そうだった、モニターコントローラも作らないといけないんだな。あ、それから、プログラムのデバックもしないと。あ、それから、プログラムサイクルのカウント数を検証しないと。あ、それから………げっ、まだまだやる事いっぱいあるじゃん(涙)。
私はどうなるのでしょう。ま、どーにかなるさっ。
というわけで今後も何かあれば追加します。
Last Update 2000/Nov/8 13:30 written by kema
(2006/1/27・細部編集&手直し)
|