解讀Arduino研發思想:製作兒童安全鎖

childproof lock

使用ESP82晶片的IoT 兒童安全鎖

如果您對科技領域有一定瞭解的話,一定聽說過“loT(物聯網)”一詞。其概念是將每個裝置都連接到互聯網上,從而實現裝置與裝置之間、使用者與裝置之間的相互通信。而其中具有突破性的工具之一就是將ESP8266序列至Wi-Fi晶片。今天,我們將透過解讀Arduino的研發思想來製作一個使用該晶片的兒童安全鎖。我稱它為“兒童安全鎖”,但是您可以將其用於任何想要上鎖物件,並且只能在某些特定情況下才能打開。例如,使您的室友(或您自己)無法拿到冰箱裡那些誘人的餅乾。

專案清單:

  • Arduino UNO 研發板
  • 具有內建電平轉換器和切換的ESP8266-12 模組
  • LM 7805 5V 穩壓器: https://www.fairchildsemi.com/pf/Lm/LM7805.html
  • 兩個電容(0.1 mF和0.33 mF)
  • USB串口轉換器(這裡使用的是Prolific PL-2303,推薦使用更新的版本)
  • 一塊小型螺管式電磁鐵
  • 9V的外部電源

該部分代碼可以在https://github.com/gasparnori/iot_lock獲取

連接ESP8266進行程式設計

這種晶片有很多優點,但同時也有很多缺點。它成本低,相對簡單,並且用途十分廣泛,但是在使用的時候很容易遇到一些陷阱。基於板載電平轉換器和切換的模組也許可以説明您避免這些問題,但是請謹記以下幾點:

  • ESP需要近200 mA的工作電流,Arduino的電源輸出引腳可能無法提供,因此需要使用外部電源和一個穩壓器。對於該項目,您可以使用一個5V的穩壓器(如LM7805)或一個3.3V的穩壓器。
  • 在程式設計或者使用該模組時,需要調整“UART—Programming”切換。請牢記這一點,否則您將收到記憶體異常的資訊。
  • 將USB連接到串口轉換器時,請確保Vcc引腳懸空並確保接地。
childproof lock programming

圖 1:程式設計設定流程圖

與ESP通信

現在您已經建立了連接,我們來看看您的晶晶片況如何。有幾種Arduino序列通信工具可以使用,其中我認為ESPlorer是最佳選擇。下載後,只需直接運行ESPlorer.jar檔即可。設定好您的埠和通信速率(序列傳輸速率),通常設定為115200,但是可能某些裝置需要設定為其他不同的速率,如果設定為115200無法正常工作,請嘗試其他的值直到找到最佳值為止。首先,為了檢查通信是否正常,請按下重置按鈕,如果能夠看到一條歡迎使用的資訊,證明您可以正常進行下一步操作。然後可以嘗試操作左上角的一些指令,比如簡單的AT指令,或連接到本地的Wi-Fi網路。現在我們可以準備對模組進行程式設計了。

ESPlorer childproof lock

圖 2: ESPlorer

對ESP8266進行程式設計

有兩種控制晶片的方法。可以使用Arduino研發板,透過序列埠進行簡單的AT指令操作實現控制(也就是您剛剛操作過的指令)。或者用一種更簡單的方式:直接上傳代碼到晶片上。在本課程中,我們選擇第二種方式。打開Arduino IDE,進入Tools–>Board–>Board Manager,找到ESP板,然後進行安裝。

childproof lock board manager

圖 3: Board Manager

新建一個草圖,進入Tools–>Board並選擇您的ESP模組。另外,請確保在Tools–>Port中選擇正確的埠。

childproof lock port

圖4:選擇埠和研發板

現在,將以下代碼複製到您的草圖中,將晶片轉換為程式設計模式,按下重新開機按鈕,然後開始程式設計。上傳代碼後,再將其調回“uart mode”,再按下重新開機按鈕,然後再次打開ESPlorer,查看模組返回的內容。如果一切正常,您將會看到兩條資訊,一個是您所連接的Wi-Fi,另一個是您的IP位址。在瀏覽器中打開您的IP位址,應該看到以下資訊:

childproof lock IP

圖5:嘗試點擊打開按鈕

 

代碼說明

當您打開網站時,將會看到一個html主頁,如果您想要打開兒童安全鎖,則網站會將您重置向到“/msg?msg=open”或者“/msg?msg=close” URL。在該URL中,您將看到另一個html頁面,並停留3秒鐘,然後會再次跳轉到第一個頁面上。幸運的是,大多數的重置向都是透過html代碼來完成的,伺服器只需要將每個可能的URL與返回的html網站(form_closed 和form_open事件)相關聯即可。為了將html與URL相關聯,我們使用server.on函數(url, handler)。最重要的通信過程在handleMessage函數中實現。伺服器從URL中讀取mag參數,並將其作為打開或者斷路兒童安全鎖的指令在序列埠發送出去。

如果一切運行正常,我們就準備將它連接到一個真正的Arduino裝置上。

Arduino 設定

從Arduino的角度來說,我們所使用的是非常簡單的設定。雖然螺線管的最高工作電壓為12V,但是目前在該應用中,5V的工作電壓以及Arduino的輸出引腳提供的電流已經足以使電磁鐵工作(但是如果您想要一個更高能量的電磁鐵,透過借助電晶體或者繼電器就可以很容易地達到提升的目的)。因此,卸下USB轉換器,並且將序列埠與地面連接在一起,然後,再次由穩壓器向兩個裝置提供Vin。

請謹記以下幾點:

  • 使用Arduino的硬體序列埠(引腳0或1),因為軟體序列埠可能無法在如此高的速率下工作。但是,在進行Arduino項目程式設計時請不要忘記拔下這些引腳,以免發生通信異常。
  • 在進行Arduino程式設計時請拔下Vin引腳,您絕對不會想突然炸了自己的裝置吧。
childproof lock arduino

圖6:Arduino設定

childproof lock diagram

圖7:已完成電路圖

 

讓我們來把它們放在一起:

childproof lock

childproof lock brain

圖9:一個已完成的鎖

對於這個鎖來說我使用了一個塑膠棒來穩定螺線管,並且使用一顆硬幣充當能夠產生磁力的東西以保證在工作狀態中能夠保持兒童安全鎖的功能。如果您打算使用在冰箱或者其他金屬門上,那麼可能就沒這個必要了。

總結

在這裡,我們透過使用一個小螺線管和ESP8266模組,創建了一個可運行的IoT兒童安全鎖。ESP模組作為伺服器,透過本地IP位址提供了鎖定訪問途徑。透過按一下網站上的按鈕來實現開啟或斷路該兒童安全鎖,該網站在任何與ESP所連接的相同Wi-Fi上的裝置上都可以使用。