自製Arduino RFID門鎖-第二部分:用智慧型手機解鎖

點擊此處閱讀本文第一部分 >

arduino rfid door lock

 

在上一篇文章自製 Arduino RFID門鎖中,我們製作了Arduino RFID門鎖,並且能夠使用RFID標籤或鍵盤來解鎖。那麼,如果您想要進一步簡化流程該怎麼辦呢?在第二部分中,我們將添加一個附加功能:使用智慧手機來解鎖。這是一種更簡單的控制門的辦法,尤其是當所有人都希望能夠透過一個裝置就能控制所有物品的時候。那麼我們該怎麼做呢?我們將會把藍牙模組連接到先前的設定中,並連接電子門。

硬體

  • HC-05 藍牙模組
  • ABK-704L 電氣裝置
  • Arduino Nano
  • RFID RC522
  • 壓電蜂鳴器
  • 2x 330 電阻
  • 4×4 鍵盤
  • LCD 合適器 I2C
  • LCD16X2BL
  • DC-DC 降壓模組 MP1584EN

軟體

  • MIT App Inventor 2
  • Arduino IDE
  • Github

步驟1:連接藍牙

在這一步中,我們將深入研究HC-05藍牙模組。

Arduino-info Wiki

有以下兩種操作模式:

  • 指令模式 – 將AT指令發送到藍牙模組;
  • 資料模式 – 從另一個藍牙模組接收和傳輸資料。預設的模式是資料模式,預設設定如下:
    • 序列傳輸速率:9600 bps,資料:8位,停止位:1位,同位:無
    • 密碼:1234
    • 裝置名稱:HC-05

針對我們的應用程式,我們將使用資料模式,因為我們僅需要使用序列通信來從手機接收資訊。

有關序列通信的更多資訊,請參考Arduino序列通信課程

arduino rfid door lock

圖1:藍牙模組引腳

在此應用程式中,我們需要使用以下引腳—Arduino-info Wiki:

  • VCC: +5 電源
  • GND: 系統 / Arduino 接地
  • TX: 將序列資料從HC-05傳輸到 Arduino 序列接收埠
  • RX: 接收來自Arduino 序列發送埠的序列資料
arduino rfid door lock

圖2:HC-05 和Arduino Nano的接線圖

 

arduino rfid door lock

圖3:藍牙和Arduino之間的連接

代碼

藍牙使用序列通信;“Serial.write(Serial.read());”連接了RX和TX引腳後,該指令將會正常運行。如果這對藍牙模組不適用,則下面的代碼返回的內容與您在Arduino IDE中編寫的文本相同。

 

您需要在裝置管理員中找到Arduino的程式設計埠;連接藍牙後,將出現“藍牙連結上的標準序列”,您必須選擇“USB-SERIAL”才能對Arduino進行程式設計。您需要使用序列電纜上傳程式,不能使用無線藍牙將程式上傳到研發板。

arduino rfid door lock

連接RX和TX後,您將收到許多錯誤資訊,如下所示:

arduino rfid door lock

為了避免這些錯誤,您需要在藍牙的TX引腳沒有連接到Arduino研發板的情況下上傳程式。藍牙的TX引腳具有低電阻,而Arduino的RX輸入具有高電阻。最終的電阻將為較低的一個,而RX輸入將會被繞過(從USB埠產生的電流直接透過藍牙輸出,而不是Arduino研發板)。這就是資料無法傳輸到期望位置點的原因。另外,電流直接流入裝置的輸出端將會在模組之間產生錯誤的連接,會導致電氣故障。我們想要做的是對Arduino進行程式設計,而不是將資料發送到藍牙模組。

斷開藍牙的TX引腳後,一切都會正常工作,您就可以上傳代碼了。

arduino rfid door lock

圖4:連接藍牙TX引腳而導致的電氣故障

 

arduino rfid door lock

圖5: HC-05 和Arduino Nano的接線圖,顯示了上傳代碼之前的正確連接

 

上傳代碼後,下一步是連接到電腦上的藍牙。您需要重新連接藍牙的TX引腳,因為現在我們將使用無線通訊,序列電纜只用於供電。

請按照以下步驟將藍牙連接到PC(在Windows 10系統上):

  1. 打開設定(Settings)
  2. 點擊裝置(Devices)
  3. 選擇藍牙(Bluetooth)
  4. 點擊開啟(ON)
  5. 找到“HC-05”並點擊“PAIR”
  6. 輸入密碼“1234”
arduino rfid door lock

圖6:在Windows 10系統上連接藍牙模組

如果您已經按照上述步驟進行了操作,那麼您的藍牙連接應該就成功了,您可以對模組進行測試。有一種簡單的檢查連接是否成功建立的方法:在Arduino IDE中鍵入一個單詞,然後查看是否返回相同的單詞,如果是的話,就說明一切正常,您可以繼續往下進行了!如果不是,請返回之前的步驟並再次對藍牙配對。

因為我們不再使用透過電纜的序列通信,所以需要找到藍牙的COM。我們需要回到埠(PORTS)部分的裝置管理員(Device Manager),並搜索藍牙裝置。在我的應用中是PORT 17:

arduino rfid door lock

在裝置管理員中找到COM後,您需要在Arduino IDE中執行相同的操作(即將COM埠設定為COM 17)。您需要點擊TOOLS → PORT → COM 17

arduino rfid door lock

圖7:在Arduino IDE中設定COM

選擇正確的COM後,您可以對模組進行測試,查看是否工作正常。

請確保您在序列監視器中選擇了以下兩個選項:

  • NL & CR
  • 9600 波特

在我們的演示中,我們將輸入資訊“Hello!”

arduino rfid door lock

輸出內容應與輸入內容相同:

arduino rfid door lock

步驟2:裝置

讓我們參考一下上一篇文章自製Arduino RFID門鎖!我們將使用與之前相同的元件,然後增加一個藍牙模組(HC-05)。為了將資料從智慧手機傳輸到Arduino,我們需要藍牙模組。

斷開藍牙的TX引腳很重要,否則我們將會遇到跟步驟1中相同的錯誤。

有三種方式可以打開門鎖:

  1. 從鍵盤輸入密碼
  2. 將標籤放在RFID附近
  3. 從智慧手機輸入密碼
arduino rfid door lock

圖8:所有組件的接線圖

該鎖具有很高的電流量(800mA)。我們添加一個綠色LED燈來查看代碼是否運行正常。鍵入“*123456#” 代碼且系統解鎖後,LED指示燈將為高電平。

arduino rfid door lock

圖9:元件之間的連接

在下一步中,我們將添加電池和繼電器。我們使用兩節9V電池給門鎖供電。如果您打算將裝置電壓設定為固定值,則需要購買一種可以從切換電源的220V電壓中獲得5V電壓的裝置。

因為鎖的電流消耗很高,所以電池並聯連接。在這種情況下,Arduino由電池供電。我們需要使用將9V轉換為5V的DC-DC降壓模組。輸入電壓由Arduino研發板的Vin引腳進入。我們將不再使用電腦USB的供電。

降壓模組的輸出電壓要固定在5V。您需要使用萬用表進行校準;輸入電壓為9V,我們將旋扭電位器,直到輸出電壓為5V。

arduino rfid door lock

圖10:DC-DC降壓模組(MP1584EN)

 

arduino rfid door lock

圖11:測量電池電壓

 

arduino rfid door lock

圖12:最終設定的接線圖

 

arduino rfid door lock

圖13:最終設定

 

完整代碼

 

 

步驟3:應用程式

在此步驟中,我們將為系統創建應用程式。我使用的是MIT App Inventor 2程式。這個程式很簡單,不需要很高的程式設計技能,可以在此處下載:MIT AppInventor。為了打開該應用程式,您需要:

  1. 下載應用程式
  2. 用您的Google帳號進行登錄
  3. 開始一個新的專案

在安裝了程式之後,您會找到如下的一個佈局介面:

arduino rfid door lock

圖14 : MIT AppInventor

 

為了對您的程式進行測試,您需要在手機上從Google Play下載“MIT AI2”應用程式。這是一個免費的應用程式,專門用於將網路應用程式同步到智慧手機上。

 

arduino rfid door lock

圖15:Google Play上的MIT AppInventor

 

如果您想要在手機上查看應用程式的螢幕,需要點擊Connect → AI Companion

arduino rfid door lock

圖16:連接應用程式

點擊之後,該應用程式將為您提供兩種操作方式:

  • 您可以掃描條碼(在您的裝置上啟動MIT AI2 Companion,然後掃描條碼或鍵入用於連接的代碼,以對您的應用程式進行即時測試)
  • 在您的應用程式中輸入6個字母的代碼

我將使用第二種方法,將電腦產生的6個字母的代碼輸入到手機應用程式中。

arduino rfid door lock

圖17:網路與手機同步

 

我選擇這個應用程式是因為它易於使用;您無需具備程式設計技能即可實現如上所述的簡單代碼。您只需要構思一下應用程式的外觀,在該應用程式中進行外觀設定也非常簡單。

我們先從使用者介面開始:

arduino rfid door lock

圖18:使用者介面

 

 

arduino rfid door lock

圖19:我的用於無線打開門鎖的應用程式

 

您可以在螢幕上添加應用程式的任何元素(按鈕,圖像,文字方塊,標籤)。在右側功能表中,您可以選擇想要從螢幕上獲取的特長(水準對齊,應用名稱,標題)。如果您想要背景圖像,可以從背景圖像(Background Image)功能表中進行選擇。在該應用程式中,我選擇在藍牙和手機之間的連接打開時顯示綠色背景,在連接斷路時顯示紅色背景。

該應用程式中螢幕上的三個要素:

arduino rfid door lock

圖20:不可見的組件

感測器組件 & 使用者介面元件 – MIT App Inventor

  1. Bluetooth Client1 – 檢測藍牙裝置的元件。該系統中返回以下內容的函數:
    1. 配對的藍牙裝置的位址和名稱 – AddressesAndNames
    2. 裝置上的藍牙是否可用 – 可用(Available)
    3. 是否啟用藍牙 – 是(Enabled)
  2. Clock1 – 不可見的元件,透過手機上的內建時脈提供即時時間。它可以按照設定的時間間隔定期地觸發計時器,並執行時間的計算、操作和轉換。
  3. Notifier1 – 通知器元件顯示警報對話方塊、消息和臨時警報,並透過以下方式創建Android日誌條目:
    1. ShowMessageDialog:顯示一條使用者必須透過按下按鈕才能斷路的消息。
    2. LogError:將錯誤消息記錄到Android日誌中。
    3. LogInfo:將資訊消息記錄到Android日誌中。
arduino rfid door locks

圖21:螢幕模組

 

如果未連接藍牙,您會收到一個錯誤資訊,該錯誤資訊會顯示在連接狀態(Link Status)部分中。我在沒有連接裝置的情況下輸入了打開門的密碼,應用程式提醒我裝置沒有打開。這是一個很好的通知器,因為您有可能會忘記進行裝置的配對,這樣就無法把門打開。

 

arduino rfid door lock

圖22:通知器顯示錯誤資訊

該應用程式有三個按鈕:

 

  • 1. 連接:該按鈕被啟動時,將會顯示一個文本清單供使用者選擇。此按鈕相當於藍牙查找器。如果您使用該應用時附近開啟的藍牙裝置多餘一個,則這些藍牙將會顯示在搜索框中。我的附近只有一個打開的藍牙,即HC-05模組。

 

arduino rfid door lock

圖23:搜索藍牙裝置

 

arduino rfid door lock

圖24:listpicker模組

 

  • 2. 斷開連接:此按鈕將會把應用程式與手機之間的連接斷開。點擊按鈕後,背景色變為紅色。

 

arduino rfid door lock

圖25:斷開連接模組

 

  • 3. 發送文本:僅在建立連接時有效。程式透過藍牙的“SendText”函數發送文本資料。在狀態部分將顯示消息“消息已發送”(Message Sent)。

 

arduino rfid door lock

圖26:發送文本模組

 

應用程式是如何工作的 – Pevest App Inventor 2: 學習編碼

“當輸入Clock1.Timer指令時,該應用程式會檢查藍牙是否打開。變數 ByteAvailableCommandByte將被初始化設定為0,以用於傳輸。如果獲取到了有關資料,則使用ReceiveSigned1ByteNumber讀取傳入資料的第一個位元組。這是指令位元組。根據指令的值,將採用合適的藍牙模組中的方法(method)來讀取下一個位元組。”

arduino rfid door lock

圖 27: 傳輸模組/ © Pevest App Inventor 2

 

結論

該專案由於需要使用大量的週邊裝置之間的通信而具有一定的挑戰性,因此我花了一些時間來尋找連接所有元件的理想方式。它説明我瞭解了製造複雜裝置的過程中可能發生的一些錯誤,以及避免這些錯誤的方法。