简单的数字密码锁使用arduino。

数字密码锁或数字密码锁是一种使用数字/字符或两者的组合来解锁的数字锁。这篇文章是关于一个简单的数字密码锁使用arduino。这里的代码由从1到6的数字组合而成。有单独的钥匙用于锁定和解锁系统。输入正确的数字组合后,按解锁键即可解锁系统。十六进制按键垫用作输入设备。本项目只使用了前两行key (1,2,3, A, 4, 5, 6, B)。A用于锁定系统,B用于解锁系统。读这篇文章接口十六进制键盘arduino了解更多关于六角键盘及其与arduino的接口。arduino数字密码锁的电路图如下图所示。

注意:-我们开发了一个使用Arduino的高级数字密码锁-这是这个项目的一个很大的改进版本。高级版本附带一个选项,在安装时输入用户定义的密码。锁定接口LCD模块输出状态。在安装时输入的密码可以在任何时候更改,只需按下一个键。

线路图。

数字组合锁定使用Arduino

排引脚R1到r4接口到arduino的数字引脚6到9。柱脚C1 ~ C4与arduino的数字脚10 ~ 13相连。arduino的数字引脚3被配置为输出引脚,用于传递电磁锁控制信号。程序和电路的设计假定,电磁锁将“锁定”低信号在其输入和“解锁”高信号在其输入。在这个电路中,螺线管由LED D1表示。LED ON表示“未锁定”,LED OFF表示“锁定”。330欧姆电阻R1限制通过LED的电流。

程序。

int p [6];//存储密码的数组int c[6];//存储输入代码的数组int n;int = 0;int i = 0;int锁= 3;int r1 = 6;int r2 = 7;int r3 = 8;int r4 = 9; int c1=10; int c2=11; int c3=12; int c4=13; int colm1; int colm2; int colm3; int colm4; void setup() { pinMode(r1,OUTPUT); pinMode(r2,OUTPUT); pinMode(r3,OUTPUT); pinMode(r4,OUTPUT); pinMode(c1,INPUT); pinMode(c2,INPUT); pinMode(c3,INPUT); pinMode(c4,INPUT); pinMode(lock,OUTPUT); Serial.begin(9600); //sets the baud rate at 9600 digitalWrite(c1,HIGH); digitalWrite(c2,HIGH); digitalWrite(c3,HIGH); digitalWrite(c4,HIGH); digitalWrite(lock,LOW); p[0]=1; //sets 1st digit of the password p[1]=2; // sets 2nd digit of the password p[2]=3; // sets 3rd digit of the password p[3]=4; // sets 4th digit of the password p[4]=5; // sets 5th digit of the password p[5]=6; // sets 6th digit of the password } void loop() { digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) { n=1; a=1; Serial.println("1"); delay(200);} else { if(colm2==LOW) { n=2; a=1; Serial.println("2"); delay(200);} else { if(colm3==LOW) {Serial.println("3"); n=3; a=1; delay(200);} else { if(colm4==LOW) {Serial.println("LOCKED"); digitalWrite(lock,LOW); //locks i=0; delay(200);} }}} digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) {Serial.println("4"); n=4; a=1; delay(200);} else { if(colm2==LOW) {Serial.println("5"); n=5; a=1; delay(200);} else { if(colm3==LOW) {Serial.println("6"); n=6; a=1; delay(200);} else { if(colm4==LOW) { if(c[0]==p[0]&&c[1]==p[1]&&c[2]==p[2]&&c[3]==p[3]&&c[4]==p[4]&&c[5]==p[5]) {digitalWrite(lock,HIGH); //unlocks Serial.println("UNLOCKED"); c[5]=9;} //corrupts the code in array c else {Serial.println("WRONG PASSWORD");} delay(200);} }}} if(a==1) // test whether a digit key is pressed { c[i]=n; // saves the current digit pressed to array c i=i+1; a=0;} }

关于这个项目。

“123456”的密码存储在阵列“P”中。当按下数字键时,它们存储在阵列“C”中。当按下解锁按钮时,比较两个阵列中的内容,并且如果它们相同,则数字引脚3使得高。在此之后,阵列“C”的内容由程序损坏。这样做是为了防止正确的代码留在内存中。如果未完成,系统将在另一个锁定周期后按下解锁按钮(b)的按钮上解锁。按下锁定按钮(a)将使数字引脚低。必须在每次输入密码之前按下锁定按钮。

系统可以通过USB连接到PC上,通过arduino的串行监视器窗口可以看到按键被按下的情况。本项目串口监控窗口截图如下图所示。

数字代码锁当锁定按钮(十六进制键盘中的A键)被按下时,串行监视器窗口将显示“LOCKED”。输入的代码也会显示在窗口上。当解锁按钮(十六进制键盘中的b键)被按下时,串行监视器窗口将显示“解锁”。如果输入的代码错误,串行监视器窗口将显示“错误密码”。

笔记。

  • 对于目前的配置ie;没有电磁阀,就不需要9V外置电源。单板可以通过USB由PC机供电。
  • 螺线管将消耗大量的电流和PC的USB端口可能无法供应它。所以当你使用螺线管时,需要一个单独的外部电源供电。arduino板也可以从这个外部电源供电,如果它是9V。检查这个链接Arduino UNO了解更多关于arduino单板供电的内容。
  • 密码的位数可以通过修改程序来增加。
  • 我没有显示螺线管,因为我现在没有一个。我将在获得一个时立即添加更新的电路图和程序。
作者

11注释

  1. 怀中

    嗨,非常感谢您的帮助!

    我是一名学生,我正在努力使电路发挥作用。我有一个非常具体的问题。虽然一切似乎都工作正常(十六进制垫连接和有答案在串行监视器),LED没有闪烁。我已经更换了LED,我确定它没有问题。有什么问题吗?程序中的延迟功能是否有可能被替换?

    提前非常感谢!

  2. ashmita

    主席先生,请你告诉我DIS项目所需的部件。我是一个工程学生。我非常热衷于做这些项目。如果你回答上述情况,这将是一个很棒的帮助。

    谢谢你先生

  3. Wency Solacito

    先生,您好。我能要一份这个项目所需要的所有部件的清单吗?我是一名工程系的学生我的一位教授要求我们做一些像这样的项目。如果你能回应这条评论,那将是一个很大的帮助。先谢谢你,先生。

  4. AMMAD

    哪个编译器可以方便地编译这个程序

  5. Yashas

    你好,我没有得到任何输出。一旦我按下一个数字,要花很长时间才能在串行显示器上显示出来。一开始也没有显示消息“Locked”。请帮助。

  6. siuming

    既然你离开了,我花了一些时间学习你的课程

    我把一切都做好了

    谢谢你精彩的网站

    保持良好的口碑

    • 乔乔

      嗨Siuming,

      我们很高兴一切对你都很顺利。我们有时会在工作中混淆,并发现很难正确地回应意见。

      乔乔

  7. Leyart席尔瓦

    问候
    这是很棒的东西,我们可以用它为任何锁定系统经济。
    这可以进一步增强到远程,或者我们也可以开发移动电话模拟。
    如果一个创新这一点的人,可以这一级别发展到这一点。
    干得好,坚持下去
    莱尔特
    研发工程师

Baidu