玩具保险柜指纹解锁改造记

一、背景

家里的玩具保险柜原本有 “密码 + 指纹” 双重解锁,但指纹模块是假的 —— 不管按谁的手指都能通过,孩子总说 “这不安全,想让只有自己的手指能打开”。于是决定动手改造:保留原有的 “先按密码、再按指纹” 流程:一是只要按任意密码(LED 灯亮)时才启动新增的指纹识别模块,避免待机状态时电源消耗。指纹模块供电后会进行闪灯提示识别,识别成功后模拟原触控动作解锁,既兼容原系统,又实现真正的 “专属指纹解锁”~

二、核心材料清单

  • 主控单元:ESP32-C3 supermini开发板(体积小、多硬件串口,适配保险柜内部小空间)
  • 指纹模块:ZW0906(串口通信、带高电平触发,识别准确,适合小项目)
  • 驱动辅助:DRV8833 模块(解决 ESP32 直接驱动继电器电流不足的问题)
  • 继电器:2 个微型继电器SIP-1A05(1 个测密码按键触发的 LED 状态用于给新增模块上电,另1 个模拟原电容触控)

三、硬件连接:跟着原电路走,不拆原结构

1. 指纹模块供电触发:按任意密码即唤醒

原保险柜只要按任意密码键,LED 灯就会亮(提示正在输入密码)—— 利用这个信号作为指纹模块的 “唤醒开关”!

把静态继电器 1 的输入端串进原 LED 灯的负极电路:当孩子按任意密码键(LED 导通亮灯),继电器 1 导通,给新增的esp32模块供电,进而启动 ZW0906 指纹模块(此时模块处于待机状态,不主动识别指纹)。这样不用等密码输完,指纹模块就能提前上电准备,避免识别延迟~

2. 真指纹模块接线:避过软串口的坑

一开始试了 ESP32-C3 的软串口连 ZW0906,结果模块默认波特率 115200,软串口最高只能到 9600,完全没法通信!后来想起 ESP32-C3 有硬件串口,赶紧换 UART1:

ZW0906 的 TX → ESP32-C3 的 UART1_RX(GPIO0)

ZW0906 的 RX → ESP32-C3 的 UART1_TX(GPIO1)

再把 ZW0906 的高电平触发引脚接 ESP32-C3 的 GPIO2—— 当模块收到 “密码正确” 信号后,会闪灯提示按手指,此时孩子按手指到模块上,这个引脚会送高电平,告诉 ESP32 “该开始识别了”~

3. 模拟原触控:让真指纹兼容原解锁流程

原假指纹模块是靠电容触控触发解锁的,换真模块后,得在指纹识别成功时模拟这个动作!

用 DRV8833 驱动静态继电器 2:ESP32-C3 的 GPIO6 接 DRV8833 的 IN1,GPIO7 接 IN2;DRV8833 的输出端接继电器 2 的控制端,继电器 2 的输出端直接贴在原假指纹模块的电容触控点上 —— 当指纹识别成功,ESP32 发信号给 DRV8833,驱动继电器 2 闭合 0.5 秒,完美模拟 “按假指纹” 的动作,让保险柜以为是原模块在工作,顺利解锁~

4.完整电路图

电路连接

四、软件配置:用 PlatformIO+TRAE 实现,更高效

1. 开发环境搭建:PlatformIO 替代 Arduino IDE

这次开发用 PlatformIO(VS Code 插件),因为它对 ESP32-C3 的支持更全,库管理也更方便:

  • 打开 VS Code,安装 PlatformIO 插件;
  • 新建项目,开发板选 “Espressif ESP32-C3 Dev Module”,框架选 “Arduino”(底层兼容 Arduino,方便调用指纹模块库);
  • 导入依赖库:在 platformio.ini 文件里添加 ZW0906 的串口库(比如 “zw0906-fingerprint”,可从 PlatformIO Registry 搜索安装),同时配置串口波特率、开发板上传参数(如上传速度、端口)。

2. 代码核心逻辑:分两步实现(录入 + 识别)

(1)指纹录入固件(一次性使用)

  • 在 PlatformIO 项目中编写录入代码:初始化 UART1(115200 波特率,连指纹模块)、UART0(9600 波特率,连电脑调试);
  • 触发录入:通过串口调试助手发送 “START_REG” 指令,ESP32 向 ZW0906 发送录入命令;
  • 反馈提示:孩子按手指到模块上,若录入成功,ZW0906 LED 绿灯闪烁,串口打印 “Fingerprint registered!”;若失败(手指移动太快、指纹不清晰),LED 红灯闪烁,串口提示 “Try again!”;
  • 录入完成后,注释掉录入相关代码,切换到识别模式。

(2)指纹识别固件(正式使用)

核心流程:“按任意密码唤醒指纹模块→密码正确后模块闪灯提示→检测手指按压→识别指纹→模拟触控解锁”

  • 唤醒检测:ESP32 通过 GPIO3 监测继电器 1 状态,当收到高电平(按任意密码,LED 亮),调用 DRV8833 驱动代码,给指纹模块供电并初始化(模块进入待机,LED 常亮);
  • 密码正确提示:原保险柜密码输对后,会发送一个信号给原假指纹模块(提示可按指纹),这里通过 ESP32 监测原系统的这个信号(可接保险柜内部对应引脚到 ESP32 GPIO4),当检测到密码正确,控制 ZW0906 LED 开始闪烁(提示孩子可以按手指);
  • 按压检测:通过 GPIO2 监测 ZW0906 的高电平触发脚,当检测到高电平(孩子按手指),向模块发送识别指令;
  • 结果处理:
    • 识别成功(匹配孩子录入的指纹):ESP32 控制 GPIO6 输出信号,通过 DRV8833 驱动继电器 2 闭合 0.5 秒(模拟原电容触控),串口打印 “Unlock success!”,保险柜解锁;
    • 识别失败(非录入指纹):ZW0906 LED 红灯闪烁 3 次,串口打印 “Wrong fingerprint, try again!”,不触发解锁;
    • 密码错误:若密码输错,原系统会忽略指纹信号,此时即使按手指,ESP32 也不会触发解锁,模块恢复待机状态,直到下次按密码唤醒。

五、测试调试:解决小问题,让解锁更顺

  1. 唤醒测试:按任意密码键→LED 亮,指纹模块 LED 常亮(待机)—— 没问题;
  2. 密码联动测试:输错密码→指纹模块不闪灯,按手指无反应(符合原逻辑);输对密码→指纹模块 LED 开始闪烁,提示按手指 —— 正常;
  3. 指纹识别测试:孩子按手指→秒解锁;大人按手指→模块红灯闪 3 次,不解锁 —— 达到 “专属” 效果~

六、总结:低成本实现 “专属保险柜”

这次改造没拆保险柜原结构,只是利用 “按密码亮 LED” 的信号唤醒真指纹模块,通过监测原系统的 “密码正确” 信号触发识别提示,最后用继电器模拟原触控动作,既保留了孩子熟悉的操作流程,又实现了 “只有他能解锁” 的需求。

Proudly powered by WordPress | Theme: Journey Blog by Crimson Themes.
冀ICP备2024049034号