基于Arduino制作ADXL345三轴加速度检测仪 (ADXL345三轴倾斜度模块) 产品介绍 ADXL345是一款小巧纤薄的低功耗三轴加速度计,可以对高达±16g的加速度进行高分辨率(13位)测量,数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。 本模块非常适合移动设备应用,它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度,它具有高分辨率(4mg/LSB),能够测量约0.25°的倾角变化,使用ADXL345等数字输出加速度计时,无需进行模数转换,从而可以节省系统成本和电路板面积。该器件提供多种特殊检测功能,活动和非活动检测功能检测有无运动发生,以及任意轴上的加速度是否超过用户设置的限值,敲击检测功能可以检测单击和双击动作。自由落体检测功能可以检测器件是否正在掉落,这些功能可以映射到两个中断输出引脚中的一个,正在申请专利的32级先进先出(FIFO)缓冲器可用于存储数据,最大程度地减少主机处理器的干预,低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进行阈值感测和运动加速度测量。 产品参数 产品型号:GY-291 使用芯片:ADXL345 供电电源:3-5V 通信方式:IIC/SPI通信协议 测量范围:±2g、±16g
三轴,±2g/±4g/±8g/±16g数字加速度模块 工作原理 ADXL345是一款完整的3轴加速度测量系统,可选择的测量范围有±2 g,±4 g,±8 g或±16 g,既能测量运动或冲击导致的动态加速度,也能测量静止加速度,例如重力加速度,使得器件可作为倾斜传感器使用,该传感器为多晶硅表面微加工结构,置于晶圆顶部,由于应用加速度,多晶硅弹簧悬挂于晶圆表面的结构之上,提供力量阻力,差分电容由独立固定板和活动质量连接板组成,能对结构偏转进行测量,加速度使惯性质量偏转、差分电容失衡,从而传感器输出的幅度与加速度成正比,相敏解调用于确定加速度的幅度和极性。 (电路原理图) 一、ADXL345三轴倾斜度模块基础案例1结合Arduino uno 和 ADXL345三轴倾斜度模块,程序测试----串口打印读取X轴加速度的数值。接线方式 Arduino uno ADXL345三轴倾斜度模块 GND <------> GND 3V3/5V <------> VCC 3V3/5V
<------> CS GND <------> SD0 A4 <------> SDA A5 <------> SCL
Mixly 图形化编程程序 (图形化程序)1、将ADXL345三轴倾斜度模块在X轴方向上向左倾斜,串口打印读取数值 (串口数值显示)2、将ADXL345三轴倾斜度模块在X轴方向上向右倾斜,串口打印读取数值 (串口数值显示) 程序实现代码#include #include #include ADXL345 accel; void setup(){
Serial.begin(9600);
Wire.begin();
accel.initialize(); } void loop(){
Serial.println(accel.getAccelerationX()/256.0);
delay(1000);
} 二、ADXL345三轴倾斜度模块基础案例2
结合Arduino
uno 、ADXL345三轴倾斜度模块和LCD1602 液晶显示屏,实现改变三轴倾斜度模块的X、Y和Z轴的不同方向,在LCD1602 液晶显示屏进行显示。 (LCD1602 液晶显示屏正面)(LCD1602 液晶显示屏反面)LCD1602 液晶显示屏引脚说明
接线方式
Arduino uno ADXL345三轴倾斜度模块 GND <------> GND 3V3 <------> VCC 3V3/5V <------> CS GND <------> SD0 A4 <------> SDA A5 <------> SCL Arduino uno LCD1602 液晶显示屏 GND <------> GND 5V <------> VCC A2 <------> SDA
A3 <------> SCL Mixly 图形化编程程序 (图形化程序)
程序实现代码#include #include
#include #include #include volatile float X; volatile float Y; volatile float Z; LiquidCrystal_SoftI2C mylcd(0x27,16,2,A3,A2); ADXL345 accel; void setup(){
X = 0;
Y = 0;
Z = 0;
mylcd.init();
mylcd.backlight();
Wire.begin();
accel.initialize(); } void loop(){
X = accel.getAccelerationX()/256.0;
Y = accel.getAccelerationY()/256.0;
Z = accel.getAccelerationZ()/256.0;
mylcd.setCursor(0, 0);
mylcd.print(String(String("X:") + String(X)) +
String("g"));
mylcd.setCursor(0, 1);
mylcd.print(String(String(String("Y:") + String(Y)) +
String("g")) + String(String(String("Z:") + String(Z)) +
String("g")));
} 实验结果显示存在问题:在转动 ADXL345三轴倾斜度模块时,X和Z的显示有时会出现两个“g” 改进程序解决方案:当X、Y、Z轴的加速度值数值大于0时,对应显示在 LCD1602
液晶显示屏的”X:”、”Y:”、”Z:”加空格。 Mixly 图形化编程程序 (图形化程序)程序实现代码#include #include #include #include #include volatile float X; volatile float Y; volatile float Z; LiquidCrystal_SoftI2C
mylcd(0x27,16,2,A3,A2); ADXL345 accel; void setup(){
X = 0;
Y = 0;
Z = 0;
mylcd.init();
mylcd.backlight();
Wire.begin();
accel.initialize(); } void loop(){
X = accel.getAccelerationX()/256.0;
Y = accel.getAccelerationY()/256.0;
Z = accel.getAccelerationZ()/256.0;
if (X < 0) {
mylcd.setCursor(0, 0);
mylcd.print(String(String("X:") + String(X)) +
String("g"));
mylcd.setCursor(0, 1);
mylcd.print("");
} else {
mylcd.setCursor(0, 0);
mylcd.print(String(String("X: ") + String(X)) +
String("g"));
mylcd.setCursor(0, 1);
mylcd.print("");
}
if (Y < 0 && Z < 0) {
mylcd.setCursor(0, 0);
mylcd.print("");
mylcd.setCursor(0, 1);
mylcd.print(String(String(String("Y:") + String(Y)) +
String("g")) + String(String(String("Z:") + String(Z)) +
String("g")));
} else if (Y > 0 && Z < 0) {
mylcd.setCursor(0, 0);
mylcd.print("");
mylcd.setCursor(0, 1);
mylcd.print(String(String(String("Y: ") + String(Y)) +
String("g")) + String(String(String("Z:") + String(Z)) +
String("g")));
} else if (Y < 0 && Z > 0) {
mylcd.setCursor(0, 0);
mylcd.print("");
mylcd.setCursor(0, 1);
mylcd.print(String(String(String("Y:") + String(Y)) +
String("g")) + String(String(String("Z: ") + String(Z)) +
String("g")));
} else if (Y > 0 && Z > 0) {
mylcd.setCursor(0, 0);
mylcd.print("");
mylcd.setCursor(0, 1);
mylcd.print(String(String(String("Y: ") + String(Y)) +
String("g")) + String(String(String("Z: ") + String(Z)) +
String("g")));
}
} |