【ADXL357Z高精度3轴加速度传感器模块】数据采集与 OLED 显示

【ADXL357Z高精度3轴加速度传感器模块】数据采集与 OLED 显示

本文介绍了 DigiKey 购物平台所售 ADXL357Z 高精度三轴加速度传感器通过 MicroPython 编程实现传感器驱动与数据读取,并进一步实现 OLED 屏幕显示的项目设计。

项目介绍

这里进一步实现了 ADXL357Z 传感器模块采集 XYZ 数据的 OLED 显示。

硬件连接

复用 IIC 引脚,实现 OLED 和 ADXL357Z 传感器的驱动。

流程图

代码

添加 OLED 驱动和显示函数

'''
Name: OLED display ADXL357Z Sensor Data 
Version: v1.0
Date: 2025.06
Author: ljl
Other: I2C bus drive ADXL357Z sensor and OLED display XYZ-axis acceleration and print them on shell.
'''
from machine import Pin, I2C
import time
from ssd1306 import SSD1306_I2C

# 初始化 I2C
i2c = I2C(0, scl=Pin(5), sda=Pin(4))
ADXL357_ADDR = 0x1D  # ADXL357Z 传感器地址
OLED_ADDR = 0x3C     # OLED 地址

# 初始化 OLED
oled_width = 128
oled_height = 64
oled = SSD1306_I2C(oled_width, oled_height, i2c, addr=OLED_ADDR)

# 写入寄存器
def write_reg(reg, value):
    i2c.writeto_mem(ADXL357_ADDR, reg, bytes([value]))

# 读取寄存器
def read_reg(reg):
    return i2c.readfrom_mem(ADXL357_ADDR, reg, 1)[0]

# 初始化传感器
def init_adxl357():
    # 启用测量模式
    write_reg(0x2D, 0x08)  # POWER_CTL = 0x08 (Measure mode)
    # 设置量程 ±10g,全分辨率
    write_reg(0x31, 0x03)  # DATA_FORMAT = 0x03
    # 设置带宽 100Hz
    write_reg(0x2C, 0x0A)  # BW_RATE = 0x0A

# 读取加速度数据(带符号转换)
def read_accel():
    data = i2c.readfrom_mem(ADXL357_ADDR, 0x08, 6)  # 读取 6 字节
    def to_signed16(v):
        return (v & 0x7FFF) - (v & 0x8000)
    x = to_signed16(data[1] << 8 | data[0]) * 0.00025  # ±10g 灵敏度
    y = to_signed16(data[3] << 8 | data[2]) * 0.00025
    z = to_signed16(data[5] << 8 | data[4]) * 0.00025
    return x, y, z

# 校准零点偏移
def calibrate_zero_offset():
    x_sum, y_sum, z_sum = 0, 0, 0
    samples = 10
    print("校准中...请保持传感器静止")
    for _ in range(samples):
        x, y, z = read_accel()
        x_sum += x
        y_sum += y
        z_sum += z
        time.sleep(0.1)
    offset_x = -x_sum / samples
    offset_y = -y_sum / samples
    offset_z = 1.0 - (z_sum / samples)  # Z轴理论静止值=1g
    return offset_x, offset_y, offset_z

# OLED 显示函数
def display(x_cal,y_cal,z_cal): # voltage and temperature
    oled.fill(0)# 清空OLED屏幕
    oled.text("ADXL357Z Data:", 0, 0) # 显示标题
    # 显示三轴加速度
    oled.text('X: ' + '{:.2f}g'.format(x_cal), 0, 20)
    oled.text('Y: ' + '{:.2f}g'.format(y_cal), 0, 35)
    oled.text('Z: ' + '{:.2f}g'.format(z_cal), 0, 50)
    oled.rotate(0) # 旋转屏幕
    oled.show() # 更新屏幕

# 主程序
print("I2C设备地址:", [hex(addr) for addr in i2c.scan()])
init_adxl357()

# 校准零点
offset_x, offset_y, offset_z = calibrate_zero_offset()
print(f"零点偏移: X={offset_x:.4f}g, Y={offset_y:.4f}g, Z={offset_z:.4f}g")

# 主循环
while True:
    x, y, z = read_accel() # 原始数据读取
    x_cal = x + offset_x # 校准零点偏移
    y_cal = y + offset_y
    z_cal = z + offset_z
    display(x_cal,y_cal,z_cal) # OLED 显示
    print(f"X: {x_cal:.4f}g, Y: {y_cal:.4f}g, Z: {z_cal:.4f}g") # 终端打印
    time.sleep(0.2) # 延时

保存并运行代码。

效果

OLED 显示实时三轴加速度数据

同时终端打印 XYZ 三轴加速度数值。

总结

本文介绍了 DigiKey 购物平台所售 ADXL357Z 高精度三轴加速度传感器的开箱、产品介绍、工程测试等,通过MicroPython编程实现传感器驱动与数据读取,并进一步实现 OLED 屏幕显示,为后续开发和探索奠定基础,也为相关精密设备研发和高精度传感器的应用提供了参考。