亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于密码的门锁

组件和用品

Arduino UNO
× 1
薄膜键盘
× 1
Texas Instruments 双 H 桥电机驱动器 L293D
× 1
线性执行器
× 1

关于这个项目

有许多网站发布了这个项目,并且它出现在各种 youtube 频道上,甚至这个网站也有一些。所以,老实说,它不是原创的。但我或许能够以更简单、更翔实的方式进行解释和展示。

该项目的主要组成部分是矩阵键盘。我使用了一个 4x4 薄膜键盘,它看起来像这样:

键盘上的按键基本上是按钮。这些按钮开关在按下时“关闭”,一旦释放力,它们就会恢复到自然状态,即“打开”。

这就是键盘作为行和列的内部连接方式。假设按下 1 时,第 1 列和第 1 行连接在一起。当按下 9 时,r3 和 c3 连接在一起。

扫描通过配置为输出的 4 个键和配置为输入的 4 个键完成。我使用输入上拉电阻将所有列作为输入,将所有行作为输出。使用编程,所有的行都一个一个地变低,在一秒钟内多次变低。因此,当按下某个键时,相应的列变为 LOW。多次读取所有列所连接的输入引脚的状态。每当读取 LOW 状态时,就意味着该列中的某个键被按下。如果某行低,同时某列低,则确定按下的键。

例如如果按下 1,第 1 列将是低电平。并且由于每一行的 LOW 如此之快,一个接一个,即使您按下键很短的跨度,有时也会发现第 1 行为 LOW,并确定按下了 1。如果row1==low &&column1==low,表示按下了1。

这显示在代码 1 .我自己写了这段代码,因为我想将它上传到 stm32 板,而 KEYPAD 库不兼容。有了这段代码,你就会明白我上面解释的内容。或者您可以简单地使用键盘库并运行“customkeypad”示例。两者都将用于相同的目的。但该代码不会向您解释工作原理。

使用串行监视器,按下的每个键都显示在屏幕上。这显示在视频 1 .

在密钥确定工作正常后,是时候处理密码了。它是如此简单。我所做的是 - 制作了一个字符串“1234”。这是我设置的密码。现在,我制作了另一个数组。无论键值是什么,它都存储在这个数组中。当计数达到 4 时,比较两个字符串。如果它们匹配 - 密码正确,否则不正确。这显示在 代码 2 中 .我将一个 LED 连接到引脚 11。因此,当密码正确时,它会发光。它显示在视频2 .

现在,将用作锁的组件:12 V 线性执行器。看起来像这样。

这是使用 L293d IC 操作的,L293d IC 也通常称为“电机驱动器”IC。该 IC 连接到 12v 电源。它接受来自 Arduino 的输入,即 5v 输入,并将 12v 输出到其输出引脚(执行器所连接的引脚)。因此,当密码正确时,引脚 11 设置为高电平,引脚 12 设置为低电平。引脚 11 和 12 连接到 l293d 的输入端。因此,执行器被拉入内部,门打开。 视频 3 中显示 .

代码

  • 代码 1
  • 代码 2
代码 1Arduino
扫描
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 2void setup() { Serial.begin(9600); pinMode(c0,INPUT_PULLUP); pinMode(c1,INPUT_PULLUP); pinMode(c2,INPUT_PULLUP); pinMode(c3,INPUT_PULLUP); pinMode(r0,输出); pinMode(r1,输出); pinMode(r2,输出); pinMode(r3,输出); pinMode(11,输出); 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);}}
代码 2Arduino
password
int rows=4;int columns=4;int count=0;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 2char password[5]="1234";char typed[5];void setup() { Serial.begin(9600); pinMode(c0,INPUT_PULLUP); pinMode(c1,INPUT_PULLUP); pinMode(c2,INPUT_PULLUP); pinMode(c3,INPUT_PULLUP); pinMode(r0,输出); pinMode(r1,输出); pinMode(r2,输出); pinMode(r3,输出); pinMode(11,输出); 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){typed[count]=key1;计数++; Serial.print(key1);}if(count==4){if(strcmp(typed,password)==0){Serial.println("正确");数字写入(11,高);数字写入(12,低);延迟(250); digitalWrite(11,LOW);}else{ Serial.println("入侵者");}count=0;}}

示意图

连接电机连接处的执行器。
将引脚 8 连接到 12v 屏幕上显示的按键 VID_20160924_195032.mp4led 在密码正确时发光 VID_20160924_200016.mp4 执行器在正常情况下被拉到外面(即门被锁定)。
密码正确后,拉进去开门 VID_20160924_201528.mp4

制造工艺

  1. 银行金库
  2. 旋转门
  3. 运河和船闸
  4. 组合锁
  5. 基于树莓派的气象站
  6. 使用智能手机接近传感器制作自动上锁的办公室门
  7. Windows IoT:人脸识别门
  8. Arduino RFID 锁教程
  9. 基于 Arduino 和 OLED 的元胞自动机
  10. 使用 Arduino 和 ESP8266 的 WiFi 登录页面的智能门锁
  11. 了解引擎配置