Arduino・ESP32向け加速度センサーを比較!ADXL345・MPU-6050・LIS2DW12・MSA3S02の違い
ArduinoやESP32で「傾き」「動き」「振動」などを検出したいときに使用されるのが、加速度センサーです。
しかし、加速度センサーには非常に多くの種類があります。
- ADXL345
- MPU-6050
- LIS2DW12
- MSA3S02
などがあり、「何が違うの?」「ArduinoやESP32ならどれを使えばいい?」「加速度センサーとジャイロセンサーは何が違う?」と迷うこともあるでしょう。
この記事では、Arduino・ESP32などのマイコンから利用できる4種類のセンサーを比較し、それぞれの特徴や仕様の違いを解説します。
そもそも加速度センサーとは?
加速度センサーは、物体に加わる加速度を測定するセンサーです。
今回紹介するセンサーはいずれも、X・Y・Zの3方向の加速度を測定できます。
例えば基板を机の上に置いた場合でも、地球の重力によっていずれかの軸に約1gの加速度が現れます。
そのため加速度センサーは、単純に「動いているかどうか」だけでなく、どちらへ傾いているかを調べる用途にも使用できます。
代表的な用途として、傾き検出、振動検出、動作検出、転倒検出、ジェスチャー入力などがあります。
加速度センサーとジャイロセンサーの違い
今回比較する4製品の中では、MPU-6050だけ少し種類が異なります。
ADXL345、LIS2DW12、MSA3S02は3軸加速度センサーです。
一方、MPU-6050には、3軸加速度センサー+3軸ジャイロセンサーが搭載されています。
つまり合計6軸のモーションセンサーです。
加速度センサー
加速度センサーは、X・Y・Z方向の加速度を測定します。
重力も測定できるため、静止状態での傾き判定にも利用できます。
ジャイロセンサー
ジャイロセンサーは角速度、つまり「どのくらいの速さで回転しているか」を測定します。
単純な傾きや振動を測定したいのであれば、3軸加速度センサーだけでも対応できます。
一方、回転運動まで測定したい場合には、MPU-6050のようなジャイロを搭載したIMUが候補になります。
4種類の加速度センサーを比較
まずはADXL345・MPU-6050・LIS2DW12・MSA3S02の主な違いを比較してみましょう。
| センサー | 加速度 | ジャイロ | 測定レンジ | 出力 | 通信 |
|---|---|---|---|---|---|
| MSA3S02 | 3軸 | ― | ±2/4/8/16g | 12bit | I²C |
| ADXL345 | 3軸 | ― | ±2/4/8/16g | 最大13bit | I²C / SPI |
| LIS2DW12 | 3軸 | ― | ±2/4/8/16g | 16bit | I²C / SPI |
| MPU-6050 | 3軸 | 3軸 | ±2/4/8/16g | 16bit | I²C |
4種類とも加速度の測定レンジとして±2g、±4g、±8g、±16gを選択できます。
ただし、通信方式や分解能、FIFO、イベント検出、ジャイロの有無などには大きな違いがあります。
MSA3S02とは?
MSA3S02は、X・Y・Zの3方向を測定できるデジタル3軸加速度センサーです。
測定レンジは±2g / ±4g / ±8g / ±16gから選択でき、12bitの加速度データを取得できます。
通信にはI²Cを使用します。
パッケージサイズは約2 × 2 × 0.95mmと非常に小型で、基板上の実装面積を抑えられるのも特徴です。
SPIやジャイロなどが必要なく、I²Cでシンプルに3軸加速度を取得したい場合に利用できます。
MSA3S02をArduino・ESP32から実際に制御する方法については、以下の記事で詳しく解説しています。
MSA3S02とは?Arduino・ESP32で3軸加速度を測定する方法を解説
ADXL345とは?
ADXL345は、Analog Devicesの3軸デジタル加速度センサーです。
測定レンジは±2g / ±4g / ±8g / ±16gに対応しています。
MSA3S02との大きな違いのひとつが、I²CだけでなくSPIにも対応していることです。
固定10bitまたはFull Resolutionモードを使用でき、Full Resolutionでは±16g設定時に最大13bitとなります。
FIFOも搭載
ADXL345には32サンプル分のFIFOがあります。
センサーから取得したデータを内部へ一時保存できるため、マイコンが毎回すぐにデータを読み出さなくても、複数のサンプルをまとめて処理できます。
モーション検出機能も豊富
ADXL345には、タップ、ダブルタップ、Activity/Inactivity、自由落下などを検出する機能も搭載されています。
単純にX・Y・Zの値を取得するだけでなく、「叩かれた」「動き始めた」「自由落下した」といったイベントをセンサー側で検出する用途にも利用できます。
LIS2DW12とは?
LIS2DW12は、STMicroelectronicsの3軸加速度センサーです。
測定レンジは±2g / ±4g / ±8g / ±16gに対応し、16bitの加速度データを取得できます。
通信方式はI²CとSPIの両方に対応しています。
低消費電力が特徴
LIS2DW12は低消費電力を重視した設計になっています。
そのため、電池駆動センサー、IoTデバイス、ウェアラブル機器など、長時間動作させたい機器でも検討できます。
FIFO・モーション検出も搭載
LIS2DW12には32レベルFIFOが搭載されています。
さらにFree-fall、Wake-up、Single/Double tap、Activity/Inactivity、Stationary/Motion、Portrait/Landscape、6D/4D Orientationなどの検出機能があります。
単純な加速度測定だけでなく、センサー内部のイベント検出機能を利用したい場合にも便利です。
MPU-6050とは?
MPU-6050は、TDK InvenSenseの6軸モーションセンサーです。
今回比較するほかの3製品との大きな違いが、3軸加速度センサーに加えて3軸ジャイロセンサーを搭載していることです。
加速度は±2g / ±4g / ±8g / ±16g、ジャイロは±250 / ±500 / ±1000 / ±2000°/sのレンジを選択できます。
回転運動も測定できる
加速度だけでなく角速度も取得できるため、ロボット、姿勢推定、モーションコントローラー、回転検出などの用途で利用できます。
Arduino向けのサンプルプログラムやライブラリも多く、電子工作では非常によく知られているセンサーです。
MPU-6050は現在生産中止
新しく製品を設計する場合には注意が必要です。
TDKの製品情報ではMPU-6050は生産中止となっており、推奨代替品としてICM-42670-Pが案内されています。
そのため、既存モジュールを使った学習・電子工作と、新規量産製品への部品採用は分けて考えた方がよいでしょう。
4種類の違いを詳しく比較
| 比較項目 | MSA3S02 | ADXL345 | LIS2DW12 | MPU-6050 |
|---|---|---|---|---|
| 加速度 | 3軸 | 3軸 | 3軸 | 3軸 |
| ジャイロ | ― | ― | ― | 3軸 |
| 最大レンジ | ±16g | ±16g | ±16g | ±16g |
| 出力 | 12bit | 最大13bit | 16bit | 16bit |
| I²C | ○ | ○ | ○ | ○ |
| SPI | ― | ○ | ○ | ― |
| FIFO | ― | 32レベル | 32レベル | あり |
| 特徴 | シンプル・小型 | 定番・多機能 | 低消費電力・多機能 | 加速度+ジャイロ |
| 製品状況 | ― | 現行品 | 現行品 | 生産中止 |
Arduino・ESP32で使うなら何を比較すればいい?
加速度センサーを選ぶときは、単純に「何bitか」だけで決めるのではなく、何を測定したいのかから必要な機能を考えることが重要です。
X・Y・Zの加速度を取得したい
傾き、振動、動きなどを測定するのであれば、3軸加速度センサーで対応できます。
この場合はMSA3S02、ADXL345、LIS2DW12などが候補になります。
回転も測定したい
回転速度まで測定する場合にはジャイロセンサーが必要です。
MPU-6050には3軸ジャイロが内蔵されているため、加速度と角速度の両方を取得できます。
ただしMPU-6050自体は生産中止となっているため、新規製品では現行のIMUも含めて部品を選定する必要があります。
SPIを使いたい
SPI通信が必要な場合は、ADXL345やLIS2DW12が候補になります。
どちらもI²CとSPIの両方に対応しています。
消費電力を重視したい
バッテリー駆動などで消費電力を重視する場合には、各センサーの動作モードごとの消費電流を比較します。
LIS2DW12は低消費電力を特徴としており、電池駆動のIoT機器などでも検討しやすいセンサーです。
センサー側でイベントを検出したい
「タップされた」「自由落下した」「動き始めた」といったイベントを、マイコン側で常時計算するのではなく、センサー側で検出させたい場合があります。
ADXL345やLIS2DW12には、このようなモーション検出機能が複数搭載されています。
分解能が高ければ必ず良い?
加速度センサーを比較すると、12bit、13bit、16bitなど分解能に違いがあります。
しかし、16bitだから必ず12bitより高精度とは限りません。
実際の測定性能には、ノイズ、オフセット、感度誤差、温度特性、測定レンジ、帯域幅、サンプリングレート、基板への実装状態なども影響します。
製品設計でセンサーを選ぶ場合には、bit数だけで判断するのではなく、必要な測定性能をデータシートから確認することが重要です。
I²Cなら複数のセンサーを同じ配線で使える
今回紹介した4種類はいずれもI²Cを利用できます。
I²CではSDAとSCLを複数のデバイスで共有し、I²Cアドレスによって通信相手を区別します。
そのため、加速度センサーだけでなく、温湿度センサー、照度センサー、気圧センサー、ディスプレイなどを同じI²Cバスへ接続できます。
I²Cそのものについてはこちらの記事で詳しく解説しています。
MSA3S02をArduino・ESP32で試す
今回比較したMSA3S02は、KUMITATE-SENSORに搭載しています。
| センサー | 測定内容 |
|---|---|
| SHT40 | 温度・湿度 |
| BH1750 | 照度 |
| MSA3S02 | 3軸加速度 |
3種類ともI²Cで制御できるため、同じSDA・SCLを使って温度・湿度・照度・X/Y/Z加速度をまとめて取得できます。
KUMITATE-C3だけでなく、3.3V系I²Cに対応した各種マイコンから使用できます。
MSA3S02について、I²CレジスタからX・Y・Zデータを読み出すところまで詳しく知りたい場合はこちらの記事をご覧ください。
MSA3S02とは?Arduino・ESP32で3軸加速度を測定する方法を解説
まとめ
Arduino・ESP32から利用できる加速度センサーには、それぞれ異なる特徴があります。
MSA3S02はI²Cで3軸加速度を取得できる小型の12bitセンサーです。
ADXL345はI²C/SPI、FIFO、タップや自由落下検出などに対応しています。
LIS2DW12は16bit出力で、低消費電力と豊富なモーション検出機能を備えています。
MPU-6050は3軸加速度に加えて3軸ジャイロを搭載した6軸センサーですが、現在は生産中止となっています。
センサーを選定するときは、「どれが一番高性能か」だけではなく、加速度だけでよいのか、ジャイロも必要なのか、I²Cだけでよいのか、SPIが必要なのか、FIFOやモーション検出を使うのか、消費電力をどこまで抑える必要があるのか、といった用途から必要な仕様を絞り込むことが重要です。
MSA3S02を実際に動かして加速度センサーの仕組みを確認したい場合は、MSA3S02の個別解説記事もあわせてご覧ください。

