首页 > 其他分享 >基于STM32的智能门禁系统

基于STM32的智能门禁系统

时间:2024-10-02 18:49:20浏览次数:11  
标签:access RFID HAL PIN void 门禁系统 STM32 智能 GPIO

目录

  1. 引言
  2. 项目背景
  3. 环境准备
    • 硬件准备
    • 软件安装与配置
  4. 系统设计
    • 系统架构
    • 关键技术
  5. 代码示例
    • RFID数据采集与处理
    • 门禁控制实现
    • 显示与报警功能
  6. 应用场景
  7. 结论

1. 引言

智能门禁系统在现代安防中占据重要地位,通常用于控制进入和离开特定区域的权限。通过基于STM32微控制器的智能门禁系统,可以利用RFID识别技术对人员身份进行认证,结合显示和报警功能,确保进入人员的合法性,并在未经授权的访问尝试时触发报警。

2. 项目背景

传统的门禁系统依赖于钥匙或密码,存在丢失或忘记的风险。智能门禁系统通过RFID(射频识别)技术,可以对进出人员进行身份验证,并提供便捷和安全的门禁管理。该系统可以应用于家庭、办公楼、实验室等多个场景中,确保安全性并提高便利性。

3. 环境准备

硬件准备

  • STM32开发板:STM32F103或类似微控制器
  • RC522 RFID读卡器:用于读取RFID卡信息
  • RFID卡或标签:用于识别人员身份
  • 舵机或电磁锁:用于控制门锁的开关
  • OLED显示屏:用于显示门禁状态信息
  • 蜂鸣器:用于未经授权时发出报警
  • LED灯:用于指示访问状态(如绿色表示授权访问,红色表示拒绝访问)
  • 面包板及连接线:用于硬件连接
  • 电源或电池:为系统供电

软件安装与配置

  1. Keil uVision:用于编写和编译代码。
  2. STM32CubeMX:用于配置STM32的引脚和外设。
  3. ST-Link Utility:用于将代码下载到STM32开发板中。

步骤:

  1. 下载并安装Keil uVision。
  2. 下载并安装STM32CubeMX。
  3. 使用ST-Link Utility来烧录代码到STM32。

4. 系统设计

系统架构

智能门禁系统主要由以下模块组成:

  1. 身份识别模块:通过RC522 RFID读卡器读取用户的RFID卡信息,并与预存的授权卡进行匹配。
  2. 门禁控制模块:根据身份验证结果控制门锁的开关(通过舵机或电磁锁实现)。
  3. 显示与报警模块:通过OLED显示屏显示门禁状态(授权或拒绝访问),并通过蜂鸣器在拒绝访问时发出报警提示。
  4. 状态指示模块:通过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

相关文章

  • 明厨亮灶AI智能分析盒
    明厨亮灶AI智能分析盒通过AI视频分析技术,明厨亮灶AI智能分析盒赋能现场普通监控具备了AI智能检测的功能,能够迅速高效的识别厨房内的工作人员的着装状况:口罩穿戴识别、厨师服穿戴识别、吸烟识别、厨师帽穿戴识别、后厨鼠害识别、玩手机识别等。明厨亮灶AI智能分析盒对餐厅厨房进行......
  • Java-人工智能初学者实用手册-全-
    Java人工智能初学者实用手册(全)零、前言在一切都由技术和数据驱动的现代世界中,人工智能变得越来越重要,它是使任何系统或流程自动化的过程,以自动执行复杂的任务和功能,从而实现最佳生产率。面向初学者的Java人工智能实践解释了使用流行的基于Java的库和框架来构建智能应用程......
  • STM32出现HardFault_Handler故障的原因1. **内存溢出或访问越界** 2. **堆栈溢出**
    STM32出现HardFault_Handler故障的原因STM32系统中,HardFault_Handler故障主要有两个方面的原因:内存溢出或访问越界堆栈溢出最近我遇到的问题是栈溢出,情况如下:staticchardata[10000];voidfun1(unsignedchar*buf){inti=0;for(i=0;i<5000;i++)......
  • 未佩戴安全带智能识别
    未佩戴安全带智能识别系统基于前端摄像头视频采集实时视频流,未佩戴安全带智能识别系统运用最新的机器学习技术,未佩戴安全带智能识别系统自动识别现场工地作业人员高空作业是否按要求佩戴安全带,未佩戴安全带智能识别系统发现现场人员没有穿戴安全带,不需人为干预自动抓拍告警同步提......
  • 水位标尺智能识别系统
    水位标尺智能识别系统通过AI视频分析技术,水位标尺智能识别系统对河道湖泊水库等水位进行7*24小时实时自动监测,当水位标尺智能识别系统监测到河道湖泊水库水位到达警戒线时,立即抓拍存档告警,并同步回传后台提醒后台值班人员及时处理。水位标尺智能识别系统通过智能视频分析技术,可全......
  • 值班脱岗智能监测识别系统
    值班脱岗智能监测识别系统通过AI视频智能分析技术,值班脱岗智能监测识别系统对办公工作岗位区域、岗亭、值班室、生产线岗位等进行7*24小时不间断实时监测,当超过后台规定时间没有人员在规定工作区域,无需人为干预系统立即抓拍告警提醒后台值班人员及时处理。值班脱岗智能监测识别系......
  • 值班离岗智能识别监测系统
    值班离岗智能识别监测系统通过AI视频分析技术,值班离岗智能识别监测系统能自动检测画面中人员的岗位状态(睡岗或者离岗),一旦发现工作时间人员不在岗位的时间超出后台设置时间,值班离岗智能识别监测系统便会立即抓拍存档报警,同步将违规信息传送至后台平台。值班离岗智能识别监测系统对......
  • 【完美复现】基于多智能体系统一致性算法的电力系统分布式经济调度策略(Matlab代码实现
    ......
  • 【完美复现】基于多智能体系统一致性算法的电力系统分布式经济调度策略(Matlab代码实现
    ......
  • STM32
    元器件STM32F103C8T6面包板:硬件平台STLINK:下载程序与供电0.96寸OLED显示屏(4引脚)LED灯,按键(2引脚)USB转TTL串口:串口通信跳线,杜邦线,飞线蜂鸣器模块电位器:AD转换光敏模块:IO口读取、AD热敏模块对射式红外传感器:配合遮光片可计次,配合编码盘测速反射式红外传感器:循迹车-识别......