Arduinoブレークアウトボードを使用したMEMSベースのモーションおよび方向センサの設計
DigiKeyの北米担当編集者の提供
2020-11-25
設計者は、システムに方向とモーションの検出機能を提供する必要性がますます高まっています。幸いなことに、ソリッドステート(半導体)技術と微小電気機械システム(MEMS)技術をベースとしたセンサが利用可能になっており、これを支援できるようになっています。サイズが小さく低コストであるため、ドローンやロボット、そしてもちろんスマートフォンやタブレットコンピュータなどのハンドヘルド製品を含む幅広いシステムにモーション検知と方向検知を展開できます。これらのセンサは、産業用モノのインターネット(IIoT)の予知保全システムにも利用されており、エッジで人工知能(AI)や機械学習(ML)を利用した分析用データを提供しています。
動きや向きを検出するために使用されるMEMSセンサの主なタイプは、加速度センサ、ジャイロスコープ、地磁気センサ、およびそれらのさまざまな組み合わせです。多くの設計者は、モーションセンサや方向センサを設計に取り入れたいと考えていますが、どこから手をつけていいのかわからないことが多いようです。
1つの選択肢は、MEMSセンサベンダーが提供する評価/開発キットを使用して、そのソリューションを堅持することです。サポートをしっかり受けられれば、この方法は完璧に通用するでしょう。ただし設計者は、単一ベンダーのセンサのみを使用するように制限するか、複数のセンサベンダーのソフトウェアツールを習得する必要があります。
あるいは、モーションセンサや方向センサの扱いに慣れていない設計者は、Arduinoの低コストのオープンソースマイクロコントローラ開発ボードを使用して実験やプロトタイピングを行うことで恩恵を受けられるかもしません。これは、複数のベンダーのセンサを搭載した低コストのオープンソースセンサブレークアウトボード(BOB)との連携により、単一の統合開発環境(IDE)が提供されることを意味します。
この記事では、設計者の方に役立つように、センサ用語の用語集と、モーションセンサおよび方向センサの役割について簡単に説明します。続いて、そのようなAdafruitのセンサBOBの中から、いくつかの選択肢とその用途を紹介していきます。
センサ用語集
モーションセンサや方向センサを指すときによく使われる用語として、「軸数」と「自由度」(DOF)という2つの語があります。残念ながら、これらの用語はしばしば同義語として使用されており、混乱を招くことがあります。
一般的に、軸という用語は、系で使用されているデータの次元を表すために使用されます。動きと方向のコンテキストでは、X、Y、Zの3つの対象軸があります。
これらの軸をどのように視覚化するかは、対象となる系によって異なります。たとえば、縦向きのスマートフォンの場合、X軸は画面に対して水平で右向き、Y軸は画面に対して垂直で上向きです。そして、他の2つの軸に垂直なZ軸は、画面の外側を指していると見なされます(図1)。
図1:物理系は、3D空間で移動できる方法が6つしかないため、最大6つのDOFしか持てません。それは、3つの「線形に移動」と3つの「角度に移動」です。(画像提供:Max Maxfield氏)
スマートフォンのようなデバイスに関しては、線形と角度の2つのタイプの対象モーションがあります。直線運動の場合、系はX軸で左右に、Y軸で上下に、Z軸で前後に移動することになります。角運動の場合、系は3つの軸のうち1つまたは複数を中心に回転することになります。
モーションのコンテキストでは、DOFは、独立したモーションが発生する可能性のある方向のいずれかを指します。これに基づいて、物理系は最大6自由度(6DOF)しか持つことができません。なぜなら、3D空間で移動できる方法は6つ(3つの線形移動と3つの角移動)しかないからです。
「方向」という語は、何かの物理的な位置や向きを他の何かに対して相対化したものを指します。スマートフォンの場合、向きによって、スマートフォンが仰向けになっているのか、片方の端を立てているのか(縦向きモードか横向きモードのどちらか)、あるいはその中間のどこかで決まります。
これを確認する1つの方法は、デバイスの向きを、ある時点tXで可能なすべてのDOFの値で指定することです。比較すると、デバイスの動きは、時間t0とt1の間のすべての可能なDOF値の差によって決定されます。
加速度センサ、ジャイロスコープ、地磁気センサなどのセンサは、1軸、2軸、または3軸で使用できます。たとえば、1軸加速度センサは、位置合わせされている3つの軸のいずれかに沿った変化のみを検出します。2軸センサは、3軸のうち2軸の変化を検出し、3軸センサは3軸すべての変化を検出します。
センサプラットフォームが6つ以上の軸を追跡するものとして説明されている場合、これは、X、Y、およびZ軸に沿って(またはその周りに)複数のデータポイントを追跡することにより、より高い精度を提供することを示しています。例としては、4つの3軸加速度センサからの線形加速度測定を利用する12軸加速度センサスイートがあります。
残念ながら、DOFと軸数は混同されがちです。たとえば、3軸加速度センサ、3軸ジャイロスコープ、および3軸地磁気センサの組み合わせは、より正確には6DOF(自由度)9軸センサとして記述されるべきであるにもかかわらず、一部のベンダーは9DOFセンサとして記述していることがあります。
センサフュージョン
加速度センサは加速度を測定するだけでなく、重力も測定します。たとえば、スマートフォンの場合、3軸加速度センサは、ユーザーが静止していてデバイスが動かない場合でも、どちらの方向が下にあるかを判別することができます。
また、3軸加速度センサを使用して、デバイスの垂直方向と水平方向を決定することもできます。この情報を使用して、ディスプレイを縦向きモードまたは横向きモードで表示することができます。ただし、それだけでは、加速度センサを使って地球磁場に対するスマートフォンの向きを判断することはできません。この機能は、ユーザーがデバイスを関心のある領域に向けるだけで、夜空の星、惑星、星座を識別して見つけることができるプラネタリウムアプリなどのタスクに必要です。この場合、地磁気センサが必要になります。スマートフォンを常に平らな状態でテーブルの上に置くのであれば、1軸地磁気センサで十分です。しかしながら、スマートフォンはどの向きでも使用できるので、3軸地磁気センサを採用する必要があります。
加速度センサは周囲の磁場の影響を受けませんが、動きや振動の影響を受けます。それに比べて、地磁気センサはそれ自体は動きや振動の影響を受けませんが、周辺の磁性体や電磁場の影響を受けることがあります。
3軸加速度センサを使用して回転データを導出することもできますが、3軸ジャイロスコープを使用することで角運動量に関するより正確なデータを得ることができます。ジャイロスコープは回転速度の測定に関してはうまく機能し、直線方向の加速度や磁場の影響を受けません。ただし、ジャイロスコープは静止状態になっても、小さな「残留」回転速度を生成する傾向があります。これは「ゼロドリフトオフセット」として知られています。この問題は、ユーザーがジャイロスコープを使用して絶対角度を決定しようとする場合に発生し、その場合、角度位置を得るために回転速度を積分する必要があります。このシナリオでの統合の問題点は、エラーが蓄積される可能性があることです。たとえば、最初の測定でわずか0.01度の小さな誤差が、100回の測定後に完全な度数まで大きくなる可能性があります。これは「ジャイロドリフト」として知られています。
「センサフュージョン」という用語は、異なるソースから得られた感覚データを組み合わせて、結果として得られる情報が、それらのソースからのデータを個別に使用した場合よりも不確実性が低くなるようにすることを意味します。
たとえば、3軸加速度センサ、3軸ジャイロセンサ、3軸地磁気センサからなるセンサアレイの場合、加速度センサと地磁気センサのデータを用いてジャイロドリフトを相殺することができます。一方、ジャイロからのデータを用いて、加速度センサからの振動誘発ノイズや地磁気センサからの磁性体/電場誘発ノイズを補正することができます。
センサフュージョンを使用した結果、出力の精度が個々のセンサの精度を上回ることになります。
代表的なセンサの紹介
アプリケーションに応じて設計者は、加速度センサ、ジャイロスコープ、または地磁気センサの形で、単一型のモーション/方向センサを採用することもできるでしょう。
入門用の優れた加速度センサとしては、Adafruit社の2019 BOBがあります。これは、14ビットのアナログ~デジタル変換(ADC)を備えた3軸加速度センサを搭載しています(図2)。
図2:Adafruitの2019 BOBは、3軸加速度センサを搭載しており、動き、傾き、基本的な向きを検出することができます。(画像提供:Adafruit)
高精度3軸センサは±2g~±8gまでの広い範囲を持ち、動き検出、傾き検出、基本姿勢検出に対応しています。センサには3.3Vの電源が必要ですが、BOBには低ドロップアウトの3.3Vレギュレータとレベルシフト回路が搭載されているので、3Vや5Vの電源とロジックでも安心して使用することができます。BOBとArduino(あるいは別のマイクロコントローラ)との間の通信は、I2Cを介して行われます。
ねじれや回転運動を検出するためにジャイロセンサのみを必要とするアプリケーションには、STMicroelectronics社のL3GD20H 3軸ジャイロスコープを搭載したAdafruit社の1032 BOBが好適な導入ボードとなるでしょう。Arduino(あるいは他のマイクロコントローラ)へのI2CとSPIインターフェースの両方をサポートするL3GD20Hは、±250、±500、または±2000度/秒スケールに設定でき、広い範囲の感度を実現します。繰り返しになりますが、センサには3.3Vの電源が必要ですが、BOBには3.3Vのレギュレータとレベルシフト回路が搭載されているので、3Vまたは5Vの電源とロジックで使用することができます。
同様に、磁気センサのみを必要とするアプリケーションでは、STMicroelectronicsのLIS3MDL 3軸地磁気センサを搭載したAdafruitの4479 BOBが良い評価オプションになります。LIS3MDLは、±4ガウス(±400マイクロテスラ(μT))から±16ガウス(±1600μTまたは1.6ミリテスラ(mT))までの範囲を感知することができます。BOBとArduino(あるいは別のマイクロコントローラ)との間の通信は、I2Cを介して行われます。この場合も、BOBには3.3Vのレギュレータとレベルシフト回路が搭載されているので、3Vや5Vの電源とロジックでも安全に使用できます。
複数のセンサを組み合わせて使用することは非常に一般的です。たとえば、加速度センサをジャイロスコープと組み合わせて使用し、3Dモーションキャプチャや慣性測定などのタスクを実行できます。つまり、3D空間内でオブジェクトがどのように移動しているかをユーザーが判断できるようにするためのタスクです。このようなコンボの一例としては、STMicroelectronicsのLSM6DS33センサチップを搭載したAdafruitの4480 BOBがあります(図3)。
図3:Adafruitの4480 BOBは、3軸加速度センサLSM6DS33TRと3軸ジャイロスコープを搭載しており、3Dモーションキャプチャや慣性計測などのタスクを実行することができます。(画像提供:Adafruit)
3軸加速度センサは、重力を測定することで地球の方向がどちらに向いているのか、3次元空間でボードがどのくらいの速度で加速しているのかなどのデータを提供することができます。一方、3軸ジャイロスコープは、スピンやねじれを測定することができます。先に紹介した他のセンサBOBと同様に、4480 BOBには3.3Vのレギュレータとレベルシフト回路が搭載されているので、3Vや5Vの電源とロジックでも安心して使用することができます。また、センサデータにはI2CまたはSPIインターフェースを使用してアクセスできるので、複雑なハードウェアのセットアップなしでArduino(あるいは他のマイクロコントローラ)と一緒に使用することができます。
デュアルセンサBOBの別の例は、Adafruitの1120です。これは、STMicroelectronicsのLSM303センサチップの形で3軸加速度センサと3軸地磁気センサを組み合わせています。マイクロコントローラと1120の間の通信は、I2Cインターフェースを介して行われ、BOBには3.3Vのレギュレータとレベルシフト回路が搭載されているので、3Vや5Vの電源とロジックで安全に使用できます。
アプリケーションによっては、加速度センサ、ジャイロスコープ、地磁気センサを使用する必要があります。この場合、入門用として便利なBOBはAdafruitの3463で、3軸地磁気センサを備えた3軸加速度センサと3軸ジャイロスコープの2つのセンサチップを搭載しています。BOBとマイクロコントローラ間の通信は、SPIインターフェースで実装されています。また、3.3Vのレギュレータとレベルシフト回路を搭載しているので、3Vや5Vの電源とロジックでも安心して使用できます。
3463 BOBの利点の1つは、設計者が3つのセンサからのデータに生でアクセスできることです。これに関連する欠点は、このセンサの使用(データの操作と処理)によって、マイクロコントローラのフラッシュメモリが約15キロバイト(Kbytes)必要になり、多くのクロックサイクルを消費することです。
別の方法として、Adafruitの2472 BOBは、BoschのBNO055センサチップを搭載しています。BNO055には、3軸加速度センサ、3軸ジャイロスコープ、および3軸地磁気センサが含まれており、すべてが単一のパッケージに収められています(図4)。
図4:Adafruitの2472 BOBに搭載されているBNO055センサには、3軸加速度センサ、3軸ジャイロスコープ、3軸地磁気センサに加えて、センサフュージョンを実行するArm Cortex-M0プロセッサも組み込まれています。(画像提供:Adafruit)
さらにBNO055には、32ビットArm Cortex-M0プロセッサも搭載されており、3つのセンサからの生データを取り込み、高度なセンサフュージョンを実行し、クォータニオン、オイラー角、ベクトルなど、設計者が使用できる形式で処理された情報を提供します。具体的には、2472 BOBのI2Cインターフェースを介して、設計者は以下に迅速かつ容易にアクセスすることができます。
- 絶対方位(オイラーベクトル、100Hz):360°球体に基づく3軸標定データ。
- 絶対方位(クォータニオン、100Hz):より正確なデータ操作のための4点四元数出力。
- 角速度ベクトル(100Hz):ラジアン/秒単位の「回転速度」の3軸。
- 加速度ベクトル(100Hz):メートル/秒2乗(m/s2)で表される3軸加速度(重力+直線運動)。
- 磁場強度ベクトル(20Hz):磁場検知の3軸(単位:µT)。
- 線形加速度ベクトル(100Hz):m/s2単位で表される線形加速度データの3軸(加速度から重力を引いた値)。
- 重力ベクトル(100Hz):m/s2単位で表される重力加速度の3軸(動きを差し引いたもの)。
- 温度(1Hz):摂氏で表される周囲温度。
センサフュージョンをオンチップで実行することで、主マイクロコントローラのメモリと計算サイクルが解放されるため、低コストのリアルタイムシステムを作成する設計者にとって理想的です。さらに、センサフュージョンアルゴリズムをマスターするのは難しく、時間がかかることがあります。アルゴリズムをゼロから実装する場合は数日から数週間かかるのに対して、センサフュージョンをオンチップで実行することで、システム開発者は数分で稼働させることができます。
まとめ
多くの設計者は、モーションセンサや方向センサを設計に取り入れたいと考えていますが、何から始めればよいのかわからないという人が多いようです。これらのデバイスの扱いに慣れていない設計者の場合、さまざまなメーカーのセンサに精通するのは難しいでしょう。実験やプロトタイピングを始める方法の1つは、Arduinoのような低コストでオープンソースのマイクロコントローラ開発ボードと、複数のベンダーのセンサを搭載した低コストでオープンソースのセンサBOBを利用することです。
参考記事:
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


