安全是我们日常生活中的主要问题,数字锁已成为这些安全系统的重要组成部分。在该项目中,使用arduino板和矩阵键盘模仿了一种这样的数字密码锁。
组件
- Arduino的
- 键盘模块
- 蜂鸣器
- 16x2 LCD
- BC547晶体管
- 电阻(1k)
- 面包板
- 功率
- 连接线
在该电路中,我们使用了多路复用技术来连接键盘,以便在系统中输入密码。在这里,我们使用包含16键的4x4键盘。如果要使用16键,则需要16针连接到arduino,但是在多路复用技术中,我们仅需使用8针来连接16键。因此,这是连接小键盘模块的明智方法。
复用技术:复用技术是一种非常有效的方法,可以减少微控制器用于提供输入或密码或数字的引脚数。基本上,此技术有两种使用方式:一种是行扫描,另一种是结肠扫描。但是在这个基于arduino的项目中,我们使用了键盘库,因此我们无需为此系统编写任何多路复用代码。我们只需要使用键盘库来提供输入。
电路说明
该项目的电路非常简单,包含Arduino,键盘模块,蜂鸣器和LCD。Arduino控制着整个过程,例如从键盘模块获取密码,比较密码,驱动蜂鸣器以及将状态发送到LCD显示屏。键盘用于获取密码。蜂鸣器用于指示,LCD用于显示状态或消息。蜂鸣器由NPN晶体管驱动。
键盘模块的Column引脚直接连接到引脚4、5、6、7,Row引脚连接到arduino uno的3、2、1、0。16x2 LCD以4位模式与arduino连接。控制引脚RS,RW和En直接连接到arduino的引脚13,GND和12。数据引脚D4-D7连接到arduino的引脚11、10、9和8。一个蜂鸣器通过BC547 NPN晶体管连接到arduino的引脚14(A1)。
加工
我们已经使用内置的arduino的EEPROM来保存密码,因此当我们第一次运行该电路时,程序会从内置的arduino的EEPROM中读取垃圾数据并将其与输入的密码进行比较,并在LCD上显示一条消息,因为密码不匹配,该信息被拒绝访问。为了解决此问题,我们需要使用以下给出的程序来首次设置默认密码:
for(int j = 0; j <4; j ++)EEPROM.write(j,j + 49);
lcd.print(“ Enter Ur Passkey:”); lcd.setCursor(0,1); for(int j = 0; j <4; j ++)pass = EEPROM.read(j);
这会将密码“ 1234”设置为Arduino的EEPROM。
第一次运行后,我们需要从程序中删除它,然后再次将代码写入arduino并运行。现在您的系统将运行正常。现在是您第二次使用的密码是“ 1234”。现在,您可以通过按#按钮进行更改,然后输入当前密码,然后输入新密码。
输入密码时,系统会将输入的密码与存储在arduino EEPROM中的密码进行比较。如果发生匹配,则LCD将显示“访问权限”,如果密码错误,则LCD将“拒绝访问”,并且蜂鸣器会持续发出蜂鸣声一段时间。每当用户按下键盘上的任何按钮时,蜂鸣器也会发出一声蜂鸣声。
编程说明
在代码中,我们使用了键盘库来将键盘与arduino接口。
#包括
const字节ROWS = 4; //四行const字节COLS = 4; //四列char hexaKeys = {{'1','2','3','A'},{'4','5','6','B'},{'7',' 8','9','C'},{'*','0','#','D'}}; 字节rowPins = {3,2,1,0}; //连接到键盘字节colPins = {4,5,6,7};的行引出线;//连接到键盘的列引脚// //初始化类NewKeypad的实例Keypad customKeypad = Keypad(makeKeymap(hexaKeys),rowPins,colPins,ROWS,COLS);
我们包括用于LCD接口和EEPROM接口的LCD库,还包括EEPROM.h。库,然后初始化了组件的变量和定义的引脚。
#定义蜂鸣器15 LiquidCrystal lcd(13,12,11,10,9,8); 字符密码 字符pass,pass1; int i = 0; char customKey = 0;
然后我们初始化LCD并在设置功能中指示引脚方向
void setup(){lcd.begin(16,2); pinMode(led,OUTPUT); pinMode(蜂鸣器,输出); pinMode(m11,输出); pinMode(m12,OUTPUT); lcd.print(“电子”); lcd.setCursor(0,1); lcd.print(“键盘锁”); delay(2000); lcd.clear(); lcd.print(“ Enter Ur Passkey:”); lcd.setCursor(0,1);
在此之后,我们读取键盘循环功能
customKey = customKeypad.getKey(); if(customKey =='#')change(); 如果(customKey){密码= customKey; lcd.print(customKey); 嘟(); }
然后使用字符串比较方法将密码与保存密码进行比较。
if(i == 4){delay(200); for(int j = 0; j <4; j ++)pass = EEPROM.read(j); if(!(strncmp(password,pass,4))){digitalWrite(led,HIGH); 嘟(); lcd.clear(); lcd.print(“已接受密码”); delay(2000); lcd.setCursor(0,1); lcd.print(“#。Change Passkey”); delay(2000); lcd.clear(); lcd.print(“ Enter Passkey:”); lcd.setCursor(0,1); i = 0; digitalWrite(led,LOW); }
这是密码更改功能和蜂鸣器提示音功能
void change(){int j = 0; lcd.clear(); lcd.print(“ UR当前密码”); lcd.setCursor(0,1); while(j <4){char key = customKeypad.getKey(); if(key){pass1 = key; lcd.print(key); void beep(){digitalWrite(buzzer,HIGH); 延迟(20); digitalWrite(蜂鸣器,低); }