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

    文章

    26450

    浏览量

    264068
  • 蜂鸣器
    +关注

    关注

    12

    文章

    850

    浏览量

    45314
  • 扩展板
    +关注

    关注

    0

    文章

    48

    浏览量

    11268
  • 人脸辨识
    +关注

    关注

    0

    文章

    6

    浏览量

    6899
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15815

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

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

收藏 人收藏

    评论

    相关推荐

    ESP32-C2在小魔方遥控器的应用

    我们经常提起的ESP32-C3和ESP32-S3,ESP32-C2感觉话题度没有那么多,但其应用上不可小觑。今天小启就跟大家讲讲ESP32-C2在小魔方遥控器的应用。1射频性能拉满,成
    的头像 发表于 01-13 08:03 261次阅读
    <b class='flag-5'>ESP32</b>-C2在小魔方遥控器的应用

    如何使用ESP32和STC51芯片制作一个小小光立方呢?

    分享一个用ESP32和STC51芯片,以及0805贴片灯珠,手工焊接制作的小小光立方。
    的头像 发表于 01-09 15:37 1011次阅读
    如何使用<b class='flag-5'>ESP32</b>和STC51芯片<b class='flag-5'>制作</b>一个小小光立方呢?

    ESP32-PICO系列技术规格书

    ESP32-PICO 系列是基于 ESP32 芯片 的系统级封装 (SiP) 产品。ESP32-PICO 系列产品包括 ESP32-PICO-D4、
    发表于 12-12 16:56 0次下载
    <b class='flag-5'>ESP32</b>-PICO系列技术规格书

    如何制作人工智能ai

    为了让制作人工智能更为简单,并且快速上手,可以选择一个开源框架。常见的开源框架包括TensorFlow,Keras和PyTorch。这些框架都提供了很多的功能模块,可以帮助我们制作人工智能。
    的头像 发表于 08-13 10:02 8473次阅读

    ESP32学习笔记:双核

    今天我们来说说ESP32 for Arduino 的双核。
    的头像 发表于 07-15 16:16 3033次阅读
    <b class='flag-5'>ESP32</b>学习笔记:双核

    如何制作ESP32 CAM板监控机器人汽车

    电子发烧友网站提供《如何制作ESP32 CAM板监控机器人汽车.zip》资料免费下载
    发表于 06-29 10:24 5次下载
    如何<b class='flag-5'>制作</b><b class='flag-5'>ESP32</b> CAM板监控机器人汽车

    通过ESP32制作数码相册

    电子发烧友网站提供《通过ESP32制作数码相册.zip》资料免费下载
    发表于 06-16 11:30 2次下载
    通过<b class='flag-5'>ESP32</b><b class='flag-5'>制作</b>数码相册

    ESP32ESP32通过Internet进行通信

    电子发烧友网站提供《ESP32ESP32通过Internet进行通信.zip》资料免费下载
    发表于 06-15 09:58 2次下载
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通过Internet进行通信

    使用MTCNN和用于ESP32-S3的TensorFlow Lite进行人脸检测

    电子发烧友网站提供《使用MTCNN和用于ESP32-S3的TensorFlow Lite进行人脸检测.zip》资料免费下载
    发表于 06-13 15:28 0次下载
    使用MTCNN和用于<b class='flag-5'>ESP32</b>-S3的TensorFlow Lite进行<b class='flag-5'>人脸</b>检测

    [esp32教程] 5、UART使用

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 06-13 09:04 4382次阅读
    [<b class='flag-5'>esp32</b>教程] 5、UART使用

    制作BMP280 ESP32天气预报器

    电子发烧友网站提供《制作BMP280 ESP32天气预报器.zip》资料免费下载
    发表于 06-08 10:33 0次下载
    <b class='flag-5'>制作</b>BMP280 <b class='flag-5'>ESP32</b>天气预报器

    WWDC亮点:史上最大MacBook Air 游戏制作人小岛秀夫亮相苹果春晚

    WWDC亮点:史上最大MacBook Air 游戏制作人小岛秀夫亮相苹果春晚 苹果WWDC 2023号称苹果公司的春晚,亮点很多,有史上最大MacBook Air;还有游戏制作人小岛秀夫亮相苹果春晚
    的头像 发表于 06-07 14:55 708次阅读
    WWDC亮点:史上最大MacBook Air 游戏<b class='flag-5'>制作人</b>小岛秀夫亮相苹果春晚

    [esp32教程] 4、LEDC使用

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 06-03 09:39 3135次阅读
    [<b class='flag-5'>esp32</b>教程] 4、LEDC使用

    [esp32教程]2、按键中断

    基于Ubuntu,利用esp-idf进行esp32的教学
    的头像 发表于 05-05 09:04 2215次阅读
    [<b class='flag-5'>esp32</b>教程]2、按键中断

    [esp32教程]1、点灯之术

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 04-30 18:11 2434次阅读
    [<b class='flag-5'>esp32</b>教程]1、点灯之术