秋月に売っている、一番安い3軸加速度計
http://akizukidenshi.com/catalog/g/gM-06724/
制御方法をメモ
おおむねはこのサイト
ただし、このサイトはArduino5VをADXL3453.3Vを直接つないでるので危ない。
https://sites.google.com/a/gclue.jp/fab-zang-docs/ni-yinkiiot/adxl345-i2c
Arduino Pro mini 3.3Vで動作確認。
ADXL345に、VDD、GND、ArduinoのSDAとSCLを接続する。
I2Cの場合は、CSは未接続でよい。
SDOは、Hiにするとアドレスが0x1D、Loにすると0x53になる。未接続だと0x1Dになる。
#include <Wire.h> #define DEVICE_ADDR (0x1d) // スレーブデバイスのアドレス byte axis_buff[6]; void setup() { Serial.begin(9600); // シリアルの開始デバック用 Wire.begin(); // I2Cの開始 Serial.write("init"); // DATA_FORMAT // {3bit目} // 1:フルスケールモード // 0:10bit固定モード // {1bit目:0bit目} // 2'b11で+-16g // 2'b00で+-2g writeI2c(0x31, 0x0A);//0x0A: 13bit +-16g // POWER_TCL writeI2c(0x2d, 0x08);//0x08 Measure mode Serial.write("ok"); } void loop() { uint8_t length = 6; readI2c(0x32, length, axis_buff); //レジスターアドレス 0x32から6バイト読む int x = (((int)axis_buff[1]) << 8) | axis_buff[0]; int y = (((int)axis_buff[3]) << 8) | axis_buff[2]; int z = (((int)axis_buff[5]) << 8) | axis_buff[4]; Serial.print("x: "); Serial.print( x * 32.0 / 8192.0 );//センサ出力から加速度に変換して出力 Serial.print(" y: "); Serial.print( y * 32.0 / 8192.0 );//センサ出力から加速度に変換して出力 Serial.print(" z: "); Serial.print( z * 32.0 / 8192.0 );//センサ出力から加速度に変換して出力 Serial.println(); delay(100); } // I2Cへの書き込み void writeI2c(byte register_addr, byte value) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(register_addr); Wire.write(value); Wire.endTransmission(); } // I2Cへの読み込み void readI2c(byte register_addr, int num, byte buffer[]) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(register_addr); Wire.endTransmission(); Wire.beginTransmission(DEVICE_ADDR); Wire.requestFrom(DEVICE_ADDR, num); int i = 0; while (Wire.available()) { buffer[i] = Wire.read(); i++; } Wire.endTransmission(); }