Arduino密码锁设计

网友投稿 2018-12-06 11:06

   本节用4×4键盘设计一个密码锁的模型,从键盘获取输入键值,并将输入值与设定密码比较,若相同控制舵机转动打开锁就行了。

(1)4×4键盘及扩展库调用

4×4键盘有8根引线,每个按键对应一个行值和列值,通过定义一个二维数组就可以确定按的是哪个键了,如图1,调用Keypad.h扩展库,可以直接找到对应的键,不需自己编写程序去判断了。

注意:需把厂商提供的Keypad文件夹放到Arduino IDE的libraries文件夹里,否则编译会失败。

https://cdn.china-scratch.com/timg/181208/1106322960-0.jpg

(2)电路图和连线

电路原理图如图2,D2-9接键盘8根引脚,注意线的排列顺序,如排列顺序不同,则编写程序时,定义的行号、列号顺序也不同。连线好的实物图如图2,用积木拼插了一个简单的门,当舵机臂水平时锁上,转到竖直就可以打开门了。

https://cdn.china-scratch.com/timg/181208/1106333021-1.jpg

(3)程序编写

程序代码如下,结合注释同学们讨论、理解。

#include   //加载库 

#include

char keys[4][4] = { 

 {'1','2','3','A'}, 

 {'4','5','6','B'}, 

 {'7','8','9','C'}, 

 {'*','0','#','D'} 

};//建立二维数组,用于设置按键的输出字符 

byte rowPins[4] = {9,8,7,6}; //定义行引脚 

byte colPins[4] = {5,4,3,2}; //定义列引脚 

Keypad keypad = Keypad( makeKeymap(keys),rowPins, colPins, 4, 4 );//实例化Keypad 对象 

Servo servo_10;

int m=0;

int i=0;

void setup(){ 

servo_10.attach(10);

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

void loop(){ 

char key = keypad.getKey(); //新建一个key 变量 用于获取键盘当前的值 

if (key!= NO_KEY){ 

m=m+1;

if(i==0&key=='A'){

i=i+1;

}

elseif(i==1&key =='B'){

i=i+1;

digitalWrite(11,HIGH);

servo_10.write(180);

delay(10000);

digitalWrite(11,LOW);

m=0;

}

else{i=0;

}

if(m==2&i!=2){

digitalWrite(12,HIGH);

servo_10.write(90);

i=0;

m=0;

delay(5000);

digitalWrite(12,LOW);

}

  } 

}  

(4)功能演示

当输入错误密码,红灯亮5秒并锁定输入5秒(5秒内输入无效),且舵机臂水平,门锁闭。若密码正确绿灯亮10秒,并锁定输入10秒,10秒后重置,舵机臂竖直向上,门打开,如图3。

https://cdn.china-scratch.com/timg/181208/1106333338-2.jpg

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com