ゾートロープ型ドットマトリクスディスプレイ

ポイント

コンセプト

ゾートロープという機械がある。要はパラパラ漫画を見せる機械で、回転する円筒の内側の絵を、眼の前を通過する細いスリットから見ることで動画を見ることが出来る。さらに最近は、フラッシュの明滅を同期させることで覗き込む必要がなく、立体的なフィギュアが動く3Dゾートロープというものもある。この原理を利用してドットマトリクスディスプレイを作れるのではないか?と思って作ったのがこの「ゾートロープ型フルカラードットマトリクスディスプレイ」である.要するに半機械式でありながら任意の画像を表示することが出来るディスプレイを作りたかったということだ。

回転する円盤にドットを並べる。ドットは高さを変え、その回転にタイミングを合わせてLEDを光らせることで任意の位置のドットを浮かび上がらせる。問題は2つ。円盤をどう回転させるかと、ボールをどうやってうまく照明するかである。円盤の回転にはモーターを使えばよいが、大きな音がするもの、寿命が短いもの(ホビー用のモーター等)は使いたくない。いろいろ考えた結果、常時回転していても寿命が長く音も静かなPCの冷却ファンを利用することにした。冷却ファンの軸に直接ゾートロープをつけると負荷がかかるので,ファンの気流を受けて円盤を回転させることにした。購入した冷却ファンはUSBに直結でき、風量も3段階に調整できるものだったのでちょうど好都合である。

最大の問題はLEDによる照明である。よくある3Dゾートロープのように全体を照明してしまうと、並んだ20個すべてのボールが一度に浮かび上がってしまい、うまく表示ができない。要するに、狙ったドット1つだけを照明しなくてはならないのだ。よってランプ(LED)は1つだけではだめで、12個を使い、正面の狭い範囲にだけ光が届くようにした。LEDにはシリアル通信で個別にフルカラー制御できる WS2812B (Neopixel)が並んだテープを使用し、それを上の写真のような枠にはめることで光の広がる幅を制御した。円盤に設けた穴を反射型センサで調べ、円盤の回転速度と原点位置を把握する。それを用いてタイミングよく、目的のボールが目の前に来たときにLEDを光らせるわけである。

原理は簡単だがLEDの制御には少々苦労した。Neopixel の制御に用いる通信速度の関係で、LED への通信中は他のことが一切できないのである。その間に原点の穴が通過すると見落としてしまうし、通信に少し時間(1ミリ秒程度)がかかるので、円盤の回転速度はあまり速くできない。反射型センサの出力はアナログ値なので割り込みを使うこともできないし、Neopixel 通信中は割込み禁止になってしまう(割り込み処理をしていると通信に失敗するのだと思われる)。この問題は、使用したマイコン ESP32 がデュアルコアだったので解決できた。1つのコアを穴の通過の監視、もう1つのコアを Neopixel への通信など表示処理に専念させることで、安定な表示が可能となった。円盤の回転は毎秒2.5回転ぐらいがちょうどよく、フレームレートは10fps、表示は5x20ドットとなった。LEDはフルカラーなので、各ドットの色を個別に変えることが出来る。

例によって3DデータとプログラムはThingiverseで公開している。