ホビープロジェクトへのモーションセンシングと方位センシングの追加
どうしてなのか分かりませんが、私はLEDを使ったホビープロジェクトを組み立てるのが昔から大好きです。「点滅するLEDを見せられたら、よだれが出そうになってしまう」と、よく言っています。最近では、ホビープロジェクトにモーションセンシングや方位センシングを追加することに興味を持つようになりました。実際、3色LEDを備えた12 x 12に配列したピンポン球にこの機能を追加したところです。
では、最初からお話ししましょう。2020年の春ごろ、私はオーストラリアのデービッド・ハムリッチという定年退職した技術者の友人とメールでチャットしていました。デービッドは、3色LEDの小型マトリクスを購入したのだけれど、それで何ができそうかと相談してきました。その返信に、数年前に8 x 8 LEDアレイに実装した簡単なミミズプログラムの短い動画を投稿しました。
デービッドにこの動画を作成したことで、もっと大型のアレイを構築するというプロジェクトが後回しになっていたことを思い出しました。ピンポン球をベースとした非常に興味深いディスプレイをいくつか見たことがあり、それをやってみようと決めていたのです。私は安くて品質もいいピンポン球を大量に購入して、12 x 12 = 144のアレイに取り付けました(図1)。
図1:12 x 12アレイのピンポン球を誇らしげに持っている私。ピンポン球1つ1つにに3色LEDが入っている(画像提供:Max Maxfield)
LEDに関しては、この種のプロジェクトで最も優れた選択肢は、AdafruitのWS2818トリプルチャンネルLEDドライバベースのNeoPixelです。たとえば、1376ストリップには、1メートルに30個のNeoPixelがついています。このストリップが5メートルで、NeoPixelは合計150個になります。そのうち144個はアレイ用、1個は電圧レベルコンバータ用、5個はスペアにしました。私はこのストリップを細かく切り、NeoPixelが1つずつになるようにして、ピンポン球の背面に1つずつ取り付けました。
蛇行(ジグザグ)パターンで、端から始めてアレイ全体を行ったり来たりしながらNeoPixelを配線することにしました。実際には、アレイを自分で構築することにした場合は、どんな順序で配線するかはあまり問題ではありません。なぜなら、このアレイは、12列(X軸)と12行(Y軸)で、どちらも0から11まで番号付けして、アレイに向かって左下隅をピクセル[0,0]とすることができるからです。したがって、アレイを駆動するプログラムを書く場合、XとYの値を引数として受け取る関数を、たとえばGetNeoNum()などと定義してインクルードします。この関数は、アレイの配線方法に依存するアルゴリズムを使用して、ストリング内の対応するピクセルの番号を返します。
このアレイを駆動するために、マルチカラーフェードを含む興味深いエフェクトの実装を計画していたため、十分な容量のメモリ、比較的高速なクロック、そしてかなりの処理能力を備えたマイクロコントローラが必要でした。私は、Seeed Technologyの102010328 Seeeduino XIAOを選択しました(図2)。AtmelのATSAMD21G18A-MUT SAMD21G18マイクロコントローラを搭載したXIAOは、サイズが標準的な切手ほどしかない、Seeeduinoファミリ最小のArduino対応マイクロコントローラ開発ボードです。このマイクロコントローラは、48MHzで動作する32ビットArm Cortex-M0+プロセッサコアを搭載していて、256Kバイトのフラッシュメモリと64KバイトのSRAMを備えています。
図2:Seeeduino XIAO。現在Seeeduinoファミリ最小のArduino対応マイクロコントローラ開発ボード。ブレッドボードに好適。48MHzで動作する強力な32ビットArm Cortex-M0+プロセッサが利用可能(画像提供:Seeed Studio)
XIAOの11個のピンはそれぞれアナログ入力、デジタル入力、またはデジタル出力として使用できます。各ピンは、パルス幅変調(PWM)をサポートし、デジタル/アナログコンバータ(DAC)を備えているため、真のアナログ出力機能を実現しています。さらに、必要に応じて、ピン4および5をI2Cインターフェースのサポートに、ピン6および7をUARTインターフェースのサポートに、ピン8、9、10をSPIインターフェースのサポートに使用できます。
前述のとおり、最近私は、ホビープロジェクトにモーションセンシングと方位センシングを追加することに興味を持つようになりました。ためしに、この機能を12 x 12のピンポン球アレイに追加することにしました。
私がほしかったのは、3軸加速度センサ、3軸ジャイロスコープ、3軸磁気センサを備えた、マイクロエレクトロメカニカルシステム(MEMS)センサを搭載した小型のブレイクアウトボード(BOB)でした。生のセンサデータを操作して使おうとしましたが、あまりに複雑で、すぐに頭がパンクしそうになりました。そのため、私はAdafruitの2472 BOBを使用することにしました。これは、Boschの9自由度(DoF)BNO055センサを備えています。
図3:Adafruitの2472 BOB。搭載されているBNO055は、3軸加速度センサ、3軸ジャイロスコープ、3軸磁気センサのほか、センサフュージョンを実行するArm Cortex-M0プロセッサも装備(画像提供:Adafruit)
BOBは、2線式I2Cインターフェースを使用してXIAOマイクロコントローラと通信します。BNO055の優れた点は、3つのセンサから生データを取得して、高度なセンサフュージョンを実行する32ビットArm Cortex-M0+プロセッサも内蔵していることです。これによって、必要なデータが使用可能な形式で提供されます。この動画をご覧ください。私の最初のテストは、まずアレイを水平に持って、それからアレイを傾けてディスプレイのあちこちに「球」(ピクセル)が「転がる」ようにすることでした。
まとめ
この最初のテストは予想よりもはるかにうまくいったのですが、実際はあまりにも単純だったようです。私がしていたのは、アレイの傾きが特定の値(現行では10度に設定)を超えた時点を検出し、一定の速度で対応する方向へ「球」を動かすだけでした。次のステップは、より正確に慣性や加速度などをモデル化し、それらの機能を使ってまとまったゲームを実装することです。
今回の最初の実験で大切だったのは、他のプロジェクトにモーションセンシングや方位センシングを追加しようとする意欲が高められたことです。これによって、プロジェクトは今よりもさらに素晴らしいものになるでしょう。皆さんはいかがですか?モーションや方向を検出する機能にメリットがあるホビープロジェクトがありますか?

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum