第6回

モーションセンシングデバイス!
加速度センサーを使ってみよう




はじめに

今回は、センサーに振動や動きが加わったことを検知することができる加速度センサーを使用して、前回と同様にWeb Bluetooth APIを使用してグラフに表示をしてみます。

今回使用する加速度センサーは、アナログ・デバイセズ社のADXL362という非常に消費電力が低いタイプの加速度センサーを使用します。モーションセンサーや電池駆動の製品として人気のある製品です。

 


加速度センサーとは

加速度センサーとは、文字どおりセンサーに加わった加速度を計測するセンサーです。一般的には、携帯電話の傾きの検知や、デジタルカメラの手ぶれ補正、自動車のエアバッグ用の衝撃検知センサーなど、様々な製品に採用されています。アナログ・デバイセズ社は、MEMS(Micro Electro Mechanical Systems)という、半導体の中に超小型の機構を内蔵する技術を使用して、小型で低消費電力、高精度な加速度センサー製品を開発しています。

アナログ・デバイセズ社の加速度センサーIC内部のセンサー部分には、串歯状の端子が並んでいます。端子は固定されたものと、バネ構造を持った端子で構成されています。バネ構造を持った端子は、センサーに振動や動きが加わると可動する構造になっており、固定された端子とバネ構造を持った端子の間で発生する電気信号(正確には静電容量)の変化によって加速度を計測します。一つの加速度センサーでX軸、Y軸、Z軸方向で3次元の加速度を計測することが可能です。

図1、MEMS加速度センサーの内部構造
AnalogDialogue:ソニック・ニルヴァーナ(音の極致)から抜粋)


図2、 加速度センサーの内部構造の簡略図
アプリケーション・ノート:加速度センサーとは? から抜粋)

 

加速度センサーを使用した応用例では、振動や衝撃の検知の他に、加速度センサーの出力値を元に、センサーの傾いた角度を算出することも可能です。以下の図は、傾きの角度を求める方法を説明した図です。加速度センサーの出力と、高校の数学や物理で学習する三角関数を用いて角度の計算が可能です。

 

図3, 加速度センサーの出力から角度を求める例
(アプリケーションノート:加速度センサーによる傾きの検出 より抜粋)

詳細な内部構造や、原理に関しては、アプリケーションノートなどの資料をご参考ください。

加速度センサーの応用範囲は広く、新しいアイディアを元に実験などを繰り返し、計測したデータを使ってアルゴリズムを開発します。

 


今回使用するADXL362について

今回は、このMEMS技術を使用した加速度センサーの中でも、特に低消費電力で動作するADXL362を使用します。ADXL362は業界でも最小クラスの低消費で動作が可能な製品です。消費電力が低いと、バッテリーの寿命が伸びるため、電池で駆動する環境モニタリングや、ウェアラブル機器などに最適です。

実際に使用するセンサーは、あらかじめ基板にセンサーが半田付けされているモジュールを使用します。ADXL362が実装されたモジュールは、各社からリリースされていますが、今回はストロベリーリナックス社のデバイスを使用します。

前回の温度センサーと同様に、半田付けを行い、ブレッドボードに刺せる状態にして使用します。

 


SPIインターフェースについて

ADXL362は、SPIというデジタルインターフェースを採用しています。これは、前回の温度センサーを動作させるのに使用したI2Cとは、別の規格のインターフェースとなっています。

SPIは、4線(もしくは3線)でデバイス同士を接続し通信をします。信号線は、データの送信のMOSIピン、データの受信を行うMISOピン、クロック信号を送るSCLKピン(SCKピン)、そしてマイコン側からデバイスを指定するために使用するCSピン(もしくはSSピン)があります。CSピンは、Lowの際にアクティブになることを意味する、バーがCSの文字の上についています。それぞれのピンをマイコンのSPIに対応した端子と接続します。I2Cと同様に、ほとんどのマイコンがこのSPIを動作するための端子を持っています。

SPIでは、I2Cで使用したプルアップは必要なく、直接デバイス同士を接続します。

 

SPIでは、CSピン(Chip SelectもしくはSlave Select)を使用して通信をしたいデバイスやセンサーをマイコン側から選択して使用します。複数デバイスを使用する場合は、それぞれのデバイスのCSピンをマイコンと接続する必要があります。ただ、他のピンは共通で使用できます。

 

図4、センサーとマイコンをSPIで接続する例


SPIでは、I2Cのように共通の決まった通信ルールを持っていないため、デバイスごとに仕様が異なります。手間にはなりますが、デバイスごとにデータシートなどを読んで通信を確認する必要があります。今回の例では、アナログ・デバイセズ社がARM®社が提供するmbed™にADXL362のライブラリを公開しており、こちらを使用してBLE NanoとADXL362のSPI通信を行います。

SPI通信を使用するメリットとしては、I2Cなどに比べて高速に通信することが可能です。I2Cは一般的にはクロック信号のスピードが400kHzまでとなっていますが、SPIは仕様上クロックのスピードには制限はないため、たくさんのデータを短時間で通信することができます。また、デバイスアドレスなどを通信の際に送る必要も無く、送受信するデータそのものを少なくすることが可能です。これにより、マイコンが短時間にたくさんのデータを取得したり、逆にデータをデバイスやセンサーに送信したりする際にはSPIの方が有利なケースがあります。また、デバイス同士の通信時間を短くし、マイコンやセンサーが動いていない時間を長くすることで、デバイスをスリープ(低消費電力モードに)させることが可能となり、消費電力を小さくすることも可能になります。このような使用方法は、電池駆動の携帯機器で使用されるテクニックになります。

図5、SPIで複数のセンサーを接続した例


ADXL362の回路について

以下は、ADXL362のモジュールを使用した、回路図です。配線が前回より若干複雑ですので、注意が必要です。

 

図6、ADXL362を使用した回路図


プログラムの解説

マイコン(BLE Nano)で使用するプログラムは、こちらのプログラムです。

JavaScriptのプログラムはこちらからダウンロードしてください。

ADXL362のライブラリは、アナログ・デバイセズ社が公開しているライブラリを使用し、mainのプログラムもこちらを参考にしました。

まずは、ADXL362とBLE Nanoを接続するための端子の設定を行います。ADXL362のライブラリは、別のマイコンで使用されることが想定されて設計されていたため、ライブラリに含まれるヘッダーファイルのプログラムも一部変更を加えています。

基本的なデータの取得方法は、ADXL362のライブラリやサンプルを参考にX軸の8bitのデータを取得し、データをBLEで送信し、Web Bluetooth APIを使用してブラウザ上で表示させます。ADT7410で使用したSmoothieを使用します。

 

図7、ADXL362.hファイルに変更を加えた箇所

 

図8、ADXL362をデータ表示させる例


ADXL362のデータについて

ADXL362から出力されるデータの値は、「g」という加速度の単位に変換することが可能です。地球の重力は、1gとされています。ADXL362で測定範囲(Measurement Range)は、+/-2g, +/-4g, +/-8gとなっており、ソフトで設定を変更することが可能です。

 

 

 

図9、ADXL362の測定範囲(Measurement Range) 
ADXL362データシートより

今回の例では、特に設定に変更を加えずにデフォルトの+/-2gの測定範囲を使用しています。測定範囲によって、センサーの感度(Sensitivity)が変わります。ADXL362のデータシートでは、+/-2gの時、1mg/LSBと書かれています。ADXL362が1mg変化すると、出力データが1(LSB)変化することになります。

 

 

図10, ADXL362の感度(Sensitivity) 
ADXL362データシートより

人の動きや、物体の傾きなど、小さな動きを計測したい場合は、測定範囲を+/-2gなど低い値に設定し、逆に衝撃などを観測する場合には、瞬間的にかかる大きなg(加速度)を計測するために、+/-8gなどに測定範囲を設定して使用します。

今回のサンプルプログラムで、HTMLで表示しているデータは、ADXL362から出力される「X軸データの上位8bit」をそのまま表示した値になります。本来ADXL362は、12bitの分解能を持っていますが、簡易的に表示するために、8bitのデータを使用しました。

 

 

図11、ADXL362の分解能(OUTPUT RESOLUTION)
ADXL362データシートより

 

 

図12、ADXL362の8bitのデータを取得しているコード

本来の12bitの数値に置き換える場合は、4bit分(2^4=16)を8bitデータに掛け算する必要があります。

例として、今回作成したブレッドボードをX軸方向に対して立ててみると、63付近のデータが表示されます。この値に16を掛け算すると、加速度を得ることができます。

加速度 = 63 x 1mg/LSB x 16 = 1008mg

となり、地球の重力とほぼ同じ1gになり正常に動作しているということがわかります。

 


まとめ

今回は、前回に引き続きデジタルインターフェース(SPI)を使用してセンサーのデータを取得しました。これで、アナログ入力、I2C、SPIという基本的なセンサー出力のデータをマイコンで読み取り、BLEで通信することが可能になりました。また、加速度センサーの基本的な原理などを紹介しました。

次回は、加速度センサーの便利な機能や、ADXL362以外のラインナップを紹介したいと思います。