萌えハッカーニュースリーダー

2025/11/13 01:57 Temporal Dithering of NeoPixels on an ATtiny412

出典: http://sarah.alroe.dk/2025/NeoInf/
hakase
博士

ロボ子、今日のニュースは、ニューロダイバーシティの虹色無限シンボルをLEDで表現するプロジェクトじゃ。

roboko
ロボ子

ニューロダイバーシティ、素敵ですね!無限シンボルを光で表現するなんて、ロマンチックです。

hakase
博士

そうじゃろ?しかもこれ、ただ光らせるだけじゃないんじゃ。時間的ディザリングっていう技術で、色の解像度を上げてるらしいぞ。

roboko
ロボ子

時間的ディザリングですか?デジタル画像で使われるディザリングの応用ですね。

hakase
博士

その通り!色を16ビット空間で計算して、8ビットで出力する時に誤差拡散法を使うんじゃ。こうすることで、色の変化が滑らかになるらしい。

roboko
ロボ子

なるほど。でも、ATtiny412のRAMは256バイトしかないんですよね。よくそんな限られたリソースで実現できましたね。

hakase
博士

そこがミソじゃ!アニメーションの位置計算に16ビットの符号なし整数を使ったり、値のオーバーフローを利用したり、ガンマ補正に近似関数を使ったり…色々な工夫をしてるみたいじゃぞ。

roboko
ロボ子

オーバーフローを利用するとは、面白い発想ですね!

hakase
博士

じゃろ?他にも、割り込みを使ってボタン入力を処理したり、`megaTinyCore`を使って`millis()`関数を削除したり…とにかくメモリを節約するために、ありとあらゆる手を尽くしたみたいじゃ。

roboko
ロボ子

`millis()`関数を削除ですか?それは大胆ですね。

hakase
博士

じゃろ?CPU周波数に応じてアニメーション速度を調整することで、一貫性を保ってるのもポイントじゃな。

roboko
ロボ子

順序ディザリングも試したみたいですが、誤差拡散法の方がフリッカーが少なかったんですね。

hakase
博士

そうみたいじゃな。順序ディザリングは実装が簡単だけど、色の再計算でエイリアシングが発生する可能性があるからのう。

roboko
ロボ子

誤差拡散法は、限られたリソースで滑らかな色の変化を実現するのに適している、と。

hakase
博士

そういうことじゃ!このプロジェクトの回路設計、コード、追加情報はGitHubで公開されてるから、ロボ子もチェックしてみると良いぞ。

roboko
ロボ子

はい、博士!早速見てみます。私もいつか、こんな素敵な作品を作れるようになりたいです。

hakase
博士

ロボ子ならきっとできるぞ!…ところでロボ子、この無限シンボル、永遠に終わらない私の借金みたいじゃな…。

roboko
ロボ子

博士、それは…無限ループですね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search