一、制作介紹
EzDIO擴展板是一塊三用的I/O擴充板,適用micro:bit、LinkIt 7697與ESP32三種控制板,不同的是以杜邦排針和Grove插座取代原先的功能,讓用戶決定自己要連接什么模塊。
本篇文章將以人臉辨識門鎖的主題,并用EzDIO作為擴充板,示范如何將不同的模塊,經由程序整合在一起。
二、所需材料
首先需要選擇控制板,不同的控制板將決定你的程序撰寫風格,以及項目的走向。例如你比較習慣使用MakeCode來開發,那只能選擇micro:bit ,畢竟LinkIt 7697與ESP32并不支持MakeCode,并且意味著單靠這塊控制板,將沒辦法開發IoT功能,除非外接其他的模塊或透過不同的方式達成。
為了之后能將數據上傳至Google Sheet,或是指定的MQTT Broker。所以在LinkIt 7697與ESP32中猶豫了好久,最后決定選擇目前較少被提及的ESP32做為本次主題的控制板。
接著是選擇最重要的AI視覺傳感器,除了速度要快,還要方便,最好能記錄人臉數據并儲存下來,綜合了以上幾點,選擇了最多人使用的HuskyLens。除了人臉辨識開鎖外,還希望加上RFID傳感器,避免辨識故障時還能用卡片解鎖。
其他就是繼電器、電磁鎖、顯示屏幕、觸發辨識用按鈕與提示用蜂鳴器,然后是供電用的變壓器與連接傳感器需要的連接線。
● 材料清單
過程中為了將繼電器連接電源與電磁鎖,會需要用到「剝線鉗」與「電烙鐵」。線與線焊接后為了保護,可以準備「電工膠帶」或是「熱縮套管」。
三、接線組裝
材料備齊后就可以開始將各模塊,透過連接線接在EzDIO上面,主控板ESP32有自己對應的位置,我想大家應該不陌生,至于其他模塊可以參考接下來的介紹。
● 電磁鎖加工
在連接之前我們需要先加工電磁鎖,將「電源轉接頭」與「電磁鎖」焊接在一起,并針對連接至「繼電器」的線頭加錫,如下圖所示:
分別剪去「電源轉接頭」與「電磁鎖」的連接器后,用剝線鉗剝出一小段線,先將黑色線對黑色線焊接在一起,這邊是用電工膠帶將焊接點包起來保護。接著將兩端的紅色在線錫,以便較好鎖在「繼電器」上。
● 連接繼電器
選用的「電磁鎖」是屬于通電后解鎖的類型,所以將它安裝在「繼電器」的常開位置。在未通電的情況下,電磁鎖將保持鎖上的狀態,接線方式如下圖所示:
繼電器可以連接在任何數字輸出的腳位,本次選用的繼電器是排針連接的類型,因此采用杜邦線連接,將其連接在EzDIO右邊的杜邦排針區,接線參照下表所示:
EzDIO 與繼電器接線圖
● 連接OLED顯示屏幕
OLED使用的是I2C接口,I2C的接線對應如下表,我們使用的模塊是Grove插座,所以只要拿「Grove連接線」,一頭接在OLED上,另一頭接在EzDIO上方5個I2C插座的其中一個即可。
EzDIO 與OLED顯示屏幕接線圖
● 連接RFID傳感器
本次選用的RFID傳感器與OLED一樣是I2C接口,也同樣都是Grove插座。Grove連接線一頭接在RFID傳感器上,另一頭接在EzDIO上方5個I2C插座的其中一個即可。
EzDIO 與RFID傳感器接線圖
● 連接按鈕
按鈕是作為觸發人臉辨識使用,只有在對準人臉并按下按鈕時,才會發動解鎖功能。主要用來避免,當人經過時不小心觸發解鎖。
按鈕可連接在具有數字輸入功能的腳位上,例如可安裝在IO15。因為這邊使用的按鈕是Grove插座的,所以在排針旁的GPIO插座區,找尋對應的位置連接即可,Grove插座位置在「CN16」,接線對應如下表所示:
EzDIO 與按鈕接線圖
● 連接蜂鳴器
蜂鳴器能幫助我們了解裝置的狀態,透過聲音的變化,我們能清楚知道是否感應成功,或是解鎖成功。蜂鳴器連接在輸出的腳位,這邊選擇的模塊是Grove類型,連接方式與按鈕模塊相同,唯一不同的是,ESP32部分腳位只允許輸入,需要避開那些腳位,筆者選擇連接IO14(對應ESP32的腳位是27),Grove插座位置在「CN15」,接線對應如下表所示:
EzDIO 與蜂鳴器接線圖
● 連接HuskyLens
HuskyLens可以選擇I2C或是UART連接,并有附上連接線。筆者選擇連接在I2C,因為附贈的連接線另一頭為杜邦母頭,可連接在EzDIO的杜邦排針區,接線對應如下表所示:
EzDIO 與HuskyLens 接線圖
完成上述步驟后,所有的模塊與裝置皆已連接完畢,你可以找一塊板子并透過螺絲、螺帽,將所有部件固定起來。板子可以是木板或是壓克力,排列完畢后用雷切或電鉆鉆洞都可以,也能依照自己的需求,安裝在適當的位置,自由發揮。
本次范例是用一塊3mm大小適中的木板,并使用手持電鉆鉆孔,將所有東西都固定在木板上,并用標簽機打印了一張標示貼紙,看起來有模有樣,如下圖所示:
四、程序撰寫
撰寫程序的軟件,使用「BlocklyDuino F1」。
在刻錄程序的過程中,發現原先在BlocklyDuino F1里的HuskyLens鏈接庫無法使用在ESP32上面,后來經由查找HuskyLens官方說明網站,發現有較新的版本可用于ESP32,但反而無法用在LinkIt 7697。經我們工程師修改后可兼容兩塊主控板,修改后的鏈接庫連結如下:
提醒大家使用前記得先更新為較新的鏈接庫。
https://github.com/CIRCUSPi/CIRCUSPi.github.io/raw/main/extlibrary/HUSKYLENSArduino-master.zip
●安裝HuskyLens新的鏈接庫
1. 首先打開BlocklyDuino F1的「文件夾」,接著依照下列順序依須點開文件夾,以便找到存放總鏈接庫的文件夾:
2. 接著刪除原先在文件夾內的舊鏈接庫「HUSKYLENS」,刪除后先不要關閉文件夾,待會兒要將新的鏈接庫復制過來。
3. 解壓縮剛剛下載下來的新鏈接庫,并復制文件夾內的「HUSKYLENS」,貼到剛剛BlocklyDuino F1的鏈接庫文件夾「libraries」內。
完成上述步驟,就完成鏈接庫安裝了。新、舊鏈接庫內容差異不小,請不要用覆蓋的,確實刪除后再貼上新的鏈接庫,比較不會有問題。
● 功能規劃
1. 首先是人臉辨識解鎖的功能,預先設定HuskyLens儲存要辨識的人臉,當HuskyLens通電后就會開始執行任務,并經由連接線回傳數據,此時若是按下按鈕,就讓程序去比對是否是記錄過的人臉,比對成功則開鎖,并于3秒后鎖上。
2. 接著是RFID感應解鎖,同樣得預先知道卡片號碼,當感應到相同號碼則開鎖,并于3秒后鎖上。
3. 蜂鳴器與OLED可用于感應、開鎖與感應錯誤時發出提示。
● 設定HuskyLens
在使用人臉辨識功能之前,需要進行一些設定,例如確認是否為I2C通訊,或是記錄人臉數據等等,你可以參考官方文件的教學,請記錄一張人臉,用于程序比對解鎖用。
https://wiki.dfrobot.com/HUSKYLENS_V1.0_SKU_SEN0305_SEN0336#target_15
● 范例程序鏈接
完成上述功能的程序不會太復雜,可以直接下載「范例程序」,解壓縮后請用BlocklyDuino開啟,我們可以從程序中學習。
https://github.com/CIRCUSPi/CIRCUSPi.github.io/raw/main/example/EzDIO_Example.zip
其中共有兩個范例程序,一個是單純讀取RFID卡片號碼的程序,用來讀出手邊卡片的編號,比對卡片號碼時使用;另一個則是完成上述功能的辨識解鎖程序。
● 讀取RFID卡片號碼程序說明(EzDIO_read_RFID)
RFID傳感器在感測到卡片數據時會讀到號碼,反之為空值。透過變量「card」將數據儲存下來后比對,若有讀到數據則顯示在OLED上面。
將程序刻錄后執行,請將讀取到的數據記下來,以便填入「EzDIO_Face_unlock」這個程序中。
● 辨識解鎖程序說明(EzDIO_Face_unlock)
程序可以分成三部份,分別是「初始化」、「重復執行」與「函式群」。初始化不外乎就是功能設定與狀態賦予,重復執行則處理所有功能,包含辨識、RFID感應、開鎖……等。最后的函式群是指,將一些重復用到的功能包成函式(或稱子程序),主要用于簡化程序并提升修改時的效率,進而增加可讀性。接下來讓我們觀看每個部份:
1. 初始化
在這部份我們針對需要預先初始化的功能,進行初始化,像是OLED與HuskyLens。并設定兩個全局變量「door」、「card」,用來記錄是否開門以及儲存卡片的號碼。
因為OLED顯示的文字大小有限,所以采用圖片轉換XBM的方式,即可顯示任意圖案或文字,自定義的位圖有"open"(開鎖)、"lock"(上鎖)、"n1~n3"(顯示數字)、"noperson"(沒有紀錄)等六個,最后是在所有功能不停執行前,先于OLED屏幕顯示「上鎖」。
2. 函式群
共有四個函式:
【check_OK】開鎖成功并設定顯示與音效,并將「door」這個變量設定為1。
【check_ERROR】解鎖失敗并設定屏幕顯示沒有紀錄與連續音效,最后顯示上鎖。
【start_sound】感應卡片或按下辨識按鈕時發出音效。
【open_and_lock】啟動電磁鎖開鎖并顯示倒數,待3秒過后將「door」這個變量設定為0,并上鎖與顯示。
3. 重復執行
在重復執行內也分成三個部份,分別是「HuskyLens運行時間」、「RFID讀取階段」、「是否開鎖階段」。
HuskyLens運行時間:首先從HuskyLens取得一組辨識數據,接著確認是否按下按鈕,來進行身份比對,若比對成功則執行【check_OK】,若沒有辨識到或身份比對錯誤,則執行【check_ERROR】。
RFID讀取階段:一樣先取得感應號碼,若沒有感應到卡片則會取得「空字符串」,感應到號碼后將進行比對,比對成功則執行【check_OK】,比對錯誤則執行【check_ERROR】。
是否開鎖階段:上述兩大階段若有開鎖成功,均會調整變量「door」的數值為1,在這階段只要偵測到「door」數值為1,則執行【open_and_lock】,執行完畢后會將「door」這個變量設定為0。
三個階段執行完后,最后的「延遲100毫秒」是為了避免程序重復執行過快,導致數據接收錯誤。
3. 重復執行
在重復執行內也分成三個部份,分別是「HuskyLens運行時間」、「RFID讀取階段」、「是否開鎖階段」。
HuskyLens運行時間:首先從HuskyLens取得一組辨識數據,接著確認是否按下按鈕,來進行身份比對,若比對成功則執行【check_OK】,若沒有辨識到或身份比對錯誤,則執行【check_ERROR】。
RFID讀取階段:一樣先取得感應號碼,若沒有感應到卡片則會取得「空字符串」,感應到號碼后將進行比對,比對成功則執行【check_OK】,比對錯誤則執行【check_ERROR】。
是否開鎖階段:上述兩大階段若有開鎖成功,均會調整變量「door」的數值為1,在這階段只要偵測到「door」數值為1,則執行【open_and_lock】,執行完畢后會將「door」這個變量設定為0。
三個階段執行完后,最后的「延遲100毫秒」是為了避免程序重復執行過快,導致數據接收錯誤。
以上就是以ESP32為控制板,結合EzDIO擴展板與相關模塊制作的人臉辨識門鎖項目。
審核編輯:湯梓紅
-
AI
+關注
關注
87文章
30239瀏覽量
268473 -
蜂鳴器
+關注
關注
12文章
890瀏覽量
45874 -
擴展板
+關注
關注
0文章
53瀏覽量
11381 -
人臉辨識
+關注
關注
0文章
6瀏覽量
6917 -
ESP32
+關注
關注
18文章
960瀏覽量
17114
原文標題:ESP32 結合EzDIO 制作人臉辨識門鎖
文章出處:【微信號:易心Microbit編程,微信公眾號:易心Microbit編程】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論