本篇文章将使用三轴加速度传感器和零知开发板在零知平台上进行加速度和单双击检测功能演示。通过本文的介绍让大家学会如何使用这款功能强大的三轴加速度传感器。
1、说明
MCU:零知开发板-标准板
传感器:ADXL345三轴加速度传感器
ADXL345 是 ADI 公司推出的基于 iMEMS 技术的 3 轴、数字输出加速度传感器
2、电路连接
接线很简单,只需要把模块的SCL、SDA引脚与零知标准板的I2C(A5、A4)引脚相连接即可,供电3.3V,其他引脚采用模块默认的连接。
连接好线路后,就打开使用我们的零知开发工具,找到对应代码上传代码到开发板即可。
3、核心代码如下:
- /*
- * ADXL345 三轴加速度传感器DEMO
- * powered by 零知实验室
- */
- #include "ADXL345.h"
-
- // 默认的I2C地址为0x53
-
- ADXL345 accel;
-
- int16_t ax, ay, az;//原始值
- float nx,ny,nz;//重力加速度
-
- #define LED_PIN LED_BUILtiN
- bool blinkState = false;
-
- //检测单击、双击动作参数设置
- void checkActivitySetup()
- {
- accel.setTapAxisXEnabled(false);//设置X轴方向敲击检测
- accel.setTapAxisYEnabled(false);//y轴方向检测
- accel.setTapAxisZEnabled(true);
-
- accel.setTapThreshold(40);//界限设置:40*0.0625 = 2.5g
- accel.setTapDuration(32);//持续时间:32*0.625ms = 20 ms
- accel.setDoubleTapLatency(80);//延迟:80*1.25ms = 100ms
- accel.setDoubleTapWindow(240);//窗口:240*1.25ms = 300ms
-
- }
-
- void checkActivity()
- {
- Activites act = accel.readActivites();
-
- if (act.isDoubleTap)
- {
- Serial.println("Double Tap Detected");
- } else if (act.isTap)
- {
- Serial.println("Tap Detected");
- }else
- {
- Serial.println("no activity");
- }
- }
-
- void setup() {
-
- Serial.begin(9600);
-
- // 初始化ADXL345
- Serial.println("Initializing I2C devices...");
- accel.initialize();
-
- // 检测是否连接ADXL345
- Serial.println("Testing device connections...");
- if(accel.testConnection()){
- Serial.println("ADXL345 connection successful");
- }else{
- Serial.println("ADXL345 connection failed");
- }
-
- // Set measurement range
- // +/- 2G: ADXL345_RANGE_2G
- // +/- 4G: ADXL345_RANGE_4G
- // +/- 8G: ADXL345_RANGE_8G
- // +/- 16G: ADXL345_RANGE_16G
- accel.setRange(ADXL345_RANGE_16G);
-
- checkActivitySetup();//开启单击、双击动作检测
-
- // 用LED指示数据读取
- pinMode(LED_PIN, OUTPUT);
- }
-
- void loop() {
- #if 0
- // 获取原始的X,Y,Z三轴的数据
- accel.getAcceleration(&ax, &ay, &az);
-
- // 显示 x/y/z 原始数值
- Serial.print("accel:t");
- Serial.print(ax); Serial.print("t");
- Serial.print(ay); Serial.print("t");
- Serial.println(az);
-
- #endif
- #if 1
- //获取重力转换后的加速度数值
- accel.readNormalize(&nx,&ny,&nz);
-
- //使用低通滤波进行处理,以去除尖峰的不准确结果
- float fx, fy, fz;
- //系数范围 0.1~0.9
- // accel.lowPassFilter(nx,ny,nz,&fx,&fy,&fz,0.5);
-
- Serial.print("gravity:t");
- Serial.print(nx); Serial.print("t");
- Serial.print(ny); Serial.print("t");
- Serial.println(nz);
- //
- // Serial.print("filter:t");
- // Serial.print(fx); Serial.print("t");
- // Serial.print(fy); Serial.print("t");
- // Serial.println(fz);
- #endif
- #if 1
- checkActivity();//单双击动作检测
- #endif
-
- // 闪烁LED
- blinkState = !blinkState;
- digitalWrite(LED_PIN, blinkState);
-
- delay(300);
- }
该应用代码包含了传感器三个轴向的加速度和单击、双击的检测功能。
完整代码工程可到零知实验室官网免费获取。
3、测试结果
更多详细资料可到零知实验室官网免费获取。