风筝
发表于: 2020-3-18 21:15:15 | 显示全部楼层

通常,我们需要在家里或办公室里给某个房间上锁,以便没有人在没有我们允许的情况下不能进入房间,并确保防止盗窃或丢失我们重要的配件和资产。如今,存在许多类型的安全系统,为了进行身份验证,它们依靠指纹、视网膜扫描器、虹膜扫描器、面部识别器、RFID读取器、密码、图案等进行认证。其中一种低成本的方案是使用密码或基于密码的系统。因此,在本篇文章中,我们将制作一个Arduino键盘门锁,可以将其安装到您现有的任何门上,以使用数字密码。


所需的组件清单

●    使用Atmega 328p单片机的Arduino Uno开发板

●    1602 LCD(液晶显示器)

●    4 x 4矩阵键盘

●    伺服马达

●    3D打印门锁/定制门锁


Arduino键盘门锁电路图

以下是基于Arduino的数字键盘门锁项目的完整电路图。

Keypad-Door-Lock-Circuit-Diagram.jpg


首先,我们介绍这个项目的主要部分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”数据类型声明可以容纳它的编号,包括空字符。

  1. //#include <Keypad.h>
  2. #include <LiquidCrystal.h>
  3. #include <Servo.h>
  4. Servo myservo;
  5. LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
  6. #define Password_Lenght 7 // Give enough room for six chars + NULL char
  7. int pos = 0;    // variable to store the servo position
  8. char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
  9. char Master[Password_Lenght] = "123456";
复制代码

使用代码(char Master [Password_Lenght] =“ 123456”;)-我声明门锁的密码,然后分配键盘中的行数和列数,还声明keyMaps并连接行和列。在setup()函数中,初始化伺服信号引脚D9,关闭伺服电机,打印项目/设备/公司的名称,延迟3秒钟后清除LCD显示内容。

  1. void setup()
  2. {
  3.   myservo.attach(9);
  4.   ServoClose();
  5.   lcd.begin(16, 2);
  6.   lcd.print(" Arduino Door");
  7.   lcd.setCursor(0, 1);
  8.   lcd.print("--Look project--");
  9.   delay(3000);
  10.   lcd.clear();
  11. }
复制代码

在loop函数中,使用了一个简单的if-else条件。根据门锁状态,打印“Door is close”,延迟3秒,然后伺服旋转到关闭位置,门数据计数为1,否则门锁保持打开状态,数据计数为0,伺服开门旋转到该位置为0度到180度,关闭时从180到0。伺服打开和伺服关闭函数如下所示。

  1. void ServoOpen()
  2. {
  3.   for (pos = 180; pos >= 0; pos -= 5) { // goes from 0 degrees to 180 degrees
  4.     // in steps of 1 degree
  5.     myservo.write(pos);              // tell servo to go to position in variable 'pos'
  6.     delay(15);                       // waits 15ms for the servo to reach the position
  7.   }
  8. }
  9. void ServoClose()
  10. {
  11.   for (pos = 0; pos <= 180; pos += 5) { // goes from 180 degrees to 0 degrees
  12.     myservo.write(pos);              // tell servo to go to position in variable 'pos'
  13.     delay(15);                       // waits 15ms for the servo to reach the position
  14.   }
  15. }
复制代码

延迟15秒写入伺服器的位置,以便到达伺服器的位置。在open函数中,在LCD上输入“ Enter Password”,然后条件指定输入的密码应与自定义键相同,在此主体数据内计数并将char存储到数据数组中,如果输入的密码递增,则在LCD上打印并输入密码数据长度(密钥数)和输入密码与数据主机(存在预定义密钥)匹配。然后,驱动伺服电机,在LCD上打印“ Door is open”,并且数据计数器重置为0。


如果输入键与Data Master不匹配,则在LCD上打印输出“Wrong Password”,并电机保持在其锁定位置,数据计数器设置为1,然后循环继续此过程。

  1. if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  2.   {
  3.     if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
  4.     {
  5.       lcd.clear();
  6.       ServoOpen();
  7.       lcd.print("  Door is Open");
  8.       door = 0;
  9.     }
  10.     else
  11.     {
  12.       lcd.clear();
  13.       lcd.print("  Wrong Password");
  14.       delay(1000);
  15.       door = 1;
  16.     }
  17.     clearData();
  18.   }
复制代码

Arduino键盘门锁组装和测试

现在,将所有物品安装在4英寸的塑料盒中,并用移动充电器为其供电,使用外壳将所有物品对齐。理想情况下,我可以使用3D打印来组装锁,如果需要更高的安全性,则必须打印与此伺服器内部兼容的3D门锁模型。您可以从下面的链接下载所需的STL文件,使用3D打印机打印模型。

●    下载用于3D打印的STL文件

3D-Printed-Parts.jpg


在项目开始时,我们首次通电时,我们需要提供项目名称,以使其看起来像商业设备一样智能。

Display.jpg


延迟3秒后,快速锁定门并检查显示屏上门锁的状态,如下图所示。

Arduino-Door-Lock-LCD.jpg


当您通过按“#”键手动锁定门时,它首先显示门已关闭1秒钟,然后显示输入密码。如果通过输入正确的密码将门解锁,则表明门已打开。

Arduino-Door-Lock-Setup.jpg


如果门仍处于解锁状态,则会一直显示Door is open,直到手动关门。我已经给出了代码,您可以根据需要通过更改代码显示参数来自定义设置。如有问题,请随时在本帖下面进行回复。


代码

以下是本文使用的完整代码: main.rar (1.28 KB, 下载次数: 391)

跳转到指定楼层
DJW
发表于: 2020-3-26 14:06:38 | 显示全部楼层

输入密码没有任何反应
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-8 04:34 , Processed in 0.039496 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表