2019年9月10日火曜日

M5StackとNeoPixelで作った光る帽子をM5StickCに移植した



一年ほど前 Maker Faire Tokyo 2018 への出展作品として光る帽子を作ったのですが、その際に採用した M5Stack Gray を M5StickC に変更することで従来の光る帽子の要件を満たしつつ、より軽量化が見込めるのではないかと考えて移植作業をおこないました。

参考:M5StackとNeoPixelで光る帽子を作ってみた
http://ajimitei.blogspot.com/2018/09/m5stackneopixel.html

光る帽子の要件をおさらい

  1. 帽子全体がフルカラーで光るようにLEDを配置した上で制御ができること
  2. 帽子を雑に扱っても怪我をしにくいこと
  3. 帽子は子供が被れるくらいの重さであること
  4. 帽子を落としてもなるべく壊れにくいこと、もしくはすぐに修復できること
  5. 自分がなるべく開発しやすい環境であること

光る帽子を作る上でどんなことを大事にするかのおさらいです。今年の Maker Faire Tokyo は終了してしまいましたが、NTなど他イベントでの展示も考えているので要件は変更しません。また、光る帽子は製作者本人が被るだけでなく来場者にも被ってもらい、自分の写真を撮ってもらうことをイメージしているので帽子の重さや帽子を被る際に怪我をしないといったことも重要なポイントです。

M5Stack Gray から M5StickC に変更することによる改善点

一番の改善点は本体の軽量化です。M5Stack Gray から M5StickC にすることで重さが 1/8 になるので 、M5Stack Gray 3つ分の重さ 360g から M5StickC 3つ分の重さ 45g へ、 315g の軽量化を実現することができます。頭上に身につけるものなので300g以上の軽量化は被った際の印象を大きく変えることができます。

自身の重さで沈むM5Stack Gray


その他のM5Stackを選んだ際の理由はすべてM5StickCでも満たしており、M5Stack Gray の9軸センサについてもM5StickCは6軸センサを搭載しているので問題ないという判断ができました。
最初にM5Stackを選んだ際の理由を下記に再掲します。
  • 基板がむき出しではないこと
    • 落としたときでも壊れにくそう
    • 来場者が作品を触ったときに怪我をしにくそう
  • 外部ピンがケースの開け締めなく接続できる
    • 帽子に無理な力がかかったときもケーブルが抜けるだけで基板本体へのダメージが少なくてすみそう
  • バッテリーを内蔵していること
    • NeoPixel用の電源を別途用意する必要がない
  • ESP32を搭載していて、Arduinoの開発環境が使えること
    • 自分が慣れている環境で開発できる
  • (M5Stack Grayのみ)9軸センサを備えていて、帽子の動きにあわせてNeoPixelを制御できること

M5Stickを使ったNeoPixelの制御方法

それではハード側、M5StickCとNeoPixelを接続してみます。M5Stack Gay を使った際は NeoPixelの3pin(緑・赤・黒)をそれぞれ5番、3.3V、Gに接続しましたが、M5StickCでは26番、3.3V、Gに接続します。相変わらず配線はこれだけ完了です。

前回と同じくNeoPixel にある電源用の出線は使いません

次にソフト側を設定します。M5StickCも中身はM5Stack Gray と同じESP32なので、以前と同じ AdafruitのNeopixel Libraryを使うことができます(参照元:https://qiita.com/tomorrow56/items/fcf5ea7bfd2056e8f88f)。
上記のライブラリのページからZipファイルをダウンロードして解凍、Arduino IDE でライブラリをインポートすると、スケッチ例を読み込むことができるようになります。以前インポートしたままになっている場合は、ツール -> ライブラリを管理 を選択して新しいバージョンのライブラリに更新するなどすると良いでしょう(原稿執筆時点での最新バージョンは1.2.4)。

そして今回もスケッチ例の Adafruit Neopixel -> simple を参照しながら開発を進めます。

M5Stickはピン配置がArduinoやM5Stackとは異なるので、simple をそのままM5Stickで実行してもNeoPixelを光らせることはできません。スケッチ例11行目の
#define PIN            6

#define PIN            26 
に修正することで制御が可能になります。また、NeoPixel を制御する個数はスケッチ例16行目の
#define NUMPIXELS      16
 を編集することで変更することができます。上記例では16個までのNeoPixel を制御しています。

インタラクティブにLEDを制御する

M5Stack Gray を使っていたときと同じく、M5StickCのセンサの値を使ってNeoPixelの色や明るさを制御することにしました。M5StickC は加速度とジャイロを計測できるMPU6886を搭載しているので、ジャイロのX軸, Y軸, Z軸の各値をNeoPixelのR, G, B に対応させて制御することにしました(ジャイロの値は上限を決めた上でNeoPixelの設定値として利用しています)。
スケッチ例の M5StickC -> basics -> MPU6886 に加速度とジャイロの値を取得するプログラムがあるので参照ください。



光る帽子完成

帽子の周りにNeoPixelを巻きつけることで無事光る帽子を完成させることができました。ジャイロの値でNeoPixel を制御しているので、帽子を置いているときはNeoPixelが消灯していて、帽子を被っているときはカラフルに光るようになりました。

M5StickCを2個しか入手できなかったので2個(LED120個)運用です


所感と今後の展望

Maker Faire Tokyo 2018 への出展以降、度々光る帽子を持ってイベントに参加したこともあり、光る帽子の人という認知が多少を進んだのではないかと思っています。今後は自分が被るだけでなく、他の人にも積極的に光る帽子を被ってもらうため、軽量化をメインの目的としてM5Stack Gray からM5StickC への機能移植をおこないました。

今回も簡易にプロトタイピングができるM5Stick、NeoPixelを使うことで無事完成させることができました。また、Web上に記載されている数多くの先人たちの知恵を借りることでトライアンドエラーの回数を大幅に減らすことができました。ありがとうございます。
今回の製作は移植作業がメインだったので次の試作では

  • NeoPixelの数をさらに増やして帽子全面が光るようにする
  • NeoPixelの電源を外部から取得して、M5Stack1台でNeoPixelを制御する
  • さらなる軽量化への挑戦
  • インタラクティブ要素の追求

といったことに挑戦してみようと考えています。

0 件のコメント: