加速度のより、力がかかることを利用すると加速度を計測できます。このセンサーの原理、利用法、重力の加速度を利用した傾きの計測法を紹介します。

F = M・ Aの関係があります。重力の力をFとしたとき、重力に基づく加速度を G と表記します。

#include <Wire.h>
#define ADXL 0x1D
#define XDATAL 0x32
#define RATE 0x2C
#define POWERA 0x2D
#define FORMAT 0x31
#define ACCXL 0x32
void adxl_init(){
Wire.begin();
Wire.beginTransmission(ADXL);
Wire.write(RATE);
Wire.write(0xc);
Wire.endTransmission();
//I2c.write(ADXL, RATE, 0xc);//400Hz
//I2c.write(ADXL, POWERA, 0x8);//
Wire.beginTransmission(ADXL);
Wire.write(POWERA);
Wire.write(0x8);
Wire.endTransmission();
//I2c.write(ADXL, FORMAT, 0x0);//range 2G,10bit
Wire.beginTransmission(ADXL);
Wire.write(FORMAT);
Wire.write(0x0);
Wire.endTransmission();
}
int adxl_read(int val[3]){
//符号なしで送る
int STATUS=0x2F;
byte vH,vL,st;
st= 1;
Wire.beginTransmission(ADXL);
Wire.write(ACCXL);
Wire.endTransmission();
Wire.requestFrom(ADXL, 6);
Wire.endTransmission();
//I2c.read(ADXL,0x32,2);
vL = Wire.read();
vH = Wire.read();
val[0]=(int)(word(vH,vL))+512;
//I2c.read(ADXL,0x34,2);
vL = Wire.read();
vH = Wire.read();
val[1]=(int)(word(vH,vL))+512;
//I2c.read(ADXL,0x36,2);
vL = Wire.read();
vH = Wire.read();
val[2]=(int)(word(vH,vL))+512;
return st; //1:dataready, 0:not ready
}
void setup() {
int id;
Serial.begin(9600);
//Serial.println("setup");
adxl_init();
lcd_begin();
}
void loop(){
int val[3];
char buff[15];
adxl_read(val);
sprintf(buff,"acc:%d",val[2]);
lcd_setCursor(0,0);
lcd_print(buff);
sprintf(buff,"%d,%d",val[0],val[1]);
lcd_setCursor(0,1);
lcd_print(buff);
sprintf(buff,"%d,%d,%d",val[0],val[1],val[2]);
Serial.println(buff);
delay(500);
}
496,499,739 492,501,739 495,500,741 496,499,740 493,500,738 505,512,747 497,550,742 495,610,720 491,548,741
