Files
Smart-Cane-Fall-Detection/README.md
2026-02-05 13:22:38 +08:00

206 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚑 智能拐杖:跌倒检测与定位报警系统
## 📖 项目简介
本项目是一个基于 **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
```
### 核心算法流程
1. **数据采集**:通过 I2C/SPI 定时(如 20Hz读取 LIS3DHTR 的加速度数据。
2. **预处理与特征计算**
- 对原始数据进行**低通滤波**,消除高频噪声。
- 计算**合成加速度向量幅值(SVM)**`SVM = sqrt(ax^2 + ay^2 + az^2)`
3. **跌倒状态判断(双阈值法)**
- **冲击检测**:若 SVM 瞬间超过**高阈值(如 2.8g**,判定为发生剧烈冲击,进入“疑似跌倒”状态。
- **姿态判断**:在冲击后的时间窗内(如 1 秒),若计算出的**静态倾斜角**持续超过**角度阈值(如 60°**,判定身体处于非正常姿态。
- **综合判决**:同时满足以上两个条件,则最终判定为**跌倒发生**。
4. **报警触发流程**
- 系统由低功耗模式被**传感器中断**或**紧急按钮中断**唤醒。
- 若判定跌倒或按键按下,立即启动蜂鸣器进行**本地提示**(可给用户取消误报的缓冲时间)。
- 开启定位模块,解析有效的**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
请尽快确认老人安全!
```
_(注:地图链接可根据接收方习惯更换为百度地图等。)_
## 🔋 低功耗与电源管理策略
1. **硬件管理IP5306**
- IP5306 提供完整的锂电池充电、升压输出(至 5V、负载检测和 4 颗 LED 电量显示功能。
- 配置 IP5306 在轻载时自动进入待机,降低静态功耗。
2. **软件策略**
- **分时供电**:通过 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` - 本文件
## 🚀 快速开始指南
1. **硬件准备与焊接**
- 根据原理图焊接所有元件,注意**IP5306**的反馈电阻配置(决定输出电压)。
-**Air780e** 模块插入板载 SIM 卡座,并安装天线。
2. **固件编译与烧录**
- 用 STM32CubeIDE 打开 `Firmware` 目录下的工程。
- 使用 **ST-Link****USB DFU** 将编译好的固件烧录至 STM32。
3. **配置与测试**
- 通过 **USB 虚拟串口** 连接电脑,使用串口助手查看系统日志和调试信息。
-`air780e_at.c` 文件中修改`DEFAULT_PHONE_NUMBER`为你的紧急联系电话。
- 为电池充电,然后在户外开阔地测试定位和短信发送功能。
4. **阈值校准**
- 在实际使用场景下(如不同地面),通过 USB 串口输出传感器数据,微调`fall_detection.c`中的**加速度阈值**和**角度阈值**,以平衡灵敏度与误报率。
## ⚠️ 重要注意事项
- **首次定位时间****E108-GN03D**模块冷启动时,需在户外空旷处等待**1-3 分钟**以获取卫星星历。
- **SIM 卡与网络**:确保 **Air780e** 模块中插入的 SIM 卡已开通**4G 数据**和**短信功能**,并已关闭 PIN 码验证。
- **天线安装**:务必安装好**4G 天线**和**GNSS 天线**,并确保其位置不被金属严重遮挡,否则将严重影响信号质量。
- **电池安全****502030 软包电池**需做好物理防护,避免刺穿或过度弯折。充电电路应严格按照 IP5306 datasheet 设计。
- **误报处理**:算法中加入了一个短暂的本地蜂鸣提示期,若为误报(如用力放下拐杖),用户可在此期间按下紧急按钮取消短信发送。
## 📚 参考资料
1. [M100P-C 产品资料](https://yinerda.yuque.com/yt1fh6/4gdtu/qpk0i4go2d5dlhnh)
2. [DTU/RTU 产品技术售后处理](https://yinerda.yuque.com/yt1fh6/4gdtu/iov6crmokc8ywu4n)
3. [GPS 模块文档](https://www.ebyte.com/product/2201.html)
## 📄 许可证
本项目采用 [MIT License](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指示