×

因素身份验证锁开源资料

消耗积分:2 | 格式:zip | 大小:0.14 MB | 2022-07-04

李丽

分享资料个

PCB图如下:
poYBAGKxtpmAZ-jFAAIGkCwesOM526.png
poYBAGKxtpyAVHm1AAD6YTdwofg469.png



poYBAGKxtqWAaQPjAABjfmqSd70921.jpg

成分

A000066
阿杜诺
× 1
6-1462034-7
TE Con​​nectivity Potter & Brumfield 继电器
× 1
40 针跳线母对母 20 厘米 × 1
LCD-09053
火花乐趣
× 1
ATMEGA32-16AI
微芯片技术
× 1
106CKR063M
伊利诺伊电容器
× 1
741C083510JP
CTS电阻器产品
× 1
16针公头 × 1
16针母头 × 1
1624117-3
TE Con​​nectivity / Sigma 电感器
× 1

描述

2 因素身份验证锁

什么是银行安全数字门锁系统?

简单地说,它是一个数字门锁系统,它通过使用数字键盘和使用 Arduino Uno 板帮助门锁的安全性。这个想法有助于银行储物柜的安全

poYBAGKxtr2Afrt2AACAv7_g1Bc46.jpeg

项目所需的组件清单

Arduino UNO

16*2液晶显示器

伺服电机

Arduino 的 4*3 或 4*4 矩阵键盘

3D打印门锁或定制门锁系统

4” / 6”塑料盒、跳线、螺母螺栓、塑料外壳等。

用于 1 安培 5 伏移动充电器电源的附加组件。

pYYBAGKxtsCABVQvAADybLz7fB0129.png

项目描述

首先,该项目的大脑是 Arduino UNO 板。Arduino UNO 板与伺服电机一起连接到 LCD。 

在这里,伺服电机用于锁定或解锁门上的闩锁。 

16x2 LCD(16 列和 2 行)用于在 Arduino 的帮助下显示消息。 

使用的伺服电机是 5V Towerpro SG90。该伺服电机是基础级伺服电机,无需任何外部模块即可与 Arduino 配合使用。 

poYBAGKxtsOAJWV3AABkK30OYyc425.jpg

本项目使用了 4*4 矩阵键盘(但由于没有 4*4 键盘部分,我在上面的图形表示中使用了 4*3 键盘),但这不是问题,因为 4*3 矩阵键盘可以工作我使用的代码很好。

我们还需要一个用于密码输入和手动锁定我们定制的门锁的键盘。键盘共有 16 个按键。在所有键中,行中有 4 个键(R1、R2、R3、R4),列中有 4 个键(C1、C2、C3、C4)。

每当按下一个键时,就会在相应的行和列之间建立连接。

poYBAGKxtsWABpgXAACahiMtYaE300.jpg

代码

#include <键盘.h>

#include

#include <伺服.h>

伺服myservo;

液晶液晶(A0、A1、A2、A3、A4、A5);

#define Password_Lenght 7 // 为六个字符提供足够的空间 + NULL 字符

整数位置 = 0;// 存储伺服位置的变量

字符数据[密码长度];// 6 是它可以容纳的字符数 + 空字符 = 7

char Master[Password_Lenght] = "123456";

字节data_count = 0,master_count = 0;

布尔 Pass_is_good;

字符自定义键;

常量字节 ROWS = 4;

常量字节 COLS = 3;

字符键[ROWS][COLS] = {

{'1', '2', '3'},

{'4', '5', '6'},

{'7', '8', '9'},

{'*', '0', '#'}

};

布尔门=真;

字节 rowPins[ROWS] = {1, 2, 3, 4}; //连接到键盘的行引脚

字节 colPins[COLS] = {5, 6, 7}; //连接到键盘的列引脚

键盘 customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //初始化类NewKeypad的一个实例

无效设置()

{

myservo.attach(9);

伺服关闭();

lcd.begin(16, 2);

lcd.print("Arduino 门");

lcd.setCursor(0, 1);

lcd.print("--看项目--");

延迟(3000);

lcd.clear();

}

无效循环()

{

如果(门 == 0)

{

customKey = customKeypad.getKey();

if (customKey == '#')

{

lcd.clear();

伺服关闭();

lcd.print("门已关闭");

延迟(3000);

门 = 1;

}

}

否则打开();

}

无效清除数据()

{

而(数据计数!= 0)

{ // 这可以用于任何数组大小,

数据[data_count--] = 0; //清除新数据的数组

}

返回;

}

无效伺服打开()

{

for (pos = 180; pos >= 0; pos -= 5) { // 从 0 度变为 180 度

// 以 1 度为单位

myservo.write(pos); // 告诉伺服器转到变量 'pos' 中的位置

延迟(15);// 等待 15ms 让舵机到达位置

}

}

无效伺服关闭()

{

for (pos = 0; pos <= 180; pos += 5) { // 从 180 度变为 0 度

myservo.write(pos); // 告诉伺服器转到变量 'pos' 中的位置

延迟(15);// 等待 15ms 让舵机到达位置

}

}

}

无效打开()

{

lcd.setCursor(0, 0);

lcd.print("输入密码");

customKey = customKeypad.getKey();

if (customKey) // 确保某个键被实际按下,等于 (customKey != NO_KEY)

{

数据[data_count] = customKey; // 将字符存储到数据数组中

lcd.setCursor(data_count, 1); // 移动光标以显示每个新字符

lcd.print(数据[data_count]); // 在所述光标处打印字符

数据计数++;// 将数据数组加 1 以存储新字符,同时跟踪输入的字符数

}

if (data_count == Password_Lenght - 1) // 如果数组索引等于预期字符数,则将数据与 master 进行比较

{

if (!strcmp(Data, Master)) // 等于 (strcmp(Data, Master) == 0)

{

lcd.clear();

伺服打开();

lcd.print("门开着");

门 = 0;

}

lcd.clear();

lcd.print("密码错误");

延迟(1000);

门 = 1;

}

清除数据();

}

别的

{}

代码

代码

Keypad_Lock_System.ino

 

 

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

评论(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.obk20.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:'因素身份验证锁开源资料',//标题 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.obk20.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);