💡 划重点

  • > 本项目在 75 元预算内,利用 XIAO ESP32-S3 与 MPU6050 惯性测量单元,打造一款可以贴附在背带或内衣上的微型坐姿矫正器。设备实时检测脊柱前倾与侧弯角度,一旦超出健康阈值,立刻通过贴合皮肤的超薄震动马达发出无声提醒。全部组件使用锂电供电、USB-C 充电,无屏无声,靠震动完成行为闭环,适合长时间静坐的学生与白领。

需求洞察

目标用户

真实痛点

腰椎、颈椎问题多见于 20-35 岁人群,核心病因不是“不会坐”,而是“忘记要坐好”。市面智能矫正器多依赖手机 APP 或声音提醒,干扰大、私密性差,且价格通常超过 200 元。物理背带束缚感强,夏天闷热,坚持率极低。

为什么值得做

低价、隐蔽、即刻反馈是改变行为的关键。通过 ESP32-S3 强大的低功耗与运算能力,结合 MPU6050 三轴加速度与陀螺仪,可以在本地完成姿态解算,无需手机参与。微型震动马达直接作用于皮肤,只有佩戴者能察觉到提醒,不打扰旁人,成本可控在 75 元内。

方案设计

整体架构分为感知层、控制层、执行层与日志/联网层。

感知层

控制层

执行层

日志/联网层(可选,用于进阶功能)

物料清单

序号 物料名称 数量 用途 估算单价(元)
1 XIAO ESP32-S3 开发板 1 主控与电源管理 25
2 MPU6050 模块(GY-521) 1 姿态检测 8
3 微型扁平震动马达(10×2.7 mm) 1 无声提醒 5
4 150 mAh 锂聚合物电池(带保护板) 1 供电 12
5 USB-C 充电转接板(或直接利用 XIAO USB) 1 充电接口 0(板载)
6 N-MOS 管(SI2302 或 2N7002) + 10kΩ 电阻 1 震动驱动 2
7 弹性织带背带 / 魔术贴固定带 1 结构载体 10
8 细硅胶导线、焊锡、绝缘胶布 若干 电气连接 5
9 3D 打印外壳或柔性贴片基座 1 固定电子部件 8
合计 75

所有物料合计约 75 元,可通过批量采购进一步压低价格。

接线与结构

依据给定 GPIO,建议接线如下,并在理由中说明微调:

微调理由:以上已严格遵循 GPIO5/6 和 GPIO7,未做改动。唯一补充说明 XIAO 的 USB-C 直接充电,省去独立充电模块,符合成本限制。

核心代码

以下为基于 Arduino IDE 的 PlatformIO 骨架,使用 XIAO ESP32-S3 和 MPU6050 库。代码完成姿态读取、简单倾角计算与震动反馈。


#include <Wire.h>
#include <MPU6050_tockn.h>

MPU6050 mpu(Wire);
const int motorPin = 7;

// 阈值(度)
const float PITCH_THRESHOLD = 15.0;  // 前倾
const float ROLL_THRESHOLD = 10.0;   // 侧弯
bool isWarning = false;

unsigned long lastVibrate = 0;
const unsigned long vibrateInterval = 200; // 震动 200ms 开启

void setup() {
  Serial.begin(115200);
  pinMode(motorPin, OUTPUT);
  digitalWrite(motorPin, LOW);

  Wire.begin(5, 6);  // SDA=5, SCL=6
  mpu.begin();
  // mpu.calcGyroOffsets(true); // 首次需静态校准,写入后可注释
  Serial.println("MPU6050 OK");
}

void loop() {
  mpu.update();

  float pitch = mpu.getAngleX(); // 假设 X 轴对应俯仰
  float roll  = mpu.getAngleY(); // Y 轴对应横滚

  if (abs(pitch) > PITCH_THRESHOLD || abs(roll) > ROLL_THRESHOLD) {
    isWarning = true;
  } else {
    isWarning = false;
    digitalWrite(motorPin, LOW);
  }

  if (isWarning) {
    // 间歇震动
    unsigned long now = millis();
    if (now - lastVibrate < vibrateInterval) {
      digitalWrite(motorPin, HIGH);
    } else if (now - lastVibrate < 2000) {
      digitalWrite(motorPin, LOW);
    } else {
      lastVibrate = now; // 重新计时
    }
  }

  delay(20);
}
说明MPU6050_tockn 库使用内置 DMP 或互补滤波输出角度,直接调用 getAngleX/Y。实际安装时需根据模块粘贴方向重新映射俯仰与横滚轴。初始校准可在第一次上电时读取静止角度作为零点偏移。

调试步骤

  1. 固件烧录与静态校准:将代码上传至 XIAO ESP32-S3,打开串口监视器(115200 波特率)。保持 MPU6050 绝对静止,运行 mpu.calcGyroOffsets(true) 一次,校准成功后注释掉该行,避免重复覆盖零点。
  2. 角度映射验证:手持模块模拟前倾(俯仰角变大)、侧弯(横滚角变大),观察串口打印的 pitch 和 roll 值是否与物理动作一致。若方向相反,交换 getAngleXgetAngleY 或在安装时翻转模块。
  3. 震动阈值匹配:佩戴背带,坐成标准姿势,记录 pitch 和 roll 读数作为偏移基准。在代码中减去该基准,使标准坐姿角度接近 0。然后故意驼背、侧歪,观察震动触发是否正确。用 PITCH_THRESHOLD 微调敏感度。
  4. 功耗评估:串联万用表测量整机工作电流(约 15~25 mA),确认 150 mAh 电池可连续工作 5-6 小时。若需延长续航,可在 loop 中插入 esp_light_sleep_start() 定时唤醒。
  5. 结构可靠性测试:连续佩戴 1 小时,检查线缆是否松动,震动是否脱落,并用热熔胶进行二次固定。

设计图

矫正坐姿背带贴片结构flow
1
感知输入
2
控制处理
3
执行反馈
4
数据上报