若该文为原创文章,转载请注明原文出处。
摘要:本文设计并实现了一种基于STM32F103C8T6微控制器的多功能智能门禁安防系统。系统集成4×4矩阵键盘、指纹模块、RFID射频卡模块、HC-05蓝牙模块、人体红外传感器和舵机,支持密码、指纹、射频卡、蓝牙四种解锁方式。具备人体感应报警、离家模式、远程状态监控等功能,通过OLED显示屏提供友好的人机交互界面。系统具有高安全性、多功能性和易用性,为现代智能家居提供完整的门禁安防解决方案。
关键词:STM32;智能门禁;多因素认证;蓝牙控制;安防系统;物联网
一、系统总体设计
(一)系统架构
本系统采用"多输入-智能控制-安全执行"的架构:
-
输入层:4×4矩阵键盘、指纹模块、RFID读卡器、蓝牙模块、人体红外传感器
-
控制层:STM32F103C8T6主控制器,处理认证逻辑和安全策略
-
执行层:舵机(门锁控制)、蜂鸣器(报警)、OLED显示屏(人机交互)
(二)系统框图
系统总体硬件框架图
系统硬件配置与功能说明表
1. 主控单元
器件名称 | 推荐型号 | 接口 | 功能说明 |
---|---|---|---|
STM32单片机 | STM32F103C8T6 | - | 作为系统核心,负责多种解锁方式的处理、安全逻辑判断、执行器控制。 |
2. 输入与识别单元
器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
---|---|---|---|
4×4矩阵键盘 | 16键薄膜键盘 | GPIO | 用于输入密码、设置密码、管理操作、解除报警等功能。 |
指纹识别模块 | AS608 | UART | 采集和识别指纹,支持指纹录入、删除、识别,容量1000枚。 |
RFID读卡模块 | RC522 | SPI | 读取IC卡信息,支持卡号识别和权限管理。 |
人体红外传感器 | HC-SR501 | GPIO | 检测人员停留,超过30秒触发报警。 |
蓝牙模块 | HC-05 | UART | 支持手机蓝牙连接,实现APP解锁功能。 |
3. 执行器单元
器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
---|---|---|---|
舵机 | SG90 | PWM | 模拟门锁开关,0°为关闭,90°为打开。 |
蜂鸣器 | 5V有源蜂鸣器 | GPIO | 报警提示和操作反馈音。 |
状态指示灯 | RGB LED | PWM | 显示系统状态:绿色(正常)、蓝色(识别中)、红色(报警)。 |
OLED显示屏 | SSD1306 | I²C | 显示操作界面、状态信息和提示信息。 |
核心功能逻辑说明
1. 四种解锁方式
-
数字密码解锁:
-
通过键盘输入6位密码
-
密码正确 → 舵机转动开门
-
连续3次错误 → 触发报警
-
-
指纹识别解锁:
-
按压指纹传感器
-
识别成功 → 舵机转动开门
-
识别失败 → 提示重试
-
-
RFID卡解锁:
-
刷卡识别
-
卡号合法 → 舵机转动开门
-
非法卡 → 触发报警
-
-
蓝牙APP解锁:
-
手机APP连接蓝牙
-
发送解锁指令 → 舵机转动开门
-
2. 安防监控功能
-
人体检测报警:
-
if (检测到有人 && 持续时间 > 30秒) { 启动蜂鸣器报警; OLED显示"入侵警告"; }
-
-
离家模式:
-
通过键盘激活离家模式
-
启用人体检测报警功能
-
所有解锁方式仍然有效
-
3. 管理功能
-
密码管理:
-
管理员可设置和修改密码
-
支持多用户密码管理
-
-
指纹管理:
-
录入新指纹:管理员模式 + 指纹录入
-
删除指纹:管理员模式 + 选择删除
-
-
RFID卡管理:
-
注册新卡:管理员模式 + 刷卡注册
-
删除卡号:管理员模式 + 选择删除
-
4. OLED显示界面
text
主界面: 欢迎使用智能门禁 请选择解锁方式 解锁成功: 验证成功! 门已打开 报警状态: 入侵警告! 请及时处理 管理员模式: 1.录入指纹 2.删除指纹 3.注册IC卡 4.设置密码
5. 键盘特殊功能
-
#键: 进入管理员模式(需要管理员密码)
-
*键: 取消/返回
-
0键: 解除报警
-
9键: 开启/关闭离家模式
三、软件设计与实现
(一)系统主流程
(二)核心功能实现
1. 多因素认证处理
// 认证处理函数
AuthResult_t Authentication_Handler(void)
{
// 1. 检查蓝牙认证
if (Bluetooth_Authentication()) {
return AUTH_SUCCESS;
}
// 2. 检查RFID认证
if (RFID_Card_Detected()) {
if (Validate_RFID_Card()) {
return AUTH_SUCCESS;
}
}
// 3. 检查指纹认证
if (Fingerprint_Detected()) {
if (Validate_Fingerprint()) {
return AUTH_SUCCESS;
}
}
// 4. 检查密码认证
if (Password_Input_Complete()) {
if (Validate_Password()) {
return AUTH_SUCCESS;
}
}
return AUTH_FAILED;
}
// 蓝牙认证处理
bool Bluetooth_Authentication(void)
{
if (HC05_DataAvailable()) {
char command[20];
HC05_ReceiveData(command, sizeof(command));
if (strstr(command, "UNLOCK") != NULL) {
// 验证蓝牙MAC地址或加密密钥
if (Verify_Bluetooth_Security()) {
return true;
}
}
}
return false;
}
2. 舵机门锁控制
// 舵机控制函数
void Door_Lock_Control(DoorState_t state)
{
switch(state) {
case DOOR_OPEN:
// 转动到开门角度(如90度)
SERVO_SetAngle(90);
OLED_ShowMessage("Door Open");
break;
case DOOR_CLOSE:
// 转动到关门角度(如0度)
SERVO_SetAngle(0);
OLED_ShowMessage("Door Closed");
break;
case DOOR_LOCK:
// 转动到锁门角度(如180度)
SERVO_SetAngle(180);
OLED_ShowMessage("Door Locked");
break;
}
HAL_Delay(1000); // 等待舵机动作完成
}
// PWM舵机控制
void SERVO_SetAngle(uint8_t angle)
{
// 将角度转换为PWM占空比(0.5ms-2.5ms)
uint32_t pulse_width = 500 + (angle * 2000 / 180);
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse_width);
}
3. 人体感应报警逻辑
// 人体感应处理
void PIR_Sensor_Handler(void)
{
static uint32_t presence_start_time = 0;
static bool alert_triggered = false;
if (HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin) == GPIO_PIN_SET) {
// 检测到人体
if (presence_start_time == 0) {
presence_start_time = HAL_GetTick();
} else {
// 计算持续时间
uint32_t duration = HAL_GetTick() - presence_start_time;
if (duration > 30000 && !alert_triggered) { // 30秒超时
if (system_mode != MODE_AWAY) { // 非离家模式才报警
Trigger_Intrusion_Alert();
alert_triggered = true;
}
}
}
} else {
// 人体离开,重置计时器
presence_start_time = 0;
alert_triggered = false;
BUZZER_Off(); // 关闭报警
}
}
// 触发入侵报警
void Trigger_Intrusion_Alert(void)
{
BUZZER_On();
OLED_ShowAlert("INTRUSION ALERT!");
Bluetooth_Send_Alert("Intrusion detected at door!");
}
4. 键盘功能处理
// 键盘处理函数
void Keypad_Handler(void)
{
char key = Keypad_GetKey();
if (key != 0) {
switch(key) {
case '*': // 确认键
Process_Password_Input();
break;
case '#': // 删除/返回键
if (input_index > 0) {
input_buffer[--input_index] = '\0';
OLED_Update_InputDisplay();
}
break;
case 'A': // 功能键A - 录入指纹
Enter_Fingerprint_Enroll_Mode();
break;
case 'B': // 功能键B - 删除指纹
Enter_Fingerprint_Delete_Mode();
break;
case 'C': // 功能键C - 离家模式
Toggle_Away_Mode();
break;
case 'D': // 功能键D - 解除报警
if (alert_active) {
Disable_Alert();
OLED_ShowMessage("Alert Disabled");
}
break;
default: // 数字键
if (input_index < MAX_PASSWORD_LENGTH) {
input_buffer[input_index++] = key;
input_buffer[input_index] = '\0';
OLED_Update_InputDisplay();
}
break;
}
}
}
5. 蓝牙通信处理
// 蓝牙数据处理
void Bluetooth_Data_Handler(void)
{
if (HC05_DataAvailable()) {
char buffer[32];
uint8_t len = HC05_ReceiveData(buffer, sizeof(buffer));
if (len > 0) {
Process_Bluetooth_Command(buffer);
}
}
}
// 处理蓝牙命令
void Process_Bluetooth_Command(const char* command)
{
// 解锁命令
if (strstr(command, "UNLOCK") != NULL) {
if (Verify_Bluetooth_Command(command)) {
Door_Lock_Control(DOOR_OPEN);
Bluetooth_Send_Response("DOOR_UNLOCKED");
}
}
// 状态查询
else if (strstr(command, "STATUS") != NULL) {
Send_System_Status();
}
// 离家模式
else if (strstr(command, "AWAY_MODE_ON") != NULL) {
system_mode = MODE_AWAY;
Bluetooth_Send_Response("AWAY_MODE_ENABLED");
}
else if (strstr(command, "AWAY_MODE_OFF") != NULL) {
system_mode = MODE_HOME;
Bluetooth_Send_Response("AWAY_MODE_DISABLED");
}
}
// 发送系统状态
void Send_System_Status(void)
{
char status[64];
snprintf(status, sizeof(status),
"STATUS:DOOR_%s,ALARM_%s,MODE_%s",
door_status ? "OPEN" : "CLOSED",
alert_active ? "ON" : "OFF",
system_mode == MODE_AWAY ? "AWAY" : "HOME");
HC05_SendData(status);
}
四、系统功能测试
(一)认证功能测试
-
密码认证测试:测试密码输入和验证功能
-
指纹认证测试:测试指纹录入和识别功能
-
RFID认证测试:测试射频卡识别功能
-
蓝牙认证测试:测试蓝牙连接和控制功能
(二)安全功能测试
-
报警功能测试:测试人体感应超时报警
-
防拆功能测试:测试系统防拆保护
-
错误限制测试:测试多次错误输入锁定
(三)可靠性测试
-
长时间运行测试:连续运行72小时测试稳定性
-
电源适应性测试:测试电源波动下的系统稳定性
-
环境适应性测试:测试不同环境条件下的可靠性
五、安装部署建议
(一)硬件安装
-
主控制器:安装在门内侧,避免直接暴露
-
传感器布置:
-
人体红外传感器:正对门前区域
-
指纹模块:安装在门外侧方便位置
-
RFID读卡器:安装在门外侧
-
(二)电源系统
-
主电源:12V直流电源适配器
-
备用电源:配备锂电池备用电源
-
低功耗设计:采用休眠模式降低功耗
六、创新点与优势
(一)技术创新
-
四重认证方式:密码、指纹、RFID、蓝牙多种认证方式
-
智能报警系统:基于人体感应的智能报警机制
-
蓝牙远程控制:通过手机APP实现远程监控和控制
(二)应用优势
-
高安全性:多因素认证,防拆报警,错误输入限制
-
易用性:友好的人机界面,简便的操作方式
-
灵活性:支持本地和远程两种控制模式
(三)关键设计注意事项
-
安全等级设计:
-
管理员操作需要二次验证
-
报警触发后需要物理解除
-
通信数据加密处理
-
-
电源管理:
-
支持备用电源,断电继续工作
-
低功耗设计,延长待机时间
-
电源状态监控和报警
-
-
用户体验优化:
-
操作提示音反馈
-
状态指示灯明确
-
界面操作简单直观
-
-
可靠性设计:
-
看门狗定时器防死机
-
数据备份和恢复
-
传感器故障检测
-
-
安装与维护:
-
模块化设计,便于安装
-
指纹传感器防污设计
-
定期自检功能
-
-
扩展功能:
-
支持开锁记录查询
-
时间戳记录功能
-
远程报警通知(可扩展)
-
如有侵权,或需要完整代码,请及时联系博主。