2026 M-Design设计竞赛 - 基于树莓派5的空巢老人智能监护系统
一、项目介绍和创意介绍
随着我国人口老龄化程度不断加深,空巢老人的居家安全问题日益成为社会关注的焦点。跌倒是最常见的老年人意外伤害之一,若未能及时发现和救助,可能导致骨折、脑损伤甚至危及生命。同时,独居老人的居住环境质量(温度、湿度、气压、光照等)也直接影响其健康与舒适。然而,现有的跌倒检测方案多为可穿戴设备,老人穿戴麻烦、遗忘率高;传统的环境监测系统又缺乏主动判断危险的能力,家属也无法远程实时获知老人状态。
针对这一痛点,本作品设计了一套基于树莓派5的多传感器融合智能监护系统。该系统利用 YOLOv5 深度学习视觉模型对摄像头画面进行实时分析,精准识别老人跌倒行为;同时,通过 I²C 总线同步采集六轴运动传感器(MPU6050)、气压温度传感器(BMP280)、高精度温湿度传感器(HDC1080)等多维环境数据。所有环境与告警信息以仪表盘形式,通过 Flask 搭建的 Web 服务器和 Server-Sent Events(SSE)技术实时推送到任意联网设备的浏览器中。此外,系统集成了 ST25DV04K 动态 NFC 标签,家属或急救人员只需用手机触碰标签,即可自动打开监护网页,为紧急救援争取宝贵时间。
项目创意亮点:
- 视觉感知:YOLOv5 摄像头跌倒检测作为核心安全判断依据,降低误报和漏报。
- 非穿戴式设计:所有传感器安装在室内固定位置,老人无需额外佩戴任何设备,无感监测大幅提升使用依从性。
- 环境全面感知:温湿度、气压、光照等数据帮助家属判断室内舒适度,预防中暑、受凉等次生健康风险。
- 一碰即达的紧急访问:NFC 标签储存监护网页 URI,亲友手机触碰即可打开页面,无需记忆 IP 地址或扫码,极大降低紧急场景下的操作门槛。
二、使用到的硬件简介
硬件 | 型号 | 功能描述 | 连接方式 |
|---|---|---|---|
主控板 | 树莓派 5 (4GB) | 运行 YOLOv5 推理、传感器数据采集、Web 服务器 | - |
摄像头 | 1080P USB 免驱摄像头 | 实时采集室内画面,作为跌倒检测的视频输入 | USB 3.0 接口 |
六轴传感器 | MPU6050 | 获取三轴加速度、三轴角速度、芯片温度 | I²C-1(地址 0x68) |
气压传感器 | BMP280 | 采集大气压强、环境温度 | I²C-2(地址 0x76) |
温湿度传感器 | HDC1080 | 高精度温湿度数据,用于环境舒适度判断 | I²C-2(地址 0x40) |
温湿度传感器(预留) | SHT30 | 备用温湿度扩展 | I²C-2 |
光照传感器(预留) | OPT3001 | 环境光照度检测 | I²C-2 |
NFC 动态标签 | ST25DV04K | 存储监护网页 URI,手机靠近自动打开浏览器 | I²C-2 |
所有 I²C 传感器通过树莓派的双 I²C 总线连接:MPU6050 挂在 I²C-1(GPIO2/3),NFC 标签,BMP280 与 HDC1080 挂在 I²C-2(GPIO4/5),有效避免地址冲突和总线拥堵。摄像头通过 USB 直连,无需额外驱动。

三、方案框图和项目设计思路
系统整体框图

硬件连接图

设计思路
本系统的设计遵循“感知-判断-推送-展示”四层架构。
- 感知层:由 I²C 传感器和 USB 摄像头构成。I²C 传感器通过 Python 编写的面向对象驱动类定时读取寄存器数据;摄像头通过 OpenCV 连续读取视频帧。
- 判断层:核心是 YOLOv5 模型对视频帧进行人体跌倒检测。模型使用自定义跌倒数据集训练。当连续多帧识别到“跌倒”类别时,判定为一次潜在危险事件。同时,环境传感器数据直接用于展示,不作复杂判据。
- 推送层:Flask 应用维护两条 SSE 通道 ——
/stream以 1Hz 频率推送传感器数据和跌倒告警标志;同时提供一个/update_alarmHTTP 接口,接收来自 YOLOv5 脚本的 POST 请求以更新全局告警状态。这种松耦合设计使得 YOLOv5 检测与 Web 服务可以独立运行,互不阻塞。 - 展示层:前端采用 HTML5 + Chart.js 实现响应式仪表盘。玻璃拟态风格的卡片实时刷新数据,环境曲线动态滚动,跌倒告警卡片在收到
alarm: true时触发 CSS 动画,变为红色闪烁。NFC 标签中写入的 URI 记录使任何支持 NFC 的手机触碰即打开仪表盘,免去手动输入。
四、原理图和PCB介绍
原理图
- mpu6050
InvenSense六轴运动跟踪传感器,集成三轴加速度计和三轴陀螺仪,并内置数字运动处理器(DMP)和温度传感器。
- LIS2MDLTR
STMicroelectronics超低功耗三轴磁力计(电子罗盘),用于检测地磁场强度。
- LSM6DSMTR
STMicroelectronics iNEMO 惯性模块,集成三轴加速度计和三轴陀螺仪,具有机器学习内核和有限状态机。
- SHT30-DIS-B10KS
Sensirion 数字温湿度传感器,基于 CMOSens 技术。
- BMP280
Bosch Sensortec(博世传感)气压传感器,可同时测量大气压强和环境温度。
- HDC1080DMBR
Texas Instruments(德州仪器)高精度数字温湿度传感器,内置加热元件。
- OPT3001DNPR
Texas Instruments(德州仪器)环境光传感器,内置 23 位有效分辨率的光-数字转换器。
- ST25DV04K-IER6S3
STMicroelectronics(意法半导体)动态 NFC/RFID 标签 IC,带有 4 Kbit EEPROM,支持 NDEF 格式和 I²C 接口。
- 拓展接口

- MCP2515T-I/ML

PCB


五、软件流程图和关键代码介绍
软件总体流程图

关键代码介绍
1. YOLOv5 跌倒检测与 Flask 联动(detect.py 修改片段)
# 在 detect.py 的图片处理循环末尾,遍历检测结果判断是否有跌倒类别
FALL_CLASS_ID = 0 # 根据实际模型调整
FALL_CLASS_NAME = 'fall'
fall_detected = False
if len(det):
for *xyxy, conf, cls in reversed(det):
c = int(cls)
if c == FALL_CLASS_ID or names[c] == FALL_CLASS_NAME:
fall_detected = True
break
# 向 Flask 发送状态
try:
requests.post('http://127.0.0.1:5000/update_alarm',
json={'fall': fall_detected}, timeout=1)
except Exception:
pass
2. Flask 端接收告警并推送 SSE(app.py 核心部分)
fall_alarm = {'fall': False, 'timestamp': 0}
alarm_lock = threading.Lock()
@app.route('/update_alarm', methods=['POST'])
def update_alarm():
global fall_alarm
data = request.get_json()
with alarm_lock:
fall_alarm['fall'] = data.get('fall', False)
return 'OK', 200
def event_stream():
while True:
data = read_all_sensors()
with alarm_lock:
data['alarm'] = fall_alarm['fall']
yield f"data: {json.dumps(data)}\n\n"
time.sleep(1.0)
3. 前端告警联动(JavaScript 片段)
const alarmCard = document.getElementById('alarm-card');
if (data.alarm) {
alarmCard.classList.add('blink');
alarmStatus.textContent = 'FALL DETECTED!';
alarmStatus.style.color = '#ff4d6a';
} else {
alarmCard.classList.remove('blink');
alarmStatus.textContent = 'Safe';
alarmStatus.style.color = '#00ff88';
}
六、功能展示图及说明
- 仪表盘全景:深色渐变背景衬托下,六张玻璃拟态卡片分别展示“跌倒检测”、“MPU6050 加速度/温度”、“BMP280 气压/温度”、“HDC1080 温湿度”、以及预留给其他传感器的半透明占位卡片。每张卡片下方设有动态 Chart.js 折线图,可回溯最近 30 个数据点。
- 跌倒告警效果:正常状态下,“跌倒检测”卡片显示绿色“Safe”,边框透明。当 YOLOv5 检测到跌倒时,该卡片瞬间变为红色边框,并带有脉动闪烁动画,中央文字变为“FALL DETECTED!”,提示立即查看。
- NFC 一碰即达:用支持 NFC 的智能手机轻触 ST25DV04K 标签,手机自动弹出浏览器并打开监护网页,全程无需输入地址或扫码,实测响应时间小于 2 秒。
- 环境数据曲线:温湿度、气压等曲线以流畅动画实时更新,家属可直观观察室内环境变化趋势。



七、设计中遇到的难题和解决方法
- YOLOv5 在树莓派上的实时性挑战
树莓派 CPU 直接运行 YOLOv5s 模型时,推理速度仅 5 fps,远远无法满足实时视频分析需求。
解决方法:采用模型量化技术,将 PyTorch 模型转换为 ONNX 格式,使用 ONNX Runtime 进行推理。 - 跌倒检测误报问题
初期模型将弯腰拾物、躺在沙发上等动作误判为跌倒,引起频繁虚警。
解决方法:在 YOLOv5 输出后引入连续帧确认机制(连续 5 帧检测到跌倒才触警),显著降低了误报率。 - I²C 总线冲突
BMP280 与 HDC1080 挂在同一条 I²C-2 总线上,连续交叉访问时偶发 Remote I/O Error。
解决方法:引入 Pythonthreading.Lock,对 I²C-2 的操作进行互斥保护,并将各传感器读取间隔从 0.5 秒调整为 1 秒,确保设备有足够转换时间。 - 文件编码导致脚本运行失败
多次出现 “Non-UTF-8 code starting with...” 报错,原因是从不同平台复制代码时引入了中文乱码字节。
解决方法:最终将所有代码文件统一保存为纯 ASCII 或严格 UTF-8 编码,并添加文件头声明# -*- coding: utf-8 -*-,彻底解决了环境兼容性问题。
八、对本次竞赛的心得体会
参加 2026 M-Design 设计竞赛,让我们经历了一次从硬件选型、传感器底层驱动开发,到深度学习模型部署、前后端全栈开发的完整工程实践。从最初在面包板上艰难点亮第一个 I²C 传感器,到最后实现一套能够真正守护老人安全的监护原型,每一步都充满了挑战与惊喜。
我们深刻体会到,物联网与人工智能技术的结合,在智慧养老领域具有巨大的应用潜力。一个看似简单的跌倒检测功能,背后需要电源完整性、通信可靠性、模型准确率、用户体验设计等多方面的细致考量。特别感谢贸泽电子提供的元器件赞助和硬禾学堂的技术支持,让我们能够心无旁骛地专注于创造。本项目不仅是一个技术竞赛作品,更承载着我们对于社会问题的关注和解决愿望。未来,我们将继续完善系统,加入语音对讲、烟雾报警、微信推送等功能,让空巢老人的安全监护真正无死角。希望我们的作品能为智慧养老贡献一份微薄之力,也期待在竞赛中与更多志同道合的伙伴交流学习。

