一、作品设计思路、实现和制作计划
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、初步构思:作为医疗器具的结构设计

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

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

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

5、硬件连接设计


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



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

功能介绍:
- 测温没有启动时,本作品可当镜面,可悬挂或放置桌面上,可以当做氛围灯使用;
- 当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、编程、调试 | 黄宣昊 | 自行安排,不定时 |
出席人员签到: | 提前约定下次会议时间: |
0000