入場者数
kema's web TopWho is kema?電気・回路無線コンピュータ
バイク鉄道関係妙な写真・イラストkema's料理ゲーム関係

上に戻る

エレコン1998
エレコン1999
エレコン2000
エレコン2000

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

PIC12C672 完成予定図


製作の動機。

皆さんは、パソコンをどのくらい使っていますか?最近はインターネットの普及により、家庭でもパソコンをネットにつなげているのが当たり前になりました。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個、あとは多少の部品で完成しました。以下に製作の様子を載せておきます。

購入してきた部品。

↑秋葉原で購入してきた部品一式。

組み立て中 組み立て中 組み立て中 組み立て中 組み立て中 組み立て中

↑PICライタ製作中の様子

動作確認中 動作確認中

↑試しに新品デバイスのデータを読み込んでみると、内臓OSC較正データが読み出せるので多分大丈夫かな、と。


製作編その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・細部編集&手直し)