【加速度センサー入門】シリーズでは、アナログ・デバイセズ社の加速度センサーを中心に、基本的な使い方や応用方法を解説します。前回の記事では、加速度センサー「ADXL345」 と「Arduino」を使い、「タップ検出機能」をご紹介しました。本記事では、ADXL345に搭載されている「アクティブ・インタクティブ検出機能」をご紹介します。
【加速度センサー入門】シリーズ一覧はこちらから
アクティブ・インアクティブ検出機能
機能の概要
ADXL345のアクティブ(Activity)・インアクティブ(InActivity)検知機能は、ある特定の加速度の変化を認識して割り込みを発生させる機能です。この機能はモーション(動き)検知機能とも呼ばれることもあります。ユーザーが設定した加速度閾値と加速度継続時間により特定のモーションの有無を検知することが可能です。
アクティブ・インアクティブ機能を使うことでアプリケーションに新たな価値を加えることが可能です。下記に応用例をいくつかあげてみました。
例1、携帯電話のようなHandHeldデバイスを机の上から持ち上げる動作でデバイスをスタンバイ状態から復帰させる「起動スイッチ機能」
また、机の上に戻すと自動的に、スタンバイ状態に戻る「オフスイッチ機能」
例2、ある一定期間デバイスが使われていない状態を検知しアラートを出すような「置忘れ防止機能」
例3、加速度センサーを窓やドアに設置し、外部からの衝撃や振動による加速度変化をとらえアラートを出すような「防犯機能」
また、アクティブ・インアクティブ機能は割り込み信号を発生することができます。そのため割り込みを検知するまでホスト CPU をスリープ状態することが可能となり、システムの低消費電力化が行えます。
動作説明
「アクティブ割り込み」はユーザー側で設定したアクティブ閾値を超えた場合に割り込みを発生させます。 「インアクティブ割り込み」はインアクティブ閾値と設定した継続時間の条件に入っている場合に割り込みを出力します。
下図にイメージ図を作成してみました。デバイスが机の上に置いてある状態から持ち上げた際に生じた加速度がTHRESH_ACT閾値を超えた際にアクティブ割り込みが発生します。また、デバイスを机の上に戻すと加速度はTHRESH_INACT閾値の範囲に入ります。そしてTIME_INACTの時間継続する場合にインアクティブ割り込みが発生します。また、LinkModeを有効にするとインアクティブ後はアクティブ検出だけを検出するように設定されます。そのためインアクティブ割り込み・アクティブ割り込みが連続して発生する状態を防ぐことができます。詳細はデータシートをご確認ください。
実際にデバイスを持ち上げた際の加速度データを取ってみました。下図のように、加速度センサーを垂直に持ち上げた際には、Z軸に加速度の変化が見られます。この場合、検出閾値を初期値から+0.5g付近をアクティビティー閾値にすることが可能かと思います。検出したい動きや使用環境を想定し、設定する加速度軸や加速度閾値の検討をおこないます。
アクティブ・インアクティブ検出機能を使ってみよう
加速度センサー「ADXL345」とハードウェアのオープンプラットフォームである「Arduino」を使い「アクティブ・インアクティブ検出機能」のサンプルプログラムを作成していきます。
準備するもの
今回、加速度センサーを評価するうえで準備したものはこちらです。
・Arduino IDE がインストール済みの PC (Arduino IDE のダウンロードはこちらから)
・その他(USB ケーブル (Arduino と PC 接続用)、ブレッドボード、ワイヤー)
上記の部品を組み合わせて、下図のように回路を組んでいきます。Arduino Nano への電源は、PC からの USB バスパワーで供給します。ADXL345は、SPI インターフェースとI2C インターフェースに対応していますが、今回はI2C インターフェースを使用します。
また割り込みピンのINT1ピン、INT2ピンの両方を使用します。
プログラムの内容
今回のプログラムではアクティブ・インアクティブ機能の両方を検出するようにします。そのため関連するレジスタの設定をおこなう必要があります。下記に具体的な設定内容を記載します。なお、レジスタの詳細についてはデータシートをご確認ください。
・ACT_INACT_CONTROLレジスタ(アドレス0x27)ではAC/DCカップリングモードの選択、有効とさせるX,Y,Z軸を設定します。
今回はACカップリングモード、全ての軸を有効にしました。
・THRESH_ACTレジスタ(アドレス0x24)ではアクティブ検出の加速度閾値を設定します。
スケール係数は62.5mg/LSBとなり、今回は0.5gを閾値として設定しました。
・THRESH_INACTレジスタ(アドレス0x24)ではアクティブ検出の加速度閾値を設定します。
スケール係数は62.5mg/LSBとなり、今回は0.125gを閾値として設定しました。
・TIME_INACレジスタ(アドレス:0x26)ではインアクティブ閾値を超えたあとの継続時間を設定します。
スケール係 数は1sec/LSB(最大255秒)となり、今回は4secに設定しました。
・INT_MAPレジスタ(アドレス:0x2F)では'1'に設定されたビットに対する割り込み機能がINT2ピンに反映されます。
今回は「インアクティブ割り込み」をINT2ピンに設定しました。なお設定していない割込み要因はINT1に反映されます。
・INT_ENABLEレジスタ(アドレス0x2E)のBIT[4]はアクティブ検出、BIT[3]はインアクティブ検出に割り当てられています。
今回は両方とも有効にしました。またIINT_SOURCEレジスタを読み込むことで、割り込み要因ののクリアを行うことができます。
・POWER_CTLレジスタ(アドレス0x2D)のBIT[5]は"Link"ビットとなります。アクティブ機能とインアクティブ機能を有効にした状態で
ビットに '1' を設定することで、インアクティブが検出されるまでアクティブ機能を抑止することができます。今回はLinkビットを設定しました。
また、プログラムの内容としては、ADXL345のレジスタ設定をおこないます。その後、アクティブ割込みを検出した場合はArduinoのシリアルコンソールに"Active detected"のログを出力させます。同様にインアクティブ割り込みを検出した場合は”InActive detected"のログを出力させます。Arduino IDE で作成したプロジェクトファイルはダウンロードできますので、ご興味のある方は下記「資料ダウンロード」より入手ください。
動作確認
作成したプログラムで動作確認をしてみます。デバイスを机上に置いておき、持ち上げるとアクティブ割り込みが検出され、コンソールに"Active detected"のログが出力されました。同様に机に置かれた状態に戻るとインアクティブ割り込みを検出し”InActive detected"のログが出力されました。
今回検証したサンプルコードのダウンロード
今回実施したArduino のプロジェクトファイルを提供しています。こちらからお申し込みの上、ぜひお試しください。
加速度センサー ADXL345 について
今回使用したADXL345 は、3軸のデジタル出力加速度センサーです。主な特長は下記の通りです。
・ADC、演算機能ブロック、FIFO 内蔵で、非常に使いやすいスタンダードな加速度センサー
・加速度データは、デジタルシリアル方式で一般的なI2C/SPIを採用
・3軸タイプのセンサーは直交座標 (X, Y, Z) で、それぞれの軸に働く加速度を取得可能
・最大検出加速度を2g~16gの範囲で設定ができ、サンプリングも~3.2kHzと幅が広いので、衝撃、傾き、モーション検知など様々な用途に応用可能
・消費電流を減らすためのフレキシブルなモードを採用
ADXL345 の詳細は、データシートをご参照ください。また、この加速度センサーは非常に使いやすいので、これから加速度センサーを評価してみたいという方は、ぜひ評価ボードでお試しください。
最後に
本記事の内容に関してのご質問、または加速度センサーの選定や使い方にお困りのことがありましたら、以下からお問い合わせください。
アナログ・デバイセズ メーカー情報Topへ
アナログ・デバイセズ メーカー情報Topに戻りたい方は以下をクリックしてください。