SKU:RB-02S110 ADXL345 三轴加速度传感器

来自ALSROBOT WiKi
2018年10月16日 (二) 17:00Arduino77讨论 | 贡献的版本

跳转至: 导航搜索
02S11001.png

目录

产品概述

Arduino ADXL345 三轴加速度传感器采用 ADXL345 芯片,此芯片应用 MEMS 技术,具有 SPI 和 IIC 数字输出功能,芯片小巧轻薄,功耗低,量程可变,分辨率高。外形尺寸仅为3mm×5mm×1mm,面大小相当于小拇指指甲盖的1/3;在典型电压 Vs=2.5V 时功耗电流约为 25~130μA,比先期采用模拟输出的产品 ADXL330 功耗典型值低了约70~175 μA;最大量程可达±16g,另可选择±2、±4、±8g 量程,可采用固定的4mg/LSB 分辨率模式,该分辨率可测得 0.25°的倾角变化。ADXL345 非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。该器件提供多种特殊检测功能,活动和非活动检测功能。通过比较任意轴上的加速度与用户设置的阈值来检测有无运动发生。敲击检测功能可以检测任意方向的单振和双振动作。自由落体检测功能可以检测器件是否正在掉落。这些功能可以独立映射到两个中断输出引脚中的一个。

产品参数

  1. 产品名称:ADXL345 加速度模块
  2. 产品货号:RB - 02S110
  3. 工作电压:3V - 5V
  4. 接口类型:IIC 接口
  5. 输出信号:数字信号
  6. 产品尺寸:30 mm * 25 mm
  7. 固定孔间距:23 mm * 18 mm
  8. 固定孔尺寸:M3
  9. 重量大小:4g
  10. 引脚定义 :
  • -:电源地
  • +:电源正极
  • SDA:IIC接口时钟端
  • SCL:IIC接口数据端


  • 产品尺寸图:
Size024.jpg

使用方法

基本使用

  • 实验目的

使用 ADXL345 模块测试三个轴的偏移量,通过 Arduino IDE 的串口监视器将数据打印显示出来

  • 实验硬件

1、Carduino UNO R3 控制器 * 1
2、传感器扩展板 V5.0 * 1
3、4P 传感器连接线 * 1
4、USB 数据线 * 1

  • 软件环境:Arduino IDE 1.7.10
  • 硬件连接
02S11002.png
  • 例子程序
#include <Wire.h>  //调用arduino自带的I2C库
#define Register_ID 0     //器件ID
#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

int ADXAddress = 0xA7>>1;  //转换为7位地址
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;

void setup()
{
  Serial.begin(9600); //设置通信波特率
  Wire.begin();  //初始化I2C
  Wire.beginTransmission(ADXAddress);//发送芯片地址
  Wire.write(Register_2D);//特性控制
  Wire.write(8);//关闭休眠模式
  Wire.endTransmission();//结束发送
}
void loop()
{
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_X0);//请求X0数据
  Wire.write(Register_X1);//请求X1数据
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2);//发送请求
  if(Wire.available()<=2);
  {
    X0 = Wire.read();//收到X0数据
    X1 = Wire.read();//收到X1数据
    X1 = X1<<8;
    X_out = X0+X1;
  }
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_Y0);
  Wire.write(Register_Y1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2);
  if(Wire.available()<=2);
  {
    Y0 = Wire.read();
    Y1 = Wire.read();
    Y1 = Y1<<8;
    Y_out = Y0+Y1;
  }
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register_Z0);
  Wire.write(Register_Z1);
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2);
  if(Wire.available()<=2);
  {
    Z0 = Wire.read();
    Z1 = Wire.read();
    Z1 = Z1<<8;
    Z_out = Z0+Z1;
  }
  Xg = X_out/256.00;//把输出结果转换为重力加速度g,精确到小数点后2位。
  Yg = Y_out/256.00;
  Zg = Z_out/256.00;
  Serial.print(" X = ");
  Serial.print(Xg); 
  Serial.print(" Y = ");
  Serial.print(Yg); 
  Serial.print(" Z = ");
  Serial.println(Zg); 
  delay(300);  //刷新频率0.3秒
  
}
  • 实验效果
02S11003.png

配合使用

  • 实验目的

将 ADXL345 测量输出值转换成角度值,并在显示在 12864 液晶扩展板

  • 实验硬件

1、Carduino UNO R3 控制器 * 1
2、12864 液晶扩展板 * 1
3、杜邦线 * 4
4、USB 数据线 * 1

  • 软件环境:Arduino IDE 1.7.10
  • 硬件连接
02S11005.png
  • 例子程序
#include "U8glib.h"
#include <Wire.h>  //调用arduino自带的I2C库

#define Register_ID 0     //器件ID
#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

int ADXAddress = 0xA7>>1;  //转换为7位地址
int X0,X1,X_out;
int Y0,Y1,Y_out;
int valx,valy;

U8GLIB_MINI12864 u8g(5, 6, 2, 4, 3); 

void draw() 
{
  u8g.setFont(u8g_font_unifont);   
  
  u8g.drawStr( 0,11,"x_angle:");
  u8g.setPrintPos(70,11);
  u8g.print(valx);
  
  u8g.drawStr( 0,36,"y_angle:");
  u8g.setPrintPos(70,36);
  u8g.print(valy); 
  
  u8g.drawStr( 3, 63,"www.alsrobot.cn" );
  }
  
int Readx()
{
 Wire.beginTransmission(ADXAddress);
  Wire.write(Register_X0);//请求X0数据
  Wire.write(Register_X1);//请求X1数据
  Wire.endTransmission();
  Wire.requestFrom(ADXAddress,2);//发送请求
  if(Wire.available()<=2);
  {
    X0 = Wire.read();//收到X0数据
    X1 = Wire.read();//收到X1数据
    X1 = X1<<8;
    X_out = X0+X1;
  }
  valx = map(X_out,-256,256,-90,90);
  return valx;
}
  
  int Ready()
  {
   Wire.beginTransmission(ADXAddress);
   Wire.write(Register_Y0);
   Wire.write(Register_Y1);
   Wire.endTransmission();
   Wire.requestFrom(ADXAddress,2);
   if(Wire.available()<=2);
  {
    Y0 = Wire.read();
    Y1 = Wire.read();
    Y1 = Y1<<8;
    Y_out = Y0+Y1;
  }
  valy = map(Y_out,-256,256,-90,90);
  return valy;
  }
void setup() {
  Serial.begin(9600); //设置通信波特率
  Wire.begin();  //初始化I2C
  Wire.beginTransmission(ADXAddress);//发送芯片地址
  Wire.write(Register_2D);//特性控制
  Wire.write(8);//关闭休眠模式
  Wire.endTransmission();//结束发送
}
 
void loop() { 
  valy = Ready();
  valx = Readx();
    u8g.firstPage();
  do  {
    draw();
  } 
  while( u8g.nextPage() );
  delay(200);
}
  • 实验效果

如图所示在 LCD12864 液晶扩展板上会显示出当前在X轴方向和Y轴方向的倾斜角度值

02S11004.png

资料下载

Erweima.png
  • 产品资料

下载链接:https://pan.baidu.com/s/1q-6q2YwmVgNG2sJw_H-gIQ 提取码:x5qs