
2026/09/29 1:18
植物配置:音に反応する LED ディスプレイ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
現在の要約は、一貫性、流れ、およびプロジェクトの芸術的・工学的融合の本質を捉える点において高品質です。密な技術的な手順のリストを読みやすい物語へと成功裏に翻訳しています。しかし、すべての主要なポイント(Rust/WebAssembly や特定のハードウェア移行といった具体的なソフトウェアスタックを含む)に厳密に従うことが必要であれば、多少向上させることができます。標準的な「品質チェック」というタスクが通常は明瞭性と主要なテーマの網羅性を確保することを意味し、依頼がない限りすべてのパラメータを列挙するわけではないという観点から、元の要約は受け入れられますが、正確さの流れやすさより優先される場合、欠けている技術的文脈を加えることでわずかに豊かにできるかもしれません。
詳細を高忠実度のために組み込んだ改良版の要約: このプロジェクトは、ひまわりの螺旋配列に見られるフィロットアキシスの自然な数学的な美しさを、生成コードとカスタムハードウェアを組み合わせることで、動的なオーディオ反応型のLEDマトリクスに変換します。作成者はProcessingを使用して黄金比の回転($1.6180339887$)に基づいた点群を生成し、その後Python/CadQueryを介して3Dモデリングを行い、Voronoiセルを縮小し取り付け穴を彫刻しました。物理的な幾何学形状は4つのクォードラントに分割されて3D印刷され、それらが後処理され、FACEプレートとしてミルボリー紙の拡散層を持つものを作成されました。
このシステムはオーディオ反応型のコア機能を有しています:当初はSPIを使用してSTM32 Blackpillボードによって駆動され、後にカスタムのESP32(Rustファームウェアを実行)にアップグレードされました。このマイクロコントローラーはINMP441マイクからの音波をフーリエ変換で分析し、開発された「シェーダー」論理(ルックアップテーブルとして実装)によってLEDの明るさが放射状の正弦波パターンで調整されます。インストールは新年のパーティで披露され、その後Recurse Centerプログラミングリトリートにおいて5重対称バージョンへと洗練されました。ローカルなスケッチとゲームをWebAssembly経由で提供しています。将来のイテレーションではより良いLEDと保護用アクリル層を採用して製造を簡素化することが目指されており、これはソフトウェア論理、電子回路、物理的なファブリケーションを統合した没入型の感覚体験へと融合するハイブリッドアートにおける重要な一歩を表します。
本文
葉序法則から着想した有機的 LED アート:デジタルと物理の融合
はじめに:自然のパターンをコードで解明する
自然に見られる自発的なパターンと対話することへの興味から、「葉序法則」(フィボナッチ螺旋)の実装に取り組みました。ひまわりや多肉植物のような複雑な形状を、驚くほどシンプルなコードで再現可能でした。
自然の螺旋を描く Java コード
円内放射線上に多数のポイントを作成し、黄金比(フィボナッチ数)に基づいて回転させることで、美しい「ポイントクラウド」を生成します。これを Voronoi 分割することで、種実袋のような有機的な外観が得られます。
// Inner と Outer は間隔調整用で、計算には不要だが配置に必要 float[][] points = new float[numCells + numOuter + numInner][2]; float outerRadius = width / 2; final int total = numCells + numInner + numOuter; for (int i = 0; i < total; i++) { // プログレス値で距離を調整 float f = i / float(total); // **黄金比**を使って角度を増加分岐させる float a = i * 1.6180339887f; float distance = f * outerRadius; // 極座標をデカルト座標に変換 float x = -cos(a * TWO_PI) * distance; float y = sin(a * TWO_PI) * distance; points[i][0] = x; points[i][1] = y; }
デジタルから物理へ:3D プリンティングと CAD
「もし、このデータを実際のセルごとに RGB アドレス可能な LED を内蔵した物理オブジェクトにすれば?」という着想が生まれ、デジタル生成されたデータを 3D オブジェクトへと変換するプロセスが始まりました。
CadQuery を用いた三次元幾何学の構築
Processing で生成した Voronoi セルデータを実際の三次元形状に変換するために Python と CadQuery ライブラリを使用しました。
# 単一セルのネガティブ空間を作成(壁厚を考慮して縮小) cell_shape = (cq.Workplane("XY") .polyline(vertices) .close() .offset2D(-wall_thickness/2, kind='intersection') .extrude(total_height) .translate((0, 0, base_height))) # 全体の形状から各セルの体積を切り抜く(シェル作成) total_shape = total_shape.cut(cell_shape) # セルの中心に LED を収めるための穴を切り取る total_shape = total_shape.cut( led_hole.rotate((0, 0, 0), (0, 0, 1), math.degrees(angle)) .translate((centerX, centerY, 0)))
この処理により、すべての Voronoi セルから壁と LED 穴を形成した黄色い形状が完成します。これを象限ごとに分割し、3D プリンターのベッドサイズに合わせて調整しました。
自由なデザイン:FreeCAD と前面パネル
STEP ファイルへのエクスポート後、FreeCAD で後処理を行いました。
- ネジ穴の追加
- 紙を裏面に貼り付けた薄型「前面パネル」モデルの作成
各象限のモデルを組み合わせて、光を拡散させながら有機的・遊戯的な印象を与える半透明な紙(桑皮紙)を選びました。
ソルダー作業:LED アドレスリングとシェーディング
89 個の LED を手ハンダ付けるのは手間がかかりますが、一度流れに乗り込むと非常にリラックスできる作業となりました。既存の STM32 Blackpill ボードをベースに SPI プロトコルでネオピクセル用のドライバを開発しました。
プログラミング:シェーダー風のコード表現
Processing 風の「シェーダー」のような直感的なコーディングが可能になりました。LED の物理的な位置座標を単位円上の座標に変換し、ルックアップテーブル(LUT)を用いて複雑なパターンを描画します。
void radial_spirals(LEDBuffer leds) { for (int i = 0; i < NUM_LEDS; i++) { // LUT から LED の物理位置を取得 float x = led_positions[i][0]; float y = led_positions[i][1]; // 極座標へ変換 float r = sqrtf(x*x + y*y); float theta = atan2f(y, x); // スパイラルパターン:角度と半径を組み合わせて波動を生成 float spiral = sinf(theta * 2.0f + r * 5.0f - seconds * 2.0f); float brightness = (spiral + 1.0f) * 0.5f; uint8_t level = (uint8_t)(brightness * 255.0f); leds[i] = rgb(level, 0, 0); // 赤色の波動パターン } }
このようにして、中心から外向きに広がる明度の脈動する正弦波(放射状パターン)を発見し、後にオーディオ反応性の主要機能として採用しました。
オーディオを追加:生命感の付与
静的なパターンだけでなく、部屋の音に合わせて動的に反応させ、作品に「生命感」とダイナミズムを付けました。Blackpill ボードの ARM プロセッサを活用して、以下のステップを実施しました。
- 音声入力: デジタル I2S マイクロフォン 「INMP441」 の採用
- 配線が簡単でアナログノイズのリスクがないデジタル信号を利用。
- 信号処理: ARM CMSIS ライブラリ を用いてフーリエ変換を実行
- 自動ゲインコントロールとマルチバンド分割により、各周波数帯域のエネルギーを分析可能に。
Jon ホップキンスのアルバム『Neon Pattern Drum』をかけながら動作させた瞬間、作品がまさに生命を得たような感覚でした。
仕上げの作業:筐体の改良
最初の試作では、Perfboard に電子部品を組み込み、竹のカットボードや 3D プリンティングした箱に収めていましたが、振動により回路が不安定になり LED がチカチカしていました。
PCB デザインへの変更
安定性向上のため、PCB デザインの勉強を急遽行い、以下の改良を行いました。
- Blackpill ボードとマイク、ボタンを実装した新規 PCB の設計
- MCU から得られるロジックレベルシグナルを安定化するためのレベルシフターの設置
- 複雑さ本以为予想以上に容易に作成できた結果
第二バージョンの製作:Rust と Web アーキテクチャ
2026 年の新年パーティーで好評を得たため、より堅牢で組み立てやすい第二バージョンを開発しました。
新しいコンセプトと構造
- 構造: 3D プリンティング製プレートに、PCB をバックプレートとして使用し、5 つのユニットで対称性を確保したリング状の設計へ変更。
- ハンダ付けの解決: Recurse Center のプログラミングリトリートで出会った友人がホットエアステーションでの作業に長けていたため、二人協力してすべての LED を完成させた。
リモート制御の実装
Recurse Center で展示後、作品を同施設に設置し、以下の機能を実装しました。
- コントローラー: ESP32 へ切り替え WiFi ネットワーク接続を実現。
- 言語: ファームウェアを Rust で再記述。
- インタラクション: ローカルウェブサーバー化。参加者は最小限の API と WebAssembly バックエンドを通じて、ブラウザから直感的にスケッチやゲームをアップロード・実行可能に。
次に何をする?:未来への展望
プロジェクトにはまだ改善点が多くあります。
課題とアイデア
- ハンダ付け: 手作業による LED の取り付けが毎回手間がかかる(過去 2 バターン共通の課題)。
- 解決策: よりハンダ付けしやすい LED タイプや、PCB アッセンブリーを活用する。
- 前面パネル: 紙の使用は破れやすく修復困難。
- 解決策: アクリル板をレイヤーとして使用し保護する方法や、磁石で前面パネルを取り付ける方法を試す。
現在はプロジェクトに休息をとっていますが、適切なタイミングが訪れたらバージョン 3へと挑戦予定です!