姿勢制御機能付き球体Lチカを作ろう ②
LEDディスプレイ
①からの続きtajmahal0707.hatenablog.com
キューブ型LED型ディスプレイ試作
上記のadafruitのLEDディスプレイ。
基本は文字を表示することを主眼においています。
私の目的は画像ですから、やはりもうちょっと解像度が欲しいのと、フレームが邪魔で見づらい。
そこで自作してみます。
5050(左側)は、1辺が44.5mm、LED間隔は5.5mmピッチ。8x8で64LEDが6面の合計384LED。
2020のものは1辺が27.5mm, LED間隔は3mmピッチ。LED数は9x9で81LEDが6面の合計486LED。
この基板を起こしてLED実装してみました。
テストだ! えい!
自作9x9のRGB LED基板に実装。brightness変えても明るさが変化しない。。
— yakatano (@Yakatano) 2023年1月15日
Ws2812-2020 ってFastLEDのbrightness関数使えないんだっけ。。。それともWS2812Bじゃないとダメとか? pic.twitter.com/mdk7qTngL8
コンデンサは裏側に配置するようにして、前面はツメツメのLED実装としてみました。なかなかいい感じ。
これを立方体にするために構成を考えてみます。
ちなみに今回はLEDにWS2812(NEOPIXEL)を使用しています。前回のPOV neonはAPA102系(DOTSTAR)で配線の数が少ないのですが、POVのように高速で表示を切り替える必要がないため、このような節約も可能となっています。
homemadegarbage.com
Neopixelのリフレッシュレートが400Hz
Dotstarのリフレッシュレートが1.9kHz
POVでなければneopixelのリフレッシュレートで十分と考えています。
次はこれを立方体に構成する方法を考えます。
キューブ型LED型ディスプレイ構成
この基板を立方体に配置するための構成を考えます。フレームを入れてしまうのであれば、これでも良いことになってしまうので、なるべくフレームは見えなくしたい。
そこで完全に基板だけで立方体が作れるようにしました。
こんなふうに。
最後に3枚x3枚をマグネットで固定しようと思ったわけです。
マグネットを電極にして、信号のやり取りができないか、、、、と。
ハンダに砂鉄を混ぜてみたり、磁石をはんだ付けしようとしたり。。。。いろいろ格闘したのですが、なかなかうまく行きません。
実験:磁石に付く電極を作りたくて、はんだペーストに鉄粉混ぜてみた。→結論:ハンダと鉄粉が分離してしまう。ほんの少しだけ磁石に付く感じ。。鉄板をハンダ付けかな。 pic.twitter.com/0PpaY9t95m
— yakatano (@Yakatano) 2023年1月16日
結果、思った以上にうまく行かず、この計画は頓挫します(ここまで書いて頓挫かいw)
じゃあ、なんで書いたかって? せっかく作ったのにお蔵入りするのが可愛そうで供養したかったからですw
正12面体試作
- そもそもキューブだと球体というには少々無理がある。。。
- LED数が400満たないので、少々絵を出すには足りないのでは。。。。。
ということで、もっと面数を増やして球体に近づけ、なおかつLEDを増やし解像度を上げていこうとなったのでした。cube(正6面体)でやるにしてもフレーム設計して、基板や電池の収まる配置を1から考えないといけないならもっと理想に近い形を実装したい。。。ということですね。
ja.wikipedia.org
多面体には正四面体、正六面体、正八面体、正十二面体、正二十面体の五種類があります。
[https://ja.wikipedia.org/wiki/%E6%AD%A3%E5%A4%9A%E9%9D%A2%E4%BD%93:title=]
また、なぜ正多面体じゃないといけないんだ?という話もあります。これはごもっともで、サッカーボール多面体(切頂20面体)でも良いはずです。こちらの方が球に近い。
ja.wikipedia.org
これは純粋に金銭的効率の問題ですw
5角形と6角形の2種の基板をおこすならば、同じくらい球に近い正多面体があれば、そちらで注文すべきだと思いませんか? 私は思います。
というわけで正多面体の選定。
正4面体、正6面体は根本的に今回採用できない。正8面体もちょっと球と呼ぶには寂しい。となると12面体か、20面体、ということになります。
で、正20面体だったら切頂20面体でよくね?となりませんか?
となると切頂20面体 vs 正12面体。
正12面体の最適球配置
正12面体でLEDを配置する場合を考えます。想定したものはLED600個。五角形一枚あたり50個のLEDのを配置する計算です。
球表面上に最密でボールを充填する問題を考えます。球の表面なので2Dの充填問題となります。
sgk2005.blog.fc2.com
ja.wolframalpha.com
球表面に球体を充填する問題設定は探してもあまり見つかりませんので、自分で色々試行錯誤してみました。理論的に6角形の最密充填は任意のn個の点について計算することはできません。基本六角形で充填し、ところどころ5角形になるイメージです。
いろいろと調べてみると解析的に求められる方法は少なく、いくつか試してみました。
問題を定義してみると、下のようになります。
- 直径80mmのコア球表面に600個のボールを充填
- 充填球の直径は最適になるように変更可能
一般化螺旋集合
擬似的ですが解析的に求める手段として「一般化螺旋集合」を用いた方法があります。
blog.panicblanket.com
このあたりを参考にUnity上で螺旋配置するプログラムを書きました。
www.youtube.com
なかなか良さげなのですが、ちょっとランダム味が足りない。
どうゆうことかというと、コア球体表面に配置したボールに規則性がある(特に北極南極などの極点)とヒトの眼には目立ってしまい、回転していることが見破られやすくなってしまうのです。どこが極点なのかわからないのが理想。
そこで探索的な手法でも充填問題を考えます。
探索的球充填
一番シンプルなアイデアです。
Unityを使ってシミュレーションを実行します。剛体のコア球表面に剛体のボールを600個配置して、お互いがぶつかりながら細密になるように配置したものを逐次的に計算する、というものです。
コア球に重力を設定し、すべてのボールがコア球表面・隣のボールとも接触している状態を作り、それができない場合にはコア球とボールの半径を調節してちょうどよい状態を作ります。
www.youtube.com
こうすることで、ところどころ隙間はありますが回転させても極点がわからないランダム配置を作ることができました。
voronoi球体の設計
上記の方法から球面上に擬似的に均等配置された球上の点をもとに球表面をボロノイ分割します。
研究レベルだとこのようなものもあるようです。
多面体を用いた球面上の点配置の解析とその応用
具体的にはこのようにオブジェクトをボロノイ分割するような手順はいくつかあり、これを使って分割していきます。
www.thingiverse.com
作業はblenderで行います。
たとえばこんなの
note.com
このあたりも参考にしました。
www.youtube.com
出来上がったものがこれ
わかりますかね?ほとんどが6角形を形成しているところに一部だけ5角形になっています。面白いのは5角形を形成する部分だけ取り出してみると比較的均等になっていることがわかります。探索的にやったのに面白い。
これをベースに正12面体の一面ごとに5角形の形で12分割していきます。
左は正6面体に適用したもの。右が正12面体に適用したものです。
正6面体だとやはり周辺部でかなり傾斜がきつくなっており、中心との光路差も大きくなってしまうことがわかります。だからやっぱり正12面体かな。
正12面体基板
正12面体基板はこのように設計しました。
球体の時と同じ手法で五角形に最密充填で50個の球を配置します。これを配線してPCBGOGOに発注をかけたものがこちら
ここの基板上の丸(直径5mm)からコア球表面の穴まで繋げて、球体全体に映像を提示できるように考えています。(間に合わなければ、最終的には外側のコア球がなくてもなかなか面白いガジェットにはなりそうですw)
③につづく