|
通常,我们需要在家里或办公室里给某个房间上锁,以便没有人在没有我们允许的情况下不能进入房间,并确保防止盗窃或丢失我们重要的配件和资产。如今,存在许多类型的安全系统,为了进行身份验证,它们依靠指纹、视网膜扫描器、虹膜扫描器、面部识别器、RFID读取器、密码、图案等进行认证。其中一种低成本的方案是使用密码或基于密码的系统。因此,在本篇文章中,我们将制作一个Arduino键盘门锁,可以将其安装到您现有的任何门上,以使用数字密码。
所需的组件清单 ● 使用Atmega 328p单片机的Arduino Uno开发板 ● 1602 LCD(液晶显示器) ● 4 x 4矩阵键盘 ● 伺服马达 ● 3D打印门锁/定制门锁
Arduino键盘门锁电路图 以下是基于Arduino的数字键盘门锁项目的完整电路图。
首先,我们介绍这个项目的主要部分Arduino UNO开发板。 Arduino开发板连接到LCD和伺服电机。伺服电机用于推动或拉动门上的闩锁。 Arduino需要1602 LCD来显示消息,1602表示它具有16列和2行。
在本文中,使用5v Towerpro SG90伺服电机来制作我们定制的门锁。它是入门级的伺服电机,可以在没有任何驱动电路或外部模块的情况下与Arduino配合使用。而且,这种伺服电机的成本非常低,因此您可以轻松负担得起。将伺服电机与Arduino数字引脚D9和5伏电源连接。该伺服电机共有3条输入线(GND、+ 5V和SIGNAL线)。
另外在本文中,我使用了4 x 4矩阵键盘。我们需要一个键盘来输入密码,并手动锁定我们定制的门锁。它由16个键组成,当按下一个键时,行(R1、R2、R3、R4)中的4个键和列(C1、C2、C3、C4)中的4个键,在相应的行之间建立连接。
用于数字键盘门锁的Arduino代码 在本文底部列出了完整的Arduino门锁代码。您可以直接上传代码,但是建议阅读以下段落以了解代码的工作原理。同样,确保已将以下键盘库添加到Arduino IDE中以成功编译代码也很重要。为此,只需打开下面的链接并下载ZIP文件。然后在您的Arduino IDE上导航到Sketch-> Include Library-> Add.ZIP Library并浏览您刚刚下载的文件。 ● Arduino键盘库
在包含所有头文件和库文件后,为LCD分配所有引脚并定义密码长度,并将伺服电机的初始位置设置为0。然后,使用“ char”数据类型声明可以容纳它的编号,包括空字符。 - //#include <Keypad.h>
- #include <LiquidCrystal.h>
- #include <Servo.h>
- Servo myservo;
- LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
- #define Password_Lenght 7 // Give enough room for six chars + NULL char
- int pos = 0; // variable to store the servo position
- char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
- char Master[Password_Lenght] = "123456";
复制代码
使用代码(char Master [Password_Lenght] =“ 123456”;)-我声明门锁的密码,然后分配键盘中的行数和列数,还声明keyMaps并连接行和列。在setup()函数中,初始化伺服信号引脚D9,关闭伺服电机,打印项目/设备/公司的名称,延迟3秒钟后清除LCD显示内容。 - void setup()
- {
- myservo.attach(9);
- ServoClose();
- lcd.begin(16, 2);
- lcd.print(" Arduino Door");
- lcd.setCursor(0, 1);
- lcd.print("--Look project--");
- delay(3000);
- lcd.clear();
- }
复制代码
在loop函数中,使用了一个简单的if-else条件。根据门锁状态,打印“Door is close”,延迟3秒,然后伺服旋转到关闭位置,门数据计数为1,否则门锁保持打开状态,数据计数为0,伺服开门旋转到该位置为0度到180度,关闭时从180到0。伺服打开和伺服关闭函数如下所示。 - void ServoOpen()
- {
- for (pos = 180; pos >= 0; pos -= 5) { // goes from 0 degrees to 180 degrees
- // in steps of 1 degree
- myservo.write(pos); // tell servo to go to position in variable 'pos'
- delay(15); // waits 15ms for the servo to reach the position
- }
- }
- void ServoClose()
- {
- for (pos = 0; pos <= 180; pos += 5) { // goes from 180 degrees to 0 degrees
- myservo.write(pos); // tell servo to go to position in variable 'pos'
- delay(15); // waits 15ms for the servo to reach the position
- }
- }
复制代码
延迟15秒写入伺服器的位置,以便到达伺服器的位置。在open函数中,在LCD上输入“ Enter Password”,然后条件指定输入的密码应与自定义键相同,在此主体数据内计数并将char存储到数据数组中,如果输入的密码递增,则在LCD上打印并输入密码数据长度(密钥数)和输入密码与数据主机(存在预定义密钥)匹配。然后,驱动伺服电机,在LCD上打印“ Door is open”,并且数据计数器重置为0。
如果输入键与Data Master不匹配,则在LCD上打印输出“Wrong Password”,并电机保持在其锁定位置,数据计数器设置为1,然后循环继续此过程。 - if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
- {
- if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
- {
- lcd.clear();
- ServoOpen();
- lcd.print(" Door is Open");
- door = 0;
- }
- else
- {
- lcd.clear();
- lcd.print(" Wrong Password");
- delay(1000);
- door = 1;
- }
- clearData();
- }
复制代码
Arduino键盘门锁组装和测试 现在,将所有物品安装在4英寸的塑料盒中,并用移动充电器为其供电,使用外壳将所有物品对齐。理想情况下,我可以使用3D打印来组装锁,如果需要更高的安全性,则必须打印与此伺服器内部兼容的3D门锁模型。您可以从下面的链接下载所需的STL文件,使用3D打印机打印模型。 ● 下载用于3D打印的STL文件
在项目开始时,我们首次通电时,我们需要提供项目名称,以使其看起来像商业设备一样智能。
延迟3秒后,快速锁定门并检查显示屏上门锁的状态,如下图所示。
当您通过按“#”键手动锁定门时,它首先显示门已关闭1秒钟,然后显示输入密码。如果通过输入正确的密码将门解锁,则表明门已打开。
如果门仍处于解锁状态,则会一直显示Door is open,直到手动关门。我已经给出了代码,您可以根据需要通过更改代码显示参数来自定义设置。如有问题,请随时在本帖下面进行回复。
代码 以下是本文使用的完整代码:
main.rar
(1.28 KB, 下载次数: 395)
|