「pov」タグアーカイブ

PovRanian 作例と代替部品の紹介

ここではハンディーバーサライタ PovRanian (ポブラニアン)の 作例や代替部品の紹介を記載していきます。

製作レシピは以下で販売しております。

PovRanian の製作レシピ

 

 PovRanian 製作の様子

 

暮らしいきいきアイディア

代替部品や製作の工夫をまとめます。

ラッチスイッチ 代替 (2021/7/4)

レシピで紹介していた以下の電源スイッチがAmazonで購入できなくなってしまいました。

  • uxcell 押しボタンスイッチ 懐中電灯用 ラッチスイッチ 2-ピン AC 250V 1.5A 12 x 8 x 8mm 5個入り

以下の商品が代わりに使用できます。

 

スイッチ部は全く同じ形状のようです。

 

電極を曲げて使用できます。

Raspberry Pi Pico バーサライタ解像度向上 (C/マルチコア) ーRaspberry Pi Picoへの道7ー

前回はRaspberry Pi Pico を用いてバーサライタを製作しました。

Raspberry Pi Pico でバーサライタ製作 (C/C++) ーRaspberry Pi Picoへの道6ー

ここでは、表示映像の解像度向上のためにSPI複数出力とデュアルコア動作を検証しましたので報告します。

 

 

SPI複数出力

Raspberry Pi Pico にはハードウェアSPI端子が2個あります (SPI0, SPI1)。

 

この2つのSPI端子でそれぞれLEDテープを制御してみました。

 

Cコード

PIO

SPI入力LEDをPIOなる機能で点灯制御しているのですが、2本制御の際はステートマシンなるモノを分けて使用するとよいようです。

PIOブロックは2個内蔵 (pio0, pio1)され、それぞれにステートマシン4個搭載されています (sm0~3)。

 
ここではpio0のsm0でSPI0を、sm1でSPI1を制御して2本のLEDを点灯しました。
 

狭ピッチバーサライタ

以前製作した狭ピッチのLEDバーサライタをRaspberry Pi Picoで制御してみます。

APA102-2020の再考 - バーサライタへの応用 –

このLEDはリフレッシュレートが低いためRGBそれぞれをフル輝度で使用しなくてはならず8色しか出力できませんが
2mm角のLEDが狭ピッチで配置されていますので解像度向上実験にはもってこいです。

構成

2つのSPI出力でLEDを64セル, 63セルずつ制御します。

 

 

動作

先ほどと同様に2個のSPI出力で制御し、回転速度470rpmで回してみたところ、計127個のLEDを1周 240分割で表示できました。

 

ESP32のデュアルコア制御でも200分割が限界でしたので、やはりRaspberry Pi Pico の高速IOは素晴らしいです。

 

デュアルコア制御

Raspberry Pi PicoはCortex-M0+を2個搭載しています。
更なる高解像表示を目指してデュアルコア制御を試します。

Cコード

core0で回転速度計測とSPI0のLED制御し、
core1でSPI1のLED制御しています。

 

しかし、

デュアルコアでの1周の分割数の向上は確認できませんでした。。。
core1でのLED点灯制御は確実にできていると思うのですが。

core1の動かし方に何か問題があるのでしょうか?

参考

 

画像表示

浮世絵を表示してみました。
シングルでもデュアルでも1周240分割以上にすると表示がおかしくなります。

シングルコア

 

デュアルコア

 

 

おわりに

ここではRaspberry Pi Picoを用いて狭ピッチLEDバーサライタを製作しました。
高解像表示を目指しましたがデュアルコアによる向上は達成されませんでした。

しかしLED 127個で1周 240分割は過去最大の分解能ですので、ひとまず嬉しいです。

 

デュアルコアはについては引き続き勉強します。なにか間違ってるかもしれません。

それでは次の道でお会いしましょう!

 

追記

回転検出部を別コア化(2021/2/17)

以下のブログでPIOで別ステートマシンでのLED制御がすでに並列処理されているために、
デュアルコアによる表示解像度の向上がなかったことがわかりました。

Raspberry Pi Pico バーサライタで PIO を考えるーRaspberry Pi Picoへの道8ー

そこでステートマシンでの並列処理については理解できたので、LED制御と回転計測をデュアルコアで試してみました。

以下のようにcore0で回転計測、core1でPIOのステートマシン2個でLED(64セル、63セル)を制御してみます。

 

結果としましては大きな分解能向上はありませんでした。
1周 240分解能がギリギリ260分割できそうになるくらいの変化でした。

 

ステートマシンが完全に並列処理できていて、回転が470rpm、SPI信号が30MHzの場合、理論分解能値はだいたい
 30MHz ÷ (32bit × 64セル + 64bit) × 60sec ÷ 470rpm = 1813分割
ですので、SPIクロックが遅すぎることはないようです。

まだまだデータ転送方法など工夫次第で高解像度化できそうですが、とにかくPIOは素晴らしいということがわかりました。

立体 バーサライタ – 3D POV Display –

これまで私は様々なバーサライタ(POV ディスプレイ)を製作してきました。

そうした中で何となく平面のバーサライタを立体的に積み上げて立体表示できるのではと考えておりました。
なんかめんどくさそうだし、費用もかかるだろうと思考実験の枠組みから出ないまま時は過ぎたのですが
この度良い機会に恵まれました。

M5Stack社のクリスマスにちなんだ電子工作コンテストが開催されたのです。

これは思考実験から飛び出す絶好のチャンスと考え製作しコンテストに参加させていただきました。

ここでは改めて母国語で報告させていただきます。

 

立体 バーサライタの構成

バーサライタの構成はこれまで製作してきたバーサライタと同じ構成です。
回転部に制御マイコン ATOM Liteを搭載し回転検出用のフォトリフレクタ QTR-1AとSPI入力LEDテープを接続しています。

LEDテープは5列を10段の計50セル接続しています。回転部への給電にはワイヤレスチャージモジュールを用いて無線で実施します。

部品

  • マイコン ATOM Lite

     
  • フォトリフレクタ QTR-1A

      
  • SPI入力 LEDテープ APA102   ピッチ:144セル/1m

     
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH

 

筐体

筐体は3Dプリンタで作製いたしました。
回転部は土台とLED搭載部の2パーツで構成されます。

 

回転部の土台にATOM Liteとフォトリフレクタ、ワイヤレスチャージモジュールの受信側を搭載し、
マブチモーター RS-540SHに差し込みます。

 

LEDは5列、10段をらせん状に配置して視野角の低減を図っています。

 

動作

丸が上下する簡単な動作で試しました。

 

Arduinoコード

SPI入力LEDのライブラリとして以下を使用しました。
 https://github.com/adafruit/Adafruit_DotStar

格段の1周の分解能は20としました。

 

表示例

クリスマスツリー

キューブ

時計

鏡餅

 

おわりに

製作にとりかかるまでは実現は難しいと想像していましたが、比較的簡単にできてしまいました。
筐体を3Dプリンタで自由自在に作れるようになったことが大きいです。

もっとLEDを増やせばリアルな映像も空中に表示可能だと思います。

コンテストではグランプリを受賞することはかないませんでしたが、参加賞をいただきました。

3つの製品から選択できましたので、私は M5Stack用カード型キーボードユニット 
をいただきました。

沢山のスイッチが配置されているので今後有効活用できそうです♪

Raspberry Pi Pico でバーサライタ製作 (C/C++) ーRaspberry Pi Picoへの道6ー

前回はフォトリフレクタによる割り込みでLED制御を試しました。

SPI入力LEDを堪能 (C/C++) ーRaspberry Pi Picoへの道5ー

今回はついにRaspberry Pi Pico でバーサライタを製作しました。

 

 

バーサライタ構成

構成はこれまで製作してきたハンディーバーサライタ PovRanianと同様です。

バーサライタ装置の製法

 

モータを安定化電源(1V)で給電して回転部を回します。回転部には24セルのLEDのほかに回転を検出するフォトリフレクタとRaspberry Pi Picoが載っており、給電にはワイヤレスチャージモジュールを使用しています。

フォトリフレクタとRaspberry Pi Pico間にはチャタ防止にフィルタとシュミットトリガを挿入しています。

部品

 

 

バーサライタ分解能

Raspberry Pi Pico によるバーサライタができましたので、1周の分割数をどれほど大きくできるか試してみます。
これによりRaspberry Pi Pico の実力を測れるのではないかと考えました。

Cコード

フォトリフレクタで1周の時間を計測し、その時間を変数Divで分割して色分け(RGBYの4色)してLEDを点灯させるプログラムをです。

 

4分割

まずは Div = 4で動作確認しました。

400分割

Div = 400 まで増加させても問題なく点灯動作を確認できました。
SPIのクロックSERIAL_FREQ は30MHzとしました。これ以上大きくするとLED表示が正常に実施されませんでした。

Raspberry Pi PicoのIO は非常に高速に動作できるのだと実感できました。

 

画像表示

このままRGBYの4色で分割数上げてもよくわからなくなってきたのでアニメ画を表示してみます。

回転速度 960rpmで1周1000分割でも余裕でアニメ表示ができました!!

回転方向の分解能が大きくてもLEDが24セルですので少し寂しいですね 🙄 

 

性能指数

これまでいろいろなマイコンでバーサライタを製作してきましたので、独自の性能指数を設けております。

性能指数 [hPOV(ヘクトポブ)] = LED数 × 回転数 × 一周の分解能 ÷ 100

現状 Raspberry Pi Picoの性能指数は
 LED 24個 × 回転速度 960rpm × 1000分解能 ÷ 100 = 230,400 hPOV
となりました。

以下が過去のその他マイコンの実績値ですので、Raspberry Pi Picoの性能がうかがい知れます。

  • Teensy 4.0:LED 64個 × 回転速度 530rpm × 200分解能 ÷ 100 = 67,840 hPOV
  • ESP32(デュアルコア):LED 58個 × 回転速度 730rpm × 220分解能 ÷ 100 = 93,148 hPOV
  • SPRESENSE(3コア):LED 57個 × 回転速度 730rpm × 400分解能 ÷ 100 = 166,440 hPOV

 

おわりに

Raspberry Pi Pico によって信じられないほど回転方向の分解能の高いバーサライタ動作を確認することができました。

今後はLEDのセル数を増やすべくSPIの複数出力やマルチコア動作を検討したいと思います。

それでは次の道でお会いしましょう!

Seeeduino XIAOを使ってみた

Seeeduino XIAOという実に可愛いマイコンを購入しました。
安くて小さくて高性能でしたので紹介させてください。

 

 

Seeeduino XIAO

CPU:Arm Cortex-M0+ 32ビット 48 MHz(SAMD21G18)
ストレージ:256 KB Flash、32 KB SRAM
SPI, I2C、UART(Serial1)などのI/Fも充実しております。

回路図:https://files.seeedstudio.com/wiki/Seeeduino-XIAO/res/Seeeduino-XIAO-v1.0-SCH-191112.pdf

 
Arduino IDEでコーディングする際の設定は以下が参考になります。
 https://wiki.seeedstudio.com/Seeeduino-XIAO/#getting-started

 
注)

PCとXIAOをUSB-Cケーブルで接続した際にXIAOが認識されない場合があります。
その際には以下のように基板上のリセットパッドとその隣のGNDパッドを2回ちょんちょんとショートしてください。

 

MIDI Library

CPUがArmのSAMD21ってことは。。。

 

そうだね!MIDIライブラリ使えるね!

以下のMIDIライブラリを試してみました!
 https://www.arduino.cc/en/Reference/MIDIUSB

 

サンプルコードMIDIUSB_read.ino を参考にして
DAWからのMIDI信号Note ONとNote OFFでLED(D13)をON/OFFしているだけです。

これでMIDIで動く面白いなにかしらとかオリジナルコントローラが作れますね!

 

PovRanian

ハンディバーサライタPovRanianはマイコンにAdafruit Trinket M0を使用しており、
Adafruit Trinket M0のCPUもSAMD21です。

ハンディ バーサライタ PovRanian の製法

 

この度、XIAOをPovRanianに導入してしてみました。
XIAOに変更することでコストが下がり、コネクタがUSB-Cなのでモダンになります。

XIAOで割り込み動作やSPI入力LEDも問題なく使用できました。

動作

しっかり動いています!

 

おわりに

もう無線使わない工作は全て Seeeduino XIAOでいける気がします。

小さいし、それでいてピンや機能も充実してるし何より安い!

Seeedのブログでも作例として紹介いただきました!!

追記

Seeed 公式動画(2020/5/16)

Seeed社の公式動画にXIAOの作例として紹介いただきました!

Maker Faire Kyoto Online に参加しました

Make Advent Calendar 2020 |2日目

新型コロナの影響を受けて開催中止となったMaker Faire Kyotoが、
Twiter上のオンラインでの作品発表会を実施することとなりました。

「Maker Faire Kyoto Online」開催概要|5月2日(土)11:00-16:00まで誰でも参加できるTwitterを使った作品発表を開催します! #MFKyoto2020

 

Twitterにてハッシュタグ「#MFKyoto2020」「#作品発表」をつけて投稿するだけで誰でも参加可能とのことで素晴らしい機会なので参加させていただきました。

以下のようにタイムテーブルが設けられておりました。

 

折角なので過去作と合わせて新作(大したもんじゃないが)も出展しようとおもい作業しながら参加させていただき
非常にエキサイティングな経験ができました。

以下に出展させていただいた品を記載します。

 

 

「デザイン」「クラフト」「アート」カテゴリー

「FOOD」カテゴリー

「ロボティクス」カテゴリー

 

「エレクトロニクス」カテゴリー

ここで新作をドロップさせていただきました。

 

以前作ったPOV1-ATOMにさらにM5ATOM Matrixを追加してLEDの数を増やしただけですがね。

フルカラーLEDのリフレッシュレート

 
カテゴリーの投稿時間に間に合わせるために少し焦りながら製作しました。
スリリングでいい経験となりました。

 

「ミュージック」カテゴリー

 

感想

メチャクチャ楽しかったです。完全に良い休日になりました。
北海道在住の私が京都のイベントに参加するのは非常に敷居が高くほぼ不可能な訳で。

実際に出展を予定されていた方々には残念で物足りないものだったかもしれないのですが、
出展経験のない私にとっては大きな刺激となりました。

Twitter上でメイカーさんの製作物を楽しむというのは普段と変わりないのですが、
密度と熱量が明らかに違っており 時間でカテゴリーが分かれていたことも体験をエキサイティングに加速していたように感じます。
製作しながら参加していたからかもしれませんね。

出展作品が多すぎて見きれないとこもなんだかリアルな感覚ですが、
オンラインだと後からゆっくり見れるのもいいですよね。
フォロワーさんがリツイートした他の作品も口コミ感覚で入ってくるので堪能できました。

Maker Faireは世界各地で実施されており、地域ごとの特色があろうかと思うのですがオンラインというのも大きな特色が出るので今後も機会が設けられることを強く望みます。

ハンディバーサライタ PovRanianの表示映像生成フォームの仕組み

Arduino Advent Calendar 2019 | 22日目

今年は念願のHomeMadeGarbageのオフィシャルショップを開店することができ、ハンディバーサライタPovRanian (ポブラニアン)を出品いたしました。
画像や図形をフルカラーで表示することができます。

 

PovRanianを販売するに際して一番の障壁が表示画像の更新でした。Arduino等の環境をお客様に用意していただき、表示データを生成してもらうのは現実的ではありません。

そこでウェブ上で表示映像データを生成しPovRanianにドラッグ&ドロップするだけの仕組みを構築しました。

ハンディ バーサライタ PovRanian の表示映像フォーム使用方法

色々検討してやっとできた表示映像生成フォームですので紹介させてください。
 

 

仕組み検討

バーサライタPovRanianをご購入いただいたのちに自由に表示映像をカスタマイズしてもらうべく、PovRanianに搭載するマイコンに表示データを書き込む手法を色々検討しました。

手法1: Arduino IDE

バーサライタのArduinoコードについては公開しておりますので、おのおのカスタマイズいたたくことも可能なのですが、Arduino IDEや各種ライブラリをダウンロード、インストールする必要があり現実的ではないので却下!

“キング・オブ・ダークネス” EVIL の魔法陣を自作

手法2: CircuitPython

Adafruitが提唱するCircuitPythonも検討しました。
AdafruitのCircuitPython対応マイコンであれば.pyファイルをドラッグ&ドロップするだけで買い込みが可能です。

CircuitPythonをつかってみた

 

しかし、処理が遅く割り込みもサポートしていないためバーサライタには向かないので断念しました。。。

手法3: uf2ファイル

MakeCode MakerでAdafruit SAMD21系マイコンのプログラミングを試したときに、コーディング後にuf2ファイルというものを生成しマイコンにドラッグ&ドロップで書き込んだことを思い出しました。

コードのバイナリをuf2ファイル化する手法も公開されておりましたのでPovRanianのデータ更新にはuf2ファイルを使用することにいたしました。

Microsoft MakeCode で ビジュアルプログラミング

uf2ファイルとは

Microsoftがマイコンフラッシュ向けに開発したファイル形式とのことです。

 

uf2ファイルはAdafruitのSAMD21(M0)やSAMD51(M4)系のボードでも利用可能です。
PovRanianは Adafruit Trinket M0 を利用しています。

プログラムのバイナリでuf2ファイルを生成するpythonコードも公開されております。
M0系のマイコン用の場合の変換は以下のように実行します。

uf2conv.py -c -o test.uf2 test.bin

 

PovRanian表示映像フォーム

PovRanian 表示映像フォームは以下
 http://homemadegarbage.0t0.jp/PovRanian/

表示映像フォーム構成概要

PovRanian 表示映像フォームは自宅のラズパイサーバで構築されています。
フォームの入力内容から表示データを生成しコンパイル・ファイル変換を実施してuf2ファイルを返します。

フォームの入力を受けて表示画像データgraphics.hを生成します。

graphics.hとPovRanian用のArduinoコードをマージしてarduino-cliで.inoファイルをコンパイルしてバイナリファイルcode.binを生成します。
コマンドでArduinoコードをコンパイルできるarduino-cliは以下で公開されています。
 https://github.com/arduino/arduino-cli

arduino-cliでのコンパイルは以下のように実行します。

arduino-cli compile --fqbn adafruit:samd:adafruit_trinket_m0 [コードのフォルダ指定] 

code.binをさきほど紹介した uf2conv.py でuf2ファイルに変換してダウンロードファイルとして返します。

uf2ファイル生成

PovRanian 表示映像フォームにて1つ以上の映像の設定ができるとコード生成ボタンがアクティブにまります。

“コード生成”をクリックするとファイルの作成が開始し、しばらく待つと
PovRanian.uf2ファイルがダウンロードされます。

uf2ファイルのPovRanianへの書き込み

PovRanianに搭載されているマイコン(Adafruit Trinket M0)のマイクロUSB端子とPCを接続します。

 
USBケープルを接続するとLEDが点灯します。リセットボタンをダブルクリックしてLEDが緑色になるとPCにTRINKETBOOTディスクとして認識され表示されます。

 
 
 
 
TRINKETBOOTディスクに先ほど生成したPovRanian.uf2ファイルをドラッグ&ドロップします。
認識されるとすぐにTRINKETBOOTディスクは閉じます。
 
以上でインストール終了です(簡単!!)。
 
あとはPovRanianの電源を入れて映像をお楽しみください♪
 
 

おわりに

以上でPovRanianの表示映像のカスタマイズが容易に実行できるようになり、販売開始することができました。

 

来年は文字出力などフォームのバージョンアップも目指します。

Teensy 4.0 を楽しんでみた

Teensy 4.0を購入しました。なんと動作周波数 600MHzです。ぶっとびー。おったまげー。しもしもー

 

以下で購入させていただきました。

本体価格 $19.95 + 送料 $13.58 = $33.53 の¥3,676
配送は追跡なしの1番安いやつで  
 8/26 注文
 8/28 オレゴン州から発送
 9/7 札幌 着
でございました。

現在(2019年11月)では以下でも購入できます。

 

Arduino環境

Arduino IDEでコーディング可能です。設定方法はTeensy 3.2などと全く一緒です。

Teensyで目ん玉アニメ表示

 
TeensyduinoというソフトをインストールするだけでArduino IDEでTeensyを楽しめます。Version 1.47をインストールしました。
 
 https://www.pjrc.com/teensy/td_download.html

バーサライタで性能を味見

早速 Teensy 4.0 でバーサライタを作ってみました。

構成

ワイヤレスチャージモジュールで回転部へ給電し、回転位置はフォトリフレクタでマーカを検知して導出します。

部品

割り込み制御

フォトリフレクタ QTR-1Aで回転を検出(1周の時間計測)しており、フォトリフレクタの出力を受けて割り込み制御するのですがattachInterrupt()がチャタリングでうまく機能しなかったので間にシュミットトリガを挿入しました。
 

抵抗10kohmとコンデンサ0.1uFでチャタの急峻電圧変動をフィルタしてシュミットトリガのヒステリシス判定でチャタリングを完全除去して正常な割り込み動作を実現しました。

Arduino IDEコード

 
SPI入力LED用のライブラリを改造してグローバル輝度を31から1に修正しています。
 https://github.com/adafruit/Adafruit_DotStar

表紙画像データgraphics.hはpythonで生成しています。

フルカラーLEDのリフレッシュレート

動作

さすがの高速Teensy。LED64セルでも1周200分割での表示ができました!


 

課題

Teensy 4.0はSPI出力が3つございます(SPI, SPI1, SPI2)。しかし現象SPI1やSPI2でLEDを点灯できていません。
いろいろライブラリ修正しながらトライしているのですが。。。

SPI1.begin();
SPI1.transfer(0b10101010);
SPI1.endTransaction();

などで信号出力は確認できているのですがDotstarライブラリに落とし込むと全く信号が出なくなるので勉強が必要です。

引き続きPOVります!

 

狭ピッチ LED バーで SPRESENSE バーサライタを堪能

以前購入したじゃじゃ馬 128セルのLEDバーを用いてバーサライタしてみましたので、もう少しだけ詳しく記載いたします。

APA102-2020の再考 - バーサライタへの応用 –

 

LEDバー

使用したLEDバーはAdafruitの商品で、2mm角のSPI入力LEDが128個 3mmピッチで1列に配置されています。

こちらのチップの色輝度は600HzほどのPWMで調光されるため、高速点灯が必要なバーサライタには向きません。しかし色輝度を0かMAXでのみ使えば低周波PWMの影響を受けないのでバーサライタ表示が可能となります。故に8色しか表示できませんが。。。

グローバル輝度(5bit)は電流量で調光されておりましたので今回は0~31中の最も低い輝度1で使用します。それでもかなり明るいです。

LEDのリフレッシュレート等の詳細は以下ご参照ください。

フルカラーLEDのリフレッシュレート

構成

LED以外は過去に製作したSPRESENSE バーサライタと同じです。

部品

LED加工

LED 128セルを半径として回すのは、物理的、信号的にもしんどいと考えLEDバーを半分に切りました。

 
切ってもちゃんと動きます。LED1個は切断してなくなりましたが。。

 

これで64セルと63セルのLEDバーとなりました。それぞれSPRESENSEのSPI5とSPI4に接続しました。

 

Arduinoコード

マルチコアプログラミングで3つのCPUを使用しました。

  • Mainコア:フォトリフレクタで回転を検出して2つのSubコアに発光タイミングを送信
  • Sub1, 2コア:Mainコアからのタイミングを受けてSPIテープLEDを発光

コードは以前のものとほぼ同じでLEDのセル数のみ変えています。

画像色データ生成

画像をもとに表示映像データを生成したのですが今回は前述のLED駆動の問題によりRGBそれぞれ輝度0かMAX(255)しか表示できません。
そのため元画像のRGBを取得して閾値以上でMAX、以下で0に変換して、さらにバーサライタ用に極座標変換して表示データファイルを生成しました。

動作

LED127セル点灯を回転スピード約530rpm で1周100分割で実現できました。1周の分解能はもう少し上がってもいいように思いますがLEDの応用性が影響しているように思います。120分割以上にすると末端のLEDの色が正確ではない色になりました。

SPI周波数はコード上38MHzにしていますが、実際の出力は不明です。高速オシロ持っていないので。。。ただ信号スピード的にはまだ余裕あるはず(たぶん)なので恐らくLED自体の応答速度かと思われます。

8色しか出ませんが縦方向の分解能が上がったおかげで絵として鮮明な表示が可能となりました。

たいへん喜ばしい限りです。回転方向の分解能はLEDの数量減らすなどの検討が必要そうです。

引き続きPOVりたいと思います。

 

ハンディ バーサライタ PovRanian の使い方

ハンディ バーサライタ PovRanianの使用方法をご紹介します。

 

 

映像生成

表示映像フォームサイトでPovRanianに表示する映像データを生成します。

ハンディ バーサライタ PovRanian の表示映像フォーム使用方法

コード生成でPovRanian.uf2ファイルがダウンロードされます。

コードをインストール

PovRanianに搭載されているマイコン(Adafruit Trinket M0)のマイクロUSB端子とPCを接続します。

 
USBケープルを接続するとLEDが点灯します。リセットボタンをダブルクリックしてLEDが緑色になるとPCにTRINKETBOOTディスクとして認識され表示されます。

 
 
 
 
TRINKETBOOTディスクに生成したPovRanian.uf2ファイルをドラッグ&ドロップします。
認識されるとすぐにTRINKETBOOTディスクは閉じます。
 
以上でインストール終了です。

PovRanianの起動

スライドスイッチを上側にすると回転しLEDが点灯して映像が表示されます。
スライドスイッチを下側にすると回転が停止しLEDが消灯します。

 

 

電池

PovRanianはモータ回転用に1本、LED制御用に3本の合計4本の単3電池を使用します。

 
制御用の単3電池ソケットのフタは少し外しにくいのでお気をつけください。上のほうを少し押しながら下げると開けやすいです。閉めるときもフタの上部を押しながら差し込みます。

電池の方向にお気を付けください。ケース底のガイドに従ってください。

 

注意事項

  • 回転部に物や人が接触しないように十分距離を取りましょう。当たると痛いです。


 

  • モータ用の単3電池はアルカリの新品ですと高速すぎて絵が正しく出ない場合があります。多少使用したアルカリ電池かマンガン電池のご使用を推奨します。
     
  • 制御用の単3電池 3本は3本トータル電圧が4.0V以上になるようにしてください。充電式ニッケル水素電池ですと電圧が低く起動しない場合があります。
     
  • モータの回転軸を固定するジョイントのネジが緩んでいると危険です。しっかり閉めてご使用ください。ネジには六角穴があいており、1.5mmの六角レンチで閉めます。
     

    モータの軸は一部平らになっていますので、そこにネジが当たるように閉めてください。

ハンディ バーサライタ PovRanian の表示映像フォーム使用方法

PovRanianに表示する映像データを生成するサイトの使用方法をご紹介します。
 
 http://homemadegarbage.0t0.jp/PovRanian/
 

 

基本操作

表示映像フォームの基本操作をご紹介します。

映像は最大で5種表示できます。
 
  • 映像:画像や図形を選択できます。
  • 色:図形の色を選択します。
  • 回転:映像の回転の有無及び回転方向を選択します。
  • スピード:回転スピードを選択します。
  • 開始秒数:映像の表示を開始する秒数を指定します。
    最小値は0.001秒で指定可能です。
    映像No. 1の開始時間は自動的に0秒になります。また未入力の場合も自動的に0秒になります。
  • 終了秒数:映像の表示を終了する秒数を指定します。
    最小値は0.001秒で指定可能です。
    未入力の場合は自動的に999秒になります。

表示はループで電源を切るまで続きます。

映像の指定

映像は画像と図形のいずれかが選択できます。

画像

    好きな画像を選択して表示できます。画像形式は以下のようにしてください。
  • フォーマットはJPEGまたはビットマップ
  • サイズは 47px × 47px 以上の正方形か横長の長方形

画像選択後に”ファイル選択”をクリックで画像ファイルを指定できます。

回転と表示時間も指定できます。

以下の画像を指定すると

 
以下のような表示になります。

 
画像の黒(#000000)は透過しますので更に以下の画像を映像No 2として追加し重ねると

 
黒が透過して映像No 1の令和が見えます。

 

図形

図形として星、四角丸が選択できます。

 

星を選択すると色、回転と表示時間が指定できます。

色を赤(#ff0000)にした場合は以下のような表示になります。

 

四角

四角を選択するとサイズ、色、回転と表示時間が指定できます。サイズは9, 12, 14, 17, 20, 24の6種類から選べます。四角の頂点のLED位置を示しています。

 

以下はサイズ24、色を緑(#00ff00)にした時の表示です。

 

丸を選択するとサイズ、色と表示時間が指定できます。サイズは3~24の22種類から選べます。

 
以下はサイズ17、色を青(#00ff00)にした時の表示です。


 
 

色の指定

映像で図形を選択すると図形の色を指定できます。デフォルトでは白(#ffffff)が設定されます。色をクリックするとカラーピッカーが表示されます。色を設定して”選択”をクリックして決定します。

回転の指定

画像と図形で星と四角を選択すると回転の有無と方向、スピードを指定できます。

回転は”なし”か”時計回り”、”反時計回り”を選べます。

 
“時計回り”か”反時計回り”を選択すると回転スピードを1~10で選択できます。

 
以下は星(赤)を時計回りのスピード5、四角(黄色)を反時計回りのスピード10、画像(ソニック)を時計回りのスピード1とした時の表示です。

 
 

表示時間の設定

各映像の開始秒数と終了秒数を指定して表示タイミングを指定できます。0.001秒単位で指定可能です。

映像No. 1の開始時間は自動的に0秒固定になります。
未入力の場合は開始時間は自動的に0秒、終了秒数は999秒になります。

各映像の最も大きい終了秒数が経過するとまた0秒に戻って表示はループします。

 

表示時間を細かく設定すればアニメーションも可能です。
以下の動画は5枚の絵を0.1秒づつ表示しています。

コード生成

1つ以上の映像の設定ができるとコード生成ボタンがアクティブにまります。

“コード生成”をクリックするとファイルの作成が開始し、しばらく待つと
PovRanian.uf2ファイルがダウンロードされます。

 

PovRanianへコードをインストール

PovRanianに搭載されているマイコン(Adafruit Trinket M0)のマイクロUSB端子とPCを接続します。

 
USBケープルを接続するとLEDが点灯します。リセットボタンをダブルクリックしてLEDが緑色になるとPCにTRINKETBOOTディスクとして認識され表示されます。

 
 
 
 
TRINKETBOOTディスクに先ほど生成したPovRanian.uf2ファイルをドラッグ&ドロップします。
認識されるとすぐにTRINKETBOOTディスクは閉じます。
 
以上でインストール終了です(簡単!!)。
 
あとはPovRanianの電源を入れて映像をお楽しみください♪
 

ハンディ バーサライタ PovRanian の製法

ハンディ バーサライタ PovRanian (ポブラニアン)に表示する映像を生成するサイトを立ち上げました。

画像や図形を組み合わせて空中にお好みの絵を投影できます。
 

ここではPovRanian 装置の製法を紹介いたします。

 

 

 

電気系構成

以下がPovRanianの電気系の構成図です

 

モータを単三電池1本で動かして回転部のLEDを回します。回転部にはLEDのほかに回転を検出するフォトリフレクタとマイコンが載っており、給電にはワイヤレスチャージモジュールを使用しています。

電気系部品

 

持ち手の作り方

持ち手にはモータ、電池、ワイヤレスチャージモジュールの給電側が載っています。

1. 木材による筐体

持ち手や電池ボックス固定材としてブロック木を使用しました。スプレーで黒く塗っています。サイズは以下の通りです。

持ち手木材:30mm × 20mm × 140~170mm
電池固定材:12mm × 12mm × 65~75mm

上記サイズはあくまで参考ですが電池固定材は回転部にあたらない程度に近づける必要があるので長さは注意が必要です。

電池固定材の先端はフォトリフレクタの回転検知のマーカーとして使用するため、黒字に対して白いテープでしるしを貼っています。塗装時にマスキングテープを線上に貼って黒く塗らないようにしても良いです。

2. モータ固定

以下の金具を使用して、モータを固定します。

 

L字金具

創造工房 BX-289 2個入りを2セット 

 

コの字金具

創造工房 BX-291 2個入りを1セット 

 

L字金具を2つずつネジ穴2個分重ねて、電池固定材にねじ止め(タッピング皿ネジ 2 × 6) もう一方はM3×8の小ネジで固定します。

 

電池固定材への固定はマーカのある先端から16mmほど離します。

 

モータの幅だけ(28mm)離してねじ止め(タッピング皿ネジ 2 × 10)します。電池固定材と持ち手材とが水平になるようにします。

 

コの字金具と一緒にモータをねじ止め(M3×8)します。

 

電池ボックス、ワイヤレスチャージモジュールの給電側を両面テープで貼り付け、スライドスイッチはねじ止めします。配線は構成図の通りです。モータは単三電池1本で駆動します。ラベルが貼ってあるほうからみて左をプラス電位になるように配線してください。

スイッチはM3ナットを挟んで浮かしてねじ止め(タッピング皿ネジ 2 × 10)しています。

ワイヤレスチャージモジュールのコイルはコの字金具にレジンで固めて固定しました。

 

 

回転部の作り方

4mm厚、10mm幅、250mm長の木の平棒にLEDテープを貼り付けます。先頭のLEDの中心の裏に穴をあけてネジ M2×20 を通します。これが回転軸となります。

見栄えをよくするためにアクリル円板 2mm厚、直径50mmの真ん中に穴をあけて回転軸に通して棒に接着しています。そこにワイヤレスチャージモジュールの受信側のコイルを貼り付けます。

上の写真のようにフォトリフレクタとワイヤレスチャージモジュールの受信側の基板とマイコンを接着、配線します。フォトリフレクタは電池固定材のマーカを検出できるように位置を調整して固定します。

回転軸にはジョイントの2㎜穴側をはめて固定します。3.17mm穴側はモータとつながります。六角穴(1.5mm)付止めネジで固定します。

 

回転軸に対して重量のバランスをとるために端に重りを付けて調整します。以下の好きなサイズに小分けできる金具をねじ止め(タッピング皿ネジ 2 × 6)して調整しました。

 

以上で回転部の完成です。配線は基本構成を参照ください。

 

 

必要部品まとめ

電気系部品

筐体(持ち手)部品

  • 持ち手木材:30mm × 20mm × 140~170mm
  • 電池固定マーカ木材:12mm × 12mm × 65~75mm
  • L字金具 創造工房 BX-289 2個入りを2セット
  • コ字金具 創造工房 BX-291 2個入りを1セット
  • 小ねじ M3×8: 4個
  • タッピング皿ネジ 2×6: 2個
  • タッピング皿ネジ 2×10: 4個

回転部部品

注意事項

  • 回転部に物や人が接触しないように十分距離を取りましょう。当たると痛いです。


 

  • モータ用の単3電池はアルカリの新品ですと高速すぎて絵が正しく出ない場合があります。多少使用したアルカリ電池かマンガン電池のご使用を推奨します。
     
  • モータの回転軸を固定するジョイントのネジが緩んでいると危険です。しっかり閉めてご使用ください。ネジには六角穴があいており、1.5mmの六角レンチで閉めます。
     

    モータの軸は一部平らになっていますので、そこにネジが当たるように閉めてください。

バーサライタ装置の製法

これまで作成してきたバーサライタ装置のハードの製法をざっくりと記載いたします。

 

 

基本構成

マイコンにAdafruit Trinket M0を使用した場合の構成図が以下となります。

モータを単三電池1本で動かして回転部のLEDを回します。回転部にはLEDのほかに回転を検出するフォトリフレクタとマイコンが載っており、給電にはワイヤレスチャージモジュールを使用しています。

 

主な部品

  • フォトリフレクタ QTR-1A

     
  • LEDテープ Dotstar

     
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH

     
  • 電池ボックス 単3×1本

     
  • 電池ボックス 単3×3本

     
  • スライドスイッチ

その他 固定具などの詳細は以下に記載いたします。
 

持ち手の作り方

持ち手にはモータ、電池、ワイヤレスチャージモジュールの給電側が載っています。

1. 木材による筐体

持ち手や電池ボックス固定材としてブロック木を使用しました。スプレーで黒く塗っています。サイズは以下の通りです。

持ち手木材:30mm × 20mm × 140~170mm
電池固定材:12mm × 12mm × 65~75mm

上記サイズはあくまで参考ですが電池固定材は回転部にあたらない程度に近づける必要があるので長さは注意が必要です。

電池固定材の先端はフォトリフレクタの回転検知のマーカーとして使用するため、黒字に対して白いテープでしるしを貼っています。塗装時にマスキングテープを線上に貼って黒く塗らないようにしても良いです。

2. モータ固定

以下の金具を使用して、モータを固定します。

 

L字金具

創造工房 BX-289 2個入りを2セット 

 

コの字金具

創造工房 BX-291 2個入りを1セット 

 

L字金具を2つずつネジ穴2個分重ねて、電池固定材にねじ止め(タッピング皿ネジ 2 × 6) もう一方はM3×8の皿ネジで固定します。

 

電池固定材への固定はマーカのある先端から16mmほど離します。

 

モータの幅だけ(28mm)離してねじ止め(タッピング皿ネジ 2 × 10)します。電池固定材と持ち手材とが水平になるようにします。

 

コの字金具と一緒にモータをねじ止め(M3×8)します。

 

電池ボックス、ワイヤレスチャージモジュールの給電側を両面テープで貼り付け、スライドスイッチはねじ止めします。配線は構成図の通りです。モータは単三電池1本で駆動します。ラベルが貼ってあるほうからみて左をプラス電位になるように配線してください。

スイッチはM3ナットを挟んで浮かしてねじ止め(タッピング皿ネジ 2 × 10)しています。

ワイヤレスチャージモジュールのコイルはコの字金具にレジンで固めて固定しました。

 

 

回転部の作り方

回転部の作りは使用するマイコンによって異なります。

 

Adafruit Itsy Bitsy M0 Express版

 

ESP32版

 

SPRESENSE版

Adafruit Trinket M0版

ここでは小さくてかわいいマイコンAdafruit Trinket M0を使った回転部の製法を紹介します。

4mm厚、10mm幅の木の平棒にLEDテープを貼り付けます。先頭のLEDの中心の裏に穴をあけてネジ M2×20 を通します。これが回転軸となります。

見栄えをよくするためにアクリル円板 2mm厚、直径50mmの真ん中に穴をあけて回転軸に通して棒に接着しています。そこにワイヤレスチャージモジュールの受信側のコイルを貼り付けます。

上の写真のようにフォトリフレクタとワイヤレスチャージモジュールの受信側の基板とマイコンを接着、配線します。フォトリフレクタは電池固定材のマーカを検出できるように位置を調整して固定します。

回転軸にはジョイントをはめて固定します。他方はモータとつながります。

 

回転軸に対して重量のバランスをとるために端に重りを付けて調整します。以下の好きなサイズに小分けできる金具をねじ止めして聴視しました。

 

以上で回転部の完成です。配線は基本構成を参照ください。

 

 

おわりに

ざっくりですが、バーサライタのハード面の製法を紹介いたしました。

不明点等ございましたらお気軽にお問い合わせください。作る人いるかしら 🙄 ?

 

応用

狭ピッチのLEDを用いて表示分解能をあげてみた

詳細リンク

筐体を3Dプリンタでこしらえた

PovRanian の筐体を3Dプリンタにて

レシピ販売

Shopで3Dプリンタで筐体を出力して作るPovRanianの製作レシピの販売を開始しました。

レシピは 全22ページ 税込み¥500です。
筐体3Dモデルとサンプルコードは以下リンクで無料でダウンロードできますのでデータだけでもDLしてみてください。

PovRanian の製作レシピ

 

SPRESENSE のマルチコアプログラミングで バーサライタ

ついにSPRESENSE にArduino IDEでのマルチコアプログラミング環境が誕生しました。

 

前回SPRESENSEを使用して製作したバーサライタ(POVディスプレイ)にマルチコアを導入してどれほどの高速動作が達成されるのか観てみました!

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

 

マルチコアプログラミング

SPRESENSEは6つのCPUを搭載しております。Arduino  IDE環境でのプログラミング詳細は以下の公式のドキュメントの記載の通りです。

 
MPライブラリというマルチコア用のライブラリが今回追加となりました。Mainコアと5つのSubコアの制御やコア間の通信を司ります。

コアごとにArduinoプログラムを用意して、コアを指定してコンパイルというなかなかの力技です(;^ω^)

構成の概要

3つのCPUを使用してバーサライタしてみました。

  • Mainコア:フォトリフレクタで回転を検出して2つのSubコアに発光タイミングを送信
  • Sub1, 2コア:Mainコアからのタイミングを受けてSPIテープLED Dotstarを発光

 

Arduino IDEコード

Mainコア

フォトリフレクタでバーサライタ装置のマーカを検出して割り込みで回転時間を測定してMP.Send関数で表示すべき画像のアドレスを各Subコアに渡しています。

コア間でメモリが共有されているので表示データのアドレスだけを渡しています。

 

LED表示画像データ graphics.h は画像やGIFからpythonで生成しています。画像の色データを極座標変換してLED用に配列にしています。またLED位置によって輝度を線型的に調整してバーサライタ表示時に明るさが均等になるようにしています。Divで1周当たりの画像分解能を指定しています。

 

Sub1コア

Mainコアからの画像アドレスをMP.Recv関数で受けてLED発光させます。MP.RecvTimeout関数でデータ受信の待ちモードを指定しており、ここではMP_RECV_BLOCKINGでデータを受信するまで永久に受信待ちに入るモードにしています。

Adafruitが提供するライブラリのハードウェアSPI使用では拡張ボードのSPI4しか使用できないためAdafruit_DotStar.cpp と Adafruit_DotStar.h をメインボード用に改造して
Adafruit_DotStar_SPI5.h、Adafruit_DotStar_SPI5.cpp
をつくってSPI5でLEDテープを制御できるようにしました。

 

Sub2コア

Mainコアからの画像アドレスをMP.Recv関数で受けてSPI4でLEDテープを発光させます。

 

 

動作

1コアから3コアにすることで1周での画像分解能が120から400にまで向上しました!わーい!!

性能指数:LED 57個 × 回転速度 730rpm × 400分解能 ÷ 100 = 166440 hPOV

 
ちなみに性能指数とはバーサライタの性能を示す独自の指標です。

 性能指数  [hPOV(ヘクトポブ)] = LED数 × 回転数 × 一周の分解能 ÷ 100

次は今回のアップデートでフラッシュメモリへの読み書きのライブラリも追加されたので長尺の動画表示にトライしたいです。

マルチコアへの道

シングルコア

性能指数:LED 58個 × 回転速度 730rpm × 120分解能 ÷ 100 = 50808 hPOV

デュアルコア

性能指数:LED 58個 × 回転速度 730rpm × 220分解能 ÷ 100 = 93148 hPOV

その後の話

フラッシュ仕様検討

分解能が上がったことによって表示データが大きくなり、現状ですと5フレームしか書き込めない状態です。

SPRESENSEのコンパイルされたコードはフラッシュメモリにインストールされ、実行されるときにSRAMに展開されて実行されます。
SRAMは1.5MBのうちのMineコアが768kB、Subコアが128kB割り当てられます。

表示データに使用できる容量はSRAMサイズを超えられないのです。。。

そこで8MBもあるフラッシュを有効に使用できないか検討しました。
Fileライブラリを使用するとフラッシュにファイル形式でデータを保存できます。

そこで表示データ(LED57個 × 分解能400の32ビットデータ)をテキストデータとしてフラッシュに保存して、再度読み込んで配列にする実験をしました。
テキストデータを1文字づつ読んで32ビット分で文字列にして16進数に変換して配列化しました。

1フレーム分の配列を読み込むのに3分20秒もかかりました。。。。

マルチコアで読み込んで配列生成しながら、長尺の動画を表示したかったのですが時間がかかり過ぎのため断念しました。。。

参考

装置構成の変更

2本のLEDテープの配置を2本平行ではなく、1直線に並べました。回転の際の表示のずれを抑えるためです。

 

ずれが軽減され精度が増しました。でももっとやりたくなっちゃう。。キリがないww

 

さいごに

今回のSPRESENSEバージョンアップによってバーサライタの性能が大きく向上しました。

いつかフラッシュメモリの使用も気軽にできるようになるかと思います。今回のバージョンアップのように。

祈りを込めて。。。

そして バーサライタ装置をステージ上にそっと置き
 地を引きずりながら漂う煙のようにその場を後にした。

しかし その表情はどこか誇らしげであったという

SPRESENSE で バーサライタ

あいかわらずバーサライタ製作沼にドはまり中のお父ちゃん

SonyのマイコンSPRESENSEでもバーサライタを作っておりました。

https://homemadegarbage.com/en/spresense-pov01

SPRESENSEはGPSやハイレゾオーディオコアを有する高性能マイコンで、なんとARMコアが6個も搭載してあるのです。しかし現状Arduino IDE環境ではマルチコア設計はできません。

 

しばらくSPRESENSEでの製作は手を止めていたのですが、ある日耳寄りな情報が舞い込んできました。

次のバージョンアップでマルチコア設計がArduino IDEで可能となるらしいとのこと。これは実に楽しみ。6コアなので色々夢広がりそう(まぁ がゆえの難しさあったり、比例的向上が容易ではないとは思うが)。

そこで、ここでは一旦現状のSPRESENSEバーサライタの仕様と性能をまとめておいて、来たるXデーに備えたいと思います。

 

 

構成

SPRESENSEのハードウェアSPIを2つ使用してそれぞれLEDテープを制御します。回転はフォトリフレクタQTR-1Aで検出します。回転部への給電はワイヤレスチャージモジュールで無線で実施しています。

部品

  • マイコン SPRESENSE
     
     
  • SPRESENSE用ミニ拡張ボード KASPI001

  • フォトリフレクタ QTR-1A

     
  • LEDテープ Dotstar
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH
  • レベルシフタ  TXB0104

装置

木の取っ手にモータを固定して手持ちで動作できるようにしました。

 

回転部は以下のように独立しております。

 

LEDテープを2列にし、29セルの間に28セルが配置されるように設置しました。29セルのLEDテープはSPI4(メインボード)、28セルのLEDテープはSPI5(拡張ボード)で制御しています。

 

LED回転部への給電にはワイヤレスチャージモジュールを使用しました。

 

SPRESENSEのロジック電圧は1.8V系ですのでLEDとの間にレベルシフタTXB0104 を挿入して3.3Vに変換してます。

 

SPRESENSE

SPRESENSEとはSonyの高機能マイコンで Arduino IDEでもプログラミング可能です。

Arduino環境構築方法

以下の通りです。 

ここではArduino board packageバージョン1.2.1を使用しました。 

ピン配置

SPRESENSEはコネクタ介して拡張ボードを接続できます。SPI出力を2つ使用したいので拡張ボードも使用します。

メインボード

拡張ボード

ここではサイズの小さいサードパーティの拡張ボードを使用しました。

ハードウェアSPI

SPRESENSEは2つのSPI出力があります。拡張ボードがSPI、メインボードがSPI5です。SPIで制御できるLEDテープ DotStar を2つのSPI出力で制御します。

Adafruitが提供するライブラリのハードウェアSPI使用では拡張ボードのSPIしか使用できないためAdafruit_DotStar.cpp と Adafruit_DotStar.h をメインボード用に改造して
Adafruit_DotStar_SPI5.h、Adafruit_DotStar_SPI5.cpp
をつくってメインボードと拡張ボードそれぞれででLEDテープを制御できるようにしました。

以下のようにcppファイルを修正しました。

送信クラス、ヘッダファイルもうまいこと修正します(ここでは割愛)。
 

参考

 

 
 

バーサライタ評価

いろいろな構成やマイコンでバーサライタを作ると、どの組み合わせが最適であるかしっかり評価したくなってきます。

1周の間にLEDを切り替える分解能や回転スピードをしっかり把握して性能評価するべく回転計も自作しました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

オリジナル性能指数

今後は以下を性能指数としてバーサライタを評価し製作したいと思います。

 オリジナル性能指数  [hPOV(ヘクトポブ)] = LED数 × 回転数 × 一周の分解能 ÷ 100

 
 
評価結果

フォトリフレクタでマーカを検出して割り込みで1周の時間を測定します。1周時間を分割してRGBYを交互に表示して分解能を評価しました。
 

SPI単体での性能

まずはSPI単体でLEDテープ1本を制御して性能を観ました。

結果はSPI(4)、SPI5ともに
 29個 × 720rpm × 240 ÷ 100 = 50112 hPOV
でした。

 

公式文書では”通信速度はメインボードが最大で13Mbps、拡張ボードが最大で48.75Mbpsとなります。”とありましたが差はないように見えました。

そもそもレベルシフタがないメインボードの方が遅いのはなぜだろう?まぁ動いてるので良しとします。
 

SPI2本での性能

LED2本同時表示して評価しました。SPI(4), SPI5同時使用で、それぞれLED数は28、29個ですがコード上は2つとも29点灯で処理しています。

58個 × 730rpm × 120 ÷ 100 = 50808 hPOV でした。

Arduinoコード

SPI出力2個でLED表示してます。フォトリフレクタで割り込んで1周の時間を測って120分割でLED点滅させています。

 

LED表示画像データ graphics.h は画像やGIFからpythonで生成しています。画像の色データを極座標変換してLED用に配列にしています。またLED位置によって輝度を線型的に調整してバーサライタ表示時に明るさが均等になるようにしています。

 

動作

GIF画像から表示データを生成して表示しています。