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