1. 项目概述
这个毕业设计项目是一个面向老年人安全监护的智能跌倒报警系统。作为一名电子工程专业的学生,我在导师指导下完成了这个结合硬件与软件的嵌入式系统开发。系统通过多传感器融合技术实现了老人跌倒的精准检测,并具备完整的报警功能链。
核心创新点在于:
- 采用MPU6050六轴传感器进行姿态解算
- 开发了基于阈值的跌倒检测算法
- 集成GPS定位和GSM通信模块
- 实现声光报警与远程通知的联动机制
这个系统特别适合独居老人或行动不便者使用,当发生意外跌倒时能够第一时间通知家人并提供准确位置信息,为老人安全提供多一重保障。
2. 系统设计与硬件选型
2.1 整体架构设计
系统采用模块化设计思路,主要包含以下几个功能单元:
- 主控单元:STM32F103C8T6最小系统板
- 姿态检测单元:MPU6050六轴传感器
- 定位单元:NEO-6M GPS模块
- 通信单元:SIM800L GSM模块
- 报警单元:有源蜂鸣器+LED灯组
- 电源管理:18650锂电池+充放电保护电路
各模块通过标准接口连接,硬件架构如下图所示:
code复制[传感器数据流]
MPU6050 → I2C → STM32 ← UART → GPS模块
↓
UART → GSM模块
↓
GPIO → 声光报警
2.2 关键硬件选型解析
主控芯片选择:
选用STM32F103C8T6(蓝色pill开发板)主要基于以下考虑:
- 72MHz主频满足实时处理需求
- 内置硬件I2C和多个UART接口
- 丰富的GPIO资源
- 低功耗特性(运行模式约36mA)
- 成熟的生态系统和开发工具链
MPU6050传感器:
这款集成三轴加速度计+三轴陀螺仪的6DOF传感器具有:
- ±16g加速度量程
- ±2000°/s角速度量程
- 内置数字运动处理器(DMP)
- I2C数字接口
- 价格低廉(约15元/片)
实测中发现,直接使用原始传感器数据存在较大噪声,需要通过软件滤波处理。我们最终采用互补滤波算法结合DMP输出,取得了较好的姿态解算效果。
GPS模块选型:
NEO-6M模块的优势在于:
- 定位精度约2.5mCEP
- 冷启动时间<35s
- 支持NMEA0183协议
- 自带陶瓷天线和EEPROM
- 工作电流仅45mA
在实际测试中,我们发现室内环境下GPS信号较弱,建议老人在户外活动时佩戴设备。
3. 跌倒检测算法实现
3.1 数据采集与预处理
MPU6050输出的原始数据需要经过以下处理流程:
- 传感器校准:
c复制// 采样静止状态下的偏移量
void calibrateSensor() {
int32_t accel_bias[3] = {0};
int32_t gyro_bias[3] = {0};
for(int i=0; i<128; i++) {
readRawData();
accel_bias[0] += accel[0];
// ...其他轴类似
delay(10);
}
accel_bias[0] /= 128; // 计算平均值
// 保存校准值到全局变量
}
- 数字滤波处理:
采用一阶低通滤波平滑数据:
c复制float filteredData = 0.9 * prevData + 0.1 * newData;
- 姿态解算:
使用DMP库获取四元数后转换为欧拉角:
c复制dmpGetQuaternion(&q, fifoBuffer);
dmpGetGravity(&gravity, &q);
dmpGetYawPitchRoll(ypr, &q, &gravity);
3.2 跌倒判定算法
我们设计了三重判断条件来区分真实跌倒与其他动作:
- 加速度突变量检测:
c复制float accel_magnitude = sqrt(ax*ax + ay*ay + az*az);
if(accel_magnitude > 2.5g) { // 经验阈值
triggerStage1();
}
-
姿态角持续监测:
当俯仰角>60度且持续时间>1秒时触发第二阶段判断 -
静止状态确认:
跌倒后通常会保持静止,检测到低加速度变化率(<0.5g/s)持续3秒后确认跌倒
3.3 防误判机制
为避免蹲下、坐下等动作被误判为跌倒,算法增加了以下判断:
- 检测到臀部缓慢下降(加速度变化率低)
- 身体最终姿态角在安全范围内(如俯仰角<30度)
- 动作持续时间特征(正常坐下约2-3秒)
通过这三个维度的综合判断,实测误报率可控制在5%以下。
4. 报警系统实现
4.1 报警触发流程
完整的报警触发逻辑如下:
- 跌倒检测算法确认跌倒事件
- 启动GPS定位获取当前位置
- 开启声光报警(蜂鸣器+LED闪烁)
- 通过GSM发送报警短信
- 进入待机状态等待复位
4.2 短信报警实现
使用SIM800L模块发送报警短信的关键代码:
c复制void sendAlertSMS(float lat, float lng) {
Serial.println("AT+CMGF=1"); // 设置文本模式
delay(100);
// 发送到第一个联系人
Serial.print("AT+CMGS=\"");
Serial.print(PHONE_NUMBER1);
Serial.println("\"");
delay(100);
Serial.print("紧急报警!老人可能跌倒!位置:");
Serial.print("http://maps.google.com/?q=");
Serial.print(lat,6);
Serial.print(",");
Serial.print(lng,6);
Serial.write(26); // CTRL+Z发送
delay(1000);
// 同样发送给第二个联系人
...
}
短信内容示例:
code复制紧急报警!老人可能跌倒!
位置:http://maps.google.com/?q=39.904202,116.407394
时间:2023-05-15 14:30:22
4.3 声光报警设计
报警单元采用以下设计:
- 有源蜂鸣器(5V驱动)
- 高亮度LED灯组(3颗并联)
- 报警模式:蜂鸣器0.5Hz间歇鸣响 + LED同步闪烁
- 持续时长:默认3分钟(可配置)
电路设计注意事项:
- 蜂鸣器需加三极管驱动(STM32 GPIO驱动能力不足)
- LED串联限流电阻(约220Ω)
- 配置GPIO为推挽输出模式
5. 系统优化与实测
5.1 功耗优化措施
为延长设备续航时间,我们实施了以下优化:
- GPS动态开关:仅在需要定位时开启
- 传感器休眠模式:静止状态降低采样率
- 电源管理:
- 选用低压差稳压器(AMS1117-3.3)
- 锂电池充放电保护电路
- 系统平均工作电流约80mA
实测表明,2000mAh电池可支持约24小时连续工作。
5.2 实际测试数据
我们在不同场景下进行了50次跌倒模拟测试:
| 测试场景 | 检测成功率 | 误报次数 |
|---|---|---|
| 平地跌倒 | 94% | 2 |
| 床上跌落 | 88% | 3 |
| 楼梯跌倒 | 90% | 1 |
| 椅子滑落 | 92% | 2 |
主要误报情况发生在快速坐下动作时,通过调整算法参数可进一步改善。
5.3 典型问题排查
-
GPS定位延迟:
- 确保天线朝向天空
- 冷启动后等待至少1分钟
- 检查NMEA数据解析是否正确
-
短信发送失败:
- 确认SIM卡余额和信号强度
- 检查AT指令终止符(需发送CRLF)
- 增加指令间延时(SIM800L响应较慢)
-
传感器数据异常:
- 重新校准传感器
- 检查I2C接线是否松动
- 添加软件滤波处理
6. 项目扩展方向
这个基础系统还有多个可改进的方向:
-
增加蓝牙连接:
可与手机APP配合,实现更多功能 -
跌倒类型识别:
通过机器学习区分前倾、后仰、侧摔等跌倒类型 -
环境传感器集成:
加入温湿度、气压传感器监测环境状况 -
低功耗优化:
改用STM32L系列芯片,进一步降低功耗 -
云平台对接:
将报警信息上传至云服务器,实现历史记录查询
在实际部署中,建议将设备集成到腰带或手环中,提高佩戴舒适性。同时可以增加手动报警按钮,让老人在感到不适时能主动求助。