赞
踩
在疫情期间,住在村里或者小区的大家在出入的时候是不是都要测温呢,那工作人员对每一位出入的人员都需要逐个测量温度,这样就会比较辛苦。这个时候如果安排上人脸识别测温,是不是既解决了判别是否外来人员,也解决了测温的问题。
本实验是通过掌控板 + 掌控板扩展板 + DS18B20 + 二哈识图 + TinyWebDB + EasyIoT + Mind+ 来实现人脸识别测量温度的。(为什么用DS18B20呢,因为手头上没有测温的模块,先凑合着用)话不多说,我们就开始这个实验吧。
先声明一下,这 “只” “二哈” 可不是会拆家的二哈啊,它是DFRobot的一款简单易学的人工智能视觉传感器,内置了:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签(二维码)识别,6种功能。今天我们就只用它的 “人脸识别” 这一功能。
TinyWebDB服务器是网络存储中的网络微数据库,重点是,它是免费滴,我们这一次就用它来作为我们的数据库使用。
点击这里进入TinyWebDB
EasyIoT是一个比较简单的物联网管理平台,简单易用,可快速上手项目。(简单介绍)
Easy IoT官网
(1)使用须知
在使用 “二哈” 前,我们要确保 “二哈” 当前的固件版本不低于V0.5.1,因为在此版本后,“二哈” 才能发挥它的全部能力,那么就需要查看 “二哈” 的固件版本。“二哈” 的大致模块布局图在上方
(Ps:以下所有的左右方向均是面向 “二哈” 屏幕的方向)
“二哈” 默认是英文版本的,我们先将它设置为中文:
(2)查看固件
(3)升级固件(如果固件版本已经是V.0.5.1及以上,这部分可忽略)
(4)开启多人脸识别
在完成了固件的升级后,我们首先要让 “二哈” 认识我们,就是人脸学习的过程,但 “二哈” 默认的人脸识别模式是 “单人人脸识别”,我们要让 “二哈” 认识多几个人,就必须更改设置 “识别多个”:
(5)学习人脸
TinyWebDB官网
Ps:share为共享账号,为了方便查看数据,最好自己注册一个账号
在 “数据浏览” 中可以对数据增加/修改(目前发现只能在代码中对数据进行删除处理)
通过填写 “标签”、“值” 来添加/修改数据库中的数据
1、连接扩展板
掌控板直接插进扩展板中,方向为“中文”对“中文”
2、二哈接线
4pin接口(I2C模式)
序号 | 标注 | 管脚功能 | 用途 | 掌控板扩展板 |
---|---|---|---|---|
1 | T | SDA(绿) | 串行数据线 | P20 |
2 | R | SCL(蓝) | 串行时钟线 | P19 |
3 | - | GND(黑) | 电源负极 | - |
4 | + | VCC(红) | 电源正极 | + |
3、DS18B20
由于本实验我用的是P0口连接掌控板,所以需要将扩展板上P0口附近的喇叭开关给关掉,避免冲突
序号 | 标注 | 管脚功能 | 用途 | 掌控板扩展板 |
---|---|---|---|---|
1 | out | DATA | 数据线 | P0 |
2 | + | VCC | 电源正极 | + |
3 | - | GND | 电源负极 | - |
依次将以下的主控板、模块、服务加载到Mind+上使用
在上图的 “MQTT初始化参数”中填入相对应的内容,即可配置MQTT
(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只是替代品
本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分参赛项目,转载请保留声明。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。