NeoPixel指南
Note 2022/05/06:
これは前ブログからの移行記事です。一部表現や文体の調整を行った箇所がありますがご了承ください。
Root41のロボットを初めて見た人がほとんど口にするフレーズ。
- 光っててかっこいいですね!
- なんで光ってるんですか?
- ひかるんば!ひかるんば!(←大垣に行った時に昔つけられたRoot41のロボのあだ名)
- 電力の無駄では?
などなど。足回りとか円形ラインセンサとか色々と拘ったところはあるんですけど、やっぱり一番に目に入るのは円形状のフルカラーLEDだそうです。そりゃそうですよね。あそこまでビカビカ光らせてるチームはあんまり見かけませんし、相当な変態ロボに映るのは当然だと思います。
そしてとうとう一昨年相方がこんな発言をしました。
Root41の代名詞(?) pic.twitter.com/yUQBtLSDAE
— ハジメ Root41 (@akapon03_hazime) August 4, 2019
代名詞だそうです。いいですね。これ以降円形にNeoPixelを配置するデザインを「Root41らしさ」と捉えて継承することになりました僕が勝手にしました。
今日は「なんでNeoPixelが大量に乗ってんねん」って話をしていこうと思います。
NeoPixelってなんやねん?
フルカラーのLEDの素子です。これのすごいところが「大量に載せたとしてもマイコン1ピンで制御できる」というところにあります。
一般的なRGBLEDだとPWM対応のピンが3本必要になります。それをLEDの個数個必要とするので、
\[LEDの個数\times3\]の分だけマイコンのピンが必要となってしまいます。こんなことしてたらマイコンのピンがすぐに埋まってしまいますし制御もしにくいです。
対してNeoPixelはたったの1ピンで済ませられるところにあります。さっきからNeoPixelと言っていますが、NeoPixelというのはAdafruit社のモジュール化された製品の名前であり正式な名前ではありません。WS2813B、WS2812B、WS2822SなどなどたくさんLEDの種類がありますがどれも同じような機能を持っているので、単純に総称してNeoPixelと今回は呼ばせてもらうことにします。
例えばWS2812Bだと、マイコンからの「何番のLEDをこの色にして」という信号をバケツリレー形式で回していくためLEDを1ピンで制御できるようになっています。WS2813Bとかだとその方式が色々と改良されてたりするのですが、優秀なライブラリがあるのでこちらから特に意識することはありません。
ここまでの話をまとめると
- NeoPixelは1ピンでフルカラー制御できて優秀
ということです。
なんでNeoPixel載ってんの?
建前
デバッグがしやすいからです。こちらの動画をご覧ください。
ハジメ君と僕とで、ゴール率を上げるための対策をぼちぼち進めています!ハジメ君のは、ライン外のボールが運良くすぐ内側に戻されたときに、速攻でゴールを決めるというものです。僕のは、ゴール前のボールを確実に点につなげられるように、位置予測でゴール方向にロボットを傾けるというものです! pic.twitter.com/Knl2DVfq6P
— しろくま🥒胡瓜 Root41 (@robokichi41) November 29, 2020
LEDの色が変化しているのがわかります。LEDの色は、
- 平常時: 赤色(2号機は緑色)で攻める方角を示す
- ラインを踏んだ時: 全面白色
- キックするとき: 全面黄色
となっていますので、半年前のこの動画を今僕が見返してもどのようなプログラムで動いているかというのがなんとなくわかるのです。実際のデバッグではこれはものすごく役立ちます。iPhoneとかのスローモーション機能で撮影しておきながらロボットを動かして、問題のある動作のところをLEDの色に注視しながらスローモーション動画を再生すると何が原因だったのか、途中でどういう処理が入ったのかなどを後からじっくりと解析の材料にすることができます。
あと、1号機と2号機で平常時の色を分けることでアウトオブバウンズや故障の管理が見た目でわかりやすいというのもあります。これらの情報はマイコンのEEPROMに保存されてるのでプログラムを書き換える必要はありません。EEPROMの話についてはまた今度することにします。
本音
単純にかっこいいからです。かっこよくないですか?え、かっこいいですよね??(無理矢理)
やっぱり自分の好きなものを追求することは大切だと思います。僕は芸術家でもなんでもないですが、そういう美的な視点は常に持つように心がけてます。やっぱり自分の設計が美しくないと思えたら、それは自分の中により良いものを追求できる能力があるとと捉えています。つまり設計を納得いくまでやり直すということです。
やっぱり美しいものって、ただ綺麗なだけじゃなくて果たすべき役割も果たしてくれるんですよね。自然界の風景とか生き物って美しいもの多いですよね。それは何万年、何億年かけて洗練されたものだからだと思ってます。無駄がないというか、最適化されているというか。(一体何を言っているんだ)
僕もやってみたい✋
NeoPixelの回路自体は簡単なので難しいことはありません。プログラム?公式のライブラリを使いましょう。
現時点で僕ではNucleoとArduinoで動作させられることを確認しています。もちろんこれ以外のマイコンでも可能だと思います。光らせ方の技術的なことに関してはまたそのうち書こうと思います。対面での交流とかでもこの質問は結構飛んでくるので知りたい人多いのかなぁと思ったり思わなかったり。
というわけで僕の謎の美的価値観を晒したところで、今日はこの辺で失礼。
Comments