使用ESP32-CAM构建人脸ID控制的数字门锁系统

安全是当今每个人最关心的问题,无论是数据安全还是自己家的安全。随着技术的进步和物联网的日益普及,如今数字门锁已变得非常普遍。数字锁不需要任何物理钥匙,但它使用rfid、指纹、face id、pin、密码等来控制门锁。过去,我们使用这些不同的技术开发了许多数字门锁应用程序。在本教程中,我们使用 esp32-cam 构建了一个人脸 id 控制的数字门锁系统。
所需组件
esp32 凸轮
ftdi 董事会
继电器模块
电磁锁
跳线
电磁锁
电磁锁在电子机械锁定机构上工作。这种类型的锁有一个带有倾斜切口的嵌条和一个良好的安装支架。通电时,直流电会产生磁场,将塞子移入内部并使门保持在解锁位置。弹头将保持其位置,直到断电。当电源断开时,蛞蝓移动到外面并锁上门。它在锁定状态下不使用任何电源。要驱动电磁锁,您需要一个可以提供 12v @ 500ma 的电源。
我们之前使用电磁锁来构建基于arduino 的 rfid 门锁。
电路原理图
esp32-cam人脸识别门锁系统电路图如下:
上面的电路与 ftdi 板、继电器模块和电磁锁相结合。ftdi 板用于将代码刷入 esp32-cam,因为它没有 usb 连接器,而继电器模块用于打开或关闭电磁锁。ftdi 板和 relay 模块的 vcc 和 gnd 引脚连接到 esp32-cam 的 vcc 和 gnd 引脚。ftdi 板的 tx 和 rx 连接到 esp32 的 rx 和 tx,继电器模块的 in 引脚连接到 esp32-cam 的 io4。
注意:在上传代码之前,将 io0 接地。io0 决定 esp32 是否处于闪烁模式。当 gpio 0 连接到 gnd 时,esp32 处于闪烁模式。
根据电路图连接硬件后,它应该如下所示:
在 arduino ide 上安装 esp32 board
这里使用 arduino ide 对 esp32-cam 进行编程。为此,首先,在 arduino ide 上安装 esp32 插件。
要在您的 arduino ide 中安装 esp32 板,请转到file》 preferences。
现在复制下面的链接并将其粘贴到“additional board manager urls”字段中,如下图所示。然后,单击“确定”按钮:
https://dl.espressif.com/dl/package_esp32_index.json
现在转到工具》董事会》董事会经理
在 board manager 中,搜索 esp32 并安装“esp32 by espressif systems”。
代码说明
我们在上一篇文章中解释了使用 esp32 进行人脸识别;在这里,我们将修改相同的代码来控制电磁门锁。完整的代码分为四个部分。一个是摄像头和继电器模块的主代码,esp32 根据人脸识别锁定或解锁门,另外三个代码是网页、摄像头索引和摄像头引脚。本页末尾给出了完整的代码。在这里,我们将解释代码的一些重要部分。
通过包含所有库文件来启动程序。
#include “esp_camera.h”#include #include “camera_pins.h”  
在下一行中,取消注释您与 esp32 一起使用的摄像头模块。在代码中,定义了五种不同的相机模型。在这种情况下,我们使用的是 ai-thinker 模型。
//#define camera_model_wrover_kit//#define camera_model_esp_eye//#define camera_model_m5stack_psram//#define camera_model_m5stack_wide#define camera_model_ai_thinker  
之后,将您的网络凭据插入以下变量:
const char* ssid = wi-fi 名称;const char* password = wi-fi 密码;  
然后定义连接继电器模块的引脚。在定义的时间间隔内解锁后,我们将使用millis()函数锁定门,这里是 5 秒。
#定义继电器4长 prevmillis = 0;整数间隔 = 5000;  
在setup()函数中,以 115200 的波特率初始化串行监视器以进行调试。然后在接下来的几行中,定义继电器模块的引脚模式,并将继电器初始设置为低位。
无效设置(){ 序列号.开始(115200); pinmode(继电器,输出); 数字写入(继电器,低);  
在loop()函数中,检查人脸是否与注册的人脸匹配。如果是,则解锁门 5 秒,5 秒后再次锁门。
无效循环(){ if (matchface == true && activerelay == false){ 主动继电器=真; 数字写入(继电器,高); 上一页millis = millis(); } if(activerelay == true && millis()- prevmillis > 间隔){ 主动继电器 = 假; 匹配面=假; 数字写入(继电器,低); }  
测试esp32-cam 人脸识别门锁系统
最后上传代码,将 fdti 板连接到您的笔记本电脑,然后选择“esp32 wrover module”作为您的板。此外,更改其他设置,如下图所示:
在上传代码之前不要忘记将 io0 引脚连接到 gnd,并按下 esp32 重置按钮,然后单击上传按钮。
注意:如果您在上传代码时遇到错误,请检查 io0 是否连接到 gnd,并且您在工具菜单中选择了正确的设置。
上传代码后,移除 io0 和 gnd 引脚。然后打开串口监视器并将波特率更改为115200。然后,按下esp32重置按钮,它将打印esp ip地址和端口号。在串行监视器上。
现在导航到浏览器并输入从串行监视器复制的 esp ip 地址以访问摄像机流。它将带您到流媒体页面。要开始视频流,请单击页面底部的“开始流”按钮。
要使用 esp32-cam 识别人脸,首先,我们必须注册人脸。为此,请从设置中打开人脸识别和检测功能,然后单击“注册人脸”按钮。需要多次尝试才能保住面子。保存人脸后,它将人脸检测为主体 0,其中零是人脸编号。
注册人脸后,如果视频中识别到人脸,esp32 会将继电器模块设为高电平以解锁门。
#include “esp_camera.h”
#include
//
// 警告!!!确保您选择了 esp32 wrover 模块,
// 或另一个启用了 psram 的板
//
// 选择相机型号
//#define camera_model_wrover_kit
//#define camera_model_esp_eye
//#define camera_model_m5stack_psram
//#define camera_model_m5stack_wide
#define camera_model_ai_thinker
#include “camera_pins.h”
const char* ssid = 银河-m20;
const char* 密码 = ac312124;
#define led_builtin 4
#定义继电器4
#定义蜂鸣器2
布尔匹配面 = 假;
boolean activerelay = false;
长 prevmillis = 0;
整数间隔 = 5000;
无效 startcameraserver();
无效设置(){
序列号.开始(115200);
serial.setdebugoutput(true);
序列号.println();
pinmode(继电器,输出);
pinmode(蜂鸣器,输出);
pinmode(led_builtin,输出);
数字写入(led_builtin,低);
数字写入(继电器,低);
数字写入(蜂鸣器,低);
camera_config_t 配置;
config.ledc_channel = ledc_channel_0;
config.ledc_timer = ledc_timer_0;
config.pin_d0 = y2_gpio_num;
config.pin_d1 = y3_gpio_num;
config.pin_d2 = y4_gpio_num;
config.pin_d3 = y5_gpio_num;
config.pin_d4 = y6_gpio_num;
config.pin_d5 = y7_gpio_num;
config.pin_d6 = y8_gpio_num;
config.pin_d7 = y9_gpio_num;
config.pin_xclk = xclk_gpio_num;
config.pin_pclk = pclk_gpio_num;
config.pin_vsync = vsync_gpio_num;
config.pin_href = href_gpio_num;
config.pin_sscb_sda = siod_gpio_num;
config.pin_sscb_scl = sioc_gpio_num;
config.pin_pwdn = pwdn_gpio_num;
config.pin_reset = reset_gpio_num;
config.xclk_freq_hz = 20000000;
config.pixel_format = pixformat_jpeg;
//用高规格初始化以预分配更大的缓冲区
如果(psramfound()){
config.frame_size = framesize_uxga;
config.jpeg_quality = 10;
config.fb_count = 2;
} 别的 {
config.frame_size = framesize_svga;
config.jpeg_quality = 12;
config.fb_count = 1;
}
#如果定义(camera_model_esp_eye)
pinmode(13,input_pullup);
pinmode(14, input_pullup);
#万一
// 相机初始化
esp_err_t err = esp_camera_init(&config);
如果(错误!= esp_ok){
serial.printf(相机初始化失败,错误 0x%x, err);
返回;
}
sensor_t * s = esp_camera_sensor_get();
//初始传感器垂直翻转,颜色有点饱和
if (s->id.pid == ov3660_pid) {
s->set_vflip(s, 1);//翻转回来
s->set_brightness(s, 1);//稍微提高亮度
s->set_saturation(s, -2);//降低饱和度
}
//降低帧大小以获得更高的初始帧速率
s->set_framesize(s, framesize_qvga);
#如果定义(camera_model_m5stack_wide)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#万一
wifi.begin(ssid, 密码);
而(wifi.status()!= wl_connected){
延迟(500);
serial.print(.);
}
序列号.println();
serial.println(wifi 连接);
startcameraserver();
serial.print(相机准备好了!使用'http://);
serial.print(wifi.localip());
serial.println('要连接);
}
无效循环(){
if (matchface == true && activerelay == false){
主动继电器=真;
数字写入(继电器,高);
digitalwrite(蜂鸣器,高);
延迟(800);
digitalwrite(蜂鸣器,低);
上一页millis = millis();
}
if(activerelay == true && millis()- prevmillis > 间隔){
主动继电器 = 假;
匹配面=假;
数字写入(继电器,低);
}
}

中国RISC-V工委会成立,芯启源当选副会长单位
人工智能应用的场景哪一些可以加速
基于STM32F103设计的智能门锁(支持多种开锁解锁方式)
介绍晶硅太阳能光伏组件结构
电装携面向未来移动社会的创新技术亮相上海车展
使用ESP32-CAM构建人脸ID控制的数字门锁系统
聊聊布隆过滤器
微信7.0.12内测版发布 新增小程序和小游戏的启动耗时优化
fpga按键控制数码管显示
ITO薄膜湿法刻蚀研究
区块链和加密货币如何改善零工经济和社会运作方式
中国电信天翼1号5G云手机上市
xc2004四轴电子凸轮插补运动控制芯片引脚与应用电路图程序分享
联想YOGA S740 16GB内存版推出,搭载全新10nm i5和i7处理器
快120倍!韩国研发出快速充电锂电池
半导体行业眼中的工业4.0
使用于BMS电池管理系统中的电源模块
AI+安防打造智能安防的发展新格局
金升阳推出第三代驱动电源QA-R3/QA_C-R3系列产品
Switch模拟器更新已大幅提升性能