3軸加速度センサー ADXL345をArduinoから制御する(I2C)

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ADXL345

Analog_Devices-ADXL345BCCZ-image.jpg

Datasheet

Datasheet

計測可能な値

種類 概要
加速度 3軸、±2g / ±4g / ±8g / ±16g(最大13ビットの分解能まで対応)
タップ シングルタップ/ダブル・タップを検出
フリー・フェール 端末の自由落下を検出
アクティブ/インアクティブ 加速度の有無と現在の加速度がユーザー設定可能な閾値以上か、もしくは以下であるかを検出

Slave address

Slave Address 0x53

Register map

Address Name Type Default 概要
0x00 DEVID R 11100101 Device ID
0x1D THRESH_TAP R/W 00000000 タップしきい値
0x1E OFSX R/W 00000000 X-axisオフセット
0x1F OFSY R/W 00000000 Y-axisオフセット
0x20 OFSZ R/W 00000000 Z-axisオフセット
0x21 DUR R/W 00000000 タップ持続時間
0x22 Latent R/W 00000000 タップ待ち時間
0x23 Window R/W 00000000 タップWindow
0x24 THRESH_ACT R/W 00000000 Activityしきい値
0x25 THRESH_INACT R/W 00000000 Inactivityしきい値
0x26 TIME_INACT R/W 00000000 Inactivity time
0x27 ACT_INACT_CTL R/W 00000000 Axis enable control for activity and inactivity detection
0x28 THRESH_FF R/W 00000000 Free-fallしきい値
0x29 TIME_FF R/W 00000000 Free-fall time
0x2A TAP_AXES R/W 00000000 シングル・ダブルタップの軸別の設定 
0x2B ACT_TAP_STATUS R 00000000 シングル・バブルタップのソース
0x2C BW_RATE R/W 00001010 データレートとパワーモード操作
0x2D POWER_CTL R/W 00000000 パワーセービング機能の操作
0x2E INT_ENABLE R/W 00000000 割り込みを有効にする操作
0x2F INT_MAP R/W 00000000 Interrupt mapping control
0x30 INT_SOURCE R 00000010 Source of interrupts
0x31 DATA_FORMAT R/W 00000000 データフォーマット操作
0x32 DATAX0 R 00000000 X-Axis Data 0(LSB)
0x33 DATAX1 R 00000000 X-Axis Data 1(MSB)
0x34 DATAY0 R 00000000 Y-Axis Data 0(LSB)
0x35 DATAY1 R 00000000 Y-Axis Data 1(MSB)
0x36 DATAZ0 R 00000000 Z-Axis Data 0(LSB)
0x37 DATAZ1 R 00000000 Z-Axis Data 1(MSB)
0x38 FIFO_CTL R/W 00000000 FIFO control
0x39 FIFO_STATUS R 00000000 FIFO status

Who_am_i

DEVID 0x00

AXDL345の場合、0x5eが返ってくる。

arduino
#define ADXL345_WHO_AM_I 0x00
#define ADXL345_DEVICE 0x32

bool searchDevice()
{
  byte device = 0x00;
  readI2c(ADXL345_WHO_AM_I, 1, &device);

  if(device == ADXL345_DEVICE){
      return true;
  } else{
      return false;
  }
}

Configuration

DATA_FORMAT 0x31

Data Formatでは、

  • SELF_TEST
  • SPI
  • INT_INVERT
  • FULL_RES
  • Justify
  • Range

の設定ができる。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
SELF_TEST SPI INT_INVERT 0 FULL_RES Justify Range Range

Range 設定

Bit1 Bit0 g Range
0 0 ±2 g
0 1 ±4 g
1 0 ±8 g
1 1 ±16 g

PowerOn

POWER_CTL 0x2D

Power Controlでは

  • Link
  • AUTO_SLEEP
  • Measure
  • Sleep Wakeup

の設定ができる。MeasureにBitを立てると、計測が開始される。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 0 Link AUTO_SLEEP AUTO_SLEEP Measure Sleep Wakeup Sleep Wakeup

Sleep Mode有効時の読み込み周期

Bit1 Bit0 Frequency (Hz)
0 0 8 (Hz)
0 1 4 (Hz)
1 0 2 (Hz)
1 1 1 (Hz)

加速度

Type Address
DATAX0 0x32
DATAX1 0x33
DATAY0 0x34
DATAY1 0x35
DATAZ0 0x36
DATAZ1 0x37

シングルタップとダブルタップ

設定

Type Address
THRESH_TAP 0x1D
DUR 0x21
LATENT 0x22
WINDOW 0x21

シングルタップは、

  • THRESH_TAPレジスト(TAPの強さのしきい値)
  • DURレジスタ(TAPの持続時間)

の値を設定する必要がある。

ダブルタップは、

  • THRESH_TAPレジスト(TAPの強さのしきい値)
  • DURレジスタ(TAPの持続時間)
  • LATENTレジスタ(識別間隔)
  • WINDOWレジスタ(識別間隔の期限切れから新しい認識を始めるまでの間隔)

の値を設定する必要がある。

NAME Address 値の意味
THRESH_TAP 0x1D 1単位は62.5 mg/LSB, 0xFFを設定すると16g。0にすると識別できない。
DUR 0x21 1単位は625 µs/LSB。0にすると識別できない。
LATENT 0x22 単位は、 1.25 ms/LSB。0にするとダブルタップが識別できなくなる。0xFFを設定すると320ms/LSB。
WINDOW 0x23 単位は、 1.25 ms/LSB。0にするとダブルタップが識別できなくなる。 0xFFを設定すると320ms/LSB。

計測

INT_SOURCE 0x30

Tapの状態の取得は、Interrupts Sourceから取得する。

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
DATA_READY SINGLE_TAG DOUBLE_TAP Activity Inactivity FREE_FALL Watermark Overrun