LoginSignup
8
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-30

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
8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10