欢迎光临
我们一直在努力

三轴加速度模块ADXL345 示例教程 适用于Arduino平台

1. 产品图片

2. 产品购买地址点我购买

3. 产品概述
ADXL345 数字三轴加速度计是一款小而薄的超低功耗3轴加速度计,分辨率高达(13位),测量范围达± 16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。该器件提供多种特殊检测功能。活动和非活动检测功能通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。敲击检测功能可以检测任意方向的单振和双振动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以独立映射到两个中断输出引脚中的一个。正在申请专利的集成式存储器管理系统采用一个32级先进先出(FIFO)缓冲器,可用于存储数据,从而将主机处理器负荷降至最低,并降低整体系统功耗。低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。

4. 产品参数
工作电压:3.3-5v
超低功耗:测量模式下40uA电流损耗,待机模式下0.1A&2.5V
通讯接口:I2C、SPI(3线or4线)
接口类型:0.1″插针孔

5. 接口定义
VCC:电源引脚(接uno的3V3)
GND:该引脚必须接地(接uno的GND)
CS:片选端,低电平有效(接uno的3V3)
INT1:中断1输出(不接)
INT2:中断2输出(不接)
SDO:备用I2C地址选择(接uno的GND)
SDA:I2C接口数据端(接uno的A4、mega接A20)
SCL:I2C接口时钟端(接uno的A5、mega接A21)

6. 示例程序

//中贝斯特UltiRobot三轴轴模块示例教程
//程序效果:打开串口监视窗口,可以看到类似下图的数据,分别为:三轴加速度的数据,按各轴旋转可以观测到相应的x,y,z数据变化。
//淘宝店地址:zhongbest.taobao.com
//专业Arduino资料网站:www.arduino365.com

#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);
   //串口输出
}

7. 扩展阅读
什么叫姿态角:点我转到第三方博客阅读

8. 相关下载
百度网盘:点我下载

未经允许不得转载:Arduino-Maker » 三轴加速度模块ADXL345 示例教程 适用于Arduino平台

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 2

评论前必须登录!

 

  1. #1

    请问使用示例程序后窗口数值没有变化怎么调试呢

    shan_19962年前 (2017-10-30)

线上商城

中贝斯特创客空间蘑菇云创客教育