×

RFID和生物识别PC登录/退出界面

消耗积分:2 | 格式:zip | 大小:0.07 MB | 2022-10-19

张秀兰

分享资料个

描述

介绍

这是我为我在大学的微处理器编程实验室制作的一个项目。项目目标是使用 RFID 卡或指纹扫描登录和退出我的 PC。

我非常重视隐私,因此无需输入密码即可在几秒钟内登录和退出,这对我来说是救命稻草。该接口完全开源,您可以随意使用和修改。

这里有两件非常重要的事情:

您可以仅将这个项目与 RFID 阅读器一起使用,而代码绝对不会发生任何变化,但仅将其与指纹扫描仪一起使用则需要完整的代码重建。

接线

接线,尽管它看起来非常简单,并在下面解释。最重要的注意事项:

  • 大多数 RC522 模块由 3、3 V 电源供电,并且非常敏感,所以请绝对确定,您使用正确的电压连接它,Leonardo 有专用引脚,提供 3、3 V
  • 在您的 RC522 上,您留下 2 个引脚未连接到任何东西 - IRQ 和 RST
  • 您将 LCD 的 LED 阳极连接到 Arduino 数字引脚,而不是 5 V 电源
pYYBAGNOSEyAO-DAAAJK57YyzEA023.png
 

该项目的 Arduino Leonardo 引脚分配:

  • D0 (RX) - Z70 的 TD 引脚
  • D1 (TX) - Z70 的 RD 引脚
  • D2 - LCD 的 RS 引脚
  • D3 - LCD 的使能引脚
  • D4-D7 - LCD 的数据 4-7 引脚
  • D8 - LCD 阳极
  • D9 - 空白
  • D10 - RC522 的 SDA/NSS 引脚
  • D11 - 注销/LCD 开启按钮
  • ICSP SCK (9) - RC522 的 SCK 引脚
  • ICSP MOSI (10) - RC522 的 MOSI 引脚
  • ICSP MISO (11) - RC522 的 MISO 引脚
  • 3、3 V 输出 - 为 RC522 供电
  • 5 V 输出 - 为 LCD、按钮和 Z70 传感器供电

 

代码-在你开始之前

首先,您需要将 5 个库添加到您的 Arduino IDE(如果您还没有):

  • 键盘.h
  • SPI.h
  • MFRC522.h
  • LiquidCrystal.h
  • Adafruit_Fingerprint.h

您可以在通过 Ctrl+Shift+I 访问的库管理器中执行此操作。然后将此项目代码复制到您的 IDE。

接下来,您要转到第 128 行并注释掉 logOut() 函数标注(这样您就不会在调试期间注销系统),并对第 190 行中的 passwd() 函数标注执行相同的操作。

 
 
 
poYBAGNOSFCAfsCLAAAMZf2hnZ0972.png
 
1 / 2
 

完成后不要忘记取消注释这些,否则您将无法登录或退出!

最后一件事是在代码中设置您的密码,这样 Arduino 可以在登录时将其记下。您在第 23 行执行此操作,更改密码字符串变量。

poYBAGNOSFKAIX8AAAAI-CQ3EqI601.png
 

代码

所以首先要做的是确定你的RFID卡ID。为此,如下所示连接所有内容,并在 IDE 中打开该项目的代码。在第 184 行中,您已注释掉调试行,它将读取的卡 ID 转储到串行监视器。只需取消注释,上传到 Arduino,打开串行监视器并将卡靠近读卡器。

pYYBAGNOSFWAFd4CAAAOhcFk-hQ806.png
 

将 ID 复制到第 22 行的“logCard”字符串变量。

poYBAGNOSFeAStxtAAAN_Tckxqc041.png
 

如果您只使用 RFID 阅读器,请注释掉第 184 行,取消注释第 128 和 190 行,将代码上传到 Arduino,就完成了。如果您使用指纹读取器,只需注释掉第 184 行,然后继续阅读。

 

CODE -使用Z70指纹读取器任何Adafruit_Fingerprint支持的)

所以现在您需要将您的手指保存到 Z70 内存中。为此,请在 IDE 中打开新项目,然后从文件 -> 示例 -> Adafruit 指纹传感器库打开“注册”示例。将其上传到 Arduino,打开串行监视器,然后按照说明进行操作。该示例非常不言自明,它将引导您添加任意数量的指纹扫描,并将它们分配给从 1 到 999 的 ID。

添加手指后,返回此项目的代码。现在你有两个选择:

  • 保持原样,您保存到 Z70 内存中的每根手指都会解锁您的 PC
  • 对代码进行一些更改,只让特定的手指 ID 解锁 PC

 

CODE -仅用特定手指解锁PC _

好的,所以您让您的姐姐、妈妈、爸爸、奶奶和狗将手指保存到传感器中,并且不想清空整个内存,您还希望只有手指能够解锁 PC。太好了,所以您需要在代码中挖掘更多内容。在第 47 行和第 48 行(在 FingerID() 函数中)有更多注释掉的调试选项,您想取消注释。这些将读取手指的 ID 转储到串行监视器。与 RFID 卡 ID 非常相似,取消注释,上传,放置手指,然后从串行监视器读取其 ID。

poYBAGNOSGCAWgAbAAAXByNX8no233.png
 

现在你一直向下切换,从第 176 行开始。在那里你有“案例 0”,用 RFID 解锁你的 PC 和“默认”,用 Z70 内存中的任何手指解锁它。您要做的是添加另一个带有手指ID(从串行监视器读取)的案例,例如“案例1:”,将“默认”的内容复制到其中,并清空“默认”。

 
 
 
pYYBAGNOSGKAGcpGAADGVoGQ0ig624.png
 
1 / 3
 

您可以根据需要添加任意数量的新案例,带有个性化的 LCD 消息,用于每个人的登录,例如“你好妈妈!”、“嗨爸爸!”、“拿出你的小...

不管怎样,现在注释掉第 47 行和第 48 行,你就完成了这个项目。

 

CODE -调整、提示忘记事情尽管多次提醒

首先 - 确保第 128 和 190 行未注释,第 47、48、184 行已注释掉!

现在进行不太重要的调整。我的电脑启动时间很长,所以我在第一个循环开始之前添加了 7 秒的延迟。它位于 setup() 中的第 110 和 116 行。当然,如果您的系统启动时间更长或更短,您可以更改它。请记住,它只会在出现锁定屏幕后将您记录到 Windows 10(如果您在启动过程中放置​​卡/手指,则必须单击按钮并重试)。

pYYBAGNOSGaAG2IYAAAqhN2AQlU788.png
 

另一个调整。为了节省一点液晶显示器而不是让我因指纹扫描仪闪烁 LED 屏幕而发疯,Z70 会在 15 秒后关闭。发生这种情况时,您仍然可以使用 RFID 卡解锁,但要使用手指,您需要按下按钮来激活传感器。

您可以通过调整第 147 行中的 if 语句来更改关闭它们需要多长时间。为了完美测量,您需要转到第 160 行,取消注释,然后查看所需时间后的数字有多高(每个迭代次数屏幕上会增加,所以对我来说 15 秒后是 90)。有了号码后,只需将其粘贴到第 147 行而不是第 90 行,然后注释掉第 160 行。

 
 
 
poYBAGNOSGqAG0dJAAAFYNmKgoc559.png
 
1 / 2
 

3D打印案例

这是 Thingiverse 的链接,其中包含用于打印我的案例的 STL。要组装它,您需要氰基丙烯酸酯胶(如强力胶)和四个小家具螺丝。还有很大的耐心,打印需要永远,然后固化胶水。另外,您只想将胶水放在外壳内部,因为 CA 胶水会在 PLA 上留下令人讨厌的白色东西。

 
 
 
pYYBAGNOSHKAFSyOABV6FOD0ke4631.jpg
 
1 / 4
 

我将它打印在 Tevo Tarantula Pro 的玻璃加热床上。以下是参数(它们也在 Thingiverse 上):

正面、正面元素(针脚和指纹/按钮槽)和顶部:

挤出机/床温 200/50;层 0.2 毫米; 填充 10% 蜂窝;熨烫;速度 60 毫米/秒;Z 跳上

底部、背面、侧面:

挤出机/床温 200/50;层 0.3 毫米;填充 10% 蜂窝;熨烫;速度 60 毫米/秒;Z 跳上

我花了14个多小时才把它全部打印出来。

此外,在你把所有东西放在一起之后,在 LCD、RFID 阅读器和按钮后面的每个引脚上滴一滴热胶,将它们固定在适当的位置。您可以使用扎带或热胶将指纹传感器锁定到位。

就是这样感谢阅读本文希望能够自己完成_ _ _ _


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'RFID和生物识别PC登录/退出界面',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);