安全是我们日常生活中的一个主要问题,数字锁已成为这些安全系统的重要组成部分。有许多类型的安全系统可用来保护我们的位置。一些示例是基于PIR的安全系统,基于RFID的安全系统,数字锁系统,生物矩阵系统,电子密码锁。在本文中,让我们使用Arduino构建一个秘密敲门检测门锁,它可以检测到您敲门的样式,并且只有在敲门样式与正确样式匹配时才会打开锁。有关正常工作的演示,请在最后查看视频。
组件:
- Arduino Uno
- 按钮
- 蜂鸣器
- 1M电阻
- 功率
- 连接线
- 框
- 伺服马达
电路说明:
此敲门模式检测器的电路图非常简单,其中包含用于控制项目,按钮,蜂鸣器和伺服电机整个过程的Arduino。Arduino控制着整个过程,例如从Buzzer或Sensor获取密码,比较模式,驱动Servo打开和关闭门并将模式保存到Arduino。
该按钮相对于地面直接连接至Arduino的D7引脚。并在Arduino的模拟引脚A0处相对于地面连接了一个蜂鸣器,并且A0与地面之间还具有1M的电阻。甲伺服电机也被连接到的Arduino的PWM引脚D3。
在Arduino中提供敲门模式:
在此电路中,我们使用了蜂鸣器或Peizo传感器来获取系统中的爆震输入模式。在这里,我们使用一个按钮来允许从传感器获取输入并将其保存到Arduino中。该系统是通过借鉴摩尔斯电码模式的思想而设计的,但并不完全相同。
在这里,我们使用了纸板箱进行演示。为了接受输入,我们在按下按钮后将面板敲了下来。在这里,我们牢记一个500ms的时间段来敲门。这500毫秒是因为我们已将其固定在代码中,并且输入模式取决于它。这500ms的时间段将定义输入为1或0。检查下面的代码以了解该内容。
当我们敲门时,Arduino开始监视第一次敲门到第二次敲门的时间,并将其放入数组中。在此系统中,我们要进行6次敲门。这意味着我们将获得5个时间段。
现在我们逐一检查时间段。首先,我们检查第一次爆震和第二次爆震之间的时间间隔,如果两者之间的时间差减去500ms,则为0;如果大于500ms,则为1,并将其保存到变量中。现在,在此之后,我们检查第二次敲击和第三次敲击之间的时间段,依此类推。
最后,我们将获得0和1格式(二进制)的5位输出。
工作说明:
工作敲基于智能锁项目很简单。首先,我们必须在系统中保存一个模式。因此,我们必须按住按钮直到敲6次。在此项目中,我使用了6次敲门,但用户可以根据需要进行更改。经过六次敲门后,Arduino找到了敲门模式并将其保存在EEPROM中。现在,在保存输入模式之后,按下并立即释放按钮,以将传感器的输入输入到Arduino以打开锁。现在我们必须敲6次。之后,Arduino对其进行解码并与保存的模式进行比较。如果发生匹配,则Arduino通过驱动伺服电机打开门。
注意:当我们按下或按住按钮Arduino时,将启动一个10秒钟的计时器以进行全部6次敲门。意味着用户需要在10秒钟内敲门。用户可以打开串行监视器以查看日志。
编程说明:
首先,在程序中,我们包含头文件并定义输入和输出引脚,并定义宏和声明的变量,如下面的“完整代码”部分中所见。
此后,在 设置 功能中,我们向定义的引脚给出方向并启动伺服电机。
void setup(){pinMode(sw,INPUT_PULLUP); myServo.attach(servoPin); myServo.write(180); Serial.begin(9600); }
之后,我们接受输入并将输入模式或敲门时间保存在数组中。
void loop(){int i = 0; if(digitalRead(sw)== LOW){Serial.println(“ Start”); 延迟(1000); long stt = millis(); while(millis()<(stt + patternInputTime)){int temp = analogRead(A0); if(temp>敏感性&& flag == 0 && i <= patternLenth){….。………
之后,我们解码输入模式
for(int i = 0; i
如果仍然按下按钮,则保存
if(digitalRead(sw)== 0){for(int i = 0; i
如果仍未按下按钮,则Arduino将比较输入的解码模式和保存的模式。
else {if(knok == 1){for(int i = 0; i
如果密码匹配,则伺服打开门,否则什么也没有发生,但用户可能会在串行监视器上看到结果。
Serial.println(acceptFlag); if(acceptFlag> = patternLenth-1){Serial.println(“ Accepted”); myServo.write(openGate); 延迟(5000); myServo.write(closeGate); } else Serial.println(“ Rejected”); }
您可以使用演示视频查看下面的完整代码。