通常,我们需要在我们的家庭或办公室(也许是秘密的dexter的实验室)中确保房间的安全,以便未经我们的许可,任何人都不能进入房间,并确保防止盗窃或丢失我们重要的配件和资产。目前存在很多类型的安全系统,但在幕后,为了进行身份验证,它们全部依靠指纹,视网膜扫描仪,虹膜扫描仪,面部识别器,舌头扫描仪,RFID读取器,密码,密码,图案等进行中继。低成本的一种是使用密码或基于密码的系统。因此,在这个项目中,我构建了一个Arduino键盘门锁,可以将其安装到您现有的任何门上,以使用数字密码保护它们。以前,我们还构建了以下列出的其他有趣的门锁。
- Arduino RFID门锁
- Arduino电磁门锁
- Raspberry Pi数字密码锁
- 555定时器电子门锁
在构建密码门锁定项目之前,首先,我们需要收集所需的组件,然后继续进行并逐步进行构建过程。
组件清单
- 使用Atmega 328p单片机的Arduino Uno / Pro / Mini或Custom板
- 16 x 2 LCD(液晶显示器)
- Arduino的4 x 3或4 x 4矩阵键盘
- 伺服马达
- 3D打印门锁/定制门锁
- 1安培5伏移动充电器电源的附加组件
- 4''/ 6''塑料盒,跳线,螺母螺栓,塑料外壳等
Arduino键盘门锁电路图
我们的基于Arduino的数字键盘门锁项目的完整电路图如下所示。
首先,我们从Arduino UNO板这个项目的大脑开始。 Arduino板连接到LCD和伺服电机。伺服电机用于推动(锁定)或拉动(解锁)门上的闩锁。 Arduino需要16 x 2 LCD来显示消息,16 x 2表示它具有16列和2行。如果您不熟悉16x2 LCD显示模块,则可以查看此Arduino LCD接口教程以了解更多信息。
在这里,我使用5v Towerpro SG90伺服电机来制作我们定制的门锁。它是基本水平的伺服电动机,可以在没有任何驱动电路或外部模块的情况下与Arduino配合使用。而且,这种伺服电机的成本非常低,因此您可以轻松负担得起。您也可以查看此Arduino伺服电机控制教程,以了解有关伺服电机及其工作方式的更多信息。将伺服电机与Arduino数字引脚D9和5伏电源连接。该伺服电机共有3条输入线(GND,+ 5V和SIGNAL LINE)。
在这个项目中,我使用了4 x 4矩阵键盘(但是4 x 4键盘部件在打磨时无法用于图形化显示),但是不用担心,因为4 x 3矩阵键盘在我的编码中也能正常工作。我们需要一个键盘来输入密码,并手动锁定我们定制的门锁。当按下一个键时,它由16个键(软开关)组成,行(R1,R2,R3,R4)中的4个键和列(C1,C2,C3,C4)中的4个键,在相应的行之间建立连接和列。下表显示了如何将Arduino与键盘连接。
键盘 | Arduino的 |
引脚1(行1) | 数字引脚1 |
针2(第2行) | 数字引脚2 |
销3(第3行) | 数字针3 |
销4(第4行) | 数字针4 |
引脚5(第5列) | 数字针5 |
引脚6(第6列) | 数字引脚6 |
引脚7(第7列) | 数字引脚7 |
Arduino数字键盘门锁代码
完整的Arduino门锁代码可在此页面底部找到。您可以直接上传代码,但是建议阅读以下段落以了解代码的工作原理。同样,确保已将以下键盘库添加到Arduino IDE中以成功编译代码也很重要。为此,只需打开下面的链接并下载ZIP文件。然后在Arduino IDE上导航到Sketch-> Include Library-> Add.ZIP Library并浏览您刚刚下载的文件。
- Arduino键盘库
插入所有头文件和库文件后,为LCD分配所有引脚并定义密码长度,并将伺服器的初始位置设置为0。之后,采用“ char”数据类型声明可容纳它的数字,包括空字符。
//#包括
使用这段代码(char Master =“ 123456”;)-在Char Master下,我声明门锁的密码,然后分配键盘中的行数和列数,还声明keyMaps并与行和列。在空白设置下,初始化伺服信号引脚D9,关闭伺服状态,并在启动设备的LCD时间上延迟3秒打印项目/设备/公司的名称。
void setup(){myservo.attach(9); ServoClose(); lcd.begin(16,2); lcd.print(“ Arduino门”); lcd.setCursor(0,1); lcd.print(“-查找项目-”); 延迟(3000); lcd.clear(); }
在循环功能下,存在简单的if-else条件。根据状态(自动锁定),打印“门已关闭”,延迟3秒,然后伺服旋转到关闭位置,门数据计数为1,否则门锁保持打开状态,数据计数为0,伺服打开旋转到该位置变为0度到180度,关闭时从180到0。伺服打开和伺服关闭功能如下所示。
void ServoOpen(){for(pos = 180; pos> = 0; pos-= 5){//从0度到180度//以1度为步数myservo.write(pos); //告诉伺服器在变量'pos'delay(15)中定位//等待15ms,直到伺服器到达位置}} void ServoClose(){for(pos = 0; pos <= 180; pos + = 5){//从180度变为0度myservo.write(pos); //告诉伺服器在变量'pos'delay(15)中定位//等待15毫秒以使伺服器到达位置}}
延迟15秒写入伺服器的位置,以到达伺服器的位置。在无效打开功能下,在LCD上输入“ Enter Password”,然后条件指定输入的密码应与自定义键相同,在此主体数据内计数并将char存储到数据数组中,如果输入的密码递增,则在LCD上打印并输入密码数据长度(密钥数)和输入密码与数据主机(存在预定义密钥)匹配。然后,作为操作员清除LCD伺服驱动器,在LCD“门已打开”上打印,并将数据计数器重置为0。
如果输入键与Data Master不匹配,则在LCD上通过“错误密码”在LCD上清除打印操作,以1秒钟的延迟通知并保持其锁定位置,并且数据计数器设置为1,然后循环继续此过程。
if(data_count == Password_Lenght-1)//如果数组索引等于期望的字符数,则将数据与master {if(!strcmp(Data,Master))// //等于(strcmp(Data,Master) == 0){lcd.clear(); ServoOpen(); lcd.print(“门是打开的”); 门= 0; }其他{lcd.clear(); lcd.print(“密码错误”); 延迟(1000); 门= 1; } clearData(); }
Arduino键盘DoorLock组装和测试
现在,将所有物品安装在4英寸/ 6英寸的塑料盒中,并用移动充电器为其供电,使用外壳将所有物品对齐。理想情况下,我本可以使用3D打印来组装锁,但是在设计完文件之后,我发现3D打印非常昂贵,因此我只先固定了伺服器,然后使用金属板将普通的滑动储物柜与伺服器连接起来,并盖上了用玻璃纤维将其固定,尽管可以正常工作,但安全性较低。
如果需要更高的安全性,则必须打印与此伺服器内部兼容的3D门锁模型。您可以从下面的链接下载所需的STL文件,如果可以访问3D打印机,则可以3D打印它们。
下载用于3D打印的STL文件
设计文件也显示在下图中。
在项目开始时,我们首次通电时,我们需要提供项目名称(您也可以显示公司名称),以使其看起来像商业设备一样智能且专有(如您在下图)。
随着延迟3秒,快速锁定门和直接检查显示用于门锁的状态,如图中下面给出的图片。
当您通过按“#”键手动锁定门时,它首先显示门已关闭1秒钟,然后显示“输入密码”。另一方面,如果通过输入正确的密码将门解锁,则表明“门已打开”。
如果门仍处于解锁状态,则显示-只要您根据编码手动锁定门,门就会打开。我已经给出了代码,您可以根据需要通过更改代码显示参数来自定义设置。您也可以通过本页底部的链接检查视频的完整使用情况。