基于掌控板+二哈+TinyWebDB+Easy_IoT的人脸识别测温


前言

在疫情期间,住在村里或者小区的大家在出入的时候是不是都要测温呢,那工作人员对每一位出入的人员都需要逐个测量温度,这样就会比较辛苦。这个时候如果安排上人脸识别测温,是不是既解决了判别是否外来人员,也解决了测温的问题。
本实验是通过掌控板 + 掌控板扩展板 + DS18B20 + 二哈识图 + TinyWebDB + EasyIoT + Mind+ 来实现人脸识别测量温度的。(为什么用DS18B20呢,因为手头上没有测温的模块,先凑合着用)话不多说,我们就开始这个实验吧。


一、部分硬件及平台介绍

1、二哈识图(HuskyLens)

先声明一下,这 “只” “二哈” 可不是会拆家的二哈啊,它是DFRobot的一款简单易学的人工智能视觉传感器,内置了:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签(二维码)识别,6种功能。今天我们就只用它的 “人脸识别” 这一功能。在这里插入图片描述

2、TinyWebDB

TinyWebDB服务器是网络存储中的网络微数据库,重点是,它是免费滴,我们这一次就用它来作为我们的数据库使用。
点击这里进入TinyWebDB

3、Easy IoT

EasyIoT是一个比较简单的物联网管理平台,简单易用,可快速上手项目。(简单介绍)
Easy IoT官网

二、操作步骤

1、二哈的使用

(1)使用须知
在使用 “二哈” 前,我们要确保 “二哈” 当前的固件版本不低于V0.5.1,因为在此版本后,“二哈” 才能发挥它的全部能力,那么就需要查看 “二哈” 的固件版本。“二哈” 的大致模块布局图在上方

(Ps:以下所有的左右方向均是面向 “二哈” 屏幕的方向)
“二哈” 默认是英文版本的,我们先将它设置为中文:

  1. 往右拨动 “功能键”, 直到选中“General Settings”,短按 “功能键”,进入二级菜单
  2. 往右拨动 “功能键”,直到选中 “Language”,再选中 “简体中文”,先不要急着退出

(2)查看固件

  1. 在语言的左侧就可以看到当前的固件版本,我们只需要保证固件版本在V0.5.1就可以

(3)升级固件(如果固件版本已经是V.0.5.1及以上,这部分可忽略)

  1. 下载HUSKYLENS Uploader V2.1软件(固件升级软件)→下载地址
  2. 下载固件。下载V0.5.1版本固件
  3. 运行 “HUSKYLENS Uploader V2.1”在这里插入图片描述
  4. 接下来就是漫长的等待,大概5分钟左右,在烧录过程中,不要关闭烧录界面cmd窗口,烧录完成后,下方的 Loading会消失,“二哈” 会重启。

(4)开启多人脸识别
在完成了固件的升级后,我们首先要让 “二哈” 认识我们,就是人脸学习的过程,但 “二哈” 默认的人脸识别模式是 “单人人脸识别”,我们要让 “二哈” 认识多几个人,就必须更改设置 “识别多个”:

  1. 在人脸识别功能界面,长按 “功能键”,进入人脸识别的二级菜单
  2. 拨动 “功能键” 至 “识别多个”,短按 “功能键” 选中,往右拨动 “功能键”,打开 “识别多个” 的开关,短按 “功能键” 保存
  3. 往左拨动 “功能键” 至 “保存并返回”,选中退出

(5)学习人脸

  1. 在人脸识别的功能界面,先短按 “学习键”,将已学习的人脸遗忘;
  2. 长按 “学习键” 学习各角度的人脸,学习完成后即可松开 “学习键”;
  3. 如需继续学习人脸,则必须在倒计时前短按 “学习键”,否则想要新增人脸的话,只能先遗忘,再重新学习;(这是一个比较麻烦的点
  4. 不需继续学习可以等待倒计时结束或者短按 “功能键” 提前结束倒计时。
    其余详细功能使用请访问DFRobot的文档

2、TinyWebDB的使用

TinyWebDB官网
在这里插入图片描述
Ps:share为共享账号,为了方便查看数据,最好自己注册一个账号
在 “数据浏览” 中可以对数据增加/修改(目前发现只能在代码中对数据进行删除处理)
在这里插入图片描述
通过填写 “标签”、“值” 来添加/修改数据库中的数据
在这里插入图片描述

3、Easy IoT的使用

Easy IoT官网

  1. 注册/登录后,在工作间中
  2. 添加新的设备,获取一个Topic(主题)在这里插入图片描述

三、硬件连接

1、连接扩展板

掌控板直接插进扩展板中,方向为“中文”对“中文”

2、二哈接线

4pin接口(I2C模式)

序号标注管脚功能用途掌控板扩展板
1TSDA(绿)串行数据线P20
2RSCL(蓝)串行时钟线P19
3-GND(黑)电源负极-
4+VCC(红)电源正极+

3、DS18B20

由于本实验我用的是P0口连接掌控板,所以需要将扩展板上P0口附近的喇叭开关给关掉,避免冲突

序号标注管脚功能用途掌控板扩展板
1outDATA数据线P0
2+VCC电源正极+
3-GND电源负极-

四、图形化代码编写

1、导入库

依次将以下的主控板、模块、服务加载到Mind+上使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、连接WiFi

在这里插入图片描述

3、连接MQTT

在这里插入图片描述
在上图的 “MQTT初始化参数”中填入相对应的内容,即可配置MQTT
在这里插入图片描述

4、配置TinyWebDB服务器

在这里插入图片描述

在这里插入图片描述

5、人脸识别测温功能

在这里插入图片描述

6、全部代码:

(1)图形化代码
在这里插入图片描述
(2)Arduino C代码

/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <DFRobot_DS18B20.h>
#include <DFRobot_HuskyLens.h>
#include <mPython_tinywebdb.h>

// 动态变量
String         mind_s_name;
volatile float mind_n_Temp, mind_n_ShangYiCiShiBieJieGuo;
// 函数声明
void DF_RenLianShiBieCeWen();
void DF_LianJieWiFI();
void DF_LianJieMQTT();
// 静态常量
const String topics[5] = {"yourTopic","","","",""};	//这里是EasyIoT的Topic,更换为自己的即可
// 创建对象
DFRobot_HuskyLens huskylens;
DFRobot_DS18B20   ds18b20_P0;
DFRobot_Iot       myIot;
mPython_TinyWebDB mydb;


// 主程序开始
void setup() {
	mPython.begin();
	ds18b20_P0.begin(P0);
	DF_LianJieWiFI();
	delay(500);
	DF_LianJieMQTT();
	mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "yourUser","yourSecret");	//将用户名和密钥替换为自己的
	huskylens.beginI2CUntilSuccess();
	huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
	display.fillScreen(0);
	display.setCursorLine(1);
	display.printLine("请面向摄像头进行识别");
}
void loop() {
	huskylens.request();
	if (huskylens.isAppearDirect(HUSKYLENSResultBlock)) {
		if (huskylens.isLearned(huskylens.readBlockCenterParameterDirect().ID)) {
			DF_RenLianShiBieCeWen();
			myIot.publish(topic_0, (String(mind_s_name) + String((String(" 体温:") + String((String(mind_n_Temp) + String("℃")))))));
			mind_n_ShangYiCiShiBieJieGuo = 1;
		}
		else {
			if ((mind_n_ShangYiCiShiBieJieGuo==1)) {
				display.fillScreen(0);
				display.setCursorLine(1);
				display.printLine("非本社区人员,请登记");
				mind_n_ShangYiCiShiBieJieGuo = 0;
			}
		}
	}
}


// 自定义函数
void DF_RenLianShiBieCeWen() {
	mind_s_name = mydb.getTag((String(huskylens.readBlockCenterParameterDirect().ID)));
	display.fillInLine(1, 0);
	display.setCursorLine(1);
	display.printLine(mind_s_name);
	display.setCursorLine(2);
	display.printLine("请保持面向摄像头");
	display.fillInLine(3, 0);
	display.setCursorLine(3);
	display.printLine("3s后开始测温");
	delay(1000);
	display.setCursorLine(3);
	display.printLine("2s后开始测温");
	delay(1000);
	display.setCursorLine(3);
	display.printLine("1s后开始测温");
	delay(1000);
	display.fillInLine(3, 0);
	display.setCursorLine(3);
	display.printLine("开始测温");
	display.fillInLine(4, 0);
	mind_n_Temp = ds18b20_P0.getTempC();
	display.setCursorLine(4);
	display.printLine((String(mind_n_Temp) + String("℃")));
}
void DF_LianJieWiFI() {
	myIot.wifiConnect("yourSSID", "yourPASSWD");	//将WiFi替换为自己的
	display.setCursorLine(1);
	display.printLine("WiFi连接ing");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(1);
	display.printLine("WiFi连接成功");
	display.setCursorLine(2);
	display.printLine(myIot.getWiFiLocalIP());
}
void DF_LianJieMQTT() {
	myIot.init("iot.dfrobot.com.cn","yourIot_id","","yourIot_pwd",topics,1883);		//将用户名、用户密码替换为自己的
	myIot.connect();
	display.setCursorLine(3);
	display.printLine("MQTT连接ing");
	while (!myIot.connected()) {yield();}
	display.fillInLine(3, 0);
	display.setCursorLine(3);
	display.printLine("MQTT连接成功");
}

(3)代码链接:
图形化代码
Arduino C代码

五、总结

这个实验不是很难,只要一步步来做,很快就能完成。
讲的不是很好,欢迎大家前来探讨交流,如果发现有问题,还请大家多多提出来,一起学习。
Ps:如果各位看官有钱,可用MLX90614红外测温模块等专业模块替代DS18B20或LM35,毕竟DS18B20只是替代品

本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分参赛项目,转载请保留声明。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simply myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值