「POV製作」カテゴリーアーカイブ

球体POVつくってみた -球体POV製作への道 その10-

先日、スリップリングを用いて姿勢制御モジュールとPOVの融合による新たな表現を検証いたしました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

 

ここでは姿勢制御POVの機構をそのまま流用して、長年の夢であった球体POVを作ってみました。
およそ6年かかった”球体POV製作への道”ついに完結です!

LEDテープ比較 Neopixel vs Dotstar -球体POV製作への道 その7-

 

 

筐体製作

6年前とは異なり、現在の私には良いブラシレスモータと素晴らしい3Dプリンタがございます。

直径10cmのリングを3Dプリントし、

 

SPI LEDテープ (41セル) をリングに貼り付けて、姿勢制御POVのホイールの代わりに固定しました。

 

簡単に球体POVが完成してしまいました。テクノロジーの進歩を感じずにはいられません。

構成

 

球体POV動作確認

まずはリングのみを載せて回転させてみました。
3Dプリントしたリング自体は軽いので問題なく高速回転できています。

 

リングの片側にLED (21セル) を付けて動作確認
ブラシレスモータのエンコーダ出力 (1周 100パルス) でLEDの色を変えて表示を確認しました。

問題なく1周100分割でRGBY 4色で点灯できました。

 

リングのもう一方に20セルのLEDを貼り付けます。他方のLEDの間にセルが配置されるように貼り付けました。

合計で41セルのLEDとなりましたが無事に1周100分割でRGBY 4色で点灯できました。
回転速度は約1400rpmです。24V ブラシレスモータはさすがに速いです。

 

LEDセルを増やしたことで表示密度も向上いたしました。

 

全白で表示させてLEDの位置による光の違いの有無の確認を実施しました。

LEDの場所 極に近いほど経路長が短くなるので 明るさに違いが出るかと思いましたが、 それほど差はありませんでした。
正面から見ると発光方向が傾くのでいい感じに 均等になっているのかもしれません。

表示画の経路長輝度補正の必要はいらないと判断しました。

 

動作

アスペクト比 2:1の地球の絵を表示してみました。
 Equirectangular-projection.jpg 

画像を100×47の画像に縮小し、各ピクセルの色を検出しLED用のファイルに変換し表示させました。

LEDセルは41ですがリング下部の接続部にはLEDがないので縦47ピクセルとしました。

それほど画素数は多くないですが、なかなかきれいに表示されました!

 

おわりに

ここでは前回に製作した姿勢制御POVを流用して、長年の夢であった球体POVを製作しました。

約6年前に球体POV製作への道を立ち上げて頓挫しておりましたが
この間に3Dプリンタを入手しハンディーバーサライタや姿勢制御モジュールを製作し、
技能の向上と良い部品とのめぐりあわせがあり この度容易に完成させることができました。

いろんな絵を表示させてみたいのですが なかなか球体を展開した画像を用意するのは難しいものですね。
画像生成方法も検討しないといけません。

 

追記

2022/3/13 絵の表示について

球体POVを製作されている やまたい@ものつくり さんから
球体中央は画像修正しなくてもいい感じに絵が表示できるというアドバイスをいただきました。

 

試しにうまい棒のアイツで試してみました。
以下のように真ん中に顔を配置してアスペクト比2:1の画像にして表示してみました。

 

なかなかいい感じ♪

 

小学館のアイツも同様に表示

 

本当に極端な加工なしでも絵だしできますね。
色々表示させて楽しみたいと思います。

姿勢制御装置とバーサライタの融合2 ーリアクションホイールへの道51ー

前回は 1軸 姿勢制御モジュール SHISEIGYO-1のホイールにLEDをつけてバーサライタ動作させてみました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

 

姿勢制御モジュールのホイールはバランス状況によって正転・逆転及び回転スピードが変わるので、安定した画の表示は出来ませんでした。

 

 

スリップリング

前回はホイールにLEDと制御用のマイコン(Adafruit Trinket M0)と回転検出用フォトリフレクタを載せてワイヤレスチャージモジュールで無線電源給電しました。

ここでは画の表示にホイールを駆動するブラシレスモータのエンコーダ出力を使用したいと考えました。
エンコーダによる回転検出値でLEDの点灯パターンを制御すればホイールの正転・逆転及び回転スピードが変わっても表示する画に影響はありません。
しかし問題はどのようにエンコーダ出力値をLED制御に反映させるかです。

そこで遂にスリップリングに手を出してしまいました。

 

スリップリングは回転部に電源線や信号線を接続できるコネクタです。

 

ここでは4線のスリップリングを用いて回転部のSPI入力LEDと接続します。

 

SHISEIGYO-1 POV 構築

購入したスリップリングをSHISEIGYO-1のモータに通したかったのですが、シャフトが短く埋もれてしまいました。。

 

マウントハブと平行ピンでシャフトを延長してスリップリングとフライホイールを固定しました。

 

凄く仰々しくなってしまいました。。

完成

スリップリングの回転部用の配線に11セルのLEDを接続し、他方の配線をSHISEIGYO-1のコントローラであるATOM Matrixに接続します。

 

ATOM Matrix (デュアルコア) で姿勢制御しつつモータエンコーダ出力(1周100分解能)に基づいてSPI LEDを制御します。

 

動作

まずはホイール1周を4分割して4色で発光
エンコーダで回転位置を検出してホイール速度や正転・逆転に依存しない表示を確認。

倒立動作も問題なく出来ています。

 

アニメーション表示

LEDのセル数が少なく回転速度も一定ではなくそれほど早くないので、きれいな表示は出来ていませんがスリップリングの使用によってかつてない表現が実現できました。

 

おわりに

ここでは初めてのスリップリング体験を堪能し、姿勢制御モジュールとPOVの融合による新たな表現を検証いたしました。

今後はスリップリングを用いたガチPOVの製作も検討したいなと考えております。

それではまた。

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りたいと思います。

 

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

さて先日購入したLEDストリップの動作に驚愕してもろもろ基本的な動作検証をしたわけですが。。。

回転計を自作

ここではもう一度落ち着いてAPA102-2020と向き合ってみたいと思います。

 そう。まさに トランキーロ!あっせんなよ

です。

 

 

購入品

購入したLEDバーは以下です。

2mm角のSPI入力LED APA102-2020が3mmピッチでぎっしり128個も載った商品で、強度や放熱のためか基板には1mm厚ほどのアルミ板が貼り付けられています。

APA102 DotStar搭載と記載ありますが、5050サイズのチップと異なり高速PWM動作ができないため、バーサライタなどのPOV (Persistence of Vision)には適していないとも明記されています。

商品データシートは以下 
 https://cdn-shop.adafruit.com/product-files/3776/3776_datasheet.pdf

APA102-2020

購入したLEDバーに搭載されているチップの写真が以下です(小さすぎてうまく撮れない。。)。

 
APA102-2020でググると正規なのかコピーなのかよくわからないのですが たくさんのチップが検索されます。以下に一部をまとめます。

恐らく購入したLEDバーに搭載されているAPA102-2020は8ピンでチップ写真から想像するにAPA102-2020-256-8かAPA-102-2020-8192-8Bなのではないかと思います。

しかし、サイトページとデータシートの写真が異なっていたりデータシートもリフレッシュレートが記載ないなど情報不十分ですので、もはや製造元や正式型番を知ることに意味はないように思います。疲れるし。。。

ということで実機で動作を観ていきましょう。
それこそ泥臭き爪真っ黒のエンジニアリングというものです。

APA102-2020動作

測定方法

Arduino UNOでLEDバーのセルを1つ光らせて点灯時の電流を10Ω抵抗による電圧降下でオシロスコープ観測しリフレッシュレートを観ます。オシロにはADALM2000を使用しています。

LED用ライブラリ

LED点灯用のライブラリはAdafruitのDotstar用のライブラリを使用しました。
 https://github.com/adafruit/Adafruit_DotStar

ここでこのライブラリの注意点があります。このライブラリのsetBrightness()はLEDの輝度を設定する関数ですが、グローバル輝度を設定するものではありませんでした。ずっと勘違いしていました。。

setBrightness(0~255)は色輝度に係数としてかけられておりました。以下のコードコメントにも明記されております。
 https://github.com/adafruit/Adafruit_DotStar/blob/master/Adafruit_DotStar.cpp

正規のDatstar LEDはグローバル輝度を設定すると600Hzほどの低周波PWMが重畳されます。そのためPOVに使用した際に残像の途切れの要因となります。
そこでAdafruitはsetBrightnessをグローバル輝度ではなく色輝度への設定に変更したようです。このライブラリではグローバル輝度は最大値(31)となっております。正しい判断だと思います。

ここではグローバル輝度も変更してLEDの特性を観たいのでライブラリを修正して可変にしております。Adafruit_DotStar.cppspi_out(0xFF)もしくはsw_spi_out(0xFF)の0xFFを所望のグローバル輝度に変更します。

たとえばグローバル輝度を16にしたい場合は
 0xFF → 0b11110000

グローバル輝度を1にしたい場合は
 0xFF → 0b11100001

などです。
グローバル輝度は以下の図のように5ビットの値D4-D1 (0~31)で指定します。

測定結果

  • グローバル輝度31、色128 (RGB=0x808080)
     

     
     
  • グローバル輝度16、色128 (RGB=0x808080)
     

 
リフレッシュレートはやはり600Hz台で グローバル輝度をさげると周波数が上がり、LEDに流れる電流が減りました。

 

  • グローバル輝度16、色30
     

     
     
  • グローバル輝度16、色224
     

 

グローバル輝度を16として色輝度を変えていくと以下のような結果となりました。

色輝度 freq [Hz] Duty [%]
0 0
30 664.8 0.016
60 648.5 1.8
128 625.1 9.4
196 610.8 50.6
224 597.2 72.8
240 590.4 85.3
255 100

 

色輝度-Dutyは以下の通り。

LEDの輝度を上げるとリフレッシュレートが変動して下がるなど よくわからない動きをしておりますが。。。とにかくLEDバーに搭載されているAPA102-2020は低いリフレッシュレートのためPOVには向かないことがよ~くわかりました。

ようするに以下のようになるのです 😥 。

 

バーサライタへの応用

しかし、ここで「あーリフレッシュレート低いわ。バーサライタ無理だね」と終わってしまってはタダのリサーチャーもしくは評論家止まりなわけで。。

私は泥臭き爪真っ黒のエンジニアリングをやめませんよ。なんせ9430円も払ったんですから。。。

じゃあ色輝度MAXでグローバル輝度のみで調光すればいいのでは?そうすればDuty 100%で低周波PWM制御の影響は受けません。

やってみた

マイコン SPRESENSEを用いてこのLEDバーを使用したバーサライタを試しました。

 
以前作成したSPRESENSEバーサライタの応用で

回転計を自作

 
LEDバーを搭載!

LEDバーの128個のセルのうち64を使用してグローバル輝度は1としました。のこりの64個はいっさい制御せず電源投入時に点灯したままになったりするので黒テープで隠してます。

動作

SPRESENSEは1コアのみの使用。LED64個の点灯で1周128分解能が達成されました。ギリギリですが。。

RGBはそれぞれ0か255でしか点灯できないので8色しか出力できません。。。

 

絵も出してみる。

狭ピッチのLEDバーですのでいい感じに絵が出ます。

ちょっと1周の分解能が低いのでマルチコアやSPI出力2個使用などで向上は考えたいですね。

しかし8色しかでないバーサライタをこれ以上いじるかどうかは。。。

また別のお話

追記

大臣の褒め (2020/3/7)

河野 太郎 防衛大臣にお褒めの言葉をいただきました。
誠にありがとうございます。

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

ずっとバーサライタのLED密度をあげて表示分解能を上げたいなと思っておりまして、SPI入力で2mm角のフルカラーLEDテープを探しておりました。

そうして生きておりましたらTwitterのTLで以下の商品を見かけたのです。

2mm角のSPI入力LED APA102-2020が3mmピッチでぎっしり128個も載った商品で、強度や放熱のためか基板には1mm厚ほどのアルミ板が貼り付けられています。

見た瞬間にコレだ!と即購入しましたよね。mouserにて。送料込みの9430円で1週間ほどでUSから届きました。 

小さいながらも鮮明に光り かつびっしり しき詰まっているので素晴らしい輝きを放っておりました。

このときはまだ私は喜びの絶頂におりました。この後の惨劇も知らずに。。。。

尚、本記事でLEDのチップ名を各種使用しますが、購入先のサイト等の仕様に表記のあったセル名を信じて記載しております。実際に正規品が載っているかは不明です。ご了承ください。

 

 

バーサライタを試してみた

早速、商品をバーサライタに搭載して、回してみたところ。。。

な。。なんじゃこりゃ。。。なんでこんなにマダラなの???Dotstarだよね??ものすごく混乱して震えましたよ
((((;゚Д゚))))ガクガクブルブル

APA102ってリフレッシュレート19.2 kHzだよね。。。?

APA102C vs SK9822 -SPI入力 フルカラーLEDセルの比較-

そしてちゃんと商品サイトを読んだところ

“The LEDs on this board are very tiny DotStar compatible chips, but they don’t have the high speed PWM that we like of the 5050 sized chips, so this bar is not good for POV projects.

と記載があったのです。。。パニック 😯 !!

。。。。。。。ん?APA102とAPA102Cって違うのか?ということになりリフレッシュレート調べてみました。

前置きが長くなりましたがここでは各種LEDテープのリフレッシュレートを測ったのでご報告いたします(涙目)。
 

リフレッシュレート測定

測定方法は以下の通りです。Arduino UNOでLEDテープのセルを1つ光らせて点灯時の電流を10Ω抵抗による電圧降下でオシロスコープ観測しリフレッシュレートを観ます。

オシロにはADALM2000を使用しています。

LED制御ライブラリは以下を使用しました。
 https://github.com/pololu/apa102-arduino

APA102C (Dotstar)

まずはPOV向けのLEDテープとして売り出されているDotstarのリフレッシュレートを測りました。

2016年4月にAdafruitから直接購入しました。
2021年11月現在 DotstarにはAPA102CではなくSK9822が搭載されているようです。

チップはAPA102Cと仕様に記載されています。


 

測定波形

LED全体の輝度を設定するグローバル輝度と色自体の濃さを決める色輝度をかえて波形観測します。

  • グローバル輝度100%、色50% RGB=0x808080
    周波数は18.9kHzとほぼ仕様通りのリフレッシュレート(19.2kHz)となりました。
     

 

  • グローバル輝度50%、色100% RGB=0xffffff
    グローバル輝度は600Hzの低周波PWMで制御されておりました。


     

  • グローバル輝度50%、色50% RGB=0x808080
    グローバル輝度と色を同時に下げると下図のように600Hzのグローバル輝度制御PWM波形とリフレッシュレート18.9kHzの色輝度制御PWMが重畳されるような形になります。

APA102C (Dotstar)は高速リフレッシュレートでPOV向けといえますが、グローバル輝度を下げると低周波PWMが重畳され画像にちらつきとして現れるかもしれません。

SK9822

最近APA102Cの代替えとしてよく見かけるPOV向けのLED SK9822のリフレッシュレートも測りました。

 

測定波形

  • グローバル輝度100%、色50% RGB=0x808080
    周波数は4.3kHzでした。仕様より若干ひくいリフレッシュレート(4.7 kHz)となりました。
     

     

  • グローバル輝度50%、色50% RGB=0x808080
    グローバル輝度をさげてもリフレッシュレートは変わらず電圧降下が減りました。つまりグローバル輝度は電流で制御されていることがわかります。
      

SK9822はAPA102Cほどではないですがリフレッシュレートは比較的高く、グローバル輝度は電流制御でリフレッシュレートは変わらないので非常にPOV向きといえます。

APA102-2020

問題のAPA102-2020のリフレッシュレートです。

 

測定波形

  • グローバル輝度100%、色50% RGB=0x808080
    リフレッシュレートは560Hzとなりました。低い。。。。
     

     

  • グローバル輝度50%、色50% RGB=0x808080
    グローバル輝度を50%にさげるとリフレッシュレートが若干上がりました(617Hz)。そしてLEDに流れる電流も低減しました。
      

     
  • グローバル輝度16%、色50% RGB=0x808080
    さらにグローバル輝度を16%にさげるとリフレッシュレートがまた上がりました(678Hz)。そしてLEDに流れる電流も低減しました。
      

APA102-2020のリフレッシュレートは600Hz台で低く、更にグローバル輝度によって変動します。。。まったくもってPOV向けではありませんね。

そりゃマダラな表示になるわな!

しかしAPA102とAPA102Cでこんなに動作違うもんかね。。。もしかしたらコピー品かもしれませんね。。。ウェブ探すといろんな会社のいろんなAPA102チップ写真が出てくるようですし。。。

おまけ

激安LEDテープ

まだまだ高いSPI入力LEDテープですが先日AMAZONで安い製品を見つけて購入しました。ついでにこいつのリフレッシュレートも観ましょう。


 

APA102と記載はありますが。。。チップの見た目はそこはかとなくSK9822っぽい。。。

 

測定波形

  • グローバル輝度100%、色50% RGB=0x808080
    リフレッシュレートは4.6kHzでした。
     

     

  • グローバル輝度50%、色50% RGB=0x808080
    グローバル輝度をさげてもリフレッシュレートは変わらず電圧降下が減り、グローバル輝度は電流で制御されていることがわかります。
      

やっぱSK9822じゃん!!まぁ安いしむしろPOV的にはSK9822のほうがありがたいのでこれはお買い得商品と言えるでしょう。

Neopixel系

なんかどんどん疑心暗鬼になり何もかも信じられなくなったのでNeopixel系のLEDテープも観測してみました。もうシンドイので駆け足で!
 

その1

リフレッシュレートは1.1kHzでした。思ったほど遅くないですね。

 

その2

これは390Hzでした。。。

 
もうこれらNeopixelテープに何のセルが載っているとかは調べません。。。またそのうち。。。

 

パトラッシュ。。なんだか とっても眠いんだ。。。

参考

追記

2019/9/6

意地でバーサライタ表示まで実現させました。

回転計を自作

 

ハンディ バーサライタ 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画像から表示データを生成して表示しています。

おわりに

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

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

回転計を自作

今年はなんだかバーサライタ制作に凝っているのです。

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

いろいろなマイコンでバーサライタを作ってみて、構成変えてみたりして表示分解能(LEDの羽が1周する間に点滅を変更する回数)を調べるのですが、そもそも回転速度自体も把握しないと真っ当な評価できないですよね。
回転遅ければ点滅回数なんていくらでも上げれるのですから。

分かってはいたのですが、バーサライタ自体の制作に夢中で手が回らず とりあえず新品に近い電池でモータ回して表示分解能を評価しておりました。

でも一歩踏み出して決めたのです。回転計を自作しよう!

 

 

構成

フォトリフレクタQTR-1Aで回転物を検出して時間を測ります。回転数(RPM)をOLEDディスプレイし表示します。

  • マイコン Adafruit Itsy Bitsy M0 Express

    このマイコンの詳細は以下に記載しております。
     https://homemadegarbage.com/eye-pendant
    I2CのSDA, SCLピンはプルアップ抵抗内蔵でないため抵抗を外付けする必要があります。
     
  • SparkFun マイクロOLEDモジュール

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

 

オモテ

 

ウラ

SparkFun マイクロOLEDモジュール

本モジュールは64×48 ピクセルのOLED ディスプレイ SSD1306搭載しており、通信方式はI2CとSPIのいずれかを選択できます。

詳細は以下
 ・チュートリアル
 ・回路図

基板上のジャンパーの接続によって各種設定変更可能です。 

 

 

 

 

 

 

ここでは通信方式をI2C (BS1:1, BS2:0)としてアドレスを0x3C (D/C:0)にしました。

D0ピンがSCL、D1がSDAとなります。

 

Arduinoコード

SparkfunのOLED用ライブラリを使用しております。
 https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library

フォトリフレクタの出力で割り込んで回転速度を計測しています。10周の時間を測ってRPMを導出しOLEDディスプレイに表示します。

 
 

動作

これでバーサライタの回転数を測ることができます!

更なるバーサライタの高みを目指したいと思います。正統なる分解能評価をこの手にして。

バーサライタに映像を無線転送

前回、ESP32で割り込みやマルチタスクを駆使してバーザライタの高分解能化に成功いたしました。

ESP32でバーサライタ 高分解能化

今回は画像や動画をWiFiで転送して表示に成功いたしましたのでご報告します。

 

UDPで静止画送信

UDP通信でWiFi介して静止画をバーサライタ装置に転送します。

Node-REDのDashboardノードで画像選択のボタンをこしらえて、Pythonで選択された画像の縮小とバーサライタ用にデータ変換を実施してUDP送信しています。

Node-RED設定

Node-REDでボタンなどのUI表示と選択した画像の名前をPythonに送ります。

①ダッシュボード ボタン表示

node-red-dashboardのbutton nodeでボタンUIを表示します。

3画像用意してバーサライタに表示させます。

Group:ダッシュボードノードを表示させるグループ名を決めて選択します。
Icon:ボタンに表示させる画像を選択します。
Label:ボタンの表記
Payload:ここでは画像名を次段に送ります。

②ファンクションノード

3つのボタンのノードをまとめるためにファンクションノードを配置

③ダッシュボード テキスト表示

node-red-dashboardのtext nodeで選択されたボタンのPayloadをダッシュボードに表示させます。

Group:ダッシュボードノードを表示させるグループ名を決めて選択します。
Label:テキスト欄に表示させる画像を選択します。
Value format:表示させるテキストを選択。ここではボタンノードからのPayloadを指定。

Dashboardタグを選択して表示ボタンでダッシュボード画面が表示されます。

ダッシュボード

④Python実行

exec nodeでPythonコードを起動させます。

Command:Pythonコード実行させるバッチファイルを指定。(Windows PC使用)
Append:引数にPayloadをチェック入れて画像名を送っています。

以下がバッチファイルの内容です。引数1個をもってpythonコードを起動します。

Pythonコード

ダッシュボードボタンで選択された画像ファイル名を受けて、その画像を変換してUDPでバーサライタに映像情報を送信します。

Arduinoコード

pythonから送られた画像データを受けてバーサライタに表示させます。

動作

たまに取りこぼしあるけど画像伝送実現できました!わーい 😛 

ダッシュボードノードのボタンで画像が切り替わります。

 

 

動画転送

動画転送も試してみました。PythonでGIFファイルをフレームごとに変換してバーサライタに転送します。

動作

バーサライタの1周の分解能を200から100に減らして転送しているのですが、遅い。。。

転送量をギリギリまで増やして送信漏れもないようにうまいことできるように引き続き勉強します! 😆 

ESP32でバーサライタ 高分解能化

前回、課題となったPOV(Persistent Of Vision=残像)表示装置バーサライタの高速化が実現できましたのでご報告いたします 😀 。

ESP32でバーサライタ 高分解能化

前回の課題

割り込み制御できない

フォトリフレクタ QTR-1Aで回転を検出(1周の時間計測)しており、フォトリフレクタの出力を受けて割り込み制御したかったのですがESP32ではattachInterrupt()うまく機能しない。

例えば立下り検出モードにして入力をGNDに落とすと、一度だけ割り込み関数を呼んでほしいのだが何度も割り込み検出してしまう。

ハードウェアSPI

SPI制御LEDテープDotstarのライブラリではESP32のハードウェアSPIを使用することができなかった。

前回はソフトウェアSPIで制御した。

マルチタスク

前回はCORE0でフォトリフレクタ回転検出、CORE1(loop)でLED発光処理させてみたのですが、うまくLEDが光りませんでした。

 

 
 
 
 
以下、高速化に向けた解決編です。

割り込み制御

あいにくオシロスコープを持ってないので予測ですがチャタリングが原因だと考えられます。
ということでシュミットトリガと抵抗器とコンデンサをフォトリフレクタの出力とESP32の割り込み検出ピン(D34)に挿入しました。

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

 

構成