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