0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP32结合EzDIO制作人脸辨识门锁

jf_cVC5iyAO 来源:易心Microbit编程 作者:易心Microbit编程 2023-04-11 10:07 次阅读

一、制作介绍

EzDIO扩展板是一块三用的I/O扩充板,适用micro:bit、LinkIt 7697与ESP32三种控制板,不同的是以杜邦排针和Grove插座取代原先的功能,让用户决定自己要连接什么模块。

9f9d6f08-d798-11ed-bfe3-dac502259ad0.jpg

本篇文章将以人脸辨识门锁的主题,并用EzDIO作为扩充板,示范如何将不同的模块,经由程序整合在一起。

二、所需材料

首先需要选择控制板,不同的控制板将决定你的程序撰写风格,以及项目的走向。例如你比较习惯使用MakeCode来开发,那只能选择micro:bit ,毕竟LinkIt 7697与ESP32并不支持MakeCode,并且意味着单靠这块控制板,将没办法开发IoT功能,除非外接其他的模块或透过不同的方式达成。

为了之后能将数据上传至Google Sheet,或是指定的MQTT Broker。所以在LinkIt 7697与ESP32中犹豫了好久,最后决定选择目前较少被提及的ESP32做为本次主题的控制板。

接着是选择最重要的AI视觉传感器,除了速度要快,还要方便,最好能记录人脸数据并储存下来,综合了以上几点,选择了最多人使用的HuskyLens。除了人脸辨识开锁外,还希望加上RFID传感器,避免辨识故障时还能用卡片解锁。

其他就是继电器、电磁锁、显示屏幕、触发辨识用按钮与提示用蜂鸣器,然后是供电用的变压器与连接传感器需要的连接线。

● 材料清单

9fa69038-d798-11ed-bfe3-dac502259ad0.jpg

9fca8fce-d798-11ed-bfe3-dac502259ad0.jpg

过程中为了将继电器连接电源与电磁锁,会需要用到「剥线钳」与「电烙铁」。线与线焊接后为了保护,可以准备「电工胶带」或是「热缩套管」。

三、接线组装

材料备齐后就可以开始将各模块,透过连接线接在EzDIO上面,主控板ESP32有自己对应的位置,我想大家应该不陌生,至于其他模块可以参考接下来的介绍。

● 电磁锁加工

在连接之前我们需要先加工电磁锁,将「电源转接头」与「电磁锁」焊接在一起,并针对连接至「继电器」的线头加锡,如下图所示:

9fef409e-d798-11ed-bfe3-dac502259ad0.jpg

分别剪去「电源转接头」与「电磁锁」的连接器后,用剥线钳剥出一小段线,先将黑色线对黑色线焊接在一起,这边是用电工胶带将焊接点包起来保护。接着将两端的红色在线锡,以便较好锁在「继电器」上。

● 连接继电器

选用的「电磁锁」是属于通电后解锁的类型,所以将它安装在「继电器」的常开位置。在未通电的情况下,电磁锁将保持锁上的状态,接线方式如下图所示:

a0183f6c-d798-11ed-bfe3-dac502259ad0.jpg

继电器可以连接在任何数字输出的脚位,本次选用的继电器是排针连接的类型,因此采用杜邦线连接,将其连接在EzDIO右边的杜邦排针区,接线参照下表所示:

a021f32c-d798-11ed-bfe3-dac502259ad0.jpg

a037c2f6-d798-11ed-bfe3-dac502259ad0.jpg

EzDIO 与继电器接线图

● 连接OLED显示屏幕

OLED使用的是I2C接口,I2C的接线对应如下表,我们使用的模块是Grove插座,所以只要拿「Grove连接线」,一头接在OLED上,另一头接在EzDIO上方5个I2C插座的其中一个即可。

a04c7d7c-d798-11ed-bfe3-dac502259ad0.jpg

a067f2e6-d798-11ed-bfe3-dac502259ad0.jpg

EzDIO 与OLED显示屏幕接线图

● 连接RFID传感器

本次选用的RFID传感器与OLED一样是I2C接口,也同样都是Grove插座。Grove连接线一头接在RFID传感器上,另一头接在EzDIO上方5个I2C插座的其中一个即可。

a072dcec-d798-11ed-bfe3-dac502259ad0.jpg

a097073e-d798-11ed-bfe3-dac502259ad0.jpg

EzDIO 与RFID传感器接线图

● 连接按钮

按钮是作为触发人脸辨识使用,只有在对准人脸并按下按钮时,才会发动解锁功能。主要用来避免,当人经过时不小心触发解锁。

按钮可连接在具有数字输入功能的脚位上,例如可安装在IO15。因为这边使用的按钮是Grove插座的,所以在排针旁的GPIO插座区,找寻对应的位置连接即可,Grove插座位置在「CN16」,接线对应如下表所示:

a0bf9154-d798-11ed-bfe3-dac502259ad0.jpg

a0cbf494-d798-11ed-bfe3-dac502259ad0.jpg

EzDIO 与按钮接线图

● 连接蜂鸣器

蜂鸣器能帮助我们了解装置的状态,透过声音的变化,我们能清楚知道是否感应成功,或是解锁成功。蜂鸣器连接在输出的脚位,这边选择的模块是Grove类型,连接方式与按钮模块相同,唯一不同的是,ESP32部分脚位只允许输入,需要避开那些脚位,笔者选择连接IO14(对应ESP32的脚位是27),Grove插座位置在「CN15」,接线对应如下表所示:

a0e27598-d798-11ed-bfe3-dac502259ad0.jpg

a0f645a0-d798-11ed-bfe3-dac502259ad0.jpg

EzDIO 与蜂鸣器接线图

● 连接HuskyLens

HuskyLens可以选择I2C或是UART连接,并有附上连接线。笔者选择连接在I2C,因为附赠的连接线另一头为杜邦母头,可连接在EzDIO的杜邦排针区,接线对应如下表所示:

a1148dd0-d798-11ed-bfe3-dac502259ad0.jpg

a129812c-d798-11ed-bfe3-dac502259ad0.jpg

EzDIO 与HuskyLens 接线图

完成上述步骤后,所有的模块与装置皆已连接完毕,你可以找一块板子并透过螺丝、螺帽,将所有部件固定起来。板子可以是木板或是压克力,排列完毕后用雷切或电钻钻洞都可以,也能依照自己的需求,安装在适当的位置,自由发挥。

本次范例是用一块3mm大小适中的木板,并使用手持电钻钻孔,将所有东西都固定在木板上,并用标签机打印了一张标示贴纸,看起来有模有样,如下图所示:

a132e3c0-d798-11ed-bfe3-dac502259ad0.jpg

四、程序撰写

撰写程序的软件,使用「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的「文件夹」,接着依照下列顺序依须点开文件夹,以便找到存放总链接库的文件夹:

a1526e7a-d798-11ed-bfe3-dac502259ad0.jpg

2. 接着删除原先在文件夹内的旧链接库「HUSKYLENS」,删除后先不要关闭文件夹,待会儿要将新的链接库复制过来。

a168e966-d798-11ed-bfe3-dac502259ad0.jpg

3. 解压缩刚刚下载下来的新链接库,并复制文件夹内的「HUSKYLENS」,贴到刚刚BlocklyDuino F1的链接库文件夹「libraries」内。

a192350a-d798-11ed-bfe3-dac502259ad0.jpg

完成上述步骤,就完成链接库安装了。新、旧链接库内容差异不小,请不要用覆盖的,确实删除后再贴上新的链接库,比较不会有问题。

● 功能规划

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上面。

a1a7c028-d798-11ed-bfe3-dac502259ad0.jpg

将程序刻录后执行,请将读取到的数据记下来,以便填入「EzDIO_Face_unlock」这个程序中。

a1c968a4-d798-11ed-bfe3-dac502259ad0.jpg

● 辨识解锁程序说明(EzDIO_Face_unlock)

程序可以分成三部份,分别是「初始化」、「重复执行」与「函式群」。初始化不外乎就是功能设定与状态赋予,重复执行则处理所有功能,包含辨识、RFID感应、开锁……等。最后的函式群是指,将一些重复用到的功能包成函式(或称子程序),主要用于简化程序并提升修改时的效率,进而增加可读性。接下来让我们观看每个部份:

1. 初始化

在这部份我们针对需要预先初始化的功能,进行初始化,像是OLED与HuskyLens。并设定两个全局变量「door」、「card」,用来记录是否开门以及储存卡片的号码。

因为OLED显示的文字大小有限,所以采用图片转换XBM的方式,即可显示任意图案或文字,自定义的位图有"open"(开锁)、"lock"(上锁)、"n1~n3"(显示数字)、"noperson"(没有纪录)等六个,最后是在所有功能不停执行前,先于OLED屏幕显示「上锁」。

a1d8367c-d798-11ed-bfe3-dac502259ad0.jpg

2. 函式群

共有四个函式:

【check_OK】开锁成功并设定显示与音效,并将「door」这个变量设定为1。

【check_ERROR】解锁失败并设定屏幕显示没有纪录与连续音效,最后显示上锁。

【start_sound】感应卡片或按下辨识按钮时发出音效。

【open_and_lock】启动电磁锁开锁并显示倒数,待3秒过后将「door」这个变量设定为0,并上锁与显示。

a1fb0a62-d798-11ed-bfe3-dac502259ad0.jpg

3. 重复执行

在重复执行内也分成三个部份,分别是「HuskyLens运行时间」、「RFID读取阶段」、「是否开锁阶段」。

HuskyLens运行时间:首先从HuskyLens取得一组辨识数据,接着确认是否按下按钮,来进行身份比对,若比对成功则执行【check_OK】,若没有辨识到或身份比对错误,则执行【check_ERROR】。

RFID读取阶段:一样先取得感应号码,若没有感应到卡片则会取得「空字符串」,感应到号码后将进行比对,比对成功则执行【check_OK】,比对错误则执行【check_ERROR】。

是否开锁阶段:上述两大阶段若有开锁成功,均会调整变量「door」的数值为1,在这阶段只要侦测到「door」数值为1,则执行【open_and_lock】,执行完毕后会将「door」这个变量设定为0。

三个阶段执行完后,最后的「延迟100毫秒」是为了避免程序重复执行过快,导致数据接收错误。

a20ef1c6-d798-11ed-bfe3-dac502259ad0.jpg

3. 重复执行

在重复执行内也分成三个部份,分别是「HuskyLens运行时间」、「RFID读取阶段」、「是否开锁阶段」。

HuskyLens运行时间:首先从HuskyLens取得一组辨识数据,接着确认是否按下按钮,来进行身份比对,若比对成功则执行【check_OK】,若没有辨识到或身份比对错误,则执行【check_ERROR】。

RFID读取阶段:一样先取得感应号码,若没有感应到卡片则会取得「空字符串」,感应到号码后将进行比对,比对成功则执行【check_OK】,比对错误则执行【check_ERROR】。

是否开锁阶段:上述两大阶段若有开锁成功,均会调整变量「door」的数值为1,在这阶段只要侦测到「door」数值为1,则执行【open_and_lock】,执行完毕后会将「door」这个变量设定为0。

三个阶段执行完后,最后的「延迟100毫秒」是为了避免程序重复执行过快,导致数据接收错误。

a21f2366-d798-11ed-bfe3-dac502259ad0.jpg

以上就是以ESP32为控制板,结合EzDIO扩展板与相关模块制作的人脸辨识门锁项目。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    31493

    浏览量

    270128
  • 蜂鸣器
    +关注

    关注

    12

    文章

    893

    浏览量

    46073
  • 扩展板
    +关注

    关注

    0

    文章

    55

    浏览量

    11444
  • 人脸辨识
    +关注

    关注

    0

    文章

    6

    浏览量

    6941
  • ESP32
    +关注

    关注

    18

    文章

    977

    浏览量

    17488

原文标题:ESP32 结合EzDIO 制作人脸辨识门锁

文章出处:【微信号:易心Microbit编程,微信公众号:易心Microbit编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技术规格书

    电子发烧友网站提供《ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技术规格书.pdf》资料免费下载
    发表于 12-07 15:30 1次下载

    esp32上使用chatGPT做一些有意思的事情

    将ChatGPT与ESP32进行结合,可以在物联网应用方面做出更有意思的事情,如聊天机器人、语音助手和自然语言界面。下面,我将在ESP32中使用ChatGPT API。为了让ESP32
    的头像 发表于 10-18 10:04 708次阅读

    esp32esp8266代码共用吗

    本文将介绍ESP32ESP8266两款流行的微控制器在代码共用性方面的可能性与差异性。 一、引言 随着物联网技术的飞速发展,越来越多的智能设备开始进入我们的生活。其中,ESP32ESP
    的头像 发表于 08-19 18:23 1389次阅读

    esp8266和esp32区别是什么

    以下是关于ESP8266和ESP32的主要区别: 处理器和架构 : ESP8266 :使用一个Tensilica L106 80MHz的处理器,属于Xtensa架构。 ESP32 :使
    的头像 发表于 08-19 18:16 5888次阅读

    esp32用什么软件编程

    ESP32是一款由乐鑫(Espressif)推出的低功耗、高性能的Wi-Fi和蓝牙双模微控制器,广泛应用于物联网、智能家居、智能穿戴等领域。要对ESP32进行编程,需要选择合适的编程软件和开发环境
    的头像 发表于 08-19 17:24 4243次阅读

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么区别?ESP32-WROOM-32 后缀字母代表的意思是?

    相信很多人心里都有这样的疑问,今天就教大家怎么区分它们。 32D和32U是同一个芯片ESP32-D0WD的模组,主要区别的天线模式,分别是板载和IPEX外接天线。 32E是用的升级版的芯片
    的头像 发表于 07-17 10:09 1.1w次阅读
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么区别?<b class='flag-5'>ESP32</b>-WROOM-32 后缀字母代表的意思是?

    ESP32能取代STM32吗?哪个更好?

    不能!首先二者不存在哪个更好的问题,因为这两个芯片使用场景各不相同,在嵌入式系统领域,ESP32和STM32都是常见的单片机系列,它们各自具有一定的优势和适用场景。本文主要探讨ESP32是否能够取代
    的头像 发表于 07-06 08:04 1.4w次阅读
    <b class='flag-5'>ESP32</b>能取代STM32吗?哪个更好?

    ESP32-S3运行人脸检测功耗有多大呢?

    ESP32-S3运行人脸检测,功耗有多大?
    发表于 06-26 06:32

    乐鑫esp32系列在睡眠模式下保持蓝牙连接的功耗测试

    本教程适用于ESP32-S3、ESP32-C3、ESP32-C6睡眠模式介绍ESP32系列常见的休眠方式有三种,分别为Modem-sleep、Light-sleep和Deep-slee
    的头像 发表于 06-21 08:04 3475次阅读
    乐鑫<b class='flag-5'>esp32</b>系列在睡眠模式下保持蓝牙连接的功耗测试

    esp32c3FN4制作板子烧录后报错不断重启的怎么解决?

    目前使用购自淘宝官方店的esp32c3FN4芯片制作板子烧录后显示 phy_init: failed to load RF calibration data (0x1102), falling
    发表于 06-20 07:26

    无法通过ESP-Prog烧录ESP32-S3-WROOM-1晶片怎么解决?

    1.ESP32-S3-DevKitC-1我有办法正常的运作与烧录 而目前我遇到在2. ESP-Prog+ESP32-S3 的使用上出现了问题 CMD = idf.py -p COM5 flash (Windows 辨识出两个
    发表于 06-13 08:24

    ESP32系列ESP32-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片

    ESP32系列ESP32-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片
    的头像 发表于 05-29 11:52 1546次阅读
    <b class='flag-5'>ESP32</b>系列<b class='flag-5'>ESP32</b>-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片

    如何将CYKIT-028 TFT模块与Raspberry Pi和ESP32微控制器结合使用?

    我目前正在探索如何将 CYKIT-028 TFT 模块与 Raspberry Pi 和 ESP32 微控制器结合使用。 不过,在选择集成开发环境(IDE)和使用 PSOC Creator 的必要性
    发表于 05-21 07:36

    乐鑫科技发布全新ESP32-H4 SoC

    乐鑫信息科技最新发布了ESP32-H4,这一创新产品是对其ESP32-H2系列的完美补充,进一步巩固了公司在802.15.4和Bluetooth LE领域的产品布局。ESP32-H4作为新一代SoC
    的头像 发表于 05-06 15:18 1127次阅读

    嵌入式领域的未来之争,ESP32与STM32谁将胜出?

    和STM32比起来,ESP32内核的速度更高,处理指令更快,不过ESP32更多是面向物联网方向的芯片,内置了蓝牙和Wi-Fi。
    发表于 04-15 11:01 1970次阅读