回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

#成长营第三期#身体监测器 简单

头像 DeadWalking 2023.12.12 273 6

【项目由来】在每次体检测心电图时,总是因为心率太慢(50多)被写上“窦性心律过缓”,然后有一次去医院背了一次24小时跟踪心电图,监测睡眠时间心率,也没啥结果。参加了第一期创造营,正好利用发的积分采购了心率血氧传感器,尝试用现有的设备设计一款随时可用、可监测的简易使用仪器,来观察自己的心率。同时血氧仪在2022年也卖得非常火,传感器有这功能便一并进行监测了。通过监测自己身体所产生的数据,也可以让学生体会数据的产生,认识身边的数据;同时在监测自己产生的这些数据时,尝试使用科学方式进行呈现(数字化显示、可视化显示),并借助大模型对自己的数据进行分析,改进自己的生活习惯。
【解决方案】

首先明确什么是“窦性心律过缓”。窦性心律过缓指如果心电图是窦性,低于60次/分为心律过缓,而正常的窦性心律是60-100次/分。窦性心律过缓本身一般不需处理,主要是针对病因进行治疗。 窦性心律慢于每分钟60次称为窦性心律过缓。可见于健康的成人,尤其是运动员、老年人和睡眠时。在器质性心脏病中,窦性心律过缓可见于冠心病、急性心肌梗塞、心肌炎、心肌病和病窦综合征。

那么窦性心律过缓是不是心脏疾病呢?医生给出如下建议:

1. 正常人也可能出现窦性心率过缓:年轻人、老年人、运动员等都有可能。

2. 轻度窦性心率过缓不需要特殊治疗:若心率低于50次或60次,可见于正常人和喜欢健身的男性;可定期进行心电图检查。

3. 严重症状需要及时治疗:若症状比较严重,建议及早到正规医院接受治疗...

4. 在日常需要做好护理工作:可以到正规医院进行检查。

所以根据医生建议我也进一步进行了监测。如果在进行一些剧烈运动后,心率能恢复正常水平则一般没有大碍,进行定期检查即可。

所以准备利用行空板+心率血氧传感器,制作一款私人订制的身体监测仪,用于监控自己平时的心率、血氧数据,结合siot平台利用mind+大屏显示数据,达到数据可视化效果。

有了暑期活动的经验,搭建起来比较熟悉。


【制作原型】

利用4p线将传感器与行空板连接,行空板通过数据线接入计算机。

IMG_1781.JPG

程序代码截图如下:QQ截图20231213080720.jpg

 

 

 

需要注意的是,mqtt设置需和行空板ip一致。

QQ截图20231213080837.jpg

登录SIOT2平台,添加三个主题内容,同时进入大屏设置,将数据进行同步。

QQ截图20231213081941.jpg
QQ截图20231213082106.jpg
QQ截图20231213082121.jpg
QQ截图20231213082142.jpg

修改相应的单位名称。


【测试】

 

运行程序,进行测试。行空板屏幕显示相应数据。

IMG_1776.JPEG
IMG_1774.JPEG

同时mind+大屏也能同步进行数据可视化呈现!

 

IMG_1775.JPEG

由于手指有时和传感器贴合度不够,导致有时会有-1数据的产生,在后期数据分析时需要剔除这些无效数据。

 

通过有效监测,可以了解自己在日常生活中的心率数据情况,同时也可以进行睡眠时期的心率监测。根据网上信息显示,正常成人心率为60-100次/分,但此范围往往是清醒状况下心率的正常范围,睡眠后心率会相应降低,24小时动态心电图发现入睡后心率往往在60次/分左右。医学认为,夜间心率在50次/分以上属于正常范围,个别人熟睡时心率可降到约40次/分,如果无任何症状以及不适感觉,属于正常情况。

如果清醒状况下心率偏低,在60甚至50次/分以下,则属于心动过缓,可能是病理状态。睡眠心率超过100次/分属于心动过速,需要到医院进行相应检查,排除病理情况。

 

所以根据数据,可以将本项目内容改成心率报警器。如果在睡眠时心率低于40,或更低的数值,进行报警效果,可以及时给自己或者家人一个提醒。同时也适用于独居老人,为老有所依提供保障!

 

本项目后续可以将设备接入同一无线信号,实现无线数据监测,摆脱数据线的束缚。

 

(本文部分心率医学说明内容来自百度)

 

材料清单

  • Fermion: MAX30102 心率血氧传感器V2.0 X1 链接
  • Gravity-4P I2C/UART传感器连接线 X1 链接
  • 行空板 X 链接
代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_max30102 import DFRobot_BloodOxygen_S
from pinpong.board import Board
from unihiker import GUI
import time
import siot


Board().begin()
siot.init(client_id="8170631597033082",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
u_gui=GUI()
siot.connect()
siot.loop()
siot.getsubscribe(topic="siot/心率")
siot.getsubscribe(topic="siot/血氧")
siot.getsubscribe(topic="siot/体感")
p_max30102 = DFRobot_BloodOxygen_S()
while (False == p_max30102.begin()):
	print("init fail!")
	time.sleep(1)

u_gui.draw_text(text="身体监测仪",x=40,y=30,font_size=20, color="#333333")
XL=u_gui.draw_text(text="心率",x=20,y=80,font_size=20, color="#0000FF")
XY=u_gui.draw_text(text="血氧",x=50,y=140,font_size=20, color="#0000FF")
TW=u_gui.draw_text(text="体感",x=20,y=200,font_size=18, color="#0000FF")

while True:
    print(time.strftime("%Y/%m/%d %H:%M:%S"))
    p_max30102.sensor_start_collect()
    XL.config(text=(str((str((str("心率:") + str(p_max30102.get_heartbeat()))))) + str("次/分钟")))
    siot.publish_save(topic="siot/心率", data=p_max30102.get_heartbeat())
    XY.config(text=(str((str((str("血氧:") + str(p_max30102.get_spo2()))))) + str("%")))
    siot.publish_save(topic="siot/血氧", data=p_max30102.get_spo2())
    TW.config(text=(str((str((str("体感:") + str(p_max30102.get_temperature_c()))))) + str("摄氏度")))
    siot.publish_save(topic="siot/体感", data=p_max30102.get_temperature_c())
    time.sleep(1)

评论

user-avatar
  • 伦**

    伦**2024.03.13

    太厉害了!!!

    2
    • DeadWalking

      DeadWalking2024.03.13

      过奖了,谢谢!

    • DeadWalking

      DeadWalking2024.03.28

      谢谢,互相学习!

  • 许培享

    许培享2024.01.14

    学习学习

    0
    • feng0539

      feng05392023.12.14

      行空板不是做游戏吗?

      1
      • DeadWalking

        DeadWalking2023.12.15

        都可以吧