Arduino 指纹识别安全区:解锁 Android、iOS 与 Windows 10 设备
零部件与物料
| 零部件 | 数量 | 备注 |
|---|---|---|
| HC-05 蓝牙串口模块 | 1 | 与手机/电脑配对 |
| Arduino Nano R3 | 1 | 主控板 |
| R301T 半导体指纹模块 | 1 | 串口通信,录入/比对指纹 |
| 5mm RGB 三色共阴 LED | 1 | 状态指示 |
软件与在线服务
- Arduino IDE
项目简介
现代智能设备存储大量隐私数据,锁屏保护虽必要,但在安全环境(如自家书房)下频繁解锁却令人厌烦。本项目打造一个「安全区」小工具:通过指纹验证激活蓝牙,自动解锁配对范围内的 Android、iOS、Windows 10 设备;离开范围或指纹失效则自动锁定。
核心原理:锁定与解锁设备
利用各系统的「动态锁」/「智能锁」/「Smart Lock」功能:
- Windows 10:设置 → 账户 → 登录选项 → 启用「动态锁」,配对 HC-05
- Android:设置 → 显示 → 锁屏 → 智能锁 → 可信设备,添加 HC-05
- iOS:设置 → 面容 ID 与密码 → 启用「自动解锁」相关选项,配对 HC-05
当指纹验证通过,Arduino 启动 HC-05 蓝牙广播,设备检测到可信设备在范围内即自动解锁;断开连接则自动锁定。
R301T 指纹模块
R301T 通过 UART 串口与 Arduino 通信,支持指纹录入、图像采集、特征提取、快速搜索匹配。首次使用需录入管理员指纹,后续仅比对验证。
电路连接
代码说明
核心逻辑:
- 初始化指纹库(Adafruit_Fingerprint)与软串口
- 循环检测指纹:采集图像 → 生成特征 → 快速搜索匹配
- 匹配成功 → 切换蓝牙模块电源/状态引脚 → 点亮绿灯
- 匹配失败 → 红灯闪烁提示
#include "Adafruit_Fingerprint.h"
#include "SoftwareSerial.h"
SoftwareSerial mySerial(2, 3); // R301T TX, RX
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
SoftwareSerial btSerial(10, 11); // HC-05 TX, RX
int btStatePin = 9; // HC-05 状态/使能引脚
int ledR = 5, ledG = 6, ledB = 7; // RGB LED 引脚
bool btActive = false;
uint8_t lastID = 0;
void setup() {
Serial.begin(9600);
pinMode(btStatePin, OUTPUT);
pinMode(ledR, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledB, OUTPUT);
setColor(255, 0, 0); // 红:待机
mySerial.begin(57600);
if (finger.verifyPassword()) {
Serial.println("指纹模块就绪");
setColor(0, 255, 0); // 绿:就绪
} else {
Serial.println("指纹模块未检测到");
while (1) { setColor(255, 0, 0); delay(500); setColor(0,0,0); delay(500); }
}
finger.getTemplateCount();
Serial.print("已存模板: "); Serial.println(finger.templateCount);
Serial.println("等待指纹...");
}
void loop() {
uint8_t id = getFingerprintIDez();
if (id != 0xFF) {
// 验证通过,切换蓝牙状态
btActive = !btActive;
digitalWrite(btStatePin, btActive ? HIGH : LOW);
setColor(btActive ? 0 : 255, btActive ? 255 : 0, 0);
Serial.print(btActive ? "蓝牙已开启" : "蓝牙已关闭");
delay(1000); // 防抖
}
delay(50);
}
uint8_t getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return 0xFF;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return 0xFF;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return 0xFF;
Serial.print("匹配 ID #"); Serial.print(finger.fingerID);
Serial.print(" 置信度: "); Serial.println(finger.confidence);
return finger.fingerID;
}
void setColor(int r, int g, int b) {
analogWrite(ledR, r); analogWrite(ledG, g); analogWrite(ledB, b);
}
组装与配对技巧
首次配对若失败,可在 Arduino 代码中添加配对阶段发送特定字符(如 btSerial.println("PAIR"))触发设备端配对流程。
拓展建议
- 增加位置敏感性:结合 GPS/WiFi 定位,仅在特定地点生效
- 多用户分级权限:不同指纹对应不同设备组或解锁时长
- 加入 OLED 显示状态、电量、配对设备列表
- 外壳 3D 打印,做成钥匙扣或桌面摆件形态
代码库
- Adafruit_Fingerprint 库:GitHub 地址(需在 Arduino IDE 库管理器中安装)
制造工艺
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- 用 Arduino 打造绚丽显示器 Ambilight 系统
- 校园智能体温监测系统 - 精准、实时、安全的学生健康守护方案
- Arduino 8 位并行 IO 端口库:一行代码实现 8 位数字读写
- 手机APP无线控制Arduino LED:WiFi/Ethernet + Evothings Studio跨平台开发
- Arduino 64 键原型键盘矩阵:用移位寄存器打造全自定义键盘
- Arduino 合成乐音:从零实现 88 键钢琴全音域
- Arduino Nano 专用 2.8 英寸 TFT 扩展板 – 320×240 SPI 显示屏
- 为Arduino构建隔离模拟输入电路
- 掌握直流电机控制:PID 与 PWM 专家技巧全解析
- 适用于 Arduino 项目的智能室内导航机器人套件
- 直驱水泵如何提升水传输效率