【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 屏幕显示,为后续开发和探索奠定基础,也为相关精密设备研发和高精度传感器的应用提供了参考。


