安全性是我们日常生活中的主要问题, 数字锁 已成为这些安全系统的重要组成部分。有很多类型的技术可以保护我们的位置,例如基于PIR的安全系统,基于RFID的安全系统,激光安全警报,生物矩阵系统等。
我们之前已经使用Arduino和8051构建了带密码的数字锁,这里我们将使用带有用户定义的密码的Raspberry Pi构建此数字锁。设置密码后,用户只能使用正确的密码进入门。
如果您不熟悉Raspberry Pi,我们创建了一系列教程来学习Raspberry Pi,并与所有基本组件和一些简单的项目入手进行检查。
使用的组件:
- Raspberry Pi(带有已启动的SD卡)
- 键盘模块
- 蜂鸣器
- 16x2 LCD
- 1万锅
- 10k电阻器包(上拉)
- LED
- 1k电阻
- 面包板
- CD / DVD推车作为登机口
- 功率5伏
- 马达驱动器L293D
- 12伏电池
- 连接线
使用多路复用将4x4键盘与Raspberry Pi连接:
在此电路中,我们使用了多路复用技术来连接键盘,以便在系统中输入密码。在这里,我们使用带有16个按键的4x4复用键盘。通常,如果我们要使用16个按键,则需要16个引脚来连接到Arduino,但在多路复用技术中,我们仅需要8个引脚即可连接16个键。因此,这是连接小键盘模块的明智方法。了解更多有关复用技术及其在使用8051的数字锁中的工作的信息。
复用技术是一种非常有效的方法,可以减少与微控制器用于提供输入或密码或数字的引脚数。基本上,此技术有两种使用方式:一种是行扫描,另一种是列扫描。如果我们使用键盘库(#include
但是在此项目中,我们已经实现了对同一键盘进行编码的一种简短方法,而无需使用键盘库。请在下面的编程部分中查看它。
电路说明:
该Raspberry Pi数字门锁的电路非常简单,其中包含Raspberry Pi 3,键盘模块,蜂鸣器,DVD / CD手推车作为门和LCD。 Raspberry Pi在这里控制着整个过程,例如从键盘模块获取密码,比较密码,驱动蜂鸣器,打开/关闭门以及将状态发送到LCD显示屏。键盘用于输入密码。蜂鸣器用于指示,并由内置的NPN晶体管驱动。 LCD用于在其上显示状态或消息。
键盘模块的Column引脚直接连接到GPIO引脚22、23、24、25,Row引脚连接到Raspberry Pi的wringPi引脚的21、14、13、12。树莓派在4位模式下连接了一个16x2 LCD。LCD的控制销RS,RW和恩被直接连接到GPIO引脚11,GND和10.数据引脚D4-D7被连接到GPIO引脚6,图15,图4和1。一个蜂鸣器连接在GPIO管脚8和电机驱动器L293D连接到Raspberry Pi的GPIO引脚28和29。甲12伏电池连接在L293D的销8相对于接地。
工作说明:
这个项目的工作很简单。当用户在Raspberry Pi中运行代码时,LCD会显示一些欢迎消息,并在其后显示“ A-输入密码”和第二行B-“更改密码”。现在,用户可以通过按键盘上的A和B来选择他们的选择。
现在,如果用户要打开门,则需要在键盘上按“ A”,然后系统将要求输入密码。默认密码为“ 1234”。现在,用户必须输入密码,并且在此系统之后,将检查密码是否有效:
1.如果用户输入正确的密码,则系统将打开门。
2.如果用户输入了错误的密码,系统将向蜂鸣器发送命令以发出蜂鸣声,并在LCD上显示“ Access Denied”。
现在假设用户想要更改密码,然后他/她需要在小键盘上按“ B”,然后将要求用户输入“当前密码”或“当前密码”。现在,用户需要输入当前密码,然后系统检查其正确性并执行给定的任务之一。
1.如果用户输入正确的密码,则系统将要求输入“新密码”,现在用户可以通过输入新密码来更改密码。
2.如果用户输入了错误的密码,则系统将驱动蜂鸣器并在液晶显示屏上显示“ Wrong Password:”。
现在,用户需要再次重复整个过程以更改密码。
基本上,打开和关闭门无非是顺时针和逆时针旋转电动机来打开和关闭门。对于小型项目,您只需添加一个直流电动机即可打开和关闭门。我们也可以使用伺服或步进电机,但是我们需要相应地更改代码。
此外,您可以使用适当的电子门锁(可在线轻松获得)来代替CD拉杆。它具有一个电磁体,当没有电流通过门锁(开路)时,它可使门保持锁定状态;当有电流通过门锁时,门锁将被解锁,并且门可以打开。代码将相应更改,也请检查此共享的项目审阅:Arduino RFID Door Lock
编程说明:
编程与Arduino非常相似。Arduino函数使用类,但在这里我们使用c编程完成了代码,没有类。我们还安装了用于GPIO的connectionPicture库。
现在,首先我们需要包括所需的库,然后为LCD,蜂鸣器,LED和电机定义引脚。
#包括
在此之后,定义键盘行和列的引脚,并定义用于存储密码和键盘编号的阵列。
字符传递 char pass1 = {'1','2','3','4'}; int n = 0; char row = {21,14,13,13,12}; char col = {22,23,24,25}; char num = {{'1','2','3','A'},{'4','5','6','B'},{'7','8',' 9','C'},{'*','0','#','D'}};
之后,我们编写了一些驱动LCD的功能:
函数 void lcdcmd 用于向LCD发送命令,函数 void write 用于向LCD发送数据。
函数 void print 用于将字符串发送到LCD。
无效print(char * str){while(* str){write(* str); str ++; }}
函数 void setCursor 用于在LCD中设置光标位置。
void setCursor(int x,int y){int set = 0; if(y == 0)set = 128 + x; if(y == 1)设置= 192 + x; lcdcmd(set); }
函数 void clear() 用于清除LCD,而函数 buzzer() 用于蜂鸣。
函数 void gate_open(),void gate_stop() 和 void gate_close() 用于驱动门(CD台车)
void gate_open(){digitalWrite(m1,LOW); digitalWrite(m2,HIGH); delay(2000); } void gate_stop(){digitalWrite(m1,LOW); digitalWrite(m2,LOW); delay(2000); } void gate_close(){digitalWrite(m1,HIGH); digitalWrite(m2,LOW); delay(2000); }
给定功能用于在4位模式下初始化LCD。
void begin(int x,int y){lcdcmd(0x02); lcdcmd(0x28); lcdcmd(0x06); lcdcmd(0x0e); lcdcmd(0x01); }
给定的 void keyboard() 函数用于通过“短方法”将键盘模块与Raspberry Pi连接。
void keyboard(){int i,j; int x = 0,k = 0; delay(2000); while(k <4){for(i = 0; i <4; i ++){digitalWrite(col,LOW); for(j = 0; j <4; j ++){if(digitalRead(row)== 0){setCursor(x,1);…………………
检查下面完整代码中的所有功能,代码简单易懂。