昔作ったドリームライトの問題点と今回の改善ポイント
8年前のドリームライト Ver.1を作ったあとに気が付いた問題点です。
LEDのちらつきが気になる、そもそも明るくない
従来はLEDをPWM制御するためにPICのタイマーを使いましたが、IRリモコンの受信処理との兼ね合いでPWM周波数を高く設定することができず、ちらつきが発生していました。
また、単色LEDを使用していたため大量のLEDを格納できず、結果として照明とは言えない「なんだか暗い玉」になってしまいました。
ドリームライト2ではPWMコントローラを内蔵したフルカラーLED "APA106-F8"を使って発光周波数を向上させるとともに、LEDの数を6個に増やして光量をアップしました。 このLEDはシリアル通信で24bitのデータを送ると、各色8bitでフルカラーを表示してくれる優れものです。良い時代になりましたね。
ドリームライト2ではPWMコントローラを内蔵したフルカラーLED "APA106-F8"を使って発光周波数を向上させるとともに、LEDの数を6個に増やして光量をアップしました。 このLEDはシリアル通信で24bitのデータを送ると、各色8bitでフルカラーを表示してくれる優れものです。良い時代になりましたね。
部品を納めるケースの問題
Ver.1は紙製の円柱型ケースの上にLEDの光を拡散させるためのピンポン玉を乗せていました。
ピンポン玉をケースにうまく接着できなかった事と、赤外線リモコンの受光部の穴が小さすぎて操作範囲がかなり限定されたため、まともに利用できませんでした。
ドリームライト2では白色半透明のプラスチックケースを利用し、赤外線を効率よく透過受信させるとともに、ピンポン玉よりも光の透過率が高く明るい照明を実現しました。
ドリームライト2では白色半透明のプラスチックケースを利用し、赤外線を効率よく透過受信させるとともに、ピンポン玉よりも光の透過率が高く明るい照明を実現しました。
ハードウエア
メインの処理にはPIC12F683を使いました。
LEDとの通信速度は2Mbps以上が要求されるため内部クロックを使用できず、乗除算のパフォーマンスも考慮して20MHzのセラロックを使用しています。
赤外線の受信はCCP割り込みを使ったELMさんのサイトで公開されている赤外線リモコン制御モジュールを移植して使っています。
LEDの発光色を個別に変える予定はなかったのですが、とりあえず信号ラインはカスケード接続にしてあります。PWMの影響で電源にかなりのノイズが乗るのでパスコンを付けて対策をしています。
基板は感光基板を使った自作モノです。露光からエッチング完了まで30分程度、穴あけ・ソルダーレジスト・円形カットを含めてトータル2時間程度で出来上がります。
基板の余ったエリアにはユニバーサル基板になるランドを設け、デバッグ用に入出力の余ったピンも引き出して直近まで持ってきてあります。 最終的に1本はブザー出力としてアサインし、ユニバーサル部分を有効に活用しました。
LEDの発光色を個別に変える予定はなかったのですが、とりあえず信号ラインはカスケード接続にしてあります。PWMの影響で電源にかなりのノイズが乗るのでパスコンを付けて対策をしています。
基板は感光基板を使った自作モノです。露光からエッチング完了まで30分程度、穴あけ・ソルダーレジスト・円形カットを含めてトータル2時間程度で出来上がります。
基板の余ったエリアにはユニバーサル基板になるランドを設け、デバッグ用に入出力の余ったピンも引き出して直近まで持ってきてあります。 最終的に1本はブザー出力としてアサインし、ユニバーサル部分を有効に活用しました。
ソフトウエア
ソースリスト Ver.0.12
今回もアセンブラのみで記述し、コードサイズは1,283ワードあります。色指定や赤外線の受信のルーチンは乗除算が多用されていてコーディングの効率がすこぶる悪いのですが、目を瞑ってひたすら書いています。
今回もアセンブラのみで記述し、コードサイズは1,283ワードあります。色指定や赤外線の受信のルーチンは乗除算が多用されていてコーディングの効率がすこぶる悪いのですが、目を瞑ってひたすら書いています。
色指定
冒頭の改善点にも書いたとおり、CPUでPWMの波形を作る必要がなくなり実行時間に大幅な余裕ができたので、従来のHSL方式による色指定に加えてRGB・HSV方式の色指定ができるようにプログラムを追加しました。
LEDに送信する色情報はRGBで保持しているため、RGBを介してHSLとHSVの3種類を自由に行き来して色指定できるようになっています。
夕焼けモード
夕焼けモードはHSL方式を使って夕焼けのような色をシミュレートするモードです。
明るさ最大ではLED自体が発する昼光色、明るさを抑えて行くと昼白色を経て鮮やかなオレンジに移行し、さらに暗くすると彩度を抑えて暗い灰色になり、消灯間際には色相を青に変更して日没のような暗い青を演出するようになっています。
明るさ最大ではLED自体が発する昼光色、明るさを抑えて行くと昼白色を経て鮮やかなオレンジに移行し、さらに暗くすると彩度を抑えて暗い灰色になり、消灯間際には色相を青に変更して日没のような暗い青を演出するようになっています。
使ってみた感想・製作過程で苦労した点
- 明るい照明として本当に使いやすくなった。前のは本当に暗すぎた。
- 3種類のカラーモードを付けた結果色指定が容易になり、使いやすさがぐっと上がった。
- LEDとのシリアル通信が思いのほか高速で、そろそろミッドレンジのPICでは対応できなくなってきてる所。