アプリケーション・ノート
ADXL345 を用いた歩数計 by Tomoaki Tsuzuki Rev. 0 本 社/〒105-6891 東京都港区海岸 1-16-1 ニューピア竹芝サウスタワービル 電話 03(5402)8200 大阪営業所/〒532-0003 大阪府大阪市淀川区宮原 3-5-36 新大阪 MT ビル 2 号 電話 06(6350)6868コンセプト
本アプリケーションノートに記載する歩数計のアルゴリ ズムは加速度センサーの設置向きによらず歩数をカウン トできるアルゴリズムです。図1にアルゴリズムの概要 を示します。 このアルゴリズムは正と負の極性のパルスを検出して歩 数をカウントします。アルゴリズムは、3軸分の加速度 信号のRSS値を計算し32データ分の移動平均を計算 します。(ADXL345のFIFO機能を使用する事 で、移動平均の計算は簡略化されます)RSS値から移 動平均の値を引いた値(この値を本アルゴリズムでは SIGNAL と呼びます)をパルスの検出に使用します。 SIGNAL が予め設定した閾値を超えた時点でタイマーの 動作が開始します。タイマーで SIGNAL が閾値を下回る までの時間を測定し、パルスの幅が設定した閾値の範囲 に収まっているかを確認します。パルスを検出した後に、 アルゴリズムは反対極性のパルスを探します。一定時間 内に反対極性のパルスが検出されれば、ステップとして 認識します。ステップを認識した後は LATENCY と呼ぶ 時間分だけデッドタイムを設けます。これは振動等によ るノイズを排除する事が目的です。 最初の数ステップの検出では、アルゴリズムは歩行とは 認識しません。STEP_COUNTER で設定したステップ数 に一定時間内に達した時点でステップを歩行とみなしま す。一定時間内にステップが STEP_COUNTER の値に 達しなかった場合は、それまでのステップは破棄されも う一度最初のステップを探します。またアルゴリズムは ステップとステップの間の時間間隔を測定します。ステ ップとステップの間隔が長すぎたり短すぎたりした場合 には、振動等によるミスカウントと判断し、それまでの ステップを破棄します。THP
THN
PA
PA
PW
PW
Latency
WINDOW
Time
Acceleration Signal
(RSS minus Moving Average)
Acceleration
Amplitude
Walk_DUR
実装
本アルゴリズムは ADXL345 を表1のように設定してい ます。ADXL345 の Auto-sleep 機能は歩数計に最適です。 動きが無い時は加速度センサーが自動的に低消費電力状 態に移行するので、システム全体の不可が軽減されます。 表2の設定は Auto-sleep 機能を使用するための閾値の設 定です。詳細は ADXL345 のデータシートを参照してく ださい。 ADXL345 Setting Register Name Address Data MeaningBW/RATE 0x2C 0x0A 100Hz Data Rate
DATA_FORMAT 0x31 0x08 +/-16g, 13bit, Right justified data
POWER_CTL 0x2D 0x38 Sensor in measurement mode, Link and Auto-sleep enabled INT_ENABLE 0x2E 0x1A WM INT, Activity INT, Inactivity INT enabled
FIFO_CTL 0x38 5F FIFO in FIFO mode, 32 samples 表1.ADXL345の設定
ADXL345 Setting Register Name Address Data Meaning
THRESH_ACT 0x24 0x08 500mg THRESH_INACT 0x25 0x08 500mg TIME_INACT 0x26 0x02 2ms
ACT_INACT_CTL 0x27 0xFF Use 3-axis, AC-coupled 表2.閾値の設定
Rev. 0 | Page 3 of 10
TABLE OF CONTENTS
コンセプト ... 1 実装 ... 2
図2にソフト処理全体の流れを示します。割り込み信号 の発生を受けてプロセッサーは INT_SORUCE レジスタ を読みます。もし ACTIVITY 割り込みだった場合には FIFO の内容をクリアして次の割り込みを待ちます。もし INACTIVITY 割り込みだった場合は、プロセッサーは何 もせずに次の割り込みを待ちます。もし WM 割り込みだ った場合にはプロセッサーは歩数計のアルゴリズムを走 らせます。 START READ register 0x30 (INT_SOURCE) Activity INT or Inactivity INT RUN Pedometer Algorithm
Initialize Pedometer Algorithm Variables END Y N Read 32 data from FIFO 32Times Assumes WM INT Activity INT Clear FIFO Y N MA = Average of 32 data 図2.ソフト処理全体のフローチャート
Rev. 0 | Page 5 of 10
歩数計アルゴリズム
表3はアルゴリズムに使用する変数を示します。表4はアルゴリズムに使用する定数を示します。図3、図4、図5、図 6、図7、図8に歩数計のアルゴリズムを示します。
Variable Name Function Initial State
Walk_Flag 1 when at walking state, 0 when at not walking 0
T_Walk_Flag 1 when at temporary walking state, 0 when at not temporary walking 0
RSS RSS of three axis (unit is LSB) 0
MA Average of 32 samples in FIFO 0
Signal RSS minus MA 0
PA Pulse area 0
PW Pulse width 0
WINDOW Shows how long time is passed after first pulse is detected 0
PPTEMP 1 when positive pulse detected and looking for negative pulse 0
NPTEMP 1 when negative pulse detected and looking for positive pulse 0
Pulse_Flag
0=looking for pulse, 1=positive pulse detected and looking for negative pulse, 2=negative pulse detected and looking for positive
pulse, 4=in latency state 0
Latency
Time in which step count algorithm is not taken place after latest step
is detected 0
WALK_DUR Shows how long time is passed after latest step is detected 0
TEMP_STEP
Temporary step count. Cleared if WALK_DUR is above
WALK_DUR_TH 0
STEP Step counted 0
表3.変数
Constants Function
Initial Setting
Signal_TH When signal is above this level, clear everything 2000
THP Threshold for positive pulse 20
THN Threshold for negative pulse -20
PAMAX Maximum pulse area 6000
PAMIN Minimum pulse area 50
PWMAX Maximum pulse width 80
PWMIN Minimum pulse width 2
WINDOW_TH Defines how long to look for second pulse after first pules is detected 90
Time_Latency Define how long Latency is 15
WALK_DUR_TH Defines how long to look for another step after latest step is detected 100
TEMP_STEP_TH Defines how many TEMP_STEP needed to recognize it as Walking 10
START RSS = RSS of 3axis SIGNAL = RSS - MA PPTEMP=1 or NPTEMP=1 TEMP_STEP >= TEMPSTEP TH T_Walk_Flag = 0 Walk_Flag = 1 STEP= STEP + TEMP_STEP
TEMP_STEP = 0 WINDOW = WINDOW +1 WINDOW >= WINDOW_TH or Signal >= Signal_TH PPTEMP = 0 NPTEMP = 0 WINDOW = 0 PULSE_FLAG = 0 PA = 0 PW = 0 T_Walk_Flag = 1 or Walk_Flag = 1 WALK_DUR = WALK_DUR +1 WALK_DUR >= WALK_DUR_TH Walk_Flag = 0 T_Walk_Flag = 0 WALK_DUR = 0 TEMP_STEP = 0
flag Check Function
End
図3.歩数計アルゴリズム
Flag Check Function START
Pulse_Flag = 0 Pulse_Flag = 1 Pulse_Flag = 2 Pulse_Flag = 3
Check Pulse_Flag PFlag3 Function PFlag2 Function PFlag1 Function PFlag0 Function End 図4.歩数計アルゴリズム Flag Check 関数
Rev. 0 | Page 7 of 10 Pulse_Flag = 0 Signal >= THP PA = Singla PW = 1 Pulse_Flag = 1 PPTEMP = 1 PA = 0 PW = 0 Pulse_Flag = 0 WINDOE = 0 PPTEMP = 0 NPTEMP = 0 Signal <=THN PA = Abs(Singla) PW = 1 Pulse_Flag = 1 NPTEMP = 1 PA = 0 PW = 0 Pulse_Flag = 0 WINDOE = 0 PPTEMP = 0 NPTEMP = 0 PFlag0 Function Start End 図5.PFlag0 関数 Signal > THN PA = PA + abs(Sigmal) PW = PW + 1 PAMIN <= PA <=PAMAX and PWMIN<= PW <= PWMAX PPTEMP = 0 NPTEMP = 1 STEP = STEP +1 Wwlk_Flag = 1 TEMP_STEP = TEMP_STEP + 1 T_Walk_Flag = 1 PA = 0 PW = 0 PPTEMP = 0 NPTEMP = 0 WINDOW = 0 WINDOW_DUR = 0 Pulse_Flag = 3 PFlag1 Function Start End End Pulse_Flag = 0 図6. PFlag1 関数
Signal < THP PA = PA + Sigmal PW = PW + 1 PAMIN <= PA <=PAMAX and PWMIN<= PW <= PWMAX NPTEMP = 0 PPTEMP = 1 STEP = STEP +1 Wwlk_Flag = 1 TEMP_STEP = TEMP_STEP + 1 T_Walk_Flag = 1 PA = 0 PW = 0 PPTEMP = 0 NPTEMP = 0 WINDOW = 0 WINDOW_DUR = 0 Pulse_Flag = 3 PFlag2 Function Start End End Pulse_Flag = 0 図7. PFlag2 関数 Latency = Latency + 1 Latency >= Time_Latency PFlag3 Function Start Pulse_Flag = 0 Latency = 0 End 図8. PFlag3 関数
Rev. 0 | Page 9 of 10
NOTES
©2008 Analog Devices, Inc. All rights reserved. 商標および登録商標は各社の所有に属します。