流体シミュレーション・ペンダント
(mitxela.com)- アクセサリーのサイズの中にリアルタイム FLIP 流体シミュレーションと円形 LED ディスプレイを収めた手作りハードウェアプロジェクトで、身に着けられるシミュレーションオブジェクトを目指している
- STM32L432KCを100MHzにオーバークロックし、加速度計・充電回路・電圧監視チップを4層 0.8mm PCBに統合して、小さなペンダントの中で計算と表示の両方を処理している
- 対角 charlieplexingと DMA の循環駆動のおかげで、ビア数と表示オーバーヘッドを減らせた一方、LED 配置やはんだブリッジといった製造上の落とし穴も明らかになった
- FLIP 実装は Ten Minute Physics のチュートリアルを基に再実装されており、粒子衝突と hashgrid が小さな 8x8 規模でも安定性と速度に大きく影響する
- 合計10個のペンダントを完成させたが、ガラス・ガスケットの向き、充電コネクタの保護、金属ケース加工など改善点が残っており、量産は簡単ではなさそうだ
身に着けられる流体シミュレーション装置
- 流体シミュレーション・ペンダントは、リアルタイム FLIP 流体シミュレーションを実行する手作りのアクセサリーである
- 金メッキケースと時計用ガラス保護窓を使い、内部の円形 LED ディスプレイが流体の動きを表示する
- 最初のペンダントは2024年3月に制作され、その後数か月のあいだに複数個が追加で作られた
- 現在少量のペンダントがあり、在庫のあるあいだ一部は販売中である
- 設計の動機と初期過程は YouTube 動画でも見られる
Simsim からペンダントへ続いた設計
- 以前の volumetric display アニメーションの後、最終的に3D 仮想スノーグローブを作れるリアルタイム流体シミュレーションを実装しようという流れから始まった
- その過程で生まれた Simsim の概念が、このペンダントの土台になった
- 結果として、流体シミュレーションだけでなく、対角 charlieplexed ディスプレイの予想外の利点も確認された
ハードウェア構成
- 主な部品は次の通り
- STM32L432KC: ARM Cortex-M4、FPU 搭載、100MHz にオーバークロック
- ADXL362: 超低消費電力加速度計
- MCP73832: LiR2450 バッテリー充電コントローラ
- TPS7A02: 超低消費電力レギュレータ
- TPS3839: 電源電圧監視チップ
- 回路は4層 0.8mm PCB上に構成されている
- LiR2450 コインセルバッテリーを使用し、最終設計には充電コントローラと低電圧保護が含まれる
- 満充電時で約10時間使用を目標としている
対角 charlieplexing と表示駆動
- 対角 charlieplexingは、従来のマトリクスよりビア数を半分に減らせる
- 狭ピッチ LED ディスプレイではビア数が制約になりやすく、効果が大きい
- 同じネットの LED が端と端に配置されるため、ほとんどのはんだブリッジは性能に影響しない
- DMA 循環モードでディスプレイマトリクスをオーバーヘッドなしに駆動する
- 2つの DMA ストリームを扱えば、charlieplexed マトリクスも同じ方式で駆動できる
- LED とピクセルを接続するには参照テーブルが必要になる
- マッピングを変えても追加コストは発生しない
- マトリクス信号をマイクロコントローラポートのどのピンに接続してもよく、配線が容易になる
- GPIO から大きなディスプレイを直接駆動すると、出力 FET のオン抵抗のために輝度問題が生じることがある
- charlieplexing では一度に1ピクセルしか点灯しないため、オン抵抗の影響は全ピクセルに均等に反映される
- マイクロチップ電圧を変えてディスプレイ輝度を制御することもできる
FLIP 流体シミュレータ実装
- FLIP シミュレーションは Matthias Müller の Ten Minute Physics の仕事、特に「How to write a FLIP Water Simulator」チュートリアルを基にしている
- コードは直接の移植ではなく、チュートリアルに沿って再実装したものだ
- Eulerian 流体シミュレーションでは advection で流体移動を処理するが、FLIP では粒子運動が流体を運ぶため、別個の advection ステップを使わない
- 粒子衝突ステップは省略できなかった
- 衝突ステップを除くと、流体全体が重なった塊へと崩れてしまう
- 粒子は距離の逆数に比例するインパルスで互いに押し離される
- 最終コードには単純衝突とhashgrid 衝突を切り替えるスイッチがあった
- hashgrid は計算面でも理解面でもオーバーヘッドがあるが、8x8 のような小規模でも大きな高速化を示した
- Ten Minute Physics の例には左側境界条件の小さな誤りがあり、流体が静止しない問題があったことを発見した
シミュレーション実験とメモリ見積もり
- 開発中にはさまざまな異常な流体シミュレーション結果が生まれ、粒子をレンダリングするとカエルの卵のような形になることが多かった
- 密度プロットは各グリッドセルに重なる粒子数を示し、壁に当たると衝撃波のような視覚効果が現れた
- Simsim の概念公開から約2週間でSimsimsimデモを作成した
- LED 密度をどこまで下げても流体らしく見えるかを確認するための内部テストツールだった
- ベアメタル移植に必要な RAM を概算するのにも使われた
- STM32L432KC は64KB RAMを備え、直径16ディスプレイには約26KBが必要である
- デモとペンダントのソースコードはまだ公開されていないが、後に公開する予定である
最初のペンダント制作
- PCB 制作前に、charlieplexed ディスプレイパターンが実際に動作するか確認するため、手配線プロトタイプを作った
- レーザーカットしたカードで LED を固定し、8x9 マトリクスを STM32L432 開発ボードに接続した
- エナメル線のはんだ付けが非常に面倒だったため、すぐに PCB を設計することになった
- FLIP シミュレーションはまず L432 上で小さな8x8 正方形として動作し、その後仮想ペンダントの左上領域のように拡張された
- 従来の charlieplexed マトリクスでは LED ごとに少なくとも1つのビアが必要だが、対角配置はこれを大幅に減らした
- 16個の GPIO で可能な240個の LED のうち、実際のディスプレイには216個の LEDしか必要なかった
- ディスプレイは円形を意図していたが、直径16では配置方式により八角形のようになった
PCB と機構設計
- 最初の PCB 設計は予想より簡単で、減ったビア数が大きく役立った
- PCB 内部レイヤは KiCad track-rounding plugin を使って丸く処理した
- パネルは、ピックアンドプレース装置が基板をつかめるよう手動で構成した
- バッテリー接点には PCB 実装の金メッキばね端子である RFI shield finger を使用した
- 磁気式充電コネクタは 4mm の薄型製品を探すのに時間がかかり、使用部品番号は WNRE の cx-4mm-jz である
- 4mm 充電コネクタは、極性や磁石の極性が同じでもケーブル同士が適合しないことがある
金属加工とケース
- ケースは真鍮を加工して作り、その後金メッキした
- 最初の構造は snap-back 方式で、O リングを追加して緩みをなくし、防水シールも得た
- O リングのおかげで必要な公差は大幅に緩和された
- 2個目のペンダントからはディスプレイ上に時計用ガラス、つまり watch glass を採用した
- 27.5mm のガラスを選び、0.45mm のガスケットを加えて総直径は28.4mmになった
- ガラスは適切な力でうまく押し込めたが、専用工具なしで押して割れたこともあった
組み立て中に判明した電気的問題
- 最初の PCB では、マイクロコントローラのreset pinを省かなかったことが問題になった
- ディスプレイが Port A 全体を使い、SWDIO/SWCLK も Port A にあるため、開発中に新しいファームウェアを書き込みにくかった
- チップをプログラム直前にリセットするため、一時的なワイヤが必要だった
- 加速度計 interrupt ラインの bus keeper がディスプレイグリッチの原因の1つだった
- 当初は抵抗を追加し、最終的にはダイオードを入れて完全に解決した
- ソフトウェアベースのバッテリー低電圧検出は回路を単純にしたが、不安要素が残った
- 次の PCB リビジョンではハードウェア監視チップを追加した
- 充電コネクタ接続を検出して reset pin を引く回路も構成した
- 充電ケーブルを短く短絡させるようにつなぐと polyfuse が加熱し、電圧がゆっくり上がってリセットパルスが発生しないことがある
- 必要なら磁石側を先につなぎ、USB は後で挿せばよいと判断した
省電力とウェイクアップ
- ペンダントにはボタンがなく、入力は加速度計データだけである
- 当初はチェーンの端でペンダントを回して deep sleep を有効にする方式を考えていた
- 最終的には加速度計の動作検出 interrupt のしきい値を6gに上げる方法を採用した
- 意図しない wake-up は減り、振れば簡単に再び起動する
- 通常の sleep より多くの電力を消費しない方式である
2枚目の PCB と電圧監視
- 2個目のペンダントの前に、reset 回路、wake-up ラインのダイオード、ハードウェア supervisor を PCB に反映した
- TPS3839 電源電圧監視チップは 150nA の供給電流で、TPS7A02 レギュレータの 25nA と合わせてもコインセル基準では非常に低い
- LiR2450 コインセル容量は120mAhで、1000nA だけで放電するには13年以上かかる
- 低電圧遮断しきい値は3.08Vに設定した
- バッテリーがこの水準まで下がっても棚の上で何年も化学的な負担がかからないよう、保守的に設定している
- 一般的なリチウム保護回路が 2.5V 付近で遮断するのは、負荷中の端子電圧が開放電圧より低くなるためである
- TPS7A02 には active discharge 付きのP バージョンと、なしのバージョンがある
- non-P バージョンでは、regulator disabled 状態でもマイクロコントローラと電源コンデンサがゆっくり放電する
- P バージョンに替えてから、supervisor しきい値付近で起きていた soft-lock 問題は解消した
3個目のペンダントと密閉構造
- 3個目のペンダントでは snap-back をやめ、カップ形ケースとして再設計した
- 時計用ガラスは取り外し可能だが、実際のアクセスはガラス面を外すか最悪の場合割る方式である
- 交換用ガラスは約50pと安価で、充電回路と低電圧保護があるためコインセル交換は不要と考えている
- カップ形状は金属加工がはるかに簡単で、全体の厚みも約1mm減った
- 磁気コネクタを先に取り付ける必要があるため、36AWG のより線で柔軟配線を使った
- ケースと PCB ground 間の抵抗はマルチメータで0.00Ωと測定された
- 内部の深さが足りず、ガラスを押し込むと回路が押されることがあり、手で約0.3mm削って調整した
4個目以降の制作改善
- 4個目以降は内部を少し深く加工し、回路が無理なく収まるようにした
- 背面は lapping によって平坦にした
- 平らな面にサンドペーパーを貼り、真鍮をこすりながら徐々に細かい研磨材へ進めた
- Hardinge 旋盤の5C collet holderを使い、部品を正確に中心へ保持しつつ外面の損傷も減らした
- hollowed-out ケースの背面は 1mm 未満まで薄くなり、一度は大きく削りすぎて貫通してしまった
- jump ring の取り付けは、柔らかいワイヤで縛って固定してからはんだ付けする方法のほうがよかった
- 金メッキはスズはんだの上にはうまく載らず、最終的にはそのコントラストを視覚的要素として受け入れた
充電コネクタと使用上の問題
- 磁気式充電コネクタの周囲はエポキシで封止する必要があるが、はんだ接点は覆ってはいけないため作業が煩雑になる
- 充電コネクタを不注意に接続すると、5Vでもスパークが発生することがある
- 繰り返すと2つの接点が急速に摩耗する可能性がある
- 磁石側を先に付け、USB を後から挿せばスパークを避けられる
- ぎこちない角度で押すと極性が反転する場合もあった
- ダイオードを追加していれば簡単に保護できたが、発見が遅かった
- 赤い充電表示 LED は、エポキシ越しにケーブル上へ小さな赤い円を映し出し、うまく機能した
完成数と保管ケース
- 携帯用ケースとして Nikon F3 focusing screen のプラスチック容器がほぼぴったりで、その後は近いサイズのプラスチック箱に antistatic foam ライナーを入れた
- 合計10個のペンダントを完成させた
- 一部には傷や表面欠陥がある
- 用意していた回路基板をすべて使い切った時点で制作を止めた
- さらに作るなら、ガラスとガスケットがより安定して収まるよう設計を変える必要がある
- PCB を少し小さくできる
- 位置合わせ用の notch や cutout を追加できる
- PCB が載る shoulder と、コネクタ配線用の cutout を設けられる
- 後になって、ガラスとガスケットの両方に向きがあることを発見した
- ガラスのベゼル寸法が上下で異なる
- ガスケットも顕微鏡で見ると対称ではない
- ペンダントごとにガラスを押し込む力が異なっていたことに影響した可能性がある
素材選択と量産可能性
- 全体を金で作る可能性も検討したが、純金の塊を削り出す方式は合理的ではない
- 銀のほうがより経済的に扱え、カップ形状なら銀帯と板をはんだ付けして本体を作り、旋盤で軽く加工する方式も可能である
- PCB は量産しやすいが、ケースには別の難しさがある
- 金メッキを省いてステンレス製にできる
- カップ形状は CNC 加工を簡素化する
- jump ring には TIG 溶接のような別工程が必要かもしれない
- 非常に安価な版なら PCB と 3D プリントケースで作ることもできる
- 量産を試みる可能性が低い最大の理由は、他のプロジェクトで忙しいためである
まとめと残る惜しさ
- このプロジェクトは成功と見なせ、以前の amulet より制作品質も向上した
- それでも10個作った後でも完全には満足していない
- 背面に日付やシリアル番号を刻まなかった点は惜しい
- より良いアクセサリー制作と金属加工のためには、設備投資と学習が必要である
- 着用写真は撮影が難しかった
- 画面のティアリングを避けるには遅いシャッター速度が必要だった
- ディスプレイは動いている時のほうが面白く、写真には収めにくい
1件のコメント
Hacker News のコメント
興味深い動画で、特に予定もなくほとんど最後まで見てしまい、完全に引き込まれた。
こういうソフトウェアを見ると、LLM がコーディング評価を通過したからといって「最高の人間の開発者より優れている」と言う流れが、ますます理解しにくくなる。
Claude や ChatGPT の複数のモデルに特殊な問題を手伝わせたときはひどいもので、CRUD やよくあるアルゴリズムには優秀だが、新しいことや変わったことには非常に弱かった。
このプロジェクトの「FLIP シミュレーション」のようなものを見ると、まだ公開されていない ChatGPT o3 でさえ、このペンダントを動かすソフトウェアを書くのは難しいのではないかと思う。
だからその判断は正しくないと思う。LLM は、空の状態から明確な API 境界があるものを最初から実装する場合、CRUD アプリであれ物理シミュレーションであれ強い。
むしろ弱いのは、大規模なレガシーコードベースで複数のモジュールをまたぎ、紛らわしい手がかりが多い作業だと思う。
より大きな問題は、生成されたシミュレーターの精度だ。LLM は良いテストを作れず、数学に対するテストである**検証(verification)と、物理に対するテストである妥当性確認(validation)**の両方が必要だが、今の LLM はどちらもまともにできない。
検証の標準的手法である manufactured solutions method(MMS)は、数式処理ソフトウェアでかなりの部分を自動化できるが、それでも退屈で、経験上、LLM がここで必要な代数操作をうまく処理できるとは信じにくい。
さらに悪いのは、妥当性確認に必要な実際の実験データを LLM が作り出せないことだ。文献から実験を探してくるか、自分で実験しなければならない。将来的には適切な実験論文を案内できるかもしれないが、現時点ではそうは見えない。
ただし、シミュレーションが実験データと合わないときに助言する用途には役立つかもしれず、乱流モデリングについてもある程度は知っているようだが、最新の進展までよく知っているかは疑わしい。
ゲームやコンピュータグラフィックス向けの流体シミュレーションなら物理的精度が最優先ではないが、それでも数学的実装が正しいか確認するには MMS を使うほうがよい。MMS は一般的なソフトウェアテストには直接対応するものがない興味深い手法で、ソフトウェアを最小限に修正してオラクルを作り、修正後のソフトウェアがテストに通れば元のソフトウェアも通ると見なせるようにする、という考え方だ。
多くの大学の授業で学生にこうしたアルゴリズムを課題として書かせているし、著者が言及した YouTube 動画のように関連知識がインターネット上で無料で大量に公開されているため、LLM が学習できる。
もちろん、この記事のプロジェクト自体はいまだに非常に印象的だ。
「旋盤へのアクセスは基本的人権だ」という言葉を思い出す。
以前ある教師が、自分の州に最後まで残っている学校の旋盤室の話をしてくれた。第二次世界大戦直後にいくつもの学校に設けられ、その後も例外的に維持されてきた施設だったという。
今日ではその州で新設することはできず、別の州では存在自体が不可能かもしれず、重大事故が一度でも起きれば完全に消えて、一つも残らなくなるだろうと言っていた。
一番気に入っているのは、半分は非常に現代的で、半分は壊れそうにない第二次世界大戦の余剰設備で、その混在ぶりが本当に格好いいことだ。
事故を理由に学校から旋盤をなくすという発想は想像しにくく、自己破壊的な文化的態度だと思う。
密閉型 CNC なら安全上の問題の 99% 以上は緩和され、有用性ははるかに大きくなる。CNC ではスピンドルではなくサーボだけがオンの状態で作業領域に入ることが多く、最もひどいけがでも骨折程度で済む可能性が高い。一方、手動機械ではスピンドルやチャックが人を巻き込んで死なせたり、破片を飛ばしたりする可能性がある。
まともなオープンソースのピックアンドプレース装置もあるといい。最近の PCB は安いが、そうした装置は今でも 0201 部品や高密度 BGA をうまく扱えない。
「Machine Technology 1」では、一般的な手工具、エンジン旋盤、シェーパー、ボール盤、フライス盤、グラインダーの使用に関する知識と技能を身につけ、精密製造業で使われる基礎的な機械原理と基本技能を実習するとされている。
「Welding 1」では、安全、設備設定、金属移行、ガスシールド、各種金属の溶接を学び、酸素アセチレン溶接とガスタングステンアーク溶接に重点を置くという。
「Construction Trades 1」では、木工、金属、電気、配管の技術と、それぞれの技術に合った手工具・電動工具の安全な使い方を学ぶとされている。
1990 年代〜2000 年代ごろ、公立学校で職業技術教育がほぼ消えた時期があったようだが、幸いにも戻りつつあるように見える。
Charlieplexing: https://en.m.wikipedia.org/wiki/Charlieplexing
本当に素晴らしいプロジェクトで、特にシミュレーション部分が気に入った
似たような形でLEDをたくさん載せた自転車用POVディスプレイを作っているのだけど、Wi-Fiでほぼリアルタイムに近い映像を送ることに成功した: https://youtu.be/hxAHBvuyqpY?si=8XraFuG_Fi54Bs7T
mitxelaのプロジェクトのアイデアと制作過程の動画が本当に良い。他のプロジェクトもチェックしてみることをおすすめする
このプロジェクトは芸術性と工学の驚くべき融合だ
流体シミュレーションとハードウェア設計の両方で細部の完成度がものすごく、特にLED配置を最適化するためにCharlieplexingを巧みに使っている点が印象的だ
信じがたいほど印象的だ。こういうプロジェクトと、それをやり遂げる人たちを見ると大きな刺激を受ける一方で、同時に気後れもする
必要な勤勉さと多方面の能力は理解できるが、自分で再現できるとは思えない。後ろから眺めているだけになりそうだ
このくらいの完成度と関心を持つ似たようなクリエイターが他にもいれば知りたい
微小磁場、モーター、フラッパーのようなものを活用した、とても興味深いプロジェクトが多い
筐体加工の部分が良かったなら、Clickspringも見るといい。映像美とストーリーテリング、実際の技術まで含めて、現在YouTubeで活動している最高の機械工と言っても過言ではないと思う: https://youtube.com/@clickspring
ここで読める: https://mitxela.com/rants
残念ながら直接リンクできないので、少し下にスクロールする必要がある。個人的には、自分なりの形で刺激をくれるので、時々読み返している
不思議なことに、LEDを点灯させるために実際の液体である水銀を使おうという以前のアイデアのほうに惹かれる
KiCadで配置するのがずっと単純で、4層基板も必要ないはずだから
本当に美しい。価格を見て驚いたし、今取っている金額の10倍くらいを予想していた
これを作者が言うように「プロトタイプ」とは呼ばないと思う