




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页基于STM32+RC522设计的门禁系统一、项目背景
门禁系统是现代社会中非常重要的安全(控制系统)之一,其功能是在保障建筑物安全的同时,为合法用户提供便利。当前设计一种基于(STM32)+RC522的门禁系统设计方案,通过(RFID)-RC522模块实现了对用户卡的注册、识别及身份验证,通过控制SG90舵机实现门锁的开关,具有较高的安全性和可靠性。实验结果表明,该门禁系统可以有效地保障建筑物的安全性。
门禁系统广泛应用于各种建筑物、企事业单位,用于管理人员的进出、控制人员活动范围、实现安全监控等功能。传统的门禁系统采用密码输入或刷卡的方式进行身份验证,但存在易被破解的风险。基于(RF)ID的门禁系统已经成为一种相对先进的安全控制方案。
本次设计的STM32+RC522门禁系统,通过RFID-RC522模块对用户的卡进行注册、识别完成身份识别,对门锁进行开关。系统带了(OLED)显示屏,输入用户密码登录之后,可以对新卡片进行注册,添加新卡片,对不使用的卡片进行注销。在系统里,IC卡的数据都存储在卡的内部扇区里,通过卡的内部空间进行管理。
采用5V-(步进电机)的版本:
二、系统设计
门禁系统由STM32F103C8T6(单片机)、RFID-RC522模块、SG90舵机、LCD1602液晶显示屏、键盘模块等组成。其中,STM32F103C8T6单片机作为系统的核心控制器,控制程序的执行;RFID-RC522模块作为识别用户卡片的设备;SG90舵机作为门锁控制设备;OLED显示屏提供用户输入信息和系统信息的显示;键盘模块方便用户进行密码和卡片信息的输入。
2.1软件设计
【1】RFID卡信息管理
本系统采用卡的内部空间进行IC卡信息的管理。每个IC卡可以分为多个扇区,每个扇区包含多个块,每个块包含16个字节。扇区0是厂家已经预留好的,用于存储卡片的序列号,扇区1-15可以由用户自己配置,用于存储一些私有数据,如用户身份、车牌号、员工编号等。
在本系统中,IC卡信息的管理主要包括三个方面:新卡片注册、卡片识别和注销卡片。
对于新卡片的注册,用户需要按下键盘上的“#”键进入注册模式,接着输入管理员密码,然后将新卡放到RFID读写器上,系统将读取卡片序列号,并在卡片的扇区中存储用户名和密码信息等。
对于卡片的识别,当用户按下门禁系统的确认键时,系统将读取RFID模块中读取的卡片序列号,并去卡片扇区中查询用户名和密码信息,进行身份验证。如果卡片识别成功,系统将控制舵机旋转一圈实现开锁功能。
对于注销卡片,管理员需要输入密码进行身份验证后,再将要注销的卡片放到RFID读写器上,系统将清空该卡片的扇区内所有数据。
【2】门禁系统安全控制
本门禁系统采用密码验证和卡片识别相结合的方式,提高了系统的安全性。具体来说,系统要求用户输入密码或刷卡进行身份验证,只有在验证成功后才能控制门锁进行开关操作。同时,系统还可以记录每一次开启门锁的时间和用户信息,以便管理员进行安全监控。
【3】门锁控制
本门禁系统采用SG90舵机控制门锁的开关,具有结构简单,控制方便的优点。在门锁控制过程中,系统对舵机控制(信号)的频率和占空比进行精细控制,以实现门锁的准确开关。
2.2(硬件)设计
【1】STM32F103C8T6单片机
STM32F103C8T6单片机是ST公司推出的一款基于Cortex-M3内核的可(编程)32位单片机,常常被广泛应用于(工业控制)、(智能家居)、(嵌入式)控制等领域。
它的主要特点包括:
1.Cortex-M3内核:STM32F103C8T6使用Cortex-M3内核,具有高性能、低功耗、硬实时等特点,可支持多个串口、(I2C)、S(PI)、(USB)等外设,为使用者带来更大的灵活性。2.32位处理能力:STM32F103C8T6是一款32位单片机,具有比8位、16位单片机更高的数据运算能力、编程灵活度和计算精度。3.较强的系统时间管理能力:STM32F103C8T6内部具备RTC(实时时钟)模块,可实现精准的时间管理和时间标记功能,在一些需要时间同步的应用场景下具有较大的优势。4.大存储容量:STM32F103C8T6内置64K字节的闪存和20K字节的S(RAM),能够满足大型嵌入式应用的存储需求。5.丰富的外设接口:STM32F103C8T6支持多个外设接口,如SPI、I2C、(CAN)总线等,方便(开发者)扩展相关应用场景。6.代码可移植性强:由于该(芯片)应用广泛,可以使用多种开发工具进行开发,例如(Keil)、STM32CubeMX等,而且支持多种编程语言,如(C语言)、(C++)等,因此优点很容易在不同的平台、不同开发者之间实现代码的移植。
【2】RFID-RC522模块
RFID-RC522模块是一种低成本、高性价比的RFID读写模块。它具有高精度、快速读取等特点,广泛应用于门禁系统、(智能)卡管理、物流追踪等领域。
RFID-RC522模块的特点如下:
1.高精度:RFID-RC522模块采用(射频)感应技术进行信号传输和读写,具有高精度、稳定性强等优点。2.快速读取:RFID-RC522模块读取速度快,一般只需0.1秒左右就可以完成读取操作。3.支持多种协议:RFID-RC522模块支持ISO14443A/B、FeliCa等多种RFID协议,可满足不同应用场合的需求。4.低功耗:RFID-RC522模块功耗低,工作(电流)为13-26mA,待机电流为10A。5.接口简单:RFID-RC522模块采用SPI接口进行(通信),模块上的引脚有7个,具有很好的兼容性。6.支持多种开发语言:RFID-RC522模块支持多种开发语言,如C++、(Python)等,方便开发者进行二次开发。
RFID-RC522模块的使用需要配合相关的库文件,在(Arduino)、RaspberryPi等开发板上进行代码编写和开发。常见的使用场景包括门禁系统、智能卡管理、出入库管理、物流追踪等领域。
【3】SG90舵机
该舵机小巧耐用,可以精确地控制门锁的开关。
SG90舵机是一种小型舵机,体积小、重量轻、价格低廉,常常被用于模型飞机、小型(机械)臂、玩具模型等领域。它采用了直流(电机),利用PID控制技术,以及精密的小齿轮减速箱实现转向角的控制。
SG90舵机的特点如下:
1.小体积:SG90舵机体积为23mm*12.2mm*29mm,重量仅为9g,非常适合小型(电子)设备。2.高精度:SG90舵机的控制精度比较高,可控制角度范围为0~180度,分辨率为1度,可以实现精确到角度的控制。3.低噪音:SG90舵机采用了精密减速齿轮箱,转动非常平稳,并且噪音非常低。4.低功耗:SG90舵机的电机非常省电,一般使用3V到6V的(电源),仅需20mA的电流,可大大节省电力消耗。5.价格适中:SG90舵机价格相对较低,非常适合初学者或需求量较大的用户使用。
SG90舵机在使用时需要通过PWM信号进行控制。
【4】0.96寸OLED显示屏
0.96寸SPI接口OLED显示屏是一种小型化的屏幕,属于OLED显示技术,采用SPI接口连接,外观尺寸约为12mm*12mm,分辨率一般为128*64或者128*32。它可以用于各种小型电子设备,例如手持设备、小型仪器、智能家居控制面板等等。
OLED即有机发光(二极管),与传统的液晶显示屏相比,OLED具有响应速度快、视角范围广、色彩鲜艳、亮度高等优势。SPI接口则是一种串行外设接口,具有简单、灵活、高速等特点。
0.96寸SPI接口OLED显示屏的驱动芯片一般为SSD1306,有128个列和64个行的像素,还有一些有128个列和32个行的像素。其中,128*64像素的屏幕显示面积较大,在显示图像和文字时更加清晰和细腻。0.96寸SPI接口OLED显示屏具有小巧、高清、高速等优点,被广泛使用在各种小型电子设备中。
【5】键盘模块
该模块可以方便地输入密码和卡片信息。
IIC接口的4x4(电容)矩阵键盘模块是一种基于IIC总线通信的电容式按键模块,常常被应用在工控、家电、医疗器械等领域。
它的主要特点包括:
1.采用IIC总线通信:IIC接口的4x4电容矩阵键盘模块通过IIC总线通信连接到(MCU),简化了连接方式,方便使用。2.采用电容式按键设计:每个按键上放置一个(电容器),当手指触摸到按键时,电容器的电容值发生变化,通过(检测)电容的变化实现按键检测。3.4x4矩阵排列式设计:4x4电容矩阵键盘模块采用矩阵排列式设计,一共有16个按键,可以满足较为复杂的应用场景。4.接口简单:IIC接口的4x4电容矩阵键盘模块只需要SCL和SDA两条线连接到MCU即可。5.高灵敏度:电容式按键设计使得按键检测更加灵敏,而且不会产生按键轻微弹起的误触情况,使用更加舒适。6.代码简洁:使用该模块并不需要编写复杂的按键扫描程序,只需要通过读取IIC总线上的按键值即可。
IIC接口的4x4电容矩阵键盘模块是一种方便易用、高灵敏度的按键模块,通过电容式按键设计实现按键的检测和响应,并且通过IIC总线通信简化了连接方式。它适合于应用于许多领域,如工控、家电和医疗器械等,能够为使用者的产品带来更为方便和高效的控制方式。
三、核心代码
3.1SG90舵机控制代码
下面是基于GPIO(模拟)时序控制STM32F103C8T6驱动SG90舵机旋转指定的角度的代码,并封装成子函数调用。
#include"stm32f10x.h"#include"stm32f10x_gpio.h"#include"stm32f10x_rcc.h"#include"delay.h"#defineServo_pinGPIO_Pin_5#defineServo_portGPIOAvoidSG90_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=Servo_pin;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(Servo_port,}voidSG90_SetAngle(uint8_tangle){if(angle>180)angle=180;if(angle
其中,SG90_Init()函数用于初始化PA5口,并将其配置为输出模式。SG90_SetAngle()函数用于驱动舵机旋转到指定角度。在该函数中,首先根据所给的角度值计算出延时的时间(te)mp(单位为微秒),然后使用GPIO口控制SG90舵机在temp延时时间内输出高电平,其余时间输出低电平。通过调整延时时间和按角度分配脉冲宽度,达到驱动SG90舵机旋转的目的。
main()函数中的for循环控制舵机从0度到180度的循环旋转。代码中用到了delay_init()函数和delay_ms()、delay_us()函数。它们是自行编写的延时函数,可以实现毫秒和微秒级别的延时,具体代码如下:
#include"stm32f10x.h"voiddelay_init(void){if(SysTick_Config(SystemCoreClock/1000000)){while(1);}}sta(ti)c__IOuint32_tdelay_us_tick;voiddelay_us(uint32_tnUs){delay_us_tick=nUs;while(delay_us_tick);}static__IOuint32_tdelay_ms_tick;voiddelay_ms(uint32_tnMs){delay_ms_tick=nMs;while(delay_ms_tick);}voidSysTick_Handler(void){if(delay_us_tick>0){delay_us_tick--;}if(delay_ms_tick>0){delay_ms_tick--;}}
其中,delay_init()函数用于配置系统(时钟)源和SysTick(定时器),实现每个SysTick时钟产生一个中断的功能。delay_us()函数和delay_ms()函数分别用于实现微秒级别和毫秒级别的延时,通过限制delay_us_tick和delay_ms_tick的值实现延时的效果。SysTick_Handler()为中断处理函数,每次SysTick定时器计数减1,当减到0时,相应的delay_us_tick或delay_ms_tick也减1,通过循环等待该值为0实现延时。
在代码中的SG90_SetAngle()函数中,需要精确控制GPIO的电平时间,使其产生相应的脉冲宽度,从而控制舵机转动角度。因此,需要配置GPIO口的输出模式和速度、设定delay_us()函数中根据角度计算的电平时间,使得舵机能够准确地执行旋转。
3.2RC522读写代码
下面是基于SPI接口控制STM32F103C8T6驱动RFID-RC522模块完成卡片识别和扇区读写的代码示例。在该代码中,使用的是SPI1的接口,RFID-RC522模块通过SPI1接口连接到STM32F103C8T6。
代码中通过封装SPI相关操作和MFRC522库函数,实现了读取卡片信息和完成扇区读写的功能。
#include"stm32f10x.h"#include"stm32f10x_spi.h"#include"stm32f10x_gpio.h"#include"stm32f10x_rcc.h"#include"delay.h"#include"mfrc522.h"#include"stdio.h"#defineSPI_CE_LOW()GPIO_ResetBits(GPIOA,GPIO_Pin_4)#defineSPI_CE_HIGH()GPIO_SetBits(GPIOA,GPIO_Pin_4)voidSPI1_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,SPI_InitTypeDefSPI_InitStructure;SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode=SPI_Mode_Master;SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;SPI_InitStructure.SPI_Fi(rs)tBit=SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial=7;SPI_Init(SPI1,SPI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论