提交完整工程
This commit is contained in:
205
README.md
Normal file
205
README.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# 🚑 智能拐杖:跌倒检测与定位报警系统
|
||||
|
||||
## 📖 项目简介
|
||||
|
||||
本项目是一个基于 **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指示
|
||||
Reference in New Issue
Block a user