×

因素身份验证锁开源资料

消耗积分:0 | 格式: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条评论

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