【加速度センサー入門】 自由落下(Free Fall) 機能を使ってみよう

【加速度センサー入門】シリーズでは、アナログ・デバイセズ社の加速度センサーを中心に、基本的な使い方や応用方法を解説します。前回の記事では、加速度センサー「ADXL345」 と「Arduino」を使い「FIFO機能」の使い方を紹介しました。今回は、ADXL345に搭載されている「自由落下(Free Fall)機能」を解説したいと思います。

【加速度センサー入門】シリーズ一覧

自由落下(Free Fall) 機能について

自由落下とは

「自由落下(Free Fall)」は、物体が空気の摩擦や抵抗などの影響を受けずに、重力の働きだけによって落下する現象です。落下時に発生した回転運動、空気抵抗などを無視すると加速度センサーでは、自由落下の際には慣性力がつりあう現象が生じるため加速度が「0」の状態になります。

 

 自由落下は遊園地のフリーフォール(ゴンドラ)で体験することができます。落下中に体が宙に浮くような感覚を感じたことがあると思われます。これが慣性力がつりあう現象の「自由落下」となります。

 

加速度センサーは静止状態において地面方向に重力加速度の1Gが加わっていますが、自由落下中は加速度が「0」になるという特性を応用し、様々なアプリケーションに活用されています。

 

パソコンを落としてしまった際のハードディスクの保護の用途、人が転倒した際の転倒検知の用途などに応用されています。また最近ではドローンが空中で故障した際の落下検出に応用され、パラシュートの起動スイッチに使用されていると聞いたことがあります。

ADXL345の自由落下(FreeFall)機能について

加速度データを取得してみようで作成したプログラムを活用し、自由落下時の加速度データを取得してみました。机の上から約30cm離れたところで手で支えている際は重力加速度の1Gがみえていますが、手を放した後から机の上に到達するまでの自由落下中は下図の通り約0Gとなることが確認できます。 

 

自由落下検出に関しては、加速度実効値の「0G検出範囲」と「その検出期間」を判断することでホストプロセッサー側でアルゴリズムを組むことも可能です。しかし、ADXL345は自由落下機能を搭載しているのでHostプロセッサーは加速度データからの自由落下検出アルゴリズムを組む必要がありません。この機能によりホストプロセッサーのリソースを減らすことやアルゴリズムを作る手間が省けます。自由落下機能は割り込み機能のひとつです。加速度センサーの割込み機能を使ってみようで割り込み機能の解説をしていますので併せてご確認ください。

自由落下時の加速度データ
割り込み機能の概要図

自由落下機能を使ってみよう

加速度センサーADXL345 とハードウェアのオープンプラットフォームであるArduinoを使い「自由落下(FreeFall)機能」のプログラムを作成していきます。

準備するもの

今回、加速度センサーを評価するうえで準備したものはこちらです。

 

・Arduino IDE がインストール済みの PC (Arduino IDE のダウンロードはこちらから)

・USB ケーブル (Arduino と PC 接続用)

Arduino Nano 互換品ボード 

加速度センサー ADXL345 

・ブレッドボードとワイヤー

 

上記の部品を組み合わせて、下図のように回路を組んでいきます。Arduino Nano への電源は、PC からの USB バスパワーで供給します。ADXL345は、SPI インターフェースとI2C インターフェースに対応していますが、今回はI2C インターフェースを使用します。

接続図
接続図

プログラムの内容

プロブラムの内容は下記となります。レジスタの詳細についてはデータシートをご確認ください。


①自由落下とみなす加速度閾値・自由落下継続時間の設定を行う
②自由落下割り込みの設定を行う
③自由落下割り込みを有効にしている場合、割り込み端子(INTピン)、割り込みステータスレジスタのINT_SOURCEレジスタに結果が反映される
④自由落下を検出した場合にArduinoのコンソール上に「Free Fall Detected]と表示をさせる

 

まず自由落下機能を使うためには、自由落下とみなす加速度閾値と継続時間の設定を決める必要があります。

 

・加速度閾値はTHRESH_FFレジスタ(アドレス:0x28)で設定します。自由落下時に回転運動なども加わる可能性があるため少し余裕をもたせます。データシートの推奨値は300mg~600mgとなります。

・継続時間はTIME_FFレジスタ(アドレス:0x29)で設定します。継続時間は想定される落下時間と加速度センサーのサンプリングレート(ODR)により検討します。データシートの推奨値は100ms~350msとなります。

 

今回はTHRESH_FF=0x07(450mg), TIME_FF=0x14(100msec)に設定しました。なお、ODR=100Hz(10msec)なので10サンプル分のデータが連続して閾値内に入っている場合に自由落下検出となります。

 

次に、割り込み機能を有効にするために INT_ENABLEレジスタ(アドレス0:0x2E)の FREE_FALLビットのBIT[2]="1" に設定します。

最後に、割り込み検出後にはArduinoのシリアルコンソール上の"Free Fall Detected"のメッセージを出力させます。

 

Arduino IDE で作成したプロジェクトファイルはダウンロードできますので、ご興味のある方は下記「資料ダウンロード」より入手ください。

 

動作確認

作成したプログラムを使って動作確認をしてみます。加速度センサーを落下させるとArduinoのシリアルコンソールに"Free Fall Detected"が表示され自由落下が正常に検出されたことが確認できました。また、加速度センサーを振った時の動き(シェイク動作)において自由落下を誤検知しないかの確認もしてみました。動作確認の様子を動画にしましたので是非ご確認ください。

今回検証したサンプルコードのダウンロード

今回実施したArduino のプロジェクトファイルを提供しています。こちらからお申し込みの上、ぜひお試しください!

加速度センサー ADXL345 について

今回使用したADXL345 は、3軸のデジタル出力加速度センサーです。主な特長は以下の通りです。

 

・ADC、演算機能ブロック、FIFO 内蔵で、非常に使いやすいスタンダードな加速度センサー

・加速度データは、デジタルシリアル方式で一般的なI2C/SPIを採用

・3軸タイプのセンサーは直交座標 (X, Y, Z) で、それぞれの軸に働く加速度を取得可能

・最大検出加速度を2g~16gの範囲で設定ができ、サンプリングも~3.2kHzと幅が広いので、衝撃、傾き、モーション検知など様々な用途に応用可能

・消費電流を減らすためのフレキシブルなモードを採用

 

ADXL345 の詳細は、データシートをご参照ください。

また、この加速度センサーは非常に使いやすいので、これから加速度センサーを評価してみたいという方はぜひ評価ボードでお試しください。

最後に

本記事の内容に関してのご質問、または加速度センサーの選定や使い方にお困りのことがありましたら、以下からお問い合わせください。



アナログ・デバイセズ メーカー情報Topへ

アナログ・デバイセズ メーカー情報Topに戻りたい方は以下をクリックしてください。