# 🚑 智能拐杖:跌倒检测与定位报警系统 ## 📖 项目简介 本项目是一个基于 **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指示