【ADXL357Z高精度3轴加速度传感器模块】LabVIEW 数据采集
本文介绍了 DigiKey 和 EEWorld 共同举办的 你晒单我买单 活动的所选物料 —— ADXL357Z 高精度 3 轴加速度传感器模块 通过 Arduino Library 库函数调用,实现三轴加速度数据的精确获取,并生成实时动态演化曲线,进一步通过 LabVIEW 上位机采集加速度数据的项目设计。
LabVIEW 数据采集
在实现 Arduino 库函数使用并实现串口数据获取的基础上,进一步结合 LabVIEW 上位机以及中断功能,实现三轴加速度数据的采集、演化曲线、数据保存等。
流程图
Arduino 代码执行流程
代码
新建 Arduino 工程,并添加如下代码
#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;
// Command detection variables
enum CommandState {
WAIT_FOR_55,
WAIT_FOR_AA,
WAIT_FOR_CMD
};
CommandState cmdState = WAIT_FOR_55;
bool sendData = false;
char axisToSend = ' '; // 'X', 'Y', or 'Z'
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);
}
for (int i = 0; i < 3; i++) {
cali_data[i] = deal_cali_buf(cali_buf[i]);
}
x = (((cali_data[2] - cali_data[0]) + (cali_data[2] - cali_data[1])) / 2);
factory = 1.0 / (float)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!");
adxl357b.setAdxlRange(FOURTY_G);
adxl357b.setPowerCtr(0);
delay(100);
adxl357b.readTemperature(t);
SERIAL.print("Uncalibration temp = ");
SERIAL.println(t);
calibration();
adxl357b.setActThreshold(0.5, factory);
adxl357b.setIntPinMap(0x08);
adxl357b.setActEnable(false, false, true);
}
void loop(void) {
// Check for incoming serial data
while (SERIAL.available() > 0) {
uint8_t incomingByte = SERIAL.read();
switch (cmdState) {
case WAIT_FOR_55:
if (incomingByte == 0x55) {
cmdState = WAIT_FOR_AA;
}
break;
case WAIT_FOR_AA:
if (incomingByte == 0xAA) {
cmdState = WAIT_FOR_CMD;
} else {
cmdState = WAIT_FOR_55;
}
break;
case WAIT_FOR_CMD:
if (incomingByte == 0x10) {
axisToSend = 'X';
sendData = true;
} else if (incomingByte == 0x11) {
axisToSend = 'Y';
sendData = true;
} else if (incomingByte == 0xFF) {
axisToSend = 'Z';
sendData = true;
}
cmdState = WAIT_FOR_55;
break;
}
}
if (sendData) {
int32_t x, y, z;
if (adxl357b.checkDataReady()) {
if (adxl357b.readXYZAxisResultData(x, y, z)) {
SERIAL.println("Get data failed!");
} else {
switch (axisToSend) {
case 'X':
SERIAL.println(x * factory, 6);
break;
case 'Y':
SERIAL.println(y * factory, 6);
break;
case 'Z':
SERIAL.println(z * factory, 6);
break;
}
}
}
sendData = false;
}
delay(10); // Small delay to prevent CPU overload
}
保存代码,编译和上传至开发板,复位运行程序。
串口测试
- 打开串口调试助手,配置串口参数,连接目标设备,打开串口;
- 水平放置传感器模块,待提示校准完成;
- 以十六进制发送
55 AA 10、55 AA 11和55 AA FF分别获取 X、Y、Z 轴的加速度数据。

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