🚑 智能拐杖:跌倒检测与定位报警系统
📖 项目简介
本项目是一个基于 STM32F103RCT6 微控制器的便携式智能拐杖原型机,旨在为老年人或行动不便者的户外出行提供安全防护。系统核心功能是自动检测使用者跌倒状态,并在第一时间通过4G 短信将精准位置信息发送至预设的紧急联系人,同时支持手动一键报警。项目采用 USB 虚拟串口(VCP) 进行调试,并通过 HAL 库 进行开发,兼顾了开发效率与系统稳定性。
✨ 核心功能
- 智能姿态识别:基于 LIS3DHTR 三轴加速度计数据,融合阈值算法,实时区分正常行走、静坐、跌倒等多种状态。
- 跌倒自动报警:检测到跌倒后,系统自动触发报警流程。
- 手动紧急求助:配备实体紧急按钮,使用者可在任何感觉不适时主动求助。
- 4G 定位与短信报警:集成E108-GN03D(GPS/北斗双模)定位模块获取经纬度,通过Air780e 4G 模块将包含位置信息(经纬度及网络地图链接) 的报警短信发送给监护人。
- 低功耗运行:通过 IP5306 电源管理芯片与软件休眠策略,结合 502030 软包电池,优化系统续航。
🛠️ 硬件系统架构
主要组件清单
| 模块 | 选用型号 | 关键说明 |
|---|---|---|
| 主控制器 | STM32F103RCT6 | 核心主控,负责数据处理、逻辑控制与各模块调度。 |
| 姿态传感器 | LIS3DHTR | 采用 I2C/SPI 通信,提供三轴加速度数据,功耗较低。 |
| 定位模块 | E108-GN03D (亿佰特) | GPS/北斗双模定位模块,提供高精度位置信息。 |
| 通信模块 | Air780e (M100P) (合宙/银尔达) | 支持 4G Cat.1 通信,用于发送报警短信,兼容 AT 指令。 |
| 电源管理 | IP5306 | 集成充电管理、升压输出、电量显示等功能,效率高。 |
| 电池 | 502030 软包锂电池 (250mAh) | 紧凑型电池,满足便携式设备对体积和容量的要求。 |
| 调试接口 | USB 虚拟串口(VCP) | 通过 STM32 内置 USB FS 接口实现,方便调试与固件升级。 |
| 人机交互 | 紧急按钮、蜂鸣器 | 用于手动报警和本地声音提示。 |
系统框图
[502030 250mAh电池]
↓
[IP5306电源管理] → [电量指示LED]
↓ (稳定5V/3.3V输出)
┌─────────────────────────────────────┐
│ STM32F103RCT6 主控 │ ← [紧急按钮(外部中断)]
│ (USB FS for Virtual COM) │
└───┬─────────┬─────────┬─────────┬───┘
│ │ │ │
↓ ↓ ↓ ↓
[LIS3DHTR] [E108-GN03D] [Air780e] [蜂鸣器]
加速度计 定位模块 4G模块 声音报警
(I2C/SPI) (UART) (UART)
💾 软件设计与实现
开发环境
- IDE/编译器: STM32CubeIDE / Keil uVision
- 固件库: STM32CubeMX HAL 库 (项目基于 HAL 库开发)
- 编程语言: C 语言
- 关键驱动: USB CDC (Communication Device Class) 用于实现虚拟串口。
程序目录结构(建议)
Smart_Cane_FW_F103RCT6/
├── Core/
│ ├── Inc/
│ ├── Src/
│ ├── main.c
│ └── stm32f1xx_it.c
├── Drivers/
│ ├── STM32F1xx_HAL_Driver/
│ └── CMSIS/
├── USB_DEVICE/
│ ├── App/ # USB VCP应用层代码
│ ├── Target/
│ └── Class/CDC/
├── Modules/
│ ├── lis3dhtr/ # LIS3DHTR加速度计驱动
│ ├── gnss_parser/ # E108-GN03D NMEA协议解析
│ ├── air780e_at/ # Air780e 4G模块AT指令控制
│ ├── ip5306_pwr/ # IP5306电源状态读取(可选)
│ └── button_buzzer/ # 按键与蜂鸣器驱动
├── Algorithm/
│ └── fall_detection.c # 核心跌倒检测算法
├── Middlewares/
│ └── ST/STM32_USB_Device_Library/ # USB库文件
└── README.md
核心算法流程
- 数据采集:通过 I2C/SPI 定时(如 20Hz)读取 LIS3DHTR 的加速度数据。
- 预处理与特征计算:
- 对原始数据进行低通滤波,消除高频噪声。
- 计算合成加速度向量幅值(SVM):
SVM = sqrt(ax^2 + ay^2 + az^2)。
- 跌倒状态判断(双阈值法):
- 冲击检测:若 SVM 瞬间超过高阈值(如 2.8g),判定为发生剧烈冲击,进入“疑似跌倒”状态。
- 姿态判断:在冲击后的时间窗内(如 1 秒),若计算出的静态倾斜角持续超过角度阈值(如 60°),判定身体处于非正常姿态。
- 综合判决:同时满足以上两个条件,则最终判定为跌倒发生。
- 报警触发流程:
- 系统由低功耗模式被传感器中断或紧急按钮中断唤醒。
- 若判定跌倒或按键按下,立即启动蜂鸣器进行本地提示(可给用户取消误报的缓冲时间)。
- 开启定位模块,解析有效的NMEA语句获取经纬度。
- 开启 4G 模块,通过
AT+CMGS指令将包含位置和地图链接的报警短信发送至预设号码。 - 任务完成后,所有外设断电,主控进入停机(STOP)模式等待下次唤醒。
🔌 硬件连接关键引脚(基于 STM32F103RCT6)
| STM32 引脚 | 连接模块/功能 | 通信接口/说明 |
|---|---|---|
| PA9, PA10 | Air780e (4G 模块) | USART1_TX, USART1_RX (AT 指令) |
| PA2, PA3 | E108-GN03D (定位模块) | USART2_TX, USART2_RX (NMEA 数据) |
| PB6, PB7 | LIS3DHTR (加速度计) | I2C1_SCL, I2C1_SDA |
| PC13 | 紧急按钮 | 外部中断 (下降沿触发) |
| PB8 | 蜂鸣器 | GPIO 输出 (推挽输出) |
| PA11, PA12 | USB FS | USB_DM, USB_DP (用于虚拟串口) |
| PB12 | Air780e_PWRKEY | GPIO 输出 (控制模块开关机) |
| PB13 | GNSS 模块使能 | GPIO 输出 (控制定位模块电源) |
📱 报警短信格式示例
【智能拐杖紧急报警】
状态:检测到跌倒!
位置:E 121.472341°, N 31.236587°
时间:2024-05-27 10:30:45
地图链接:https://www.google.com/maps?q=31.236587,121.472341
请尽快确认老人安全!
(注:地图链接可根据接收方习惯更换为百度地图等。)
🔋 低功耗与电源管理策略
- 硬件管理(IP5306):
- IP5306 提供完整的锂电池充电、升压输出(至 5V)、负载检测和 4 颗 LED 电量显示功能。
- 配置 IP5306 在轻载时自动进入待机,降低静态功耗。
- 软件策略:
- 分时供电:通过 GPIO 控制 MOSFET,仅在使用时为定位模块和4G 模块供电。
- 主控休眠:在空闲时,调用
HAL_PWR_EnterSTOPMode()使 STM32 进入停机模式,此时功耗极低。可由 RTC 闹钟、加速度计中断 或 紧急按钮外部中断 唤醒。 - 外设时钟管理:不使用时,通过
__HAL_RCC_USARTx_CLK_DISABLE()等宏关闭外设时钟。
📁 仓库文件清单
Hardware/Schematic/- 原理图文件 (.pdf,.sch)PCB/- PCB 布局文件 (.pcb或 Gerber 文件)BOM/- 元件清单 (.xlsx或.csv)
Firmware/- 完整的 STM32CubeIDE/Keil 工程源代码 (结构如上所示)Documents/Design_Report.pdf- 详细设计报告AT_Command_Set.md- 针对 Air780e 和 E108 模块整理的 AT 指令集User_Manual.pdf- 用户使用手册
Tools/- 可能用到的测试脚本或工具README.md- 本文件
🚀 快速开始指南
- 硬件准备与焊接:
- 根据原理图焊接所有元件,注意IP5306的反馈电阻配置(决定输出电压)。
- 将 Air780e 模块插入板载 SIM 卡座,并安装天线。
- 固件编译与烧录:
- 用 STM32CubeIDE 打开
Firmware目录下的工程。 - 使用 ST-Link 或 USB DFU 将编译好的固件烧录至 STM32。
- 用 STM32CubeIDE 打开
- 配置与测试:
- 通过 USB 虚拟串口 连接电脑,使用串口助手查看系统日志和调试信息。
- 在
air780e_at.c文件中修改DEFAULT_PHONE_NUMBER为你的紧急联系电话。 - 为电池充电,然后在户外开阔地测试定位和短信发送功能。
- 阈值校准:
- 在实际使用场景下(如不同地面),通过 USB 串口输出传感器数据,微调
fall_detection.c中的加速度阈值和角度阈值,以平衡灵敏度与误报率。
- 在实际使用场景下(如不同地面),通过 USB 串口输出传感器数据,微调
⚠️ 重要注意事项
- 首次定位时间:E108-GN03D模块冷启动时,需在户外空旷处等待1-3 分钟以获取卫星星历。
- SIM 卡与网络:确保 Air780e 模块中插入的 SIM 卡已开通4G 数据和短信功能,并已关闭 PIN 码验证。
- 天线安装:务必安装好4G 天线和GNSS 天线,并确保其位置不被金属严重遮挡,否则将严重影响信号质量。
- 电池安全:502030 软包电池需做好物理防护,避免刺穿或过度弯折。充电电路应严格按照 IP5306 datasheet 设计。
- 误报处理:算法中加入了一个短暂的本地蜂鸣提示期,若为误报(如用力放下拐杖),用户可在此期间按下紧急按钮取消短信发送。
📚 参考资料
📄 许可证
本项目采用 MIT License。
🤝 贡献与联系
欢迎提交 Issue 和 Pull Request 来改进代码或文档。 如有任何技术问题或建议,可通过仓库的 Issues 页面发起讨论。
让精准的感知与及时的通信,成为长者出行的安心守护。
FreeRTOS任务划分建议: 任务名称 优先级 堆栈大小 功能描述 Sensor_Task 3 512字节 LIS3DHTR数据采集与跌倒算法 GPS_Task 2 1024字节 定位数据获取与解析 Comm_Task 4 2048字节 GSM短信发送(阻塞操作多) Key_Task 5(最高) 256字节 手动报警按键检测 Power_Task 1 512字节 电池管理与低功耗控制 Monitor_Task 2 512字节 系统状态监控与LED指示
Description
Languages
C
97.9%
Assembly
1.9%
C++
0.2%