Home Made Garbage

M5Stack ATOM Matrix で バーサライタを実現するまでの過程

ホーム
電子工作
Raspberry Pi
IOT
WEB

M5Stack ATOM MatrixM5Stack ATOM Lite を購入いたしましてバーサライタ(POV Display)を実現するまでの過程を紹介させていただきます。

 

 

M5Stack ATOM

M5Stack ATOM は以前から発売されており非常にコンパクトで可愛いので気になっておりました。
この度、技適版が2020/4/10に 国内販売されるとのことで早速購入させていただきました。

特にM5Stack ATOM Matrixは25セルのLEDマトリクスが搭載されておりますので、バーサライタできる!と速攻でポチりました。

俺がやらなきゃ誰がやるってんだ (オイラは POV大好き少年だよーーー!)

技適

早速国内販売版のM5Stack ATOMの到着の報告がTwitterのタイムラインに流れてきました。

すると技適シールが貼られていない個体も少数あるとの報告もございました。

 

ほどなくして購入先のスイッチサイエンスからも”ATOM Matrix 技適表示不備のご案内”という商品交換案内メールも来ました。

“表示のない製品が届いたお客様におかれましては、違法行為となる可能性がございますので決して電源を投入されないようお願いいたします。”
と非常に恐ろしい内容のメールです。この時点で私の家にはまだ商品は届いておらずドキドキして到着を待ちました。

到着

Come on… Come on… YES!

家のATOMは技適シール問題ございませんでしたε-(´∀`*)ホッ

 

 

基本動作の確認

M5Stack ATOM Matrixでのバーサライタ実現に向けて基本動作の確認を実施しました。
Arduino IDEを使用してプログラミングいたしました。

ATOM用のArduinoライブラリは以下
 https://github.com/m5stack/M5Atom

LED点灯

M5Stack ATOM Matrixには WS2812B-2020 が使用されております。
データピンはGPIO27です。
ATOM用のArduinoライブラリM5Atom.hでも点灯用関数はございますが、まずは実績あるNeopixel用のライブラリで点灯を確認いたしました。

尚、M5Atom.hライブラリ以外での点灯時は輝度に十分お気を付けください。
LEDが25個も載ってますのでsetBrightness[0-255]などで制限しないとマックスで1A以上流れます。

以下はいずれもsetBrightness(20)で実験しています。

 

FastLEDライブラリ

M5Atom.hでも採用されているFastLEDライブラリで点灯を確認してみました。
 https://github.com/FastLED/FastLED

問題なく点灯とLEDの配置順の確認ができました。

 

Adafruit NeoPixelライブラリ

Adafruit_NeoPixelライブラリも確認してみました。
サンプルコード strandtest.ino を書き込んでみました。

コチラも問題ありませんでした。
ESP32でNeopixelを点灯させるとESP32のタイミングエラーによる点灯不具合があったりするのですが。なんで問題なく点灯するんだろ?
まぁOK!

 

追記(20/4/21)

やはりAdafruit_NeoPixelライブラリだとESP32同様に点灯不具合ありました。

電源

M5Stack ATOMはバッテリが内蔵されておりません。
USB-Cケーブルの接続で当然 給電され起動するのですが、バーサライタでぶん回すに際してケーブルつけっぱなしにもできないので給電方法検証しました。

 

上記2種の方法共に問題なく給電できました。

正確で安全な給電方法を実施するには内部回路の把握が必要ですので回路が知りたいところです。

公式によるとまもなく公開されるとのことです。楽しみ♪

参考

バーサライタ検討

さて基本的な動作を確認できましたので本題のバーサライタの実現に向け動きたいと思います。

LED点灯

まず3Dプリンタで固定具を作ってぶん回してみました。
FastLEDライブラリでLED5個を赤→緑→青→黄とループで切り替えるだけです。

すんなりうまいこと表示できましたw
Neopixelでのバーサライタは初めてでしたが WS2812B-2020 のリフレッシュレートは2kHzとのことでバーサライタへの使用も問題ないようです。 

LiPoバッテリで電源供給(5Vに印可)しています。

 

ちなみにM5Atom.hを使用してM5.dis.drawpixでの点灯も試してみました。

どうもM5.dis.drawpixでは点灯までに時間を要するらしくきれいな表示ができませんでした。。。
あと赤と緑の点灯が逆になってます(多分バグ)。

バーサライタとしてはFastLEDライブラリを直に使用するほうが良さそうです。

回転検出

回転を正確に検出することで安定した画像を表示することができます。
出来ればATOMに外部センサを追加したくないので(かわいらしさがそこなわれるため)内蔵の慣性センサ MPU6886 で回転検出できないかテストしてみました。

まずはM5Atom.hのMPU6886ライブラリのgetAhrsDataで姿勢角を使おうと思ったのですがオフセットが大きいためか値が安定していませんでした。

どうもジャイロのオフセットが大きいようでずーっと値がドリフトします。
校正すればよいのでしょうがやり方がわからないので、ここでは加速度センサの値を使って検証してみました。

回転しながらの加速度センサの値を検証しました。
MPU6886ライブラリのgetAccelDataでx, y, z軸の加速度を取得してUDPで送信して観測しました。

UDP送信は以下のサンプルコードを参考にしました。
 WiFiUDPClient.ino

x, y軸(平面方向)の加速度値は回転による遠心力の影響で使い物になりませんでしたが、回転時のZ軸の加速度値をプロットしてみました。

何となく上下に波打ってるので回転を検出できそうですね。
早速 Z軸の加速度の値の上下を検出して1周する時刻を導出してRGBYを4分割表示してみました。

ダメですね。。。やかり加速度のみで回転検出はムリがありそうです。

ちなみにM5Atom.hで慣性センサを使用しているのですが、M5Atom.hとFastLEDライブラリが競合してしまうようで、ここでは泣く泣くM5.dis.drawpixでLED点灯しています。

ということで慣性センサによる回転検出はあきらめました。

以下の項目を今後の課題とさせてください。

今後の課題

  • MPU6886の校正方法の学習
  • MPU6886による姿勢角取得高速化
  • M5Atom.hとFastLEDライブラリの共存
     

バーサライタ動作

慣性センサによる回転検出は一旦あきらめまして、モータ速度をマニュアル調整して表示させる方法で動かしてみました。

ドラえもん

 

マリオ

 

1周48分割で表示させています。まぁまぁできてるのではないでしょうか。

長くなりましたので、表示するためのプログラムコードや表示データの生成方法などは別段で報告させていただきます。

追記

バーサライタ完成 (2020/4/23)

M5Stack ATOM Matrix で ハンディーバーサライタを製作 ~ POV1-ATOM ~

贅沢なる2個使い (2020/5/3)

Maker Faire Kyoto Online にて発表しました。

LED直列25個使い (2020/6/10)

ATOM MatrixのLEDマトリクスの1列(5個)しか使っておらず、もったいないので
ぶったぎって1列25個のLEDバーにしてバーサライタを楽しみました。

NeoPixel でバーサライタ検討

Related Posts

コメントはこちらから

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

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