Maker Faire Tokyo 2018 に出展する作品として、M5Stack Gray と NeoPixel を使って光る帽子を作ってみました。
光る帽子の要件
- 帽子全体がフルカラーで光るようにLEDを配置した上で制御ができること
- 帽子を雑に扱っても怪我をしにくいこと
- 帽子は子供が被れるくらいの重さであること
- 帽子を落としてもなるべく壊れにくいこと、もしくはすぐに修復できること
- 自分がなるべく開発しやすい環境であること
光る帽子を作る上でどんなことを大事にするかリストアップしてみました。Maker Faire の展示ということで故障しにくいことや故障しても復旧が容易であることを重視しています(過去にイベント開始数時間で故障してそのまま終了を迎えるという痛い目にあっているので…)。他にも光る帽子は来場者が被って写真を撮ってもらうことをイメージしていたので帽子の重さや触るときに怪我をしないといったことも重要なポイントでした。
M5Stack を選んだポイント
- 基板がむき出しではないこと
- 落としたときでも壊れにくそう
- 来場者が作品を触ったときに怪我をしにくそう
- 外部ピンがケースの開け締めなく接続できる
- 帽子に無理な力がかかったときもケーブルが抜けるだけで基板本体へのダメージが少なくてすみそう
- バッテリーを内蔵していること
- NeoPixel用の電源を別途用意する必要がない
- ESP32を搭載していて、Arduinoの開発環境が使えること
- 自分が慣れている環境で開発できる
- (M5Stack Grayのみ)9軸センサを備えていて、帽子の動きにあわせてNeoPixelを制御できること
要件に挙げた内容からM5Stackを選んだ理由がこちらです。M5Stackの特徴から、上記のような効果が見込まれると想定した結果、M5Stackを利用することに決めました。開発環境は人それぞれだと思うので、Arduino IDE 以外に Micro Pythonでも開発できるのはM5Stackの大きな利点かもしれません。また、今回は帽子の動きにあわせてNeoPixelを制御しようと考えたので9軸センサ付きのM5Stack Grayにしましたが、こちらが不要であれば M5Stack Basic でも NeoPixel の制御は可能です。
NeoPixelを選んだ理由は多数のフルカラーLEDを同時に制御する場合のディファクトスタンダードだからでしょうか、ライブラリも用意されていて先行事例も豊富にあるのは非常に心強いです。
M5StaskとNeoPixelの購入
M5StaskとNeoPixelの購入にはスイッチサイエンスさんと秋月電子さんを利用しました。下記URLから同じ製品を購入することができます。M5Stack Gray(9軸IMU搭載)
https://www.switch-science.com/catalog/3648/
SK6812使用マイコン内蔵フルカラーテープLED 1m 60LED IP20
http://akizukidenshi.com/catalog/g/gM-12982/
LEDが60個では帽子全体を光らせるには光量不足だったのでM5Stack GrayとNeoPixelを3個ずつ購入しています。1個のM5Stackで180個のNeoPixelを制御することも可能ではあると思いますが、電流や電力消費を考えると危険だと判断して1個のM5Stackで60個のNeoPixelを制御する構成を3セット用意することにしました。
M5Staskを使ったNeoPixelの制御方法
まずはハード側、M5StackとNeoPixelを接続してみます。NeoPixelの3pin(緑・赤・黒)をそれぞれ5番、3.3V、Gに接続します。配線はこれだけです。
次にソフト側を設定します。M5Stackの中身はESP32なので、AdafruitのNeopixel Libraryを使うことができます(参照元:https://qiita.com/tomorrow56/items/fcf5ea7bfd2056e8f88f)。
https://github.com/adafruit/Adafruit_NeoPixel
NeoPixel にある電源用の出線は使いません |
次にソフト側を設定します。M5Stackの中身はESP32なので、AdafruitのNeopixel Libraryを使うことができます(参照元:https://qiita.com/tomorrow56/items/fcf5ea7bfd2056e8f88f)。
https://github.com/adafruit/Adafruit_NeoPixel
上記のライブラリのページからZipファイルをダウンロードして解凍、Arduino IDE でライブラリをインポートすると、スケッチ例を読み込むことができるようになります。試しに使うならスケッチ例の Adafruit Neopixel -> simple が理解しやすいと思います。以下、simple を参照しながら開発を進めます。
M5Stackはピン配置がArduinoとは異なるので、simple をそのままM5Stackで実行してもNeoPixelを光らせることはできません。スケッチ例11行目の
#define PIN 6
#define PIN 5
#define NUMPIXELS 16を編集することで変更することができます。上記例では16個までのNeoPixel を制御しています。
インタラクティブにLEDを制御する
決まった光り方を繰り返すだけでは面白くないと思ったので、M5Stackのセンサの値を使ってNeoPixelの色や明るさを制御することにしました。M5Stack Gray は加速度、ジャイロ、磁気を計測できるMPU9250を搭載しているので、ジャイロのX軸, Y軸, Z軸の各値をNeoPixelのR, G, B に対応させて制御することにしました(ジャイロの値そのままではNeoPixelの設定値には大きすぎるので1/10にして設定しています)。
スケッチ例の M5Stack -> module -> MPU9250 -> MPU9250BasicAHRS に加速度、ジャイロ、磁気の各値を取得するプログラムがあるので参照。
スケッチ例の M5Stack -> module -> MPU9250 -> MPU9250BasicAHRS に加速度、ジャイロ、磁気の各値を取得するプログラムがあるので参照。
帽子にM5StackとNeoPixelを装着する
動作確認ができたら帽子にM5StackとNeoPixelを装着します。最初にNeoPixelを巻き付けてイメージ通りに巻くことができたら結束バンドで固定していきます。最初はNeoPixelの固定にグルーガンを使う予定でしたが、展示後にNeoPixelを再利用することを考えて部品を傷つけない結束バンドを使うことにしました。
結束バンドで固定するためにメッシュ素材の帽子を探しました |
NeoPixelを固定した後は帽子の真ん中にM5Stackを設置して、NeoPixelと同じく結束バンドで固定します。M5Stackをどこに固定するかは非常に迷いましたが帽子を被る上で一番邪魔にならなさそうな頭上の溝の部分に配置することにしました。
光る帽子完成
無事光る帽子を完成させることができました。ジャイロの値でNeoPixel を制御しているので、帽子を置いているときはNeoPixelが消灯していて、帽子を被っているときはカラフルに光るようになりました。
暗闇に光る180個のLED |
所感と今後の展望
Maker Faire Tokyo 2018 に出展するにあたり、自分で展示物を身に着けてモバイル展示をしたいと思い立ったところから光る帽子の製作が始まりました。途中、帽子が光っている様子を自分自身では確認できないことに気が付いて心が折れかけたりしましたが、簡易にプロトタイピングができるM5StackやNeoPixelを使うことで無事完成させることができました。また、Web上に記載されている数多くの先人たちの知恵を借りることでトライアンドエラーの回数を大幅に減らすことができました。
今回の製作では動きに合わせて帽子を光らせるというところまでだったので、次の試作では
といったことに挑戦してみようと考えています。
- NeoPixelの数をさらに増やして帽子全面が光るようにする
- NeoPixelの光るパターンを増やす
- NeoPixelの電源を外部から取得して、M5Stack1台でNeoPixelを制御する
- 8pinoなど小型Arduino互換機を使って軽量化する
といったことに挑戦してみようと考えています。