0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino構(gòu)建一個(gè)智能爆震檢測門鎖

科技觀察員 ? 來源:circuitdigest ? 作者:薩達(dá)姆 ? 2023-01-25 15:22 ? 次閱讀

安全是我們?nèi)粘I钪械闹饕獑栴},數(shù)字鎖已成為這些安全系統(tǒng)的重要組成部分。有許多類型的安全系統(tǒng)可用于保護(hù)我們的地方。一些例子是基于PIR的安全系統(tǒng),基于RFID的安全系統(tǒng),數(shù)字鎖系統(tǒng),生物矩陣系統(tǒng),電子代碼。在這篇文章中,讓我們使用 Arduino 構(gòu)建一個(gè)秘密敲門檢測門鎖,它可以檢測您的敲門模式,并且只有在敲門模式與正確模式匹配時(shí)才會(huì)打開鎖。

組件:

  1. Arduino Uno
  2. 按鈕
  3. 蜂鳴器
  4. 1M 電阻器
  5. 權(quán)力
  6. 連接線
  7. 伺服電機(jī)

電路說明:

爆震模式檢測器的電路圖非常簡單,其中包含用于控制整個(gè)項(xiàng)目過程的Arduino,按鈕,蜂鳴器和伺服電機(jī)。Arduino控制整個(gè)過程,例如從蜂鳴器或傳感器中獲取密碼,比較模式,驅(qū)動(dòng)伺服打開和關(guān)閉門并將模式保存到Arduino。

1.png

按鈕相對(duì)于接地直接連接到 Arduino 的引腳 D7。蜂鳴器連接在 Arduino 的模擬引腳 A0 上,相對(duì)于接地,并且在 A0 和接地之間也連接 1M 電阻。**伺服電機(jī)**也連接到Arduino的PWM引腳D3。

使用Arduino的秘密敲擊檢測門鎖

用于基于敲擊的智能鎖項(xiàng)目的伺服

Arduino中的喂食敲擊模式:

在本電路中,我們使用蜂鳴器或Peizo傳感器在系統(tǒng)中獲取爆震輸入模式。在這里,我們使用一個(gè)按鈕來允許從傳感器獲取輸入并將其保存到Arduino中。該系統(tǒng)是通過從摩爾斯電碼模式中汲取靈感而設(shè)計(jì)的,但與此并不完全相同。

在這里,我們使用了一個(gè)紙板箱進(jìn)行演示。為了獲取輸入,我們?cè)诎聪掳粹o后打翻了板子。在這里,我們通過牢記一個(gè)時(shí)間段來敲門,即 500 毫秒。這 500ms 是因?yàn)槲覀円呀?jīng)在代碼中修復(fù)了它,并且輸入模式依賴于它。此 500ms 時(shí)間段將定義輸入為 1 或 0。檢查下面的代碼以了解此內(nèi)容。

基于敲門的智能鎖項(xiàng)目

當(dāng)我們敲擊它時(shí),Arduino 開始監(jiān)控第一次敲擊到第二次敲擊的時(shí)間,并將其放入數(shù)組中。在這個(gè)系統(tǒng)中,我們敲了 6 次。這意味著我們將獲得 5 個(gè)時(shí)間段。

現(xiàn)在我們一一檢查時(shí)間段。首先,我們檢查第一次敲擊和第二次敲擊之間的時(shí)間段,如果它們之間的時(shí)間差小于 500ms,那么它將為 0,如果大于 500ms,它將為 1 并將其保存到一個(gè)變量中?,F(xiàn)在,在它之后,我們檢查第二次敲擊和第三次敲擊之間的時(shí)間段,依此類推。

最后,我們將獲得 0 和 1 格式(二進(jìn)制)的 5 位數(shù)字輸出。

工作說明:

基于敲門的智能鎖項(xiàng)目的工作很簡單。首先,我們必須在系統(tǒng)中保存一個(gè)模式。因此,我們必須按住按鈕直到敲擊6次。在這個(gè)項(xiàng)目中,我使用了 6 次敲擊,但用戶可以根據(jù)需要進(jìn)行更改。經(jīng)過六次敲擊后,Arduino找到敲擊模式并將其保存在EEPROM中。現(xiàn)在保存輸入模式后,按下并立即釋放按鈕,用于將輸入從傳感器傳輸?shù)紸rduino以打開鎖?,F(xiàn)在我們必須敲6次。之后,Arduino對(duì)其進(jìn)行解碼并與保存的模式進(jìn)行比較。如果發(fā)生匹配,則Arduino通過驅(qū)動(dòng)伺服電機(jī)打開門。

帶Arduino和伺服的敲擊模式檢測器

注意:當(dāng)我們按住按鈕Arduino啟動(dòng)10秒計(jì)時(shí)器以采取所有6次敲擊時(shí)。表示用戶需要在此 10 秒內(nèi)敲門。并且用戶可以打開串行監(jiān)視器以查看日志。

編程說明:

在程序中,首先,我們包含頭文件并定義輸入和輸出引腳,并定義宏和聲明的變量,如下面的代碼中的完整代碼部分所示。

在此之后,在設(shè)置功能中,我們向定義的引腳指示并啟動(dòng)伺服電機(jī)。

void setup() 
{
  pinMode(sw, INPUT_PULLUP);
  myServo.attach(servoPin);
  myServo.write(180);
  Serial.begin(9600);
}

之后,我們接受輸入并將輸入模式或敲門時(shí)間保存在數(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會(huì)將輸入解碼模式與保存的模式進(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ā)生,但用戶可能會(huì)通過串行監(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>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 安全系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    410

    瀏覽量

    66877
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    888

    瀏覽量

    45795
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186388
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    壓電式傳感器測試系統(tǒng)的實(shí)現(xiàn)

    壓電式傳感器廣泛應(yīng)用于發(fā)動(dòng)機(jī)機(jī)體或氣缸的檢測中。汽車防爆系統(tǒng)通過
    的頭像 發(fā)表于 10-11 08:47 ?5142次閱讀
    壓電式<b class='flag-5'>爆</b><b class='flag-5'>震</b>傳感器測試系統(tǒng)的實(shí)現(xiàn)

    AGN和AGU發(fā)動(dòng)機(jī)傳感器

      傳感器其檢測數(shù)據(jù)如下表所示?! g迎轉(zhuǎn)載,信息維庫電子市場網(wǎng)(www.dzsc.com):
    發(fā)表于 10-30 16:33

    傳感器檢測數(shù)據(jù)分享

      傳感器檢測數(shù)據(jù)如下表所示。
    發(fā)表于 10-31 17:33

    傳感器波形測試

      1)標(biāo)準(zhǔn)波形特點(diǎn)  圖1為傳感器標(biāo)準(zhǔn)波形。  傳感器的波形與程度有關(guān),震動(dòng)越大,
    發(fā)表于 10-31 17:30

    汽紅旗世紀(jì)星發(fā)動(dòng)機(jī)傳感器檢測數(shù)據(jù)

      傳感器檢測數(shù)據(jù)如下表所示。:
    發(fā)表于 11-15 15:04

    非共振型壓電式傳感器的識(shí)別

      非共振型壓電式傳感器的結(jié)構(gòu)如圖1所示。它由平衡重、壓電元件、殼體、電氣連接裝置等組成。兩個(gè) 壓電元件同極性相向?qū)樱胶庵貙⒓铀僮儞Q成作用在壓電元件上的壓力,輸出電壓由兩個(gè)壓電
    發(fā)表于 11-16 15:26

    與碰撞傳感器概述

    電信號(hào)輸入ECU,ECU根據(jù)信號(hào)對(duì)點(diǎn)火提前角進(jìn)行修正,從而使點(diǎn)火提前角在任何工況下都保持個(gè) 最佳值。圖1為點(diǎn)火提前角反饋控制系統(tǒng)圖。 圖1 點(diǎn)火提前角反饋控制系統(tǒng)圖 圖2
    發(fā)表于 11-16 15:47

    利用示波器測量汽車傳感器波形及分析

    時(shí),其振動(dòng)頻率和傳感器本身的固有頻率致而產(chǎn)生共振的現(xiàn)象來檢測是否產(chǎn)生。其輸出信號(hào)為電壓,電壓值的大小表示
    發(fā)表于 07-10 15:32

    傳感器的性能如何

    作此類發(fā)動(dòng)機(jī)傳感器的信號(hào)調(diào)節(jié)器。 新型解決方案有時(shí)會(huì)將該功能集成到發(fā)動(dòng)機(jī) ECU 的個(gè) MCU 中,不過,這意味著可能更多地以遠(yuǎn)程方式完成該處理過程(由于微控制器較低的溫度等級(jí))
    發(fā)表于 11-21 06:36

    種高效實(shí)用的發(fā)動(dòng)機(jī)片上檢測解決方案

    種高效實(shí)用的發(fā)動(dòng)機(jī)片上檢測解決方案 發(fā)動(dòng)機(jī)及控制   &nbs
    發(fā)表于 12-19 08:59 ?2568次閱讀
    <b class='flag-5'>一</b>種高效實(shí)用的發(fā)動(dòng)機(jī)片上<b class='flag-5'>爆</b><b class='flag-5'>震</b><b class='flag-5'>檢測</b>解決方案

    汽車傳感器測試系統(tǒng)技術(shù)解析

    壓電式傳感器廣泛應(yīng)用于發(fā)動(dòng)機(jī)機(jī)體或氣缸的檢測中。汽車防爆系統(tǒng)通過
    發(fā)表于 11-30 14:25 ?2次下載
    汽車<b class='flag-5'>爆</b><b class='flag-5'>震</b>傳感器測試系統(tǒng)技術(shù)解析

    傳感器的結(jié)構(gòu)及工作原理

    傳感器是發(fā)動(dòng)機(jī)電子控制系統(tǒng)中必不可少的重要部件,它的功用是檢測發(fā)動(dòng)機(jī)有無現(xiàn)象,并將信 號(hào)送入發(fā)動(dòng)機(jī)ECU。常見的
    的頭像 發(fā)表于 03-15 15:28 ?2.7w次閱讀
    <b class='flag-5'>爆</b><b class='flag-5'>震</b>傳感器的結(jié)構(gòu)及工作原理

    如何使用Arduino構(gòu)建數(shù)字鍵盤安全門鎖

    在這個(gè)項(xiàng)目中,我構(gòu)建個(gè)Arduino 鍵盤門鎖,它可以安裝到您現(xiàn)有的任何門上,以使用數(shù)字密碼保護(hù)它們。
    發(fā)表于 08-17 15:49 ?4321次閱讀
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>構(gòu)建</b>數(shù)字鍵盤安全<b class='flag-5'>門鎖</b>

    傳感器的作用 傳感器故障排除方法

    傳感器(Knock Sensor)是款用于檢測發(fā)動(dòng)機(jī)現(xiàn)象的傳感器,也稱為碰燃傳感器或
    的頭像 發(fā)表于 01-19 11:12 ?2479次閱讀

    傳感器的特點(diǎn)、分類、操作規(guī)程及發(fā)展趨勢(shì)

    傳感器,也被稱為檢測傳感器或傳感器模塊,
    的頭像 發(fā)表于 02-22 14:37 ?1226次閱讀