Arduino Keyless Door Lock System with Keypad and LCD
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
应用和在线服务
![]() |
|
关于这个项目
带键盘和 LCD 的 Arduino 无钥匙门锁系统0
0
作者:阿里·哈姆扎
在这个项目中,我们将制作一个无钥匙门锁系统,它使用 4X4 键盘输入钥匙,使用 DC 锁打开或关闭门。 16X2 LCD 将用于显示。
必需组件
本项目所需组件如下
- 阿杜诺
- 4X4 键盘
- 液晶显示
- 直流锁
- 中继
- 9V 电池
- 10k 电位器
- 220 欧姆电阻
它是如何工作的?
每当按键被按下时,它们就会与已经存储的按键相匹配。如果按下的键与存储在 EEPROM 中的初始密码“1234”匹配,则锁将打开。如果密码不匹配,则LCD上会打印“access denied”。
如果按下‘#’键,它会要求您输入当前密码,如果匹配,则会要求您输入新密码,密码将被更改。
电路图
首先,将 4X4 键盘连接到 Arduino;将 4X4 键盘上的前六个引脚与 Arduino 上的 A0 和 A5 引脚连接。然后将 4X4 键盘模块上的最后两个引脚连接到 Arduino 上的数字引脚 3 和 2。
之后,将 LCD 连接到 Arduino。 LCD与Arduino的连接方式如下
- 将 LCD 上的引脚 1(即 VSS 引脚)连接到 Arduino 上的 GND
- 将引脚 2(即 VDD 引脚)连接到 Arduino 上的 5V 引脚
- 将引脚 3(即 V0)连接到 10k 电位器的中间,并将电位器上的另外两个引脚连接到 Arduino 上的 5V 和 GND。此引脚用于设置 LCD 的对比度。
- 将引脚 4(即 RS 引脚)连接到 Arduino 上的引脚 7
- 将引脚 5(即 R/W 引脚)连接到 Arduino 上的 GND 引脚
- 将引脚 6(即启用引脚)连接到 Arduino 上的引脚 6
- 将数据引脚 11、12、13 和 14 连接到 Arduino 上的引脚 5、4、3 和 2
- 通过 220 欧姆电阻将 LCD 的背光引脚 15 连接到 Arduino 上的 5V
- 将 Arduino 上的引脚 16(背光的负极引脚)连接到 Arduino 上的 GND
最后,我们将把 DC 锁与 Arduino 连接起来。 Lock 的工作电压为 7 到 12V,因此我们无法将其直接连接到 Arduino。要将其连接到 Arduino,我们需要一个继电器和一块电池。
将继电器的信号引脚连接到 Arduino 上的引脚 10,将锁的 VCC 和 GND 连接到 Arduino 上的 5V 和 GND。然后在继电器的另一端,将电池的负极连接到继电器上的公共端,将继电器上的 NO(常开)连接到锁的一侧。然后将锁的另一端连接到电池的正极。

Arduino 键盘锁代码
初始密码为1234。
#include #include#includeLiquidCrystal液晶显示(9,8,7,6,5,4,);字符密码[4]; char initial_password[4],new_password[4];int i=0;int relay_pin =10;char key_pressed=0;const byte rows =4; const 字节列 =4; char hexaKeys[rows][columns] ={{'1','2','3','A'},{'4','5','6','B'},{'7' ,'8','9','C'},{'*','0','#','D'}};byte row_pins[rows] ={A0,A1,A2,A3};byte column_pins[columns] ={A4,A5,3,2}; Keypad keypad_key =Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);void setup(){ pinMode(relay_pin, OUTPUT);液晶显示器。开始(16,2); Liquid_crystal_display.print("DIYhacking.com");液晶显示.setCursor(0,1); Liquid_crystal_display.print("电子锁");延迟(2000);液晶显示.clear(); Liquid_crystal_display.print("输入密码");液晶显示.setCursor(0,1); initialpassword();}void loop(){digitalWrite(relay_pin, HIGH); key_pressed =keypad_key.getKey(); if(key_pressed=='#') change(); if (key_pressed) { 密码[i++]=key_pressed;液晶显示。打印(按键按下); } if(i==4) { delay(200); for(int j=0;j<4;j++) initial_password[j]=EEPROM.read(j); if(!(strncmp(password, initial_password,4))) { liquid_crystal_display.clear(); Liquid_crystal_display.print("通过接受");数字写入(relay_pin,低);延迟(2000);液晶显示.setCursor(0,1); Liquid_crystal_display.print("按#更改");延迟(2000);液晶显示.clear(); Liquid_crystal_display.print("请输入密码:");液晶显示.setCursor(0,1);我=0; } else { digitalWrite(relay_pin, HIGH);液晶显示.clear(); Liquid_crystal_display.print("密码错误");液晶显示.setCursor(0,1); Liquid_crystal_display.print("按#更改");延迟(2000);液晶显示.clear(); Liquid_crystal_display.print("输入密码");液晶显示.setCursor(0,1);我=0; } }}void change(){ int j=0;液晶显示.clear(); Liquid_crystal_display.print("当前密码");液晶显示.setCursor(0,1); while(j<4) { char key=keypad_key.getKey(); if(key) { new_password[j++]=key;液晶显示。打印(键); } key=0;延迟(500); if((strncmp(new_password, initial_password, 4))) { liquid_crystal_display.clear(); Liquid_crystal_display.print("密码错误");液晶显示.setCursor(0,1); Liquid_crystal_display.print("再试一次");延迟(1000); } 否则 { j=0;液晶显示.clear(); Liquid_crystal_display.print("新密码:");液晶显示.setCursor(0,1); while(j<4) { char key=keypad_key.getKey(); if(key) { initial_password[j]=key;液晶显示。打印(键); EEPROM.write(j,key); j++; } } liquid_crystal_display.print("Pass Changed");延迟(1000); liquid_crystal_display.clear(); Liquid_crystal_display.print("输入密码");液晶显示.setCursor(0,1); key_pressed=0;}void initialpassword(){ for(int j=0;j<4;j++) EEPROM.write(j, j+49); for(int j=0;j<4;j++) initial_password[j]=EEPROM.read(j);}
代码说明
首先,我们将包括用于 4X4 键盘、LCD 的库和用于存储密码的库。 EEPROM 库用于存储密码。其中存储的默认密码为“1234”。
#include #include#include
在循环函数中,按下的键将存储在‘key_pressed ’ 变量,它将与其他键进行比较。如果按下的键是‘#’,则调用更改函数并要求输入新密码。
key_pressed =keypad_key.getKey(); if(key_pressed=='#') change();
按下的键存储在‘密码中 ’变量,当按下这些键时,这些将显示在 LCD 上。然后这些密钥将与存储在 EEPROM 中的初始密码匹配。如果按下的键与初始密码匹配,则锁将打开,并在 LCD 上打印“接受通行证”。如果密码不匹配,则会要求再次输入密码。
if (key_pressed) { password[i++]=key_pressed;液晶显示。打印(按键按下); }if(i==4) { 延迟(200); for(int j=0;j<4;j++) initial_password[j]=EEPROM.read(j); if(!(strncmp(password, initial_password,4))) { liquid_crystal_display.clear(); Liquid_crystal_display.print("通过接受");数字写入(relay_pin,低);延迟(2000);
如果按下‘#’键,那么它会调用‘change() ' 功能。在更改功能中,它会要求您输入当前密码。如果当前密码正确,则它会要求您输入新密码。输入新密码后,密码将被更改。
void change(){ int j=0;液晶显示.clear(); Liquid_crystal_display.print("当前密码");液晶显示.setCursor(0,1); while(j<4) { char key=keypad_key.getKey(); if(key) { new_password[j++]=key;液晶显示。打印(键); } key=0; } 延迟(500);
标签:4x4 键盘,Arduino,DC 锁,Keylock,键盘,lcd,锁
推荐帖子
使用实时时钟和 LCD 屏幕的 Arduino 闹钟

如何搭建Arduino自平衡机器人

使用 Arduino 和电磁阀让烤面包机跳舞

用Arduino制作DIY自动灌溉系统

代码
- 代码片段 #1
- 代码片段#2
- 代码片段 #3
- 代码片段 #4
- 代码片段 #5
代码片段 #1纯文本
#include#include #include LiquidCrystalliquid_crystal_display(9,8,7,6,5,4,);char password[4];char initial_password[ 4],new_password[4];int i=0;int relay_pin =10;char key_pressed=0;const byte rows =4; const 字节列 =4; char hexaKeys[rows][columns] ={{'1','2','3','A'},{'4','5','6','B'},{'7' ,'8','9','C'},{'*','0','#','D'}};byte row_pins[rows] ={A0,A1,A2,A3};byte column_pins[columns] ={A4,A5,3,2}; Keypad keypad_key =Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);void setup(){ pinMode(relay_pin, OUTPUT);液晶显示器。开始(16,2); Liquid_crystal_display.print("DIYhacking.com");液晶显示.setCursor(0,1); Liquid_crystal_display.print("电子锁");延迟(2000);液晶显示.clear(); Liquid_crystal_display.print("输入密码");液晶显示.setCursor(0,1); initialpassword();}void loop(){digitalWrite(relay_pin, HIGH); key_pressed =keypad_key.getKey(); if(key_pressed=='#') change(); if (key_pressed) { 密码[i++]=key_pressed;液晶显示。打印(按键按下); } if(i==4) { delay(200); for(int j=0;j<4;j++) initial_password[j]=EEPROM.read(j); if(!(strncmp(password, initial_password,4))) { liquid_crystal_display.clear(); Liquid_crystal_display.print("通过接受");数字写入(relay_pin,低);延迟(2000);液晶显示.setCursor(0,1); Liquid_crystal_display.print("按#更改");延迟(2000);液晶显示.clear(); Liquid_crystal_display.print("请输入密码:");液晶显示.setCursor(0,1);我=0; } else { digitalWrite(relay_pin, HIGH);液晶显示.clear(); Liquid_crystal_display.print("密码错误");液晶显示.setCursor(0,1); Liquid_crystal_display.print("按#更改");延迟(2000);液晶显示.clear(); Liquid_crystal_display.print("输入密码");液晶显示.setCursor(0,1);我=0; } }}void change(){ int j=0;液晶显示.clear(); Liquid_crystal_display.print("当前密码");液晶显示.setCursor(0,1); while(j<4) { char key=keypad_key.getKey(); if(key) { new_password[j++]=key;液晶显示。打印(键); } key=0;延迟(500); if((strncmp(new_password, initial_password, 4))) { liquid_crystal_display.clear(); Liquid_crystal_display.print("密码错误");液晶显示.setCursor(0,1); Liquid_crystal_display.print("再试一次");延迟(1000); } 否则 { j=0;液晶显示.clear(); Liquid_crystal_display.print("新密码:");液晶显示.setCursor(0,1); while(j<4) { char key=keypad_key.getKey(); if(key) { initial_password[j]=key;液晶显示。打印(键); EEPROM.write(j,key); j++; } } liquid_crystal_display.print("Pass Changed");延迟(1000); liquid_crystal_display.clear(); Liquid_crystal_display.print("输入密码");液晶显示.setCursor(0,1); key_pressed=0;}void initialpassword(){ for(int j=0;j<4;j++) EEPROM.write(j, j+49); for(int j=0;j<4;j++) initial_password[j]=EEPROM.read(j);}
代码片段#2纯文本
#include#include #include
代码片段 #3纯文本
key_pressed =keypad_key.getKey(); if(key_pressed=='#') change();
代码片段 #4纯文本
if (key_pressed) { password[i++]=key_pressed;液晶显示。打印(按键按下); }if(i==4) { 延迟(200); for(int j=0;j<4;j++) initial_password[j]=EEPROM.read(j); if(!(strncmp(password, initial_password,4))) { liquid_crystal_display.clear(); Liquid_crystal_display.print("通过接受");数字写入(relay_pin,低);延迟(2000);
代码片段 #5纯文本
void change(){ int j=0;液晶显示.clear(); Liquid_crystal_display.print("当前密码");液晶显示.setCursor(0,1); while(j<4) { char key=keypad_key.getKey(); if(key) { new_password[j++]=key;液晶显示。打印(键); } key=0; } 延迟(500);
示意图
使用 Arduino 控制可以使用正确组合键打开的电磁门锁。
制造工艺
- Arduino Gyroscope Game with MPU-6050
- 使用 Arduino 和 RFID 和 Python 的考勤系统
- 带 LED 和压电扬声器的 DHT11 传感器
- LCD 动画和游戏
- Unopad - 带有 Ableton 的 Arduino MIDI 控制器
- 温湿度数据记录仪
- 带有 Arduino 的简单障碍物传感器
- 4x4x4 LED 立方体,带有 Arduino Uno 和 1sheeld
- 基于 Arduino 的 RPM 计数器,采用更快的新算法
- 基于Arduino和谷歌电子表格的考勤系统
- 基于 Arduino 和 Android 的密码保护门锁
- 如何在 Arduino 中使用 Modbus