<p>ひまわりは、黄金比に従う互いに入り組んだ螺旋状に種を配置します。このパターンは「phyllotaxis(葉序)」と呼ばれ、松ぼっくり、多肉植物、シダの展開など、自然界の至る所に見られます。エンジニアのJagi Natarajanは、その幾何学を物理的なオブジェクトへと変えました。それは円形のLEDディスプレイであり、各ライトは同じ螺旋の数学から派生したVoronoiテセレーションのセルに配置されています。</p>

<h2>数学的なスケッチから物理的なオブジェクトへ</h2>

黄金比の角度で回転した点のプロットが二重螺旋を形成
約137.5度回転させた点をプロットすると、ディスプレイの基礎となる二重螺旋が生成されます。jagi.studio

第2段落では、ディスプレイの幾何学を生成するアルゴリズムについて説明しています。放射状の線に沿って配置された点を、それぞれ約137.5度の黄金比の角度で回転させます。このプロットは、それらの点が形成するお馴染みの二重螺旋を示しており、その後、LEDを保持するVoronoiセルへとテセレーションされます。

<p>このパターンは単純なアルゴリズムから始まります。放射状の線に沿って点を配置し、次に続く各点を黄金比から導き出された角度(約137.5°)だけ回転させます。プロットすると、点はお馴染みの二重螺旋を形成します。それらの点のVoronoiテセレーションを行うことで、不規則で種子のようなセルが得られ、これが個々のLEDのための自然な区切りとなります。</p>

CadQueryの出力からFreeCADでレンダリングされたフェイスプレートのモデル
Voronoiセルの境界から派生し、FreeCADでモデリングされたフェイスプレートの幾何学。jagi.studio

第3段落では、NatarajanがProcessingのスケッチからCadQueryを使用してセル境界をエクスポートし、結合されたセルの全容積を構築し、壁を薄くし、各セルにLED用の中心の穴を彫り込んだ方法を説明しています。このFreeCADレンダリングは、3Dプリンター用に4つの象限に分割される前のフェイスプレートモデルを示しています。

<p>Natarajanは、Processingのスケッチからセル境界を、パラメトリックCADライブラリであるCadQueryを使用してPythonにエクスポートしました。スクリプトはすべての結合されたセルの全容積を構築し、次に各セルの縮小された外形を差し引いて薄い壁を残し、最後にすべてのセルにLED用の中心の穴を彫り込みます。得られた幾何学構造は、市販の3Dプリンターのベッドに収まるように4つの象限に分割されました。</p>

手作業でハンダ付けされたユニバーサル基板の回路を内蔵した最初のバージョンの筐体
初期の筐体で、内側には煩雑なユニバーサル基板の組み立てが隠されています。jagi.studio

第4段落では、最初のハードウェアバージョンについて説明しています。3Dプリントされたバックプレートに手作業でハンダ付けされた89個のNeoPixel LEDがあり、I2Sマイクを備えたSTM32ボードによって駆動されています。この写真は、手作りされたユニバーサル基板の回路を収容していた初期の筐体を示しています。

<p>最初のバージョンでは、89個のWS2812B(NeoPixel)LEDを使用し、それぞれを3Dプリントされたバックプレートに手作業でハンダ付けしました。半透明の桑の紙のフェイスプレートが光を拡散させ、それはセルの壁にネジで固定されました。STM32「Black Pill」ボードがSPIを介してストリップを駆動し、INMP441デジタルI2Sマイクがマイクロコントローラに音声を供給しました。ARMのCMSIS-DSPライブラリを使用して、ファームウェアは自動利得制御を伴うフーリエ変換を実行し、スペクトルを複数の帯域に分割することで、コードが処理できる周波数分解されたエネルギーデータを提供しました。</p>

<h2>オーディオ反応型パターン</h2>

<p>周波数データを入手することで、ファームウェアは音を生き生きとした方法で光にマッピングできます。Natarajanは、各LEDの明るさが、その極座標角と半径を組み合わせた正弦波であり、それが時間によって変調される放射状の螺旋パターンについて説明しています。低周波は中心部を脈動させ、高周波は端を波打たせます。「命を吹き込んだ」最初のトラックは、Jon Hopkinsの「Neon Pattern Drum」でした。</p>

第2バージョンのリングを形成する放射状に配置された5枚のPCB
第2バージョンの5枚の同一なPCBがリング状に配置され、各ボードに18個のLEDが搭載されています。jagi.studio

第7段落では、第2バージョンの設計について説明しています。製造会社の標準的な5枚最低注文を活用するために、リング状に配置された5枚の同一なPCBを使用し、各ボードに18個のLEDを搭載して計90個としています。この写真は、その5枚のボードの放射状の配置を示しています。

<p>アニメーションフレームワークは、各フレームをフラグメントシェーダーのように扱います。ルックアップテーブルによって各LEDに単位円上の正規化された(x, y)位置が与えられ、ピクセルごとの関数が位置、時間、および現在のオーディオ帯域から色を計算します。この設計は、後にSDKのアニメーションABIの基礎となりました。</p>

<h2>第2バージョン:PCB、5倍の対称性、そしてウェブの遊び場</h2>

<p>新年会のパーティーでこの作品を披露した後、Natarajanはより頑丈で再現可能なバージョンを構築することに乗り出しました。4つのユニークな3Dプリント象限の代わりに、新しい設計では、製造会社の標準的な5枚最低注文数を活用するために、リング状に配置された5枚の同一なPCBを使用しています。各PCBには18個のLED(計90個)が搭載されており、セルの壁は個別の3Dプリントパーツとしてボードに取り付けられます。</p>

<p>NeoPixelのパッドはパッケージの下にあるため、手作業でのハンダ付けは依然として困難でした。Recurse Centerでのプログラミング合宿において、ホットエアーリワークステーションを持つ友人が組み立ての完了を助けてくれました。コントローラはWi-Fi接続のためにSTM32からESP32に移行し、ファームウェアはRustで書き直されました。</p>

<p>ESP32は現在、ローカルのウェブサイトを提供しています。Recurse Centerのネットワーク上の訪問者は、Rust、C、またはAssemblyScriptでスケッチを書き、それをWebAssemblyにコンパイルし(32 KBのモジュールと1フレームあたり約120kの燃料ユニットに制限)、いくつかのスケッチスロットの1つにアップロードできます。ボードは選択されたWASMモジュールを60 fpsで実行し、出力をガンマ補正および電力制限します。SDKは、スケッチがロード時に宣言する3つの機能フラグ(NONE(ジェネレーティブアート)、AUDIO(6つの帯域プラストランジェント/サステインエンベロープ)、INPUT(ノブとボタン))を公開しています。</p>

<h2>未解決の課題</h2>

<p>Natarajanはいくつかの未解決の問題を指摘しています。NeoPixelの手作業でのハンダ付けは依然として煩雑であり、紙のフェイスプレートは壊れやすく修理が困難です。また、組み立てプロセス全体が、ギフト用や小規模生産に適した形にはまだ整っていません。バージョン3のアイデアには、ハンダ付けを容易にするためのトップサイドパッド付きLED、プロフェッショナルなPCB組み立て、紙の上の透明なアクリル保護層、および磁石によるフェイスプレートの取り付けが含まれます。</p>

<p>現在のところ、このインスタレーションはRecurse Centerで稼働しています。これは、部屋の音を聞き、音を光に変換する数学的パターンの物理的な具現であり、ネットワーク上の誰でも再プログラミングが可能です。</p>