关于ADXL345的资料的汇总

ADXL345传感器详解

https://blog.csdn.net/book_drabit/article/details/83963416

几种常用的传感器(加速度传感器、重力传感器、方向传感器、陀螺仪)简介

原博地址:[https://blog.csdn.net/LEON1741/article/details/77200220](https://blog.csdn.net/LEON1741/article/details/77200220)

三轴加速计数据计算倾斜角算法

地址:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/black_yu/article/details/52673718

陀螺仪、加速计、磁力计等传感器汇总

原博地址:https://blog.csdn.net/wave_1102/article/details/45016187

加速计得到的结果就是XYZ三个值,分别代表三个方向的加速度。关于XYZ三值的介绍,可以看这里:
android 重力感应和屏幕旋转关系
http://blog.csdn.net/lzx_bupt/archive/2010/04/20/5507165.aspx

用加速计和磁力计可以计算出orientation(方位计),orientation涉及到了三个概念:
Roll:左右倾斜角度,也叫滚转角 http://baike.baidu.com/view/1769672.htm
Pitch:前后倾斜,也叫俯仰角 http://baike.baidu.com/view/3832041.htm
Yaw:左右摇摆,也叫偏航角 http://baike.baidu.com/view/1769448.htm

加速计/陀螺仪/磁力计是什么,3轴/6轴/9轴传感器又是什么?

2018年06月27日 16:26:00 leon1741 阅读数:5115
版权声明:个人心得,欢迎来信来函交流。转载请注明出处! https://blog.csdn.net/LEON1741/article/details/80831169

[三轴加速度传感器角度值转换原理]

原博地址

基于三轴加速度传感器的计步算法

原博地址:https://blog.csdn.net/Dancer__Sky/article/details/81504778

参考资料
http://www.analog.com/en/analog-dialogue/articles/pedometer-design-3-axis-digital-acceler.html

计步算法个人总结

[原博地址]
https://blog.csdn.net/Zxin94264/article/details/78716290

Android计步器算法实现

原博地址:Android计步器算法实现1
Android计步器算法实现(2)

加速度传感器的原理和应用:手机翻转、失重检测、运动检测、位置识别

链接地址: https://blog.csdn.net/u013286409/article/details/51605974

第五章 跌倒检测算法剖析(含跌到检测源码)

https://blog.csdn.net/baolinq/article/details/52400040

ADXL345调试心得

转载: https://blog.csdn.net/fxltsbl007/article/details/80894276

ADXL345库文件样例

ADXL345.cpp:

#include "ADXL345.h"
#include <Wire.h>
#include <math.h>
 
void ADXL345::enableDefault(void)
{
	writeReg(ADXL345_DATA_FORMAT, 0x00);//测量范围,正负16g,13位模式
	writeReg(ADXL345_BW_RATE, 0x0A);    //速率设定为100 参考pdf13页
	writeReg(ADXL345_POWER_CTL, 0x08);  //选择电源模式   参考pdf24页
	writeReg(ADXL345_INT_ENABLE, 0x80); //使能 DATA_READY 中断
	writeReg(ADXL345_OFSX, 0x00);       //X 偏移量 根据测试传感器的状态写入pdf29页
	writeReg(ADXL345_OFSY, 0x00);       //Y 偏移量 根据测试传感器的状态写入pdf29页
	writeReg(ADXL345_OFSZ, 0x00);       //Z 偏移量 根据测试传感器的状态写入pdf29页
}
 
// Writes a register
void ADXL345::writeReg(byte reg, byte value)
{
	Wire.beginTransmission(ADXL345_SLA_ADDR);
	Wire.write(reg);
	Wire.write(value);
	Wire.endTransmission();
}
 
// Reads a register
byte ADXL345::readReg(byte reg)
{
	byte value;
 
	Wire.beginTransmission(ADXL345_SLA_ADDR);
	Wire.write(reg);
	Wire.endTransmission();
	Wire.requestFrom(ADXL345_SLA_ADDR, 1);
	value = Wire.read();
	Wire.endTransmission();
 
	return value;
}
 
// Reads the 3 channels and stores them in vector g
void ADXL345::read()
{
	Wire.beginTransmission(ADXL345_SLA_ADDR);
	// assert the MSB of the address to get the gyro 
	// to do slave-transmit subaddress updating.
	Wire.write(ADXL345_DATAX0 | (1 << 7)); 
	Wire.endTransmission();
	Wire.requestFrom(ADXL345_SLA_ADDR, 6);
 
	while (Wire.available() < 6);
 
	uint8_t xla = Wire.read();
	uint8_t xha = Wire.read();
	uint8_t yla = Wire.read();
	uint8_t yha = Wire.read();
	uint8_t zla = Wire.read();
	uint8_t zha = Wire.read();
 
	a.x = xha << 8 | xla;
	a.y = yha << 8 | yla;
	a.z = zha << 8 | zla;
}

ADXL345.h:

#ifndef __ADXL345__
#define __ADXL345__
 
#include <Arduino.h> // for byte data type
 
#define	ADXL345_SLA_ADDR        	0xA6>>1
#define ADXL345_DEVID		        0x00
#define ADXL345_THRESH_TAP	   	0x1D
#define ADXL345_OFSX		        0x1E
#define ADXL345_OFSY		        0x1F
#define ADXL345_OFSZ		        0x20
#define ADXL345_DUR			0x21
#define ADXL345_LATENT		      	0x22
#define ADXL345_WINDOW		      	0x23
#define ADXL345_THRESH_ACT	    	0x24
#define ADXL345_THRESH_INACT    	0x25
#define ADXL345_TIME_INACT	    	0x26
#define ADXL345_ACT_INACT_CTL	  	0x27
#define ADXL345_THRESH_FF	      	0x28
#define ADXL345_TIME_FF		      	0x29
#define ADXL345_TAP_AXES	      	0x2A
#define ADXL345_ACT_TAP_STATUS		0x2B
#define ADXL345_BW_RATE		      	0x2C
#define ADXL345_POWER_CTL	      	0x2D
#define ADXL345_INT_ENABLE	    	0x2E
#define ADXL345_INT_MAP		      	0x2F
#define ADXL345_INT_SOURCE	    	0x30
#define ADXL345_DATA_FORMAT	    	0x31
#define ADXL345_DATAX0        		0x32
#define ADXL345_DATAX1        		0x33
#define ADXL345_DATAY0        		0x34
#define ADXL345_DATAY1       		0x35
#define ADXL345_DATAZ0        		0x36
#define ADXL345_DATAZ1        		0x37
#define ADXL345_FIFO_CTL	      	0x38
#define ADXL345_FIFO_STATUS	    	0x39
 
#define ADXL345_Z_OFF  10
#define ADXL345_Y_OFF  -7
#define ADXL345_X_OFF  -9
 
//percent of 1g per LSB
#define ADXL345_Z_SCALE 0.004F
#define ADXL345_Y_SCALE 0.00389F
#define ADXL345_X_SCALE 0.003937F
 
class ADXL345
{
	public:
		typedef struct vector
		{
			float x, y, z;
		} vector;
 
		vector a; // gyro angular velocity readings
 
		void enableDefault(void);
 
		void writeReg(byte reg, byte value);
		byte readReg(byte reg);
 
		void read(void);
 
};
 
 
#endif

--------------------- 
作者:lcokenm 
来源:CSDN 
原文:https://blog.csdn.net/lcokenm/article/details/24640357 
版权声明:本文为博主原创文章,转载请附上博文链接!

ADXL345 程序实例


#include <Wire.h>//调用Arduino自带库
 
#define Register_ID 0 //器件ID 十六进制为0x00  十进制为0
#define Register_2D 0x2D //省电特性控制
#define Register_X0 0x32 //X轴数据0
#define Register_X1 0x33 //X轴数据1
#define Register_Y0 0x34 //Y轴数据0
#define Register_Y1 0x35 //Y轴数据1
#define Register_Z0 0x36 //Z轴数据0
#define Register_Z1 0x37 //Z轴数据1
 
//ADXL345寄存器映射地址
 
int ADXAddress = 0xA7 >> 1;// 转换为7位从地址
int reading = 0;
int val=0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;
//定义变量
 
 
void setup()
{
   Wire.begin(); //初始化I2C         
   Serial.begin(9600);  //初始化串口
   delay(100);
   // enable to measute g data
   Wire.beginTransmission(ADXAddress);//开启发送
   Wire.write(Register_2D);//写入ADXL345寄存器映射地址
   Wire.write(8);                //测量使能
   Wire.endTransmission();     // 停止发送
 
}
 
void loop()
{
   //读取X轴数据
   Wire.beginTransmission(ADXAddress); // 开启发送
   Wire.write(Register_X0);//写入ADXL345寄存器映射地址
   Wire.write(Register_X1);//写入ADXL345寄存器映射地址
   Wire.endTransmission();//结束发送
   Wire.requestFrom(ADXAddress,2); //请求 ADXL345 二个字节
   if(Wire.available()<=2)   //获取<=2个数据
   {
     X0 = Wire.read();
     X1 = Wire.read();
     X1=X1<<8;
     X_out=X0+X1;  
   }
  //读取Y轴数据↓
   Wire.beginTransmission(ADXAddress); // 开启发送
   Wire.write(Register_Y0);//写入ADXL345寄存器映射地址
   Wire.write(Register_Y1);//写入ADXL345寄存器映射地址
   Wire.endTransmission();//结束发送
   Wire.requestFrom(ADXAddress,2); //请求ADXL345二个字节
   if(Wire.available()<=2)   //获取<=2个数据
   {
     Y0 = Wire.read();
     Y1 = Wire.read();
     Y1=Y1<<8;
     Y_out=Y0+Y1;
   }
   //读取Z轴数据
   Wire.beginTransmission(ADXAddress); // 开启发送
   Wire.write(Register_Z0);//写入ADXL345寄存器映射地址
   Wire.write(Register_Z1);//写入ADXL345寄存器映射地址
   Wire.endTransmission();//结束发送
   Wire.requestFrom(ADXAddress,2); //请求ADXL345二个字节
   if(Wire.available()<=2)   //获取<=2个数据
   {
     Z0 = Wire.read();
     Z1 = Wire.read();
     Z1=Z1<<8;
     Z_out=Z0+Z1;
   }
   /*
   Xg=X_out/256.0;
   Yg=Y_out/256.0;
   Zg=Z_out/256.0;
   */
    Xg=X_out; 
    Yg=Y_out; 
    Zg=Z_out; 
   Serial.print("X= ");
   Serial.print(Xg);
   Serial.print("       ");
   Serial.print("Y= ");
   Serial.print(Yg);
   Serial.print("       ");
   Serial.print("Z= ");
   Serial.print(Zg);
   Serial.println("  ");
   delay(200);
   //串口输出
}

/*--------------------- 
作者:Neil-Yale 
来源:CSDN 
原文:https://blog.csdn.net/yalecaltech/article/details/80637735 
版权声明:本文为博主原创文章,转载请附上博文链接!
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值