Arduino I2C + 三轴加速度计ADXL345
ADXL345是ADI公司生产的三轴数字加速度计芯片,与ST的LIS3DH功能接近。主要特性有:
- 工作电压:2.0 ~ 3.6V
- 功耗:待机功耗0.1μA;工作时与数据输出频率(ODR)有关,如ODR<10 Hz时30μA
- 接口:I2C;三线/四线制SPI
- 分辨率:可选择,最大13-bit
- 内置FIFO
- single tap/double tap检测
- 自由落体检测
- 两个可编程中断输出脚
- 封装:3 x 5 x 1 mm LGA
管脚定义


与Arduino的连接
用工作于3.3V/8MHz版本的Arduino Pro Mini进行调试。管脚定义、连接方法与调试LIS3DH时类似。采用I2C接口进行通讯,未利用FIFO和INT1、INT2中断引脚。

ADXL345 Pro Mini (3.3V)
VDD <------> 3.3V
GND <------> GND
SCL <------> A5 (SCL)
SDA <------> A4 (SDA)
功能调试
1. 操作方法亦和LIS3DH类似。但ADXL345似乎没有与LIS3DH的STATUS_REG寄存器,而是设定DATA_READY中断,然后利用INT_SOURCE寄存器判断是否有中断事件发生,从而判断是否有新的测量值。
2. 留意设置的ODR频率不要超出I2C总线的数据读取速率。如Arduino的I2C总线时钟频率为100kHz,则可设置的最大ODR为200Hz。
测试代码
/*
Measurement of acceleration values using motion sensor ADXL345
*/
#include <Wire.h> #define ADDRESS_ADXL345 0x53
#define DATA_FORMAT 0x31
#define BW_RATE 0x2C
#define POWER_CTL 0x2D
#define INT_ENABLE 0x2E
#define INT_SOURCE 0x30
#define DATAX0 0x32 byte buffer[];
byte intSource; boolean ready = false; int outX, outY, outZ;
float xVal, yVal, zVal; void setup()
{
Wire.begin();
Serial.begin(); delay(); // set scale = +/- 2g, 13-bit mode
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(DATA_FORMAT);
Wire.write(0x08);
Wire.endTransmission();
// set ODR = 1.56 Hz
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(BW_RATE);
Wire.write(0x04);
Wire.endTransmission(); // start measurement
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(POWER_CTL);
Wire.write(0x08);
Wire.endTransmission(); // enable DATA_READY interrupt
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(INT_ENABLE);
Wire.write(0x80);
Wire.endTransmission();
} void loop()
{
// check data ready
while(ready == false)
{
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(INT_SOURCE);
Wire.endTransmission();
Wire.requestFrom(ADDRESS_ADXL345, );
if (Wire.available() >= )
{
intSource = Wire.read();
}
if (bitRead(intSource, ) == ) //new data available
{
ready = true;
}
}
if (bitRead(intSource, ) == )
{
Serial.println("Some data have been overwritten.");
} //read the result
Wire.beginTransmission(ADDRESS_ADXL345);
Wire.write(DATAX0); //read multiple bytes
Wire.endTransmission();
Wire.requestFrom(ADDRESS_ADXL345, );
if (Wire.available() >= )
{
for (int i = ; i < ; i++)
{
buffer[i] = Wire.read();
}
} //calculation
outX = (buffer[] << ) | buffer[];
outY = (buffer[] << ) | buffer[];
outZ = (buffer[] << ) | buffer[];
xVal = outX *3.9;
yVal = outY *3.9;
zVal = outZ *3.9; Serial.print("outX: "); Serial.print(xVal); Serial.print(" ");
Serial.print("outY: "); Serial.print(yVal); Serial.print(" ");
Serial.print("outZ: "); Serial.println(zVal); ready = false;
}
ODR设定为1.56Hz,通过串口打印三个维度的加速度值,单位为mg。

参考资料
Arduino I2C + 三轴加速度计ADXL345的更多相关文章
- Arduino I2C + 三轴加速度计LIS3DH
LIS3DH是ST公司生产的MEMS三轴加速度计芯片,实现运动传感的功能.主要特性有: 宽工作电压范围:1.71 ~ 3.6V 功耗:低功耗模式2μA:正常工作模式.ODR = 50Hz时功耗11μA ...
- [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标
看TI的官网资料:http://www.st.com/web/en/catalog/sense_power/FM89/SC444/PF250725 一.初次接触关注的信息: 1.1.概述中的关键信息 ...
- LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)
1. LIS3DH管脚定义 PS:LIS3DH和mpu6050的X和Y方向是相反的, mpu6050如下图所示: 2.LIS3DH加速度计介绍 由于LIS3DH只可以得到XYZ加速度,无法获取角速度, ...
- 【雕爷学编程】Arduino动手做(48)---三轴ADXL345模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 三轴陀螺仪与加速度计如何辅助 iPhone 定位的
在所有之前解释一下陀螺仪 根据Wiki的定义:「陀螺仪是用于测量角度或维持方向的设备,基于角动量守恒原理.」 这句话的要点是测量角度或维持方向,这是 iPhone 4 为何搭载此类设备的原因.机械陀螺 ...
- 开源三轴云台EVVGC(simple BGC)分析
一. 主程序分析 主程序结构清晰,流程如图所示,下面将对每个部分做详细分析 二. 系统初始化 系统初始化部分的流程如上图所示,下面对每部分做具体分析 1. 时钟初始化 该部分主要是使能DWT,用DWT ...
- 单片机实验: 三轴磁场模块 GY-271
最近买了一块三轴磁场模块进行实验 名称:HMC5883L模块(三轴磁场模块) 型号:GY-271 使用芯片:HMC5883L 供电电源:3-5v 通信方式:IIC通信协议 测量范围:±1.3-8 高斯 ...
随机推荐
- 机器学习,数据挖掘,统计学,云计算,众包(crowdsourcing),人工智能,降维(Dimension reduction)
机器学习 Machine Learning:提供数据分析的能力,机器学习是大数据时代必不可少的核心技术,道理很简单:收集.存储.传输.管理大数据的目的,是为了“利用”大数据,而如果没有机器学习技术分析 ...
- Subversion Self Signed Certificates
When connecting to Subversion repositories using SSL connections the SVN client checks the server ce ...
- Unity 输入与控制
1. 鼠标输入 有关的方法和变量如下: 在 Unity 中,鼠标位置用屏幕的像素坐标表示,屏幕左下角为(0,0),右上角为(Screen.width,Screen.height). 2. 键盘操作 有 ...
- proxmox 安装ROS 备忘
虚拟机设置:使用qemu64 CPU和vrtio网卡在家里测试性能最好.
- Linux实战教学笔记42:squid代理与缓存实践(一)
第1章 Squid介绍 1.1 缓存服务器介绍 缓存服务器(英文意思cache server),即用来存储(介质为内存及硬盘)用户访问的网页,图片,文件等等信息的专用服务器.这种服务器不仅可以使用户可 ...
- GC类
[GC类] GC是一个静态类. 垃圾回收器跟踪并回收托管内存中分配的对象.垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存.当使用可用内存不能满足内存请求时,垃圾回收会自动进行.或者,应 ...
- R包安装失败failed to download mirrors file
在R console中使用install.packages()来安装第三方包时,会出现这样的错误: 即使我们选择的是China的镜像也解决不了问题. 这时候,可以先试试用IE打开上图中黑底部分的URL ...
- spring bean单例注入与用单例模式通过class.getinstance()区别?
1.action的某个方法中,用以下代码获得redis单例实例 RedisDelegate redisDelegate = RedisDelegate.getInstance(); redisDele ...
- 什么是响应式编程——响应式Spring的道法术器
响应式编程之道 1.1 什么是响应式编程? 在开始讨论响应式编程(Reactive Programming)之前,先来看一个我们经常使用的一款堪称“响应式典范”的强大的生产力工具——电子表格. 举个简 ...
- EntityFramework 学习资料
1.EF框架step by step 2.Entity Framework Code First 学习日记 3.[译著]Code First :使用Entity. Framework编程 4.Enti ...