回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

ESP32-C5 : 基于Mqtt的独居老人浴室防跌倒监控系统 简单

头像 地下铁 2025.09.27 46 0

一、项目背景

当前,人口老龄化已成为全球性议题,独居老人因跌倒导致的伤亡事件逐年攀升。据估算,我国每年因跌倒引发的直接医疗费用超过50亿元,由此带来的看护、康健等社会总成本高达160–800亿元,独居老人一旦跌倒后“无人知晓”更会错失黄金救治时间。

设计独居老人浴室跌倒求助图片.png

在技术路径上,目前主要有下面几种方式

①基于可穿戴传感器(加速度计、陀螺仪、倾角计等)的阈值/模式识别方案,成本低、无监控死角,但老人易忘记佩戴且难以区分“跌倒”与“躺倒”;

②基于视频监控与计算机视觉,对跌倒姿态识别精度高,却受光照、遮挡、隐私顾虑所限,难以覆盖卫生间、浴室等高风险区域;

③基于环境信号(Wi-Fi、毫米波雷达、事件视觉传感器)的非接触式感知,兼顾隐私与全屋覆盖。

因为我对这个主题比较关注,已经写了一篇“结合60GHz毫米波人体检测传感器的独居老人浴室跌倒报警装置设计”。但是之前的设计中是结合Flask对获取的数据进行展示,是基于轮询的短连接传输方式,存在响应不够及时、网络开销较大、数据量级低等问题。刚好这次参加FireBeetle 2 ESP32-C5 IO套装体验活动,所以结合mqtt重新做一遍。

二、产品简介

FireBeetle 2 ESP32-C5 IO套装包括两部分:Firebeetle 2 ESP32-C5 开发板和其专用的IO扩展底板。IO扩展板方便快速连接各种传感器外设,让Firebeetle 2 ESP32-C5开发板到手即用,无需焊接。

product.png

之前使用FireBeetle 2 ESP32-C6来制作的,因为没有扩展板加持,所以需要结合面包板来使用,外观是这样的:

c6.jpg

三、硬件清单

材料清单

  • C1001 60GHz毫米波人体检测传感器 X1
  • FireBeetle 2 ESP32-C5 X1

四、功能实现

C1001毫米波人体检测传感器是一款采用60GHz工作频率的毫米波雷达,与普通24GHz毫米波只能检测存在、速度、距离不同,C1001毫米波人体检测传感器可以实现更多精细的检测功能。

product1.png

本项目正是利用C1001毫米波人体检测传感器可以通过点云成像算法实现人体姿态识别的特点,能够对平躺状态有准确探知;并进行精准生命探测,对跌倒状态、停留时间,身体静止驻留状态都有准确上报。采集到监测对象的体征信息后,封装成json包,通过Mqtt协议发送给服务器,结合matplotlib设计前端应用,然后前端通过订阅服务,将数据进行展示。另外结合真实场景,如果检测到“跌倒→剧烈运动→静止”三阶状态机,通过弹窗和警报声进行报警。

五、制作过程

1、数据封装设计

通过查阅产品wiki,可以获取返回字段数据的具体含义,如下表:

字段含义取值 & 典型场景
presence传感器是否检测到有人0 = 无人 1 = 有人
movement人体运动状态

0 = None(无人)

1 = Still(有人但静止)

2 = Active(有人且运动

movingRange躯体位移幅度0~100+
breath呼吸频率

0 = 当前测不到

10~30 = 正常安静成人(次/分)

heart心率

0 = 当前测不到

60~100 = 安静成人(次/分)

封装成json格式,例如:

代码
 * JSON 格式
 {
    "presence":1,        // 0无人 1有人
    "movement":0,        // 0无 1静止 2活跃
    "movingRange":12,    // 身体位移参数
    "breath":18,         // 呼吸值
    "heart":75           // 心率
 }‘

2、配置Mqtt服务

能够实现mqtt服务的平台比较多,结合项目规模、费用投入等因素,这里选用了EMQX(https://www.emqx.cn/get-started),只需要几步简单操作就能拥有自建的MQTT服务平台。

建立服务实例后,我们需要配置用户,只有授权用户能够订阅使用提供的服务。在访问控制的客户端认证中增加用户授权。

c7.jpg

3、代码编写

c1.jpg
c2.jpg
c3.jpg

完成程序编写后,将程序上传

c5.jpg

4、展示数据前端设计

通过主题订阅,我们能够获取到传感器发送到MQTT服务器上的数据。为了确保数据的有效性,我们可以安装一个mqttx工具(https://mqttx.app/zh),可以方便查看订阅消息或者向相应主题发送测试消息。

c4.jpg

查看消息正确无误后,就可以来完成前端展示部分的功能。这里是结合matplotlib、easgui库来完成。

首先安装必要的库:

pip install paho-mqtt matplotlib easygui

主要实现代码截图:

1)“跌倒→剧烈运动→静止”三阶状态机,高置信度时弹窗(easygui)+ 窗口标题闪红

2) 实时绘制 presence / movement / movingRange / fall 四条曲线

s1.jpg
s2.jpg

六、作品成品

本来应该设计一个结构会好一些,等后期再来完善。

df_c5.jpg

七、集成测试

 

将作品放置在高处,为了测试方便,这里放置在一个离地约180cm左右的高处,将c1001传感器朝向地面。

product2.png

本来应该请几位同学来帮忙测试一下,但由于国庆假期,所以只好自己上,模拟假摔。

测试流程如下:

1、微波传感器正面朝下;

2、人站在微波传感器正下方并静止2秒,让传感器先确认有人在;

3、突然 膝盖弯曲滑到地面,尽量让躯干在 1秒内大幅度抽搐,然后接着保持倒地不动超过3 秒(可配置)

由于画面过于美好,这里也提供不了。通过前端监控程序来想象一下。

2.jpg

通过红色的曲线(fall)有两个突起可以看到我摔了2次,对应时段的黄色曲线(moveRange)也大幅增长然后趋于平缓,可以看出一开始抽的挺厉害然后就停住了,这时就触发的高置信度的报警事件。

3.jpg

八、后期改进

 

   看能不能结合微信或语音电话做一些功能拓展的尝试。

 

评论

user-avatar