Home Made Garbage

SPRESENSE で バーサライタ

ホーム
電子工作
Raspberry Pi
IOT
WEB

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

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

POV Display Using SPRESENSE

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

 

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

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

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

 

 

構成

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

部品

装置

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

 

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

 

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を切り替える分解能や回転スピードをしっかり把握して性能評価するべく回転計も自作しました。

回転計を自作

 

オリジナル性能指数

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

 オリジナル性能指数  [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画像から表示データを生成して表示しています。

おわりに

今後登場するであろうマルチコア設計が可能となるバージョンアップのXデーに備えて現状の仕様と性能をまとめました。

マルチコアによってどのくらい性能が上がり表示が鮮明になるのかとても楽しみです♪

Related Posts

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください