设计背景/功能需求:
虽然疫情给大家带来了很多不便,但本月21号开始的世界杯足球赛,给广大球迷带来了一丝慰藉。传统强队阿根廷和德国的表现不佳,但我喜欢的桑巴军团----巴西队的表现还是一贯稳健的。刚好为球赛设计一套签到门禁系统,方便队员们签到,确保队员到场,不耽误比赛。
巴西队2022世界杯26人大名单
主教练:蒂特
门将:阿利森(利物浦)、埃德森(曼城)、韦弗顿(帕尔梅拉斯)
后卫:达尼洛(尤文)、阿尔维斯(美洲狮)、桑德罗(尤文)、特莱斯(塞维利亚)、蒂亚戈-席尔瓦(切尔西)、马尔基尼奥斯(巴黎)、米利唐(皇马)、布雷默(尤文)
中场:卡塞米罗(曼联)、法比尼奥(利物浦)、吉马良斯(纽卡)、弗雷德(曼联)、帕奎塔(西汉姆)、里贝罗(弗拉门戈)
前锋:内马尔(巴黎)、维尼修斯(皇马)、热苏斯(阿森纳)、安东尼(曼联)、拉菲尼亚(巴萨)、理查利森(热刺)、马丁内利(阿森纳)、罗德里戈(皇马)、佩德罗(弗拉门戈)
首发阵容
功能原理
此系统主要由DF的人工智能神器HuskyLens和掌控板组成,利用二哈的人脸识别功能,对签到队员进行识别签到,保证参赛队员一个都不少,比赛的顺利进行。
人脸识别数据录入可以参考一下产品维库https://wiki.dfrobot.com.cn/_SKU_SEN0305_Gravity__HUSKYLENS_%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E6%91%84%E5%83%8F%E5%A4%B4#target_16
系统连接图
结构设计
具体编程说明:
编程还是用我们熟悉的Mind+图形化编程软件,因为需要对数据进行记录,所以用MQTT连接,利用DF的物联网服务器EasyIOT,很方便把数据记录到服务器端,方便数据记录整理。要完成这个功能,首先需要连接WIFI网络,我们把这两部分程序分别自定义为两个程序模块,方便调用。服务连接成功,掌控板上的LED指示灯会亮绿色,同时掌控板上会有信息提示。
程序说明:
1、程序初始化,wifi连接,屏幕提示,掌控板0号绿灯亮;
2、MQTT连接成功,屏幕提示,掌控板1号绿灯亮;
3、按A键开始人脸识别签到,掌控板会依次显示签到人员名字,并计数;
4、当队员人数达到出场数量,即11个人,掌控板2号灯亮黄色,同时闸机打开放行。
MQTT连接
关于EasyIOT的介绍和配置,请移步这里参考https://makelog.dfrobot.com.cn/article-1183.html
我这里主要对人数要进行统计并上传。
WIFI连接
程序初始化
主程序
。。。。。。。。。。
程序运行后,在EasyIOT后台显示的数据结果:
/*!
* MindPlus
* mpython
*
*/
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <DFRobot_Servo.h>
#include <DFRobot_HuskyLens.h>
// 动态变量
volatile float mind_n_ZongRenShu;
// 函数声明
void DF_LianJieWIFI();
void DF_EasyIOT();
void onButtonAPressed();
// 静态常量
const String topics[5] = {"es4ArQd4R","","","",""};
// 创建对象
Servo servo_P1;
DFRobot_HuskyLens huskylens;
DFRobot_Iot myIot;
// 主程序开始
void setup() {
mPython.begin();
servo_P1.attach(P1);
buttonA.setPressedCallback(onButtonAPressed);
display.fillScreen(0);
rgb.write(-1, 0x000000);
DF_LianJieWIFI();
DF_EasyIOT();
servo_P1.angle(abs(90));
huskylens.beginI2CUntilSuccess();
huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
}
// 自定义函数
void DF_LianJieWIFI() {
myIot.wifiConnect("301", "17341799959");
display.setCursorLine(1);
display.printLine("WIFI正在连接......");
while (!myIot.wifiStatus()) {yield();}
display.fillInLine(1, 0);
display.setCursorLine(1);
display.printLine("WIFI连接成功");
display.setCursorLine(2);
display.printLine((String("IP地址") + String(myIot.getWiFiLocalIP())));
rgb.write(0, 0x00FF00);
}
void DF_EasyIOT() {
myIot.init("iot.dfrobot.com.cn","1f2T9wd4R","","1f2o9Qd4Rz",topics,1883);
myIot.connect();
display.setCursorLine(3);
display.printLine("MQTT正在连接......");
while (!myIot.connected()) {yield();}
display.fillInLine(3, 0);
display.setCursorLine(3);
display.printLine("MQTT连接成功");
rgb.write(1, 0x00FF00);
myIot.publish(topic_0, "hello");
}
// 事件回调函数
void onButtonAPressed() {
display.fillScreen(0);
mind_n_ZongRenShu = 0;
while (!(mind_n_ZongRenShu==11)) {
display.fillInLine(1, 0);
display.setCursorLine(1);
display.printLine((String("首发签到总人数:") + String(mind_n_ZongRenShu)));
huskylens.request();
if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("内马尔")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(2,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("拉菲尼亚")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(3,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("维尼修斯")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(4,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("卡塞米罗")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(5,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("弗雷德")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(6,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("帕奎塔")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(7,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("席尔瓦")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(8,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("达尼洛")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(9,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("桑德罗")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(10,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("马基尼奥斯")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
if (huskylens.isAppear(14,HUSKYLENSResultBlock)) {
display.fillInLine(2, 0);
display.setCursorLine(2);
display.printLine((String("姓名:") + String("阿利松")));
buzz.freq(131, BEAT_1_4);
mind_n_ZongRenShu += 1;
}
delay(2000);
yield();
}
display.fillInLine(1, 0);
display.setCursorLine(1);
display.printLine((String("首发签到总人数:") + String(mind_n_ZongRenShu)));
display.fillInLine(2, 0);
buzz.freq(262, BEAT_1);
display.setCursorLine(3);
display.printLine("巴西队首发队员到齐");
rgb.write(2, 0xFFFF00);
servo_P1.angle(abs(0));
myIot.publish(topic_0, "巴西队首发人数到齐");
}
附件
hacker_2023.05.19
666
花生编程2023.01.19
6666666666
花生编程2023.01.19
赞!!!
花生编程2023.01.18
厉害
三春牛-创客2022.12.30
66666666666
三春牛-创客2022.12.30
厉害了!
豆爸2022.11.26
6666
tiger_zc2022.11.28
还在修改中,哈哈