目录
- 引言
- 项目背景
- 环境准备
- 硬件准备
- 软件安装与配置
- 系统设计
- 系统架构
- 关键技术
- 代码示例
- RFID数据采集与处理
- 门禁控制实现
- 显示与报警功能
- 应用场景
- 结论
1. 引言
智能门禁系统在现代安防中占据重要地位,通常用于控制进入和离开特定区域的权限。通过基于STM32微控制器的智能门禁系统,可以利用RFID识别技术对人员身份进行认证,结合显示和报警功能,确保进入人员的合法性,并在未经授权的访问尝试时触发报警。
2. 项目背景
传统的门禁系统依赖于钥匙或密码,存在丢失或忘记的风险。智能门禁系统通过RFID(射频识别)技术,可以对进出人员进行身份验证,并提供便捷和安全的门禁管理。该系统可以应用于家庭、办公楼、实验室等多个场景中,确保安全性并提高便利性。
3. 环境准备
硬件准备
- STM32开发板:STM32F103或类似微控制器
- RC522 RFID读卡器:用于读取RFID卡信息
- RFID卡或标签:用于识别人员身份
- 舵机或电磁锁:用于控制门锁的开关
- OLED显示屏:用于显示门禁状态信息
- 蜂鸣器:用于未经授权时发出报警
- LED灯:用于指示访问状态(如绿色表示授权访问,红色表示拒绝访问)
- 面包板及连接线:用于硬件连接
- 电源或电池:为系统供电
软件安装与配置
- Keil uVision:用于编写和编译代码。
- STM32CubeMX:用于配置STM32的引脚和外设。
- ST-Link Utility:用于将代码下载到STM32开发板中。
步骤:
- 下载并安装Keil uVision。
- 下载并安装STM32CubeMX。
- 使用ST-Link Utility来烧录代码到STM32。
4. 系统设计
系统架构
智能门禁系统主要由以下模块组成:
- 身份识别模块:通过RC522 RFID读卡器读取用户的RFID卡信息,并与预存的授权卡进行匹配。
- 门禁控制模块:根据身份验证结果控制门锁的开关(通过舵机或电磁锁实现)。
- 显示与报警模块:通过OLED显示屏显示门禁状态(授权或拒绝访问),并通过蜂鸣器在拒绝访问时发出报警提示。
- 状态指示模块:通过LED指示授权状态,绿色表示授权访问,红色表示拒绝。
关键技术
- RFID数据采集与验证:STM32通过SPI与RC522 RFID读卡器通信,读取卡片数据,并与预设的合法卡号进行匹配。
- 门禁控制:根据身份验证结果,通过舵机或电磁锁控制门的开关。
- 报警与状态显示:当检测到未经授权的访问时,触发蜂鸣器报警并在OLED显示屏上提示,同时通过LED灯指示授权状态。
5. 代码示例
RFID数据采集与处理
#include "rc522.h"
#include "stm32f1xx_hal.h"
// 已授权的RFID卡号
uint8_t authorized_card[5] = {0x12, 0x34, 0x56, 0x78, 0x90};
// 初始化RC522 RFID模块
void RFID_Init(void) {
RC522_Init();
}
// 读取RFID卡号
uint8_t Read_RFID_Card(void) {
uint8_t card_id[5];
if (RC522_Check(card_id) == MI_OK) {
if (RC522_Compare(card_id, authorized_card) == MI_OK) {
return 1; // 授权通过
}
}
return 0; // 未授权
}
门禁控制实现
// 初始化舵机或电磁锁
void Door_Lock_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置舵机或电磁锁引脚
GPIO_InitStruct.Pin = GPIO_PIN_1; // 舵机或电磁锁接入PA1
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// 控制门锁开关
void Control_Door_Lock(uint8_t access_granted) {
if (access_granted) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // 开锁
HAL_Delay(5000); // 门保持5秒开锁状态
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // 关锁
}
}
显示与报警功能
// OLED显示门禁状态
void Display_Status(uint8_t access_granted) {
if (access_granted) {
OLED_DisplayString("Access Granted");
} else {
OLED_DisplayString("Access Denied");
}
}
// 初始化蜂鸣器和LED
void Alarm_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
// 配置蜂鸣器和LED引脚
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; // LED和蜂鸣器引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
// 访问状态指示和报警
void Access_Alarm(uint8_t access_granted) {
if (access_granted) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 绿灯亮表示授权访问
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // 关闭蜂鸣器
} else {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭绿灯
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // 蜂鸣器报警,红灯亮
}
}
// 主循环
int main(void) {
HAL_Init();
RFID_Init();
Door_Lock_Init();
Alarm_Init();
while (1) {
uint8_t access_granted = Read_RFID_Card(); // 读取RFID卡并验证
// 显示状态并控制门锁
Display_Status(access_granted);
Control_Door_Lock(access_granted);
// 控制报警与LED指示灯
Access_Alarm(access_granted);
HAL_Delay(2000); // 延迟2秒后继续检测
}
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
问题讨论,stm32的资料领取可以私信!
6. 应用场景
- 家庭安全:智能门禁系统可以用于家庭入口,确保只有授权人员才能进入房屋。
- 办公室门禁:在办公楼内,智能门禁系统可以确保只有经过授权的员工可以进入特定区域。
- 实验室和机房安全:用于实验室、机房等需要特殊权限的场所,防止未经授权的人员进入。
7. 结论
基于STM32的智能门禁系统通过结合RFID技术,可以有效管理进入权限,并提供实时的门禁状态反馈和报警功能。该系统结构简单、功能实用,适合应用于家庭、办公室和实验室等场景。通过扩展,该系统还可以集成更多的安全功能,例如远程管理、历史记录查询等。
标签:access,RFID,HAL,PIN,void,门禁系统,STM32,智能,GPIO From: https://blog.csdn.net/2401_84204806/article/details/142674140