【ADXL357Z高精度3轴加速度传感器模块】库函数的使用

【ADXL357Z高精度3轴加速度传感器模块】库函数的使用

本文介绍了 DigiKey 和 EEWorld 共同举办的 你晒单我买单 活动的所选物料 —— ADXL357Z 高精度 3 轴加速度传感器模块 通过 Arduino Library 库函数调用,实现三轴加速度数据的精确获取,并生成实时动态演化曲线,进一步通过 LabVIEW 上位机采集加速度数据的项目设计。

准备工作

克隆库函数或直接下载压缩包文件。

打开 Arduino IDE 软件,点击 Sketch - Include Library - Add .ZIP Library ...

加载下载的 Seeed_ADXL357B 库函数压缩包;

添加完成后,在 File - Examples - Seeed_adxl357b 选项下,加载例程 basic_demo

硬件连接

采用 IIC 通信方式与 Arduino Nano 开发板(主控ATmega328P)连接

ADXL357 Arduino Nano
SCL (P2 - 2) SCL (A5)
SDA (P2 - 6) SDA (A4)
VSS (P1 - 5) GND
VDD (P1 - 3) 3V3

示意图

工程代码

这里对例程 basic_demo 代码的串口打印部分进行一些调整,便于绘制动态演化曲线

#include "Seeed_adxl357b.h"

#define CALI_BUF_LEN           15
#define CALI_INTERVAL_TIME     250
int32_t cali_buf[3][CALI_BUF_LEN];
int32_t cali_data[3];

float factory;

Adxl357b  adxl357b;

int32_t deal_cali_buf(int32_t* buf) {
    int32_t cali_val = 0;

    for (int i = 0; i < CALI_BUF_LEN; i++) {
        cali_val += buf[i];
    }
    cali_val = cali_val / CALI_BUF_LEN;
    return (int32_t)cali_val;
}

void calibration(void) {
    int32_t x;
    SERIAL.println("Please Place the module horizontally!");
    delay(1000);
    SERIAL.println("Start calibration........");

    for (int i = 0; i < CALI_BUF_LEN; i++) {
        if (adxl357b.checkDataReady()) {
            if (adxl357b.readXYZAxisResultData(cali_buf[0][i], cali_buf[1][i], cali_buf[2][i])) {
            }
        }
        delay(CALI_INTERVAL_TIME);
        // SERIAL.print('.');
    }
    // SERIAL.println('.');
    for (int i = 0; i < 3; i++) {
        cali_data[i] =  deal_cali_buf(cali_buf[i]);
        SERIAL.println(cali_data[i]);
    }
    x = (((cali_data[2] - cali_data[0]) + (cali_data[2] - cali_data[1])) / 2);
    factory = 1.0 / (float)x;
    // SERIAL.println(x);
    SERIAL.println("Calibration OK!!");
}

void setup(void) {
    uint8_t value = 0;
    float t;

    SERIAL.begin(115200);
    if (adxl357b.begin()) {
        SERIAL.println("Can't detect ADXL357B device .");
        while (1);
    }
    SERIAL.println("Init OK!");
    /*Set full scale range to ±40g*/
    adxl357b.setAdxlRange(FOURTY_G);
    /*Switch standby mode to measurement mode.*/
    adxl357b.setPowerCtr(0);
    delay(100);
    /*Read Uncalibration temperature.*/
    adxl357b.readTemperature(t);

    SERIAL.print("Uncalibration  temp = ");
    SERIAL.println(t);
    /**/
    calibration();

}

void loop(void) {
    int32_t x, y, z;
    uint8_t entry = 0;
    if (adxl357b.checkDataReady()) {
        if (adxl357b.readXYZAxisResultData(x, y, z)) {
            SERIAL.println("Get data failed!");
        }

        SERIAL.print(x * factory); // X axis accelaration
        SERIAL.print(' ');
        SERIAL.print(y * factory); // Y axis accelaration
        SERIAL.print(' ');
        SERIAL.print(z * factory); // Z axis accelaration
        SERIAL.println(' ');
    }
    delay(100);
}

保存代码,上传至开发板,打开串口监视器和串口绘图工具。

效果演示

打开串口监视器,并配置波特率为 115200 bps,此时输出校准后的三轴加速度数据

打开串口监视器和串口绘图工具,可见 XYZ 三轴加速度演化曲线

plot_XYZ_data

倾斜 ADXL357Z 加速度传感器模块,XYZ 三轴数据随之发生明显变化。

acquire_XYZ_data

总结

本文介绍了 DigiKey 和 EEWorld 共同举办的 你晒单我买单 活动的所选物料 —— ADXL357Z 高精度 3 轴加速度传感器模块 通过 Arduino Library 库函数调用,实现三轴加速度数据的精确获取,并生成实时动态演化曲线的项目设计,为相关精密设备研发和高精度传感器的应用提供了参考。