PCB图如下:
成分
A000066 阿杜诺 |
× 1 |
6-1462034-7 TE Connectivity Potter & Brumfield 继电器 |
× 1 |
40 针跳线母对母 20 厘米 | × 1 |
LCD-09053 火花乐趣 |
× 1 |
ATMEGA32-16AI 微芯片技术 |
× 1 |
106CKR063M 伊利诺伊电容器 |
× 1 |
741C083510JP CTS电阻器产品 |
× 1 |
16针公头 | × 1 |
16针母头 | × 1 |
1624117-3 TE Connectivity / Sigma 电感器 |
× 1 |
描述
2 因素身份验证锁
什么是银行安全数字门锁系统?
简单地说,它是一个数字门锁系统,它通过使用数字键盘和使用 Arduino Uno 板帮助门锁的安全性。这个想法有助于银行储物柜的安全
项目所需的组件清单
Arduino UNO
16*2液晶显示器
伺服电机
Arduino 的 4*3 或 4*4 矩阵键盘
3D打印门锁或定制门锁系统
4” / 6”塑料盒、跳线、螺母螺栓、塑料外壳等。
用于 1 安培 5 伏移动充电器电源的附加组件。
项目描述
首先,该项目的大脑是 Arduino UNO 板。Arduino UNO 板与伺服电机一起连接到 LCD。
在这里,伺服电机用于锁定或解锁门上的闩锁。
16x2 LCD(16 列和 2 行)用于在 Arduino 的帮助下显示消息。
使用的伺服电机是 5V Towerpro SG90。该伺服电机是基础级伺服电机,无需任何外部模块即可与 Arduino 配合使用。
本项目使用了 4*4 矩阵键盘(但由于没有 4*4 键盘部分,我在上面的图形表示中使用了 4*3 键盘),但这不是问题,因为 4*3 矩阵键盘可以工作我使用的代码很好。
我们还需要一个用于密码输入和手动锁定我们定制的门锁的键盘。键盘共有 16 个按键。在所有键中,行中有 4 个键(R1、R2、R3、R4),列中有 4 个键(C1、C2、C3、C4)。
每当按下一个键时,就会在相应的行和列之间建立连接。
代码
#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条评论
快来发表一下你的评论吧 !