摘要
本文设计了一种基于STM32的校园宿舍门禁防疫测温系统。该系统利用STM32作为主控芯片,结合人体温度检测模块、步进电机模拟的门禁系统、指示灯和报警灯进行状态指示,实现了宿舍门禁的智能化管理和防疫测温功能。本文详细介绍了系统的硬件组成、软件设计以及开发过程中的关键问题及其解决方案,并提供了部分源代码。
一、引言
随着校园安全管理和疫情防控需求的不断提高,智能化门禁系统成为校园宿舍管理的重要组成部分。本文设计的基于STM32的校园宿舍门禁防疫测温系统,通过集成人体温度检测、门禁控制、状态指示等功能,实现了对进出宿舍人员的自动识别和体温检测,提高了宿舍管理的效率和安全性。
二、系统组成与工作原理
本系统主要由STM32主控芯片、人体温度检测模块、RFID读卡器模块、OLED显示屏、步进电机门禁模块、指示灯和报警灯等组成。系统工作时,通过人体温度检测模块获取进出人员的体温信息,RFID读卡器读取人员卡片信息,STM32芯片根据读取的信息进行判断和处理,控制步进电机模拟的门禁开关,并通过指示灯和报警灯进行状态指示。
三、硬件设计
-
STM32主控芯片:选用STM32F103系列芯片作为系统的主控芯片,具有丰富的外设接口和强大的处理能力,满足系统控制需求。
-
人体温度检测模块:采用高精度的人体温度检测传感器,如DS18B20等,实现体温的实时检测。
-
RFID读卡器模块:选用RC522模块作为RFID读卡器,实现对进出人员卡片的读取。
-
OLED显示屏:用于显示人员卡片信息、体温信息等。
-
步进电机门禁模块:采用步进电机模拟门禁开关,通过STM32芯片控制其转动实现门禁的开关。
-
指示灯和报警灯:用于指示系统状态和报警提示。
四、软件设计
软件设计主要包括STM32芯片的初始化、外设模块的驱动编写、数据处理和逻辑控制等部分。通过编写相应的程序,实现对人体温度的检测、RFID卡片的读取、OLED显示屏的更新、步进电机的控制以及指示灯和报警灯的状态指示等功能。
五、开发过程中的关键问题及其解决方案
-
OLED与RFID初始化冲突问题:在开发初期,发现OLED与RFID模块在初始化时存在冲突。通过重新初始化OLED模块中的相关引脚,解决了该问题。
-
MAX7219驱动数码管供电问题:数码管驱动模块MAX7219的供电电压范围与逻辑电平不匹配。通过串联电阻降低供电电压,解决了逻辑电平过高的问题。
-
步进电机驱动问题:在步进电机驱动部分,发现初始化时IO电平未拉高导致驱动一直打开。通过修改初始化程序,确保IO电平在初始化时拉高,解决了该问题。
-
RFID卡号显示问题:RFID读取到的卡号为16进制,而OLED只能显示字符和汉字。通过编写卡号转换函数,将16进制卡号转换为字符串后在OLED上显示。
-
数码管显示异常问题:在系统运行过程中,发现数码管在一段时间后显示异常。经过排查,初步判断为硬件问题,需进一步检查和修复。
-
串口通信问题:在实现串口通信时,出现通信异常。通过添加超时接收机制和改进通信协议,解决了该问题。
六、结论与展望
本文设计了一种基于STM32的校园宿舍门禁防疫测温系统,实现了宿舍门禁的智能化管理和防疫测温功能。通过详细的硬件设计和软件编程,解决了开发过程中的关键问题,并提供了部分源代码。该系统具有较高的实用性和可扩展性,可广泛应用于校园宿舍等场所的安全管理和疫情防控工作。未来,将进一步优化系统性能,提高稳定性和可靠性,并探索更多智能化管理功能的应用。
#include "stm32f10x.h"
#include "Timeout.h"
#include "Myusart.h"
#include "Motor.h"
#include "MAX7219.h"
#include "LEDandBuzz.h"
#include "RC522.h"
#include "HDC1080.h" //HDC1080
#include "OLED.h"
#include "delay.h"
#include "usart.h"
#include "string.h"
///已录入成员的射频卡ID号和中文姓名编码/
char ID_liaotingchun[8]="0F23660A";
#define LTC 0
char ID_zhongweimin[8]="00000000";//暂未录入
#define ZWM 3
char ID_zhengwujie[8]="031202D3";
#define ZWJ 6
char ID_haoshuyi[8]="00000000";//暂未录入
#define HSY 9
char ID_maozimeng[8]="0F237704";
#define MZM 12
char ID_hulingqiao[8]="84F724CA";
#define HLQ 15
char ID_wangtianhui[8]="20D72F68";
#define WTH 18
char ID_zhoujiahui[8]="F0169A83";
#define ZJH 21
char ID_biance[8]="C5F2241C";
#define BC 24
///
//自定义函数声明
void OLED_DisplayInit(void);
u8 RFID_Updata(void);
void OLED_DisplayUpdata(u8 Name,char *IDcard,char * StudentID);
#define TimeoutTemp 5 //测温时间,多次测温方便看变化
#define TemperatureLimit 3050 //体温报警阈值
u16 Temperature; //温度
char IDcard[10]="6666666666"; //RFID卡号,实际只有8位
u8 TempMeas=TimeoutTemp*2; //请求人脸识别的超时时间的计数变量
u8 ChineseName;//中文名信息编号
int main(void)
{
unsigned char status;
u8 Exist=1;
u8 FaceRecognitionResult = 1;
NVIC_Configuration();
SystemInit(); // 配置系统时钟为72M
delay_init();
MyusartInit(115200);
//各模块的初始化
RGBledInit();//LED灯
BuzzInit();//蜂鸣器
RC522_Init();//RFID射频卡
OLED_Init(); //OLED液晶显示
MAX7219_Init();//数码管显示
MotorInit();//电机控制门禁打开
HDC1080_Init();//检测温湿度
Timeout_Init();//定时器初始化
UsartTimeout_Init();//串口超时接收
部分代码
资料下载地址:
https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8