可更改密码的键盘门锁
组件和用品
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
![]() |
| |||
![]() |
|
关于这个项目
嗨,欢迎来到本教程(是的,它很旧但很经典),今天我正在制作一个基于 Arduino 板、键盘、LCD i²c 屏幕的门锁项目,我将使用螺线管和继电器作为锁,您可以查看我关于指纹门锁的教程,其中我使用了使用直流电机的锁,因此这取决于您的锁系统,您必须选择接线、编码并对其进行调整。
N.B:对于一个真正的项目,我完全不建议使用电磁阀,而是破解一个可以被电子和机械锁打开的锁,并为您的项目调整它。
零件
所以对于这个项目,我们需要这些组件,还有一些跳线,还有一个 12V 的电源抱歉我没有在这里添加它:







Push Button 是用来从里面打开锁的,你可以把它取下来,电阻是用来防抖的。
我使用了 4×4 键盘,您可以使用 3×4 但您需要修改代码中的某些内容,例如为了确认我使用了“A”,您可以将其更改为“*”或“#”。
螺线管由12V外部电源供电,由IRF510N MOSFET晶体管驱动。
晶体管用作开关,最好使用 N 通道,IRF510N 与 Arduino 一起使用时非常受欢迎,当您在栅极和源极之间施加 5V 电压时,晶体管变得像一个闭合的开关漏极和源极,不需要像双极电阻那样的电阻。
如果没有施加电压,晶体管就像一个打开的开关,这就是我们控制螺线管的方式。
对于另一个示例,我使用的是 1 通道继电器模块,它在 3.3V 电压下工作,我们像控制晶体管一样控制它的输入,唯一的区别是它们被反转(我们将在代码中看到)。>
算法流程图
为了便于理解,这里是流程图,它没有完全详细,但它是代码的概述。

N.B:您可以使用继电器来控制任何高达 250VAC 的电锁,您也可以使用它来控制电磁阀……
代码完全相同,唯一的区别是您在(低和高)之间切换以打开锁。
请记住,第一次您必须上传代码并更改密码,然后取消注释某些行(阅读代码以找到它们(它们正在设置中))并重新上传代码,以便它可以从 EEPROM 中读取密码。它只完成一次.
您也可以更改代码长度,首先我将其设为四位数,您可以从默认代码更改它,因为我在代码中使用了“sizeof(code)”而不是“4”。 4位数密码不能改6位数密码,先从密码源改初始密码。
测试
你会在下面的图片中找到测试,浏览它们












嗯,这是项目的测试,螺线管或继电器都是一样的,如果你想从里面打开按钮,或者你可以把它取下来。
我希望它有用,如果您有任何问题或疑问,请发表评论。
代码
- Keypad_doorlock_solenoid.ino
- Keypad_doorlock_relay.ino
Keypad_doorlock_solenoid.inoArduino
记得先上传代码,然后取消第 62 行到 64 行的注释并重新上传,它只完成一次。/* 此代码适用于 4x4 键盘矩阵、LCD ic、IRF510N 晶体管和按钮 * 这是晶体管驱动的锁一个电磁锁,您可以使用正确的密码 * 或通过内部的按钮打开 * 密码可以直接通过键盘更改,不需要再次上传密码 * 密码存储在 EEPROM 中 * 请参阅 www.surtrtech.com了解更多信息 */#include#include #include #define Solenoid 11 //实际上是控制电磁阀的晶体管的栅极#define O_Button 10 //Push Button #define I2C_ADDR 0x27 //I2C地址,这里应该先用code扫描地址(0x27)#define BACKLIGHT_PIN 3 //声明LCD引脚#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7const byte numRows=4; //键盘上的行数const byte numCols=4; //keypadchar keymap上的列数[numRows][numCols]={{'1', '2', '3', 'A'}, {'4', '5', '6', 'B '}, {'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};char keypressed; //存储密钥的位置经常变化char code[]={'6','6','0','1'}; //默认代码,你可以改成'n'位onechar code_buff1[sizeof(code)]; //新key存放在哪里char code_buff2[sizeof(code)]; //新的key再次存储的地方所以它与之前的一个比较short a=0,i=0,s=0,j=0; //后面用到的变量byte rowPins[numRows] ={9,8,7,6}; //Rows 0 to 3 //如果你修改你的pins,你应该修改这个toobyte colPins[numCols]={5,4,3,2}; //Columns 0 to 3LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);Keypad myKeypad=Keypad(makeKeymap(keymap), rowPins, colPins, numRows) {lcvoid setup(ColPins, numRows); .开始(16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(高); //照明背光lcd.home(); lcd.print("待机"); //LCD上写的什么你可以改变pinMode(Solenoid,OUTPUT); pinMode(O_Button,INPUT); // for(i=0; i Keypad_doorlock_relay.inoArduino
记得先上传代码,然后取消第 62 行到 64 行的注释并重新上传,它只完成一次。/* 此代码适用于 4x4 键盘矩阵、LCD ic、继电器模块和按钮 * 这是一个继电器可以使用的锁控制一个锁,你可以用正确的密码 * 或从里面的按钮打开 * 密码可以直接通过键盘更改,不需要再次上传密码 * 密码存储在 EEPROM 中 * 请参阅 www.surtrtech.com了解更多详情 */#include#include #include #define Relay 11 //控制继电器#define O_Button 10 //Push Button#define I2C_ADDR 0x27 //I2C地址,你应该使用代码先扫描地址(0x27)这里#define BACKLIGHT_PIN 3 //声明LCD引脚#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#定义 D7_pin 7const 字节 numRows=4; //键盘上的行数const byte numCols=4; //keypadchar keymap上的列数[numRows][numCols]={{'1', '2', '3', 'A'}, {'4', '5', '6', 'B '}, {'7', '8', '9', 'C'},{'*', '0', '#', 'D'}};char keypressed; //存储密钥的位置经常变化char code[]={'6','6','0','1'}; //默认代码,你可以改成'n'位onechar code_buff1[sizeof(code)]; //新key存放在哪里char code_buff2[sizeof(code)]; //新的key再次存储的地方所以它与之前的一个比较short a=0,i=0,s=0,j=0; //后面用到的变量byte rowPins[numRows] ={9,8,7,6}; //Rows 0 to 3 //如果你修改你的pins,你应该修改这个toobyte colPins[numCols]={5,4,3,2}; //Columns 0 to 3LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);Keypad myKeypad=Keypad(makeKeymap(keymap), rowPins, colPins, numRows) {lcvoid setup(ColPins, numRows); .开始(16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(高); //照明背光lcd.home(); lcd.print("待机"); // LCD 上写的内容可以更改 pinMode(Relay,OUTPUT); pinMode(O_Button,INPUT); // for(i=0; i
示意图


制造工艺