安全是我們?nèi)粘I钪械闹饕獑栴},數(shù)字鎖已成為這些安全系統(tǒng)的重要組成部分。有許多類型的安全系統(tǒng)可用于保護(hù)我們的地方。一些例子是基于PIR的安全系統(tǒng),基于RFID的安全系統(tǒng),數(shù)字鎖系統(tǒng),生物矩陣系統(tǒng),電子代碼鎖。在這篇文章中,讓我們使用 Arduino 構(gòu)建一個秘密敲門檢測門鎖,它可以檢測您的敲門模式,并且只有在敲門模式與正確模式匹配時才會打開鎖。
組件:
電路說明:
該爆震模式檢測器的電路圖非常簡單,其中包含用于控制整個項(xiàng)目過程的Arduino,按鈕,蜂鳴器和伺服電機(jī)。Arduino控制整個過程,例如從蜂鳴器或傳感器中獲取密碼,比較模式,驅(qū)動伺服打開和關(guān)閉門并將模式保存到Arduino。
按鈕相對于接地直接連接到 Arduino 的引腳 D7。蜂鳴器連接在 Arduino 的模擬引腳 A0 上,相對于接地,并且在 A0 和接地之間也連接 1M 電阻。**伺服電機(jī)**也連接到Arduino的PWM引腳D3。
Arduino中的喂食敲擊模式:
在本電路中,我們使用蜂鳴器或Peizo傳感器在系統(tǒng)中獲取爆震輸入模式。在這里,我們使用一個按鈕來允許從傳感器獲取輸入并將其保存到Arduino中。該系統(tǒng)是通過從摩爾斯電碼模式中汲取靈感而設(shè)計(jì)的,但與此并不完全相同。
在這里,我們使用了一個紙板箱進(jìn)行演示。為了獲取輸入,我們在按下按鈕后打翻了板子。在這里,我們通過牢記一個時間段來敲門,即 500 毫秒。這 500ms 是因?yàn)槲覀円呀?jīng)在代碼中修復(fù)了它,并且輸入模式依賴于它。此 500ms 時間段將定義輸入為 1 或 0。檢查下面的代碼以了解此內(nèi)容。
當(dāng)我們敲擊它時,Arduino 開始監(jiān)控第一次敲擊到第二次敲擊的時間,并將其放入數(shù)組中。在這個系統(tǒng)中,我們敲了 6 次。這意味著我們將獲得 5 個時間段。
現(xiàn)在我們一一檢查時間段。首先,我們檢查第一次敲擊和第二次敲擊之間的時間段,如果它們之間的時間差小于 500ms,那么它將為 0,如果大于 500ms,它將為 1 并將其保存到一個變量中。現(xiàn)在,在它之后,我們檢查第二次敲擊和第三次敲擊之間的時間段,依此類推。
最后,我們將獲得 0 和 1 格式(二進(jìn)制)的 5 位數(shù)字輸出。
工作說明:
基于敲門的智能鎖項(xiàng)目的工作很簡單。首先,我們必須在系統(tǒng)中保存一個模式。因此,我們必須按住按鈕直到敲擊6次。在這個項(xiàng)目中,我使用了 6 次敲擊,但用戶可以根據(jù)需要進(jìn)行更改。經(jīng)過六次敲擊后,Arduino找到敲擊模式并將其保存在EEPROM中。現(xiàn)在保存輸入模式后,按下并立即釋放按鈕,用于將輸入從傳感器傳輸?shù)紸rduino以打開鎖。現(xiàn)在我們必須敲6次。之后,Arduino對其進(jìn)行解碼并與保存的模式進(jìn)行比較。如果發(fā)生匹配,則Arduino通過驅(qū)動伺服電機(jī)打開門。
注意:當(dāng)我們按住按鈕Arduino啟動10秒計(jì)時器以采取所有6次敲擊時。表示用戶需要在此 10 秒內(nèi)敲門。并且用戶可以打開串行監(jiān)視器以查看日志。
編程說明:
在程序中,首先,我們包含頭文件并定義輸入和輸出引腳,并定義宏和聲明的變量,如下面的代碼中的完整代碼部分所示。
在此之后,在設(shè)置功能中,我們向定義的引腳指示并啟動伺服電機(jī)。
void setup()
{
pinMode(sw, INPUT_PULLUP);
myServo.attach(servoPin);
myServo.write(180);
Serial.begin(9600);
}
之后,我們接受輸入并將輸入模式或敲門時間保存在數(shù)組中。
void loop()
{
int i=0;
if(digitalRead(sw) == LOW)
{
Serial.println("Start");
delay(1000);
long stt= millis();
while(millis()<(stt+patternInputTime))
{
int temp=analogRead(A0);
if(temp>sensitivity && flag==0 && i<=patternLenth)
{
.... .
..... ....
之后,我們解碼輸入模式
for(int i=0;i1;
if(slot[i+1]-slot[i] <500 )
pattern[i]=0;
else
pattern[i]=1;
Serial.println(pattern[i]);
}
如果仍然按下按鈕,則保存
if(digitalRead(sw) == 0)
{
for(int i=0;iEEPROM.write(i,pattern[i]);
while(digitalRead(sw) == 0);
}
如果仍然沒有按下按鈕,那么Arduino會將輸入解碼模式與保存的模式進(jìn)行比較。
else
{
if(knok == 1)
{
for(int i=0;iif(pattern[i] == EEPROM.read(i))
{
Serial.println(acceptFlag++);
}
else
{
Serial.println("Break");
break;
}
}
}
如果任何密碼匹配,則伺服打開門,否則什么也沒發(fā)生,但用戶可能會通過串行監(jiān)視器看到結(jié)果。
Serial.println(acceptFlag);
if(acceptFlag >= patternLenth-1)
{
Serial.println(" Accepted");
myServo.write(openGate);
delay(5000);
myServo.write(closeGate);
}
else
Serial.println("Rejected");
}
<p>#include<EEPROM.h><br/>
#include<Servo.h>p>
<p>#define patternLenth 5<br/>
#define patternInputTime 10000<br/>
#define sensitivity 80<br/>
#define margin 100<br/>
#define sw 7<br/>
#define servoPin 3<br/>
#define openGate 0<br/>
#define closeGate 180<br/>
long slot[patternLenth+1];<br/>
int pattern[patternLenth];<br/>
int flag=0;<br/>
int acceptFlag=0;<br/>
int knok;p>
<p>Servo myServo;p>
<p>void setup() <br/>
{<br/>
pinMode(sw, INPUT_PULLUP);<br/>
myServo.attach(servoPin);<br/>
myServo.write(180);<br/>
Serial.begin(9600);<br/>
}p>
<p>void loop() <br/>
{<br/>
int i=0;<br/>
if(digitalRead(sw) == LOW)<br/>
{ <br/>
Serial.println("Start");<br/>
delay(1000);<br/>
long stt= millis();<br/>
while(millis()<(stt+patternInputTime))<br/>
{<br/>
int temp=analogRead(A0);<br/>
if(temp>sensitivity && flag==0 && i<=patternLenth)<br/>
{<br/>
delay(10);<br/>
flag=1;<br/>
slot[i++]=millis()-stt;<br/>
//Serial.println(slot[i-1] - stt);<br/>
if(i>patternLenth)<br/>
break;<br/>
}p>
<p> else if(temp == 0)<br/>
flag=0;<br/>
}<br/>
<br/>
long stp=millis();<br/>
Serial.println("Stop");<br/>
// Serial.println(stp-stt);<br/>
for(int i=0;i<patternLenth;i++)<br/>
{<br/>
knok=1;<br/>
if(slot[i+1]-slot[i] <500 )<br/>
pattern[i]=0;<br/>
else<br/>
pattern[i]=1;<br/>
Serial.println(pattern[i]);<br/>
}p>
<p> if(digitalRead(sw) == 0)<br/>
{<br/>
for(int i=0;i<patternLenth;i++)<br/>
EEPROM.write(i,pattern[i]);<br/>
while(digitalRead(sw) == 0);<br/>
}p>
<p> else<br/>
{<br/>
if(knok == 1)<br/>
{<br/>
for(int i=0;i<patternLenth;i++)<br/>
{<br/>
if(pattern[i] == EEPROM.read(i))<br/>
{<br/>
Serial.println(acceptFlag++);<br/>
}p>
<p> else<br/>
{<br/>
Serial.println("Break");<br/>
break; <br/>
}<br/>
}<br/>
}p>
<p> Serial.println(acceptFlag);<br/>
if(acceptFlag >= patternLenth-1)<br/>
{<br/>
Serial.println(" Accepted");<br/>
myServo.write(openGate);<br/>
delay(5000);<br/>
myServo.write(closeGate);<br/>
}<br/>
else<br/>
Serial.println("Rejected");<br/>
}p>
<p> for(int i=0;i<patternLenth;i++)<br/>
{<br/>
pattern[i]=0;<br/>
slot[i]=0;<br/>
}<br/>
slot[i]=0;<br/>
acceptFlag=0;<br/>
}<br/>
}p>
-
安全系統(tǒng)
+關(guān)注
關(guān)注
0文章
410瀏覽量
66924 -
蜂鳴器
+關(guān)注
關(guān)注
12文章
891瀏覽量
45923 -
Arduino
+關(guān)注
關(guān)注
188文章
6469瀏覽量
186967
發(fā)布評論請先 登錄
相關(guān)推薦
評論