はじめに
人が転倒や転落(転倒転落)したとき、誰も気付く人がいないという事態は二重の意味で危険です。初期段階の怪我と思われる場合であっても、短時間のうちに処置を施さないと、状況によってはさらに悪化する可能性があります。たとえば、高齢者の多くは心身の衰えや目まいによって、また一般的にはセルフケアや自己防衛能力の低下によって思いがけなく転倒転落することがあります。高齢者の身体は虚弱になりがちなので、こういった事故が発生した場合は、すぐに処置を施さなければ、深刻な事態に陥るおそれがあります。統計に示されるように、深刻な結果を招く原因は、転倒転落そのものではなく救護や処置の遅れによるものが大部分です。迅速に救護員に通報できれば、転倒転落後の重大な結果を大幅に低減することができます。
高齢者以外にも、転倒転落、特に相当高い位置からの転倒転落に対する緊急通報が非常に有益な状態や動作の例は数多くあります。たとえば、登山者、建設作業者、窓の清掃作業員、塗装工、屋根職人などがそうです。
こうした転倒転落通報の必要性の観点から、あらゆるタイプの転倒転落の検出・予測デバイスの開発が盛んに行われるようになっています。近年、MEMS(マイクロ・エレクトロ・メカニカル・システム)加速度センサが登場したことで、3軸高集積MEMS(iMEMS®)加速度センサを利用した転倒転落検出器の設計が可能になっています。この技術は、3つの直交方向で加速度の変化を追跡してセンサを装着した人の身体の位置と動作の変化を測定するという原理に基づいています。データはアルゴリズム的に絶えず解析され、人体の転倒や転落の有無を判定します。人が転倒あるいは転落すると、デバイスはGPSと無線トランスミッタを使ってその位置を判定し、通報して救助を求めます。転倒転落検出の中核をなすのは、突発的な転倒転落状況の存在を判断する高信頼の有効な検出原理とアルゴリズムです。
本稿では、人体に関する転倒転落検出原理の研究に基づいて、アナログ・デバイセズの3軸加速度センサADXL3451を用いた転倒転落状況の検出ソリューションを解説します。
ADXL345 iMEMS加速度センサ
iMEMS半導体技術は、マイクロメカニカル構造と電子回路を組み合わせて1個のシリコン・チップに集積しています。この技術を使って、iMEMS加速度センサは1軸または2軸、さらには3軸で加速度を検知し、アナログまたはデジタル出力を提供します。加速度センサはアプリケーションに応じて、数gから数十gまで、さまざまな範囲の検出を提供します。デジタル仕様の場合には、複数の割込みモードを持たせることもできます。これらの機能は便利でフレキシブルなソリューションを提供します。
アナログ・デバイセズは、iMEMS 加速度センサー「ADXL345」を最近リリースしました。3 軸に対応し、デジタル出力を備えた製品です。計測範囲は ±2 g、±4 g、±8 g、±16 g の中から選択することができます。最大 13 ビットの分解能、4 mg/LSB の固定感度、3 mm×5 mm×1 mmの超小型パッケージ、少ない消費電力(25μA~130μA)、I2C® と SPI という 2 つの標準シリアル・デジタル・インターフェースへの対応、32 レベルの FIFO ストレージの内蔵といった特徴を備えています。動作状態の検出機能や柔軟性の高い割込み機能など、多様な機能を備えているので、転倒を検出するためのアルゴリズムの実装を大幅に簡素化することができます。本稿に示すように、このような特徴を備える ADXL345 は、転倒の検出という用途に最適な加速度センサーであると言えます。
ここで推奨している転倒転落検出ソリューションは、内蔵されたこれらの機能を十分に活用し、アルゴリズムの複雑さを最小限に抑えています。実際の加速度値を読み出して余分な計算を実行したりする必要はほとんどありません。
割込みシステム
図1は、ADXL345のシステム・ブロック図とピン定義を示しています。

ADXL345は2個のプログラマブル割込みピンINT1とINT2を備えており、全部で8つの割込み機能が得られます。各割込みは個別にイネーブルまたはディスエーブルでき、INT1またはINT2ピンにマップできます。機能はすべて同時に使用できます。ただし、機能的に唯一制限されるのは、機能によって割込みピンを共有することが必要になる場合があるという点です。8つの機能はDATA_READY、SINGLE_TAP、DOUBLE_TAP、ACTIVITY、INACTIVITY、FREE_FALL、WATERMARK、OVERRUNです。割込みはINT_ENABLEレジスタに適切なビットを設定するとイネーブルとなり、INT_MAPレジスタの値に基づいてINT1またはINT2ピンにマップされます。割込み機能は次のように定義されます。
1. DATA_READYは新しいデータが使用可能なときに設定され、使用できる新しいデータがないとクリアされます。
2. SINGLE_TAPは、THRESH_TAPレジスタの値より大きな加速度イベントがDURレジスタの指定値より短い時間生じると設定されます
3. DOUBLE_TAPは、THRESH_TAPレジスタの値より大きな2つの加速度イベントがDURレジスタの指定値より短い時間生じると設定され、LATENTレジスタの指定時間後、WINDOWレジスタの指定時間内に2番目のタップが開始されます。
図2は有効なSINGLE_TAPとDOUBLE_TAPの2つの割込みを示しています。

4. ACTIVITYは、THRESH_ACTレジスタの値より大きな加速度が感知されると設定されます。
5. INACTIVITYは、THRESH_ACTレジスタの値より小さな加速度がTIME_INACTの指定時間より長い間感知されると設定されます。TIME_INACTの最大値は255秒です。
注:ACTIVITY、INACTIVITY割込みで、ユーザは各軸を個別にイネーブルまたはディスエーブルできます。たとえば、X軸のACTIVITY割込みをイネーブルし、Y軸とZ軸の割込みをディスエーブルしておくこともできます。
ACTIVITY割込みとINACTIVITY割込みに対してDC結合またはAC結合動作モードを選択できます。DC結合動作では、現在の加速度がTHRESH_ACTおよびTHRESH_ INACTと直接比較され、ACTIVITYまたはINACTIVITYが検出されているかどうかを判定します。動作(アクティビティ)検出のためのAC結合動作では、動作検出開始時の加速度値が参照値として扱われます。次に、加速度の新しいサンプルがこの参照値と比較され、その差の大きさがTHRESH_ACTを越えていると、デバイスはACTIVITY割込みをトリガします。非動作(非アクティビティ)検出のためのAC結合動作では、参照値が比較処理のために使用され、デバイスが非動作スレッショールドを越えていると更新されます。参照値が選択されると、デバイスはTHRESH_INACTの現在の加速度と参照値の差を比較します。その差が全 TIME_INACTの間THRESH_INACTを下回っていれば、デバイスは非アクティブとみなされ、INACTIVITY割込みがトリガされます。
6. FREE_FALL は、THRESH_FF レジスタに格納された値よりも小さい加速度が、TIME_FF レジスタで指定した値よりも長い時間続いた場合に設定されます。FREE_FALL 割込みは、主に自由落下運動の検出に使用されます。FREE_FALL 割込みは、以下の点で INACTIVITY 割込みとは異なります。まず、FREE_FALL 割込みでは必ずすべての軸の値が検出に使用されます。また、タイマーの設定時間がはるかに短くなっています(最大 1.28 秒)。加えて、常に DC 結合動作が使用されます。
7. WATERMARKは、FIFOのサンプルの数がSAMPLESレジスタの値にまで達していると設定されます。この値はFIFOが読み出されると自動的にクリアされ、SAMPLESレジスタ値より小さな値に戻ります。
注:ADXL345のFIFOレジスタには、バイパス、FIFO、ストリーム、トリガという4つのモードがあり、最大32サンプル(X、Y、Z軸)まで格納できます。FIFO機能は重要であり、非常に役に立ちます。ただし、ここで推奨するソリューションではFIFO機能を使用しないため、これ以上解説はしません。
8. OVERRUNは、未読のデータが新しいデータに置き換えられると設定されます。OVERRUNの正確な動作はFIFOの動作モードに依存します。バイパス・モードでは、DATAX、DATAY、DATAZレジスタの未読のデータが新しいデータに置き換えられるとOVERRUNが設定されます。ほかのどのモードでも、FIFOが32サンプルで一杯になるとOVERRUNが設定されます。OVERRUNはFIFO値の読出しを行うとクリアされ、データが読み出されると自動的にクリアされます。
転倒転落中の加速度変化特性
転倒転落検出の原理に関する主要研究では、人が転倒または転落しているときに発生する加速度の変化に焦点を当てています。
図3は(a)階段を歩いて下りるとき、(b)階段を歩いて上るとき、(c)腰を下ろすとき、(d)椅子から立ち上がるときにそれぞれ発生する加速度の変化を示しています。転倒転落検出器は被験者のベルトに装着されています。赤いパターンはY軸(垂直)加速度であり、安定時は-1gです。黒と黄色のパターンはそれぞれX軸(進行方向の加速度)、Z軸(横方向の加速度)の加速度です。これらは安定時に両方とも0gです。緑のパターンはベクトル合計であり、安定時の値は1gです。




図3. さまざまなタイプの動作に対する加速度センサ応答
高齢者の動作は比較的緩慢なので、歩行中の加速度の変化はそれほど顕著ではありません。最も大きな加速度は、腰を下ろす瞬間でY(およびベクトル合計)において3g(瞬間加速度)を示しています。
転倒転落中の加速度はまったく異なります。図4は、偶発的な転倒転落時の加速度の変化を示しています。図4を図3と比較すれば、転倒転落検出の基準として利用できる転倒転落イベントの重要な4つの差異特性を見て取ることができます。これらの特性は赤い点線の矩形で示されており、以下に詳しく説明します。

1. 転倒転落開始:転倒転落開始時には無重力の現象が必ず発生します。これは自由落下中にもっと顕著になり、加速度のベクトル合計は0gに近づきます。その状態の持続時間は自由落下の高さに依存します。通常の転倒転落中の無重力が自由落下中のときほど顕著ではなくても、加速度のベクトル合計はほぼ1g未満となります(通常状態のときは一般に1gより大きい)。したがって、これはADXL345のFREE_FALL割込みで検出できる落下状態に対する最初の判断基準となります。
2. 衝突:人間の身体は、無重力を経験した後に地面またはその他の物体に衝突しますが、加速度曲線はこれを大きな衝撃として示します。この衝撃は、ADXL345のACTIVITY割込みにより検出されます。したがって、転倒転落を判定する2つ目の基準はFREE_FALL割込み直後のACTIVITY割込みです。
3. 転倒転落の余波:一般に、人体は転倒転落して衝突した後にすぐに立ち上がることはできません。短時間(意識を失っているときは比較的長い間)は、動けない状態のままとなります。これは、加速度曲線上で一定間隔の平坦なラインとして表されており、ADXL345のINACTIVITY割込みで検出されます。したがって、転倒転落状態を判定する3つ目の基準はACTIVITY割込み直後のINACTIVITY割込みです。
4. 転倒転落前と転倒転落後の比較:転倒転落後、身体は前とは異なる方向を向いているので、3次元の静的加速度は転倒転落前の最初の状態とは異なります(図4)。ここでは、転倒転落検出器がベルトで身体に装着されているため、最初の状態を含む全加速度履歴が得られるものと仮定します。この場合、INACTIVITY割込み後に3軸の加速度データを読み取り、そのサンプリング・データを最初の状態と比較することができます。図4では静的加速度がY軸上の-1gからZ軸上の+1gに変わっているので、横方向に倒れたのは明らかです。このことから、転倒転落を判定する4つ目の基準はサンプリング・データと初期状態との差が特定のスレッショールド(例:0.7g)を超えているかどうかとなります。
これらの評価の組み合わせたものが全体的な転倒転落検出アルゴリズムとなります。このアルゴリズムを実行すれば、システムは転倒転落発生時に適正なアラートを出すことができます。もちろん、割込み間の間隔は合理的な範囲の値にする必要があります。一般に、FREE_FALL割込み(無重力)とACTIVITY割込み(衝突)の時間間隔は、人が超高速ビルの屋上から転倒転落することがない限りあまり長くない値に設定します。同様に、ACTIVITY割込み(衝突)とINACTIVITY割込み(実質的に無重力)の時間間隔も、それほど長くない値にします。次のセクションでは、適正な値を実際に用いて具体例を説明します。関連する割込み検出スレッショールドと時間パラメータは必要に応じて柔軟に設定できます。
転倒転落によって意識不明などの重大な結果が生じる場合は、身体が動かない時間が長くなることもあります。この状態もINACTIVITY割込みで検出することができます。したがって、転倒転落後に非アクティブ状態が検出されて、それが長時間(指定の時間)続く場合は、2つ目のクリティカル・アラートを送ることができます。
代表的な回路接続
ADXL345とマイクロコントローラ間の回路接続は非常にシンプルです。本稿では、テスト・プラットフォームはADXL345とADuC7026アナログ・マイクロコントローラを使用します。ADuC7026は12ビットのアナログI/OとARM7TDMI® MCUを備えています。図5はADXL345とADuC70262 間の代表的な接続を示します。ADXL345はCSピンがハイレベルに固定されており、I2Cモードで動作します。SDAとSCL(データとI2Cバスのクロック)はADuC7026の対応するピンに接続されています。ADuC7026のGPIOはADXL345のI2Cアドレスを選択するためのALTピンに接続され、ADXL345のINT1ピンは割込み信号を生成するためのADuC7026のIRQ入力に接続されています。
ほかのMCUまたはプロセッサ・タイプは、図5に類似した回路接続によってADXL345にアクセスできますが、ADuC7026はマルチチャンネルA/D変換およびD/A変換などのデータ・アクイジション機能も提供します。ADXL345のデータシートには、より高いデータレートを達成するためのSPIモード・アプリケーションの説明があります。

表1. ADXL345レジスタ機能の説明
16進 アドレス |
レジスタ名 | タイプ* | リセット値 | 説明 | アルゴ リズム での設定* |
アルゴリズムの 各設定の機能 |
0 | DEVID | RO | 0xE5 | デバイスID | RO |
|
1-1C | Reserved |
|
|
予約済み、アクセスしない | 予約済み |
|
1D | THRESH_ TAP | RW | 0x00 | タップ・スレッショールド | 未使用 |
|
1E | OFSX | RW | 0x00 | X軸オフセット | 0x06 | X軸オフセット補償、 初期化 キャリブレーション から取得 |
1F | OFSY | RW | 0x00 | Y軸オフセット | 0xF9 | Y軸オフセット補償、 初期化 キャリブレーション から取得 |
20 | OFSZ | RW | 0x00 | Z軸オフセット | 0xFC | Z軸オフセット補償、 初期化 キャリブレーション から取得 |
21 | DUR | RW | 0x00 | タップ継続時間 | 未使用 |
|
22 | LATENT | RW | 000 | タップ遅延 | 未使用 |
|
23 | WINDOW | RW | 0x00 | タップ・ウィンドウ | 未使用 |
|
24 | THRESH_ ACT | RW | 0x00 | 動作スレッショールド | 0x20/0x08 | 動作 スレッショールドを 2g/0.5gに設定 |
25 | THRESH_ INACT | RW | 0x00 | 非動作スレッショールド | 0x03 | 非動作 スレッショールドを 0.1875gに設定 |
26 | TIME_ INACT | RW | 0x00 | 非動作時間 | 0x02/0x0A | 非動作時間を 2秒または10秒に設定 |
27 | ACT_ IACT_CTL | RW | 0x00 | 動作/非動作の 軸イネーブル制御 |
0x7F/0xFF | X軸、Y軸、Z軸の 動作/非動作を イネーブルに設定。この場合、 非動作=AC結合モード、 動作=DC結合モード/AC結合モード 。 |
28 | THRESH_FF | RW | 0x00 | 自由落下 スレッショールド |
0x0C | 自由落下 スレッショールドを 0.75gに設定 |
29 | TIME_FF | RW | 0x00 | 自由落下時間 | 0x06 | 自由落下時間を 30ミリ秒に設定 |
2A | TAP_AXES | RW |
0x00 | タップ/ダブル・タップ の軸制御 |
未使用 | |
2B | ACT_TAP _STATUS | RO | 0x00 | 動作/タップ源 | RO | |
2C | BW_RATE | RW | 0x0A | データレートと 電源モード制御 |
0x0A | サンプル・レートを 100Hzに設定 |
2D | POWER_ CTL | RW | 0x00 | 節電機能制御 | 0x00 | 通常の動作モードに 設定 |
2E | INT_ ENABLE | RW | 0x00 | 割込み イネーブル制御 |
0x1C | 動作、非動作、 自由落下の 各割込みの イネーブル設定 |
2F | INT_ MAP | RW | 0x00 | 割込みマッピング | 0x00 | INT1ピンへの 全割込みのマッピング |
30 | INT_ SOURCE | RO | 0x00 | 割込みソース | RO |
|
31 | DATA_ FORMAT | RW | 0x00 | データ・フォーマット 制御 |
0x0B | S±16gの測定範囲、 13ビット右揃え、 ハイレベル割込みトリガ、 I2Cインターフェースに設定 |
32 | DATAX0 | RO | 0x00 | X軸データ | RO | |
33 | DATAX1 | RO | 0x00 | RO | ||
34 | DATAY0 | RO | 0x00 | Y軸データ | RO | |
35 | DATAY1 | RO | 0x00 | RO | ||
36 | DATAZ0 | RO | 0x00 | Z軸データ | RO | |
37 | DATAZ1 | RO | 0x00 | RO | ||
38 | FIFO_ CTL | RW | 0x00 | FIFO制御 | 未使用 | |
39 | FIFO_ STATUS | RW | 0x00 | FIFOステータス | 未使用 | |
*RW = 読出し/書込み、 RO = 読出し専用 |
ADXL345で転倒転落の検出を簡素化
表1、図5では、上述したソリューションのアルゴリズムを実現するための情報やプログラムを提供しています。表には各レジスタの機能を記載し、現在のアルゴリズムで使用する値を示しています。各レジスタ・ビットの詳しい定義は、ADXL345のデータシートを参照してください。
表1のレジスタの一部は2つの値をとります。アルゴリズムは、検出のさまざまな局面に応じてこれらの値を切り替えます。
結論
ADXL345は全機能装備の強力な加速度センサです。本稿では、転倒転落検出の問題に対応した新しい推奨ソリューションをご紹介しました。このソリューションでは、デバイスに内蔵された各種の動作/状態検出機能や高柔軟の割込みを利用しています。テストは、ソリューションが簡素なアルゴリズムと高信頼の検出機能を備えていることを示しています。
参考資料
1 http://www.analog.com/jp/products/mems/mems-accelerometers/adxl345.html2 http://www.analog.com/jp/products/processors-dsp/analog-microcontrollers/arm7-core-products/aduc7026.html