你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于密码的门锁

[复制链接]
木木&点点 发布时间:2019-3-6 19:20
使用键盘输入您设置的密码并打开门锁。
1.jpg
这个项目中使用的东西
硬件组件
Arduino UNO和Genuino UNO         ×  1      
薄膜键盘     ×  1      
双H桥电机驱动器L293D     
德州仪器双H桥电机驱动器L293D   ×   1      
线性执行器      ×     1      
介绍
有很多网站发布了这个项目,它存在于各种YouTube频道上,甚至这个网站也有一些。所以,说实话,它没有任何原创性。但我可能能够以更简单,更丰富的方式解释和展示。
该项目的主要组成部分是矩阵键盘。我使用了4x4薄膜键盘,如下所示:
2.jpg
键盘上的按键基本上是按钮。这些按钮开关在按下时“关闭”,一旦释放力,它们就会回到自然状态,即“打开”。
3.jpg
这就是键盘在内部以行和列的形式连接的方式。当按下1时,第1列和第1行连接在一起。当按下9时,r3和c3连接在一起。
4.jpg
扫描由4个键配置为输出,4个键作为输入完成。我使用输入上拉电阻将所有列作为输入,并将所有行作为输出。使用编程,所有行逐个变为低,一秒钟多次。因此,当按下某个键时,相应的列变为LOW。所有列连接的输入引脚的状态被多次读取。每当读取LOW状态时,表示按下该列中的键。如果某行是低的并且同时某列低,则确定按下的键。
例如,如果按下1,则列1将为低。并且由于每一行都是如此快速地降低,一个接一个,即使你按键很短的时间跨度,行1也会被发现为低,并且将确定按下1。如果row1 == low && column1 == low,则表示按下了1。
这在代码1中显示。我自己编写了这段代码,因为我想将它上传到stm32板,并且KEYPAD库不兼容。使用此代码,您将了解我上面解释的内容。或者您只需使用键盘库并运行“customkeypad”示例。两者都有同样的目的。但该代码不会解释你的工作。
使用串行监视器,按下的每个键都显示在屏幕上。这在视频1中显示。
在密钥确定工作正常后,是时候处理密码了。它如此简单。我做的是 - 做了一个字符串“1234”。这是我设置的密码。现在,我又做了一个阵列。无论键值是什么,它都存储在这个数组中。当计数达到4时,两个字符串都会进行比较。如果匹配 - 密码是正确的,否则不是。这在代码2中显示。我将LED连接到引脚11.因此,当密码正确时,它会发光。它显示在视频2中。
现在,将用作锁的组件:12 V线性执行器。看起来像这样。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
这是使用L293d IC操作的,L293d IC通常被称为“电机驱动器”IC。该IC与12v电源连接。它接收来自Arduino的输入,即5v输入,并将12v输出到其输出引脚(执行器连接到该引脚)。因此,当密码正确时,引脚11设置为高电平,引脚12设置为低电平。引脚11和12连接到l293d的输入。因此,致动器被拉入内部并且门打开。视频中显示3 。
原理图
与arduino的键盘连接
6.jpg
l293d连接
连接电机连接的执行器。
将引脚8连接到12v
7.png
代码
int rows=4;
int columns=4;
char readkey(void);
char nfunc(void);
#define c3 9
#define c2 8
#define c1 7
#define c0 6
#define r3 5
#define r2 4
#define r1 3
#define r0 2
void setup() {
  Serial.begin(9600);
pinMode(c0,INPUT_PULLUP);
pinMode(c1,INPUT_PULLUP);
pinMode(c2,INPUT_PULLUP);
pinMode(c3,INPUT_PULLUP);
pinMode(r0,OUTPUT);
pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT);
pinMode(r3,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
char readkey(void)
{digitalWrite(r0,LOW);
digitalWrite(r1,HIGH);
digitalWrite(r2,HIGH);
digitalWrite(r3,HIGH);
if(digitalRead(c0)==LOW){delay(500);
return '1';}
else if(digitalRead(c1)==LOW){delay(500);
return '2';}
else if(digitalRead(c2)==LOW){delay(500);
return '3';}
else if(digitalRead(c3)==LOW){delay(500);
return 'A';}
digitalWrite(r0,HIGH);
digitalWrite(r1,LOW);
digitalWrite(r2,HIGH);
digitalWrite(r3,HIGH);
if(digitalRead(c0)==LOW){delay(500);
return '4';}
else if(digitalRead(c1)==LOW){delay(500);
return '5';}
else if(digitalRead(c2)==LOW){delay(500);
return '6';}
else if(digitalRead(c3)==LOW){delay(500);
return 'B';}
digitalWrite(r0,HIGH);
digitalWrite(r1,HIGH);
digitalWrite(r2,LOW);
digitalWrite(r3,HIGH);
if(digitalRead(c0)==LOW){delay(500);
return '7';}
else if(digitalRead(c1)==LOW){delay(500);
return '8';}
else if (digitalRead(c2)==LOW){delay(500);
return '9';}
else if(digitalRead(c3)==LOW){delay(500);
return 'C';}
digitalWrite(r0,HIGH);
digitalWrite(r1,HIGH);
digitalWrite(r2,HIGH);
digitalWrite(r3,LOW);
if(digitalRead(c0)==LOW){delay(500);
return '*';}
else if(digitalRead(c1)==LOW){delay(500);
return '0';}
else if(digitalRead(c2)==LOW){delay(500);
return '#';}
else if(digitalRead(c3)==LOW){delay(500);
return 'D';}
return 'o';
}
char nfunc(void)
{
  char key='o';
  while(key=='o')
  key=readkey();
return key;
}
void loop()
{
char key1= nfunc();
if(key1){
  Serial.print(key1);
}
}
7 R0 G/ F- W3 w, I% B/ H8 }
5.jpg
收藏 评论0 发布时间:2019-3-6 19:20

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版