この記事について
この記事は,MFT2016に展示した世界最小?フルカラーLEDのちょっとした解説記事です.
LEDキューブ単体だとこんな感じです.
光り方はこんな感じ:
このLEDキューブは,表面実装フルカラーLEDを面として使用してキューブを作ったというものです. 頂点に位置する3つのピンはすべてハンダ付けされていて,8つのピンだけで6つの面すべてを独立に(1面ずつ)フルカラー点灯させることができます.
技術的な話
ハンダ付けの大変さもさることながら,実は今回の展示は「細かすぎて伝わらない電子工作ネタ」でした. フルカラーLEDを使ったことのある方は,先ほどの画像のピン数の少なさに違和感を覚えるのではないでしょうか.
今回のLEDキューブは,形状の都合上頂点にくるピンを全てつなげてあります. つまり,隣り合う面のLEDとピンを共有する形で組み合わせてあります. このせいで,通常のフルカラーLEDの点灯方法では,1面だけを選択的に点灯させることができません.
たとえば緑色だけを点灯させたい場合,通常の方法ではGのピンをLOWにして,それ以外のピンをHIGHにします.
ところが,この方法を今回のキューブに適用してしまうと,困ったことが起きます. 青だけを光らせたいときにGのピンをHIGHにしてしまうと,隣のアノード(+)に電流が供給されてしまい,結果として隣のLEDの青まで光ってしまうのです.
このことから,通常の方法では独立に1面だけを光らせられないことが分かります.
この問題を解決するには,光らせたい面の+→Gに電流を流させず,かつ隣の面の+→Bにも電流を流させなければよいということになります. 答えとしては単純で,先ほど問題になったGのピンをハイインピーダンスに(マイコンのピンをINPUTに)してあげればOKです.
実はこの方法は意外と有名らしく,Charlieplexingという名前までついているそうです(知りませんでした…展示を見に来てくださった方に教えてもらいました). ただ,それをこのような形状のLED"キューブ"に使用したという例はなく,一応新規性はありそうです(価値は…).
フルカラー点灯させるためには,通常のフルカラーLEDと同様に,点灯している時間をそれぞれの色ごとに変えればよいのですが,ピンのIN/OUTを切り替える必要があるため,マイコン内蔵のPWM機能をそのまま使用することができないことに注意する必要があります.
ソースコード
需要なさそうですが,置いておきます. STM32F303K8 向け,F30xのStandard Peripheral Libraryを使って書いています. 一部,高速化のためにレジスタを直接叩いています.高速にピンの設定を切り替えているので,これをやらないと輝度の低い領域で変な挙動を示します. ピン配置とかは,コードを読んで察してください.
tokoro10g/tiniestledcube - Bitbucket