《基于Blynk物联网平台的社区智能健康系统》陈宇煊 黄宣昊
学生作品 2024-04-05 作者:GT-maker

《基于Blynk物联网平台的社区智能健康系统》陈宇煊 黄宣昊

查看原站页面 ↗

🎬 作品演示视频

作品说明

http://ai-gtmaker.com/wp-content/uploads/2024/04/讲演-1.mp4 (链接: http://ai-gtmaker.com/wp-content/uploads/2024/04/讲演-1.mp4)

http://ai-gtmaker.com/wp-content/uploads/2024/04/演示-1.mp4 (链接: http://ai-gtmaker.com/wp-content/uploads/2024/04/演示-1.mp4)

一、作品设计思路、实现和制作计划

2019开始的新型冠状病毒肺炎主要症状是发热、干咳、喉咙痛、头痛、乏力、鼻塞等。在医院,护士每天给患者测量体温,测温这个环节耗时、耗人,效率不高,而且不能做到随时检测,手持测温枪对医护人员、其他病患都有传染的风险;通常医务人员仅对患者的手腕、额头的部位皮肤进行测温;而人的口腔温度是最接近人的实际温度,而且稳定,不容易受环境因素的影响,而医护人员给患者测口腔的温度是一个比较尴尬的事;

经细致观察调研,自主检测、无接触、精准检测口腔温度是一个比较适宜的科学手段。

我们的想法就设计一面镜子,采取在人们照镜子时同时进行人脸识别及测温,并增加心率及血氧的测量,获取人们每天的身体状况。以居家饰品的形式融入人们的日常生活中,既避免了人们对自身健康状况的忧虑,又增加了生活情趣。这个终端产品在养老社区、医院、疫情封控区等部署安装是非常有效的。

设计思路:

应用于小区、医院、养老院等小型的社区健康管理系统;

管理系统由终端、服务器、管理中心组成;

管理中心中显示屏可以显示人的体温、心率、血氧的变化数据,也可以通过手机查看身体指标变化折线图,还能给终端发送提示信息;

搭建云服务器,处理住户信息及体温、心率、血氧监测;并将数据提供给管理中心;

本设计主要是社区智能健康终端;

测温没有启动时,本设备可当镜面,可悬挂、或可放置桌面上,还可以当做氛围灯使用;

当AI摄像头识别到住户人脸,启动测温及心率、血氧监测,并语音提示信息;

掌控板通过WIFI将数据上传到云端数据库;

语音播报管理中心发送的信息,同时显示屏显示信息;

本设备上部的液晶屏显示日期、时间、室外温度、湿度;

参考相关文献、产品、应用系统:

[1] (中国) 王治强 孙晓东 杨永 孙鹏 著 计算机系统应用. 2021,30(01)《人脸识别算法在考勤系统的应用》:

[2] (中国) 刘玉琪 著 科学大众(中学生). 2020,(12) 《全球医务人员告急,人工智能来帮忙》;

[3] (中国) 江锐 著 电子技术及信息科学 《基于云计算的桥梁结构健康监测物联网系统设计与应用研究》;

[4]  3i Smart LT手持式红外测

http://www.raytest.net/raytest_Product_2064169018.html

[5]怎么搭建自己的Blynk物联网服务器

https://mp.weixin.qq.com/s/4Pj5r94ykiAAZKVgO2N_Mg

[6]用SIoT秒搭STEM课堂物联网服务器

https://mc.dfrobot.com.cn/thread-289794-1-1.html

二、作品创新点

1、本设计强调体温监测的准确性,采用免接触口腔测温;将测温环节融入人们生活中,想测就测,避免检测人员上门,或核酸检测时临时发现体温异常者,而造成恐慌;

2、本设计对如何保证测温中采集数据的准确性作了多次修改与验证,并能与住户信息准确对应;

3、本设计采用PET高强度聚脂薄膜,单向透视,在无背光源情况下形成镜面效果,作为镜子使用;在有背光源情况下,透出清淅的画面图像。与内置平面镜形成无限反射,环形灯带产生炫幻的效果。

4、本设备不仅可以接入社区健康管理系统,医护人员还可以手机查看护对象健康数据的变化曲线,对患者功老人健康状况会自动报警,大降低看护对象或家属的担忧。

三、材料清单和相关要求,包括软硬件名称、类型等

序号

设备

型号

连接针脚

测量数据

单位

备注

单价

数量

金额(元)

1

开发板

掌控板2.0

主控

99

1

99

2

I/O扩展板

micro:bit掌控双兼容

连接外置传感器、执行器

89

1

89

3

语音合成模块

module V2.0

UARTP0、P1

发出提示音

199

1

199

4

AI摄像头

哈仕奇

P15、P16

人脸识别

379

1

379

5

免接触红外测温模块

GY-906    DCI

IIC

温度

°C

免接触测温

115

1

115

6

心率传感器

MAX30102

IIC

心率

Times/min

测量用户心率、血氧

89

1

89

7

LED灯条

WS2812

P8

氛围灯

10

1

10

8

行空板

UNIHIKER

联接wifi显示EasyIOT数据

399

1

399

9

其它

45

1

45

合计

1370

四、制作过程

包括至少5个步骤,每个步骤需配合图片和文字说明

1、初步构思:作为医疗器具的结构设计

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片1.png" alt="图片">

2、外形结构讨论,做为一种生活用品的结构想法

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片2.png" alt="图片">

3、设计定位为家居装饰-社区智能健康系统

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片3.png" alt="图片">

4、模型制作,激光切割、拼装

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片4-1024x626.png" alt="图片">

5、硬件连接设计

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片5.png" alt="图片">

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片6.png" alt="图片">

6、编程设计

编程涉及的功能模块较多,使用图形化编程软件Mind+进行初步设计,后期转源代码,使用VScCode调试。

掌控板编程部分

/*!

* MindPlus

* mpython

*

*/

#include <MPython.h>

#include <DFRobot_Iot.h>

#define BLYNK_PRINT Serial

#include <DFRobot_MLX90614.h>

#include <DFRobot_HuskyLens.h>

#include <DFRobot_BloodOxygen_S.h>

#include <DFRobot_SpeechSynthesis_M.h>

#include <BlynkSimpleEsp32.h>

#include <WidgetRTC.h>

// 动态变量

volatile float mind_n_WenDu, mind_n_XinLvShuJu, mind_n_XueYangShuJu;

// 函数声明

void DF_ChuShiHua();

// 静态常量

const String topics[5] = {“S3x2ggYnR”,””,””,””,””};

// 创建对象

DFRobot_Iot                  myIot;

DFRobot_SpeechSynthesis_UART sstts;

DFRobot_HuskyLens            huskylens;

DFRobot_MLX90614_IIC         mlx90614;

DFRobot_BloodOxygen_S_I2C    max30102(&Wire, 0x57);

// 主程序开始

void setup() {

mPython.begin();

sstts.begin(sstts.eV2, &Serial2, P0, P1);

max30102.begin();

Blynk.config(“jchU7WOpsq4j6nq7l6MUpjpDls6CITZL”, IPAddress(192,168,15,1), 8080);

DF_ChuShiHua();

}

void loop() {

huskylens.request();

if (huskylens.isLearned(1)) {

if (huskylens.isAppearDirect(HUSKYLENSResultBlock)) {

if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {

sstts.speak(“徐子涵先生,很高兴为您服务”);

myIot.publish(topic_0, “徐子涵”);

for (int index = 0; index < 10; index++) {

delay(500);

myIot.publish(topic_0, (String(max30102.getSPO2()) + String(“%”)));

myIot.publish(topic_0, (String(max30102.getHeartbeat()) + String(“Times/min”)));

myIot.publish(topic_0, (String(mlx90614.getObjectTempC()) + String(“℃”)));

mind_n_WenDu = mlx90614.getObjectTempC();

mind_n_XinLvShuJu = max30102.getHeartbeat();

mind_n_XueYangShuJu = max30102.getSPO2();

Blynk.virtualWrite(V0, mind_n_WenDu);

Blynk.virtualWrite(V2, mind_n_XueYangShuJu);

Blynk.virtualWrite(V4, mind_n_XinLvShuJu);

yield();

}

myIot.publish(topic_0, “清零”);

}

else {

sstts.speak(“你好,请保持有效距离”);

}

}

}

if (huskylens.isLearned(2)) {

if (huskylens.isAppearDirect(HUSKYLENSResultBlock)) {

if (huskylens.isAppear(2,HUSKYLENSResultBlock)) {

sstts.speak(“吴承瀚先生,很高兴为您服务”);

myIot.publish(topic_0, “吴承瀚”);

for (int index = 0; index < 10; index++) {

delay(500);

myIot.publish(topic_0, (String(max30102.getSPO2()) + String(“%”)));

myIot.publish(topic_0, (String(max30102.getHeartbeat()) + String(“Times/min”)));

myIot.publish(topic_0, (String(mlx90614.getObjectTempC()) + String(“℃”)));

mind_n_WenDu = mlx90614.getObjectTempC();

mind_n_XinLvShuJu = max30102.getHeartbeat();

mind_n_XueYangShuJu = max30102.getSPO2();

Blynk.virtualWrite(V1, mind_n_WenDu);

Blynk.virtualWrite(V3, mind_n_XueYangShuJu);

Blynk.virtualWrite(V5, mind_n_XinLvShuJu);

yield();

}

myIot.publish(topic_0, “清零”);

}

else {

sstts.speak(“你好,请保持有效距离”);

}

}

}

Blynk.run();

}

// 自定义函数

void DF_ChuShiHua() {

mind_n_WenDu = 0;

mind_n_XinLvShuJu = 0;

mind_n_XueYangShuJu = 0;

myIot.wifiConnect(“GT-ndwz”, “ndwz-chqzhc”);

myIot.init(“iot.dfrobot.com.cn”,”zlsTe6f7R”,””,”z_yTeeB7Rz”,topics,1883);

myIot.connect();

while (!myIot.wifiStatus()) {yield();}

while (!myIot.connected()) {yield();}

display.setCursorLine(1);

display.printLine(“系统初始化中”);

sstts.speak(“系统初始化中,请稍候”);

display.setCursorLine(2);

display.printLine(“连接网络中……”);

display.setCursorLine(3);

display.printLine(“请稍候……”);

display.setCursorLine(4);

display.printLine(“网络连接成功”);

sstts.speak(“网络连接成功”);

huskylens.beginSoftwareSerialUntilSuccess(P14, P13);

huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);

huskylens.clearOSD();

display.fillScreen(0);

display.setCursorLine(1);

display.printLine(“人脸识别初始化成功”);

sstts.speak(“人脸识别初始化成功”);

max30102.sensorStartCollect();

sstts.speak(“物联网启动成功”);

display.setCursorLine(2);

display.printLine(“物联网启动成功”);

}

行空板编程部分

#  -*- coding: UTF-8 -*-

# MindPlus

# Python

from pinpong.board import Board

from unihiker import GUI

import requests

import siot

import time

# 自定义函数

def QiDongwifiSheZhi():

print(“扫描WIFI:”)

my_variable = requests.get(“http://10.1.2.3/wifi/scan”)

print(my_variable.text)

print(“扫描WIFI:”)

my_variable = requests.get(“http://10.1.2.3/wifi/connect?ssid=MI8&password=233233giao”)

print(my_variable.text)

print(“查看WiFi连接情况:”)

my_variable = requests.get(“http://10.1.2.3/wifi/status”)

print(my_variable.text)

# 事件回调函数

def on_message_callback(client, userdata, msg):

if (msg.payload.decode().find(“℃”)!=-1):

v1.config(text=msg.payload.decode())

else:

time.sleep(0.2)

v1.config(text=””)

if (msg.payload.decode().find(“%”)!=-1):

b1.config(text=msg.payload.decode())

else:

time.sleep(0.2)

b1.config(text=””)

if (msg.payload.decode().find(“Times/min”)!=-1):

a1.config(text=msg.payload.decode())

else:

time.sleep(0.2)

a1.config(text=””)

Board().begin()

siot.init(client_id=””,server=”iot.dfrobot.com.cn”,port=1883,user=”zlsTe6f7R”,password=”z_yTeeB7Rz”)

u_gui=GUI()

siot.connect()

siot.loop()

siot.set_callback(on_message_callback)

QiDongwifiSheZhi()

siot.getsubscribe(topic=”S3x2ggYnR”)

head=u_gui.draw_text(text=”社区健康系统”,x=40,y=10,font_size=18, color=”#CC0000″)

pic1=u_gui.draw_image(image=”southeast.png”,x=70,y=55)

pic1.config(w=100)

pic1.config(h=100)

v=u_gui.draw_text(text=”体温:”,x=30,y=150,font_size=15, color=”#CC0000″)

v1=u_gui.draw_text(text=”    “,x=90,y=150,font_size=15, color=”#CC0000”)

a=u_gui.draw_text(text=”心率:”,x=30,y=175,font_size=15, color=”#CC0000″)

a1=u_gui.draw_text(text=”    “,x=90,y=175,font_size=15, color=”#CC0000”)

b=u_gui.draw_text(text=”血氧:”,x=30,y=200,font_size=15, color=”#CC0000″)

b1=u_gui.draw_text(text=”    “,x=90,y=200,font_size=15, color=”#CC0000”)

ip=u_gui.draw_text(text=”ip:10.1.2.3:8080″,x=62,y=265,font_size=10, color=”#CC0000″)

txt=u_gui.draw_text(text=”MQTT连接成功”,x=62,y=280,font_size=12, color=”#CC0000″)

name=u_gui.draw_text(text=”GT创客空间   出品”,x=35,y=300,font_size=10, color=”#CC0000″)

while True:

pass

7、调试

由于使用摄像头、行空板、语音合成模块,扩展板供电不足,有时摄像头点不亮,行空板、掌控板也不够稳定,手扫感应开关模块的加入,很好控制了本设备的开机时间。

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片8-1024x529.png" alt="图片">

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片9-1024x476.png" alt="图片">

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片10-1024x477.png" alt="图片">

五、成果

包括外观图片、功能介绍、演示效果等,并提供必要的使用说明(包括外观图片、功能介绍、演示效果等,并提供必要的使用说明)

http://ai-gtmaker.com/wp-content/uploads/2024/04/图片11-1024x476.png" alt="图片">

功能介绍:

测温没有启动时,本作品可当镜面,可悬挂或放置桌面上,可以当做氛围灯使用;

当AI摄像头识别到用户人脸,启动测温,并语音提示信息;根据提示,将手指按在心率传感器上,检测心率与血氧浓度;

掌控板通过WIFI将数据上传到云端数据库;

语音播报管理中心发送的信息,同时显示屏显示信息;

不足之处:

本设计使用教育用的独立智能硬件,比如语音识别模块、AI摄像头、行空板等,成本计算偏高;如果要产品化设计,对于可以采用价格较低的普通硬件,在网速有保证的情况下,可以将智能化的模型计算、判断交给云端服务器(比如:百度大脑、科大迅飞等),减轻主控板的运算强度,供电功率也就可以降下来;

本项目,在未来可以将外形设计得更加美观,功能更加完善,使其测量精度更高,指向性更准确,并可以采用更加轻便牢固的材料。相信该项目能够很好的应用于生活中,使人们在疫情环境下更加方便。

六、团队成员介绍和工作分工说明

黄宣昊负责建模与编程,陈宇煊负责收集与整理信息,外形结构制作等,并与指导老师多次交流,参考或借鉴了老师的一些建议。

七、团队工作讨论记录表

第一次讨论:

讨论时间: 2022年 1月 10日 13点0 分至15点30分

参会人数:2人 陈宇煊  黄宣昊   缺席人数:0人

(一)主要讨论内容:

1、设计作品定位

2、作品使用的硬件模块等

(二)主要决定项(会议达成的主要成果,包括对后续方案的决策等)

1、本人参考资料,决定定位为医疗设备

2、决定使用掌控板做为主控,加入测温头、AI摄像头、语音合成模块

下一步行动项

负责人

时间节点

硬件连接,试验功能效果;

陈宇煊

2022.1.12

2、作品定位重新考虑,再征求意见;

陈宇煊

2022.1.15

3、作品外形结构重新设计

黄宣昊

2022.1.18

出席人员签到:

提前约定下次会议时间:

第二次讨论:

讨论时间: 2022年 2月 6日20点 0分至23点0分

参会人数:3人  陈宇煊  黄宣昊 邬肖英(师)  缺席人数:0人

(一)主要讨论内容:

1、作品定位确定为家居装饰用品、疫情防控管理助手

2、编程中调用的相关网络模块

3、是否考虑管理端手机APP的设计

(二)主要决定项(会议达成的主要成果,包括对后续方案的决策等)

1、认同本人对作品的重新定位

2、决定使用简单的教学用的数据库TinyWebDB服务器以及物联网Easy IOT,手机端不再编写APP,直接使用Blynk APP

下一步行动项

负责人

时间节点

1、激光切割、安装

黄宣昊

自行安排,不定时

2、硬件连接,加固

陈宇煊

自行安排,不定时

3、编程、调试

黄宣昊

自行安排,不定时

出席人员签到:

提前约定下次会议时间: