MAX7219 による LED 制御

http://farm4.static.flickr.com/3521/3841788616_1aaec1e284.jpg

Arduino から LED マトリクスを制御する最も簡単な方法は, MAXIM 社の LED ドライバー MAX7219 を使用する方法だ。 Arduino playground の LEDMatrix の項にノウハウやソースコードがたくさん載せられている。ここにある Matrix ライブラリLEDControl ライブラリを使えば, MAX7219 とシリアル通信を行う部分の処理はライブラリ任せにすることができる。 Arduino 側から使用するピンは3つだけで済むし,様々な面で非常に効率的な方法だと思う。

MAX7219 はマルツ等で入手することができる

MAX7219 の唯一の不満点は,画素毎の輝度の調整ができないことだ。表示全体での輝度は 16 段階で設定することができるが,特定の画素だけを明るくしたり暗くしたりということはできない。7セグメント LED を使った数値の表示や,電光掲示板のような用途では,これでも十分かもしれないけれど,今回のように映像的なものを扱いたい場合は,これは大きな欠点になる。

そこで,ダイナミック点灯を使って輝度に段階を付けるというテクニックを試してみた。画素の輝度毎にレイヤーを分けておき,表示全体の輝度を変えながら表示するレイヤーを細かく切り替えるという処理を行うわけだ。下の写真はそのサンプルで,4段階の輝度変化を実現している。

http://farm4.static.flickr.com/3439/3837345726_566d1fd240.jpg

このテクニックでは,段階を増やせば増やすほど表示全体の輝度が落ちると同時に,フリッカーも激しくなる。恐らく4段階程度が限界だと思うし,現に4段階でもかなりのチラツキが感じられている。

前の水面エフェクトのサンプルでも,このテクニックを使ってグラデーションを表現している。たぶんグラデーションが無ければ,単なるノイズに見えてしまうことだろうと思う。

ソースコードGoogle Code の方で公開している