Files
Smart-Cane-Fall-Detection/资料/智能拐杖开发记录.md
2026-02-05 13:22:38 +08:00

6.6 KiB
Raw Blame History

原始需求----智能拐杖跌倒检测与定位报警系统设计

  • 研制出便携式智能拐杖原型机,具备跌倒自动报警、手动求助、定位追踪等核心功能,满足老人户外出行防护需求。研究内容如下:
  1. 基于三轴加速度传感器与陀螺仪融合算法,开发拐杖端跌倒状态检测模块,区分正常行走、静坐、跌倒等不同姿态。
  2. 利用 GPS 或北斗定位模块,实现老人位置信息实时采集;搭载 GSM 模块,设计跌倒触发后自动向监护人发送位置短信与报警信号的功能。
  3. 基于 STM32 单片机搭建主控系统,完成传感器数据采集、姿态算法运算、定位与通信模块的联动控制;增设手动紧急呼叫按键,满足主动求助需求。
  4. 设计低功耗供电电路,适配锂电池充放电管理,保障系统长时间续航。

需要有 STM32,定位模块GSM 模块(用于发短信),姿态传感器,电源管理,电池,紧急报警。 硬件功能就是检测他的行走坐卧还有跌倒,如果跌倒了就发短信给家人,短信内容要有定位。 我还要保证长时间的一个嗜好。 另外还有一个就是手动的报警,就是他没有跌倒,但是他按了报警的按钮也会发送报警的短信给他的家人。

产品与用户视角:功能是否“过度”?

这需要将技术模块转化为用户可感知的体验来评估: 功能模块 用户感知与价值 是否核心/可精简 跌倒自动报警 “摔倒了,能自动通知孩子” 绝对核心,不可精简 手动求助按键 “感觉不舒服,一键就能叫人” 核心安全冗余,不可精简 定位追踪 “发出报警时,能告诉孩子我在哪里” 报警的必要信息,不可精简。但“实时追踪”模式可能非必需。 长续航 “充一次电能用一个星期,不麻烦” 核心体验,不可精简 可能的“过度”功能 示例:心率监测、社交娱乐、复杂界面 需要警惕。这些会增加成本、复杂度和功耗,可能偏离“安全拐杖”的主线。

要使用 LIS3DHTR 加速度传感器来监测拐杖使用者是否跌倒(即检测“人拿着拐杖行走 → 突然跌倒”这一事件),需要从硬件电路配置和软件逻辑设计两方面入手。下面将结合 LIS3DHTR 的特性,给出完整、实用的方案。

一、核心思路:如何用加速度判断“跌倒”?

人在正常行走或坐着时,拐杖的加速度具有以下特征:

  • 行走:有周期性上下/前后振动(加速度幅值中等,频率 ~12 Hz
  • 静坐/静止:加速度 ≈ 1gZ 轴朝下),波动小
  • 跌倒瞬间:
    • 先经历 短暂失重3g撞击地面
    • 之后 长时间静止(接近 1g但方向可能异常

因此,可利用 LIS3DHTR 的两个关键功能:

  1. 自由落体检测Free-fall detection
  2. 活动/静止状态判断Inactivity detection

💡 组合逻辑:
“先检测到自由落体 + 随后长时间无运动” → 判定为跌倒

二、LIS3DHTR 硬件电路配置(针对拐杖应用)

  1. 供电与接口选择
  • 供电3.3V(必须!不可接 5V
  • 通信接口I²C 模式(节省引脚,适合低功耗 MCU
  • 封装处理:建议使用现成模块(如带稳压的 LIS3DH breakout避免手工焊 LGA 封装
  1. 关键引脚连接I²C 模式) LIS3DHTR 引脚 连接方式 说明 VDD, VDD_IO 3.3V 必须同时接

GND (所有) + 底部焊盘 GND 良好接地,降低噪声

CS 接 3.3V 启用 I²C 模式

SA0 接 GND I²C 地址 = 0x18

SCL MCU_I2C_SCL 加 4.7kΩ 上拉(若 MCU 无内部上拉)

SDA MCU_I2C_SDA 同上

INT1 MCU_GPIO中断输入 关键!用于唤醒 MCU

INT2 可悬空 本方案暂不用

🔋 电源建议:
拐杖内可用 1 节锂电3.7V+ LDO如 AMS1117-3.3 供电,或直接用 2 节 AA 电池3V

三、LIS3DHTR 寄存器配置(关键设置)

通过 I²C 写入以下寄存器(基于官方 datasheet

  1. 启用传感器 & 设置采样率 // CTRL_REG1 (0x20) // ODR = 100 Hz足够捕捉跌倒瞬态启用 XYZ 轴 writeRegister(0x20, 0b01010111); // 100 Hz, XYZ enable

  2. 设置量程为 ±16g // CTRL_REG4 (0x23) // FS = ±16g跌倒冲击可能 >5g需高量程 writeRegister(0x23, 0b00111000); // ±16g, high resolution

  3. 配置自由落体检测FF_WU_SRC // FF_WU_CFG (0x30) — 自由落体配置 writeRegister(0x30, 0b11000100); // AOI=1, 6D=0, ZHIE=1, ZLIE=1, YHIE=1, YLIE=1, XHIE=1, XLIE=1

// FF_WU_THS (0x32) — 阈值单位1/64 g // 设为 20/64 ≈ 0.31g(典型自由落体阈值) writeRegister(0x32, 20);

// FF_WU_DURATION (0x33) — 持续时间单位1/100 秒) // 设为 2 → 持续 20ms防止误触发 writeRegister(0x33, 2);

  1. 配置静止检测Inactivity 用于判断跌倒后是否长时间不动

// ACT_THS (0x24) — 活动阈值(设为 10/64 ≈ 0.16g writeRegister(0x24, 10);

// ACT_DUR (0x25) — 静止持续时间单位1/1000 秒) // 设为 2000 → 2 秒(跌倒后若 2 秒不动,则触发) writeRegister(0x25, 2000 & 0xFF); // 低 8 位 writeRegister(0x26, (2000 >> 8) & 0xFF); // 高 8 位ACT_DUR 是 16 位!)

⚠️ 注意LIS3DH 的 Inactivity 检测需通过轮询 STATUS_REG 或使用 FIFO不支持直接中断。
因此更推荐:仅用自由落体中断唤醒 MCU然后 MCU 主动检测后续是否静止。

四、优化方案:仅用 自由落体中断 + 后续静止判断

这是最可靠且低功耗的方式:

步骤:

  1. MCU 默认睡眠
  2. LIS3DH 配置自由落体中断 → 输出到 INT1
  3. 当跌倒发生(自由落体)→ INT1 拉低 → 唤醒 MCU
  4. MCU 被唤醒后:
    • 读取加速度值X, Y, Z
    • 开启一个 2~5 秒计时器
    • 在此期间持续读取加速度:
      • 若 RMS 加速度 0.25) { // 有明显运动 isStill = false; break; } delay(100); }

if (isStill) { triggerAlarm(); // 发送求救信号 }

// 重新使能中断 attachInterrupt(INT1_PIN, onFallDetected, FALLING); enterSleep(); }

总结

要实现拐杖跌倒检测LIS3DHTR 的最佳配置是:

  • 硬件3.3V 供电I²C 接口INT1 连 MCU 中断
  • 功能:启用 自由落体中断0.3g, 20ms
  • 逻辑:中断唤醒后,检测后续 2~5 秒是否静止且姿态异常
  • 优势:超低功耗(待机电流 <10μA高可靠性成本低

📌 这种方案已在老人防跌倒手环、智能拐杖等产品中广泛应用。

如果您提供具体的单片机型号(如 ESP32、STM32F1、nRF52832 等),我可以给出完整的 电路图 + 初始化代码 + 中断处理函数!