1. 项目概述
这个基于STM32和RFID技术的员工打卡门禁系统,是我去年帮学弟完成的毕业设计项目。它不仅能实现基本的门禁控制功能,还能自动记录员工考勤数据,特别适合中小企业或学校实验室使用。整套系统成本控制在200元以内,但实现了商业级门禁系统80%的核心功能。
我在设计这个系统时,重点考虑了三个实际需求:首先是可靠性,要确保每天数百次刷卡都能稳定响应;其次是数据安全性,员工信息和考勤记录不能丢失;最后是易用性,管理员可以通过简单操作完成人员管理和数据导出。下面我就把这套系统的完整实现方案分享给大家,包括硬件选型、电路设计、程序开发和论文撰写要点。
2. 硬件设计与选型
2.1 核心器件选型
主控芯片选用STM32F103C8T6,这是性价比最高的ARM Cortex-M3内核MCU,72MHz主频完全能满足需求。相比Arduino,STM32有更丰富的外设接口,后续扩展性强。RFID模块选用经典的RC522,支持ISO14443A协议,读取距离5-8cm,市场价不到15元。
其他关键器件:
- 电源模块:AMS1117-3.3V稳压芯片
- 存储模块:AT24C256 EEPROM(存储员工信息)
- 显示模块:0.96寸OLED(I2C接口)
- 门锁驱动:5V继电器模块
- 蜂鸣器:用于操作提示音
2.2 电路设计要点
电源部分要特别注意抗干扰设计:
- 在AMS1117输入输出端各加一个100μF电解电容
- 每个IC的VCC引脚就近放置0.1μF去耦电容
- RFID模块天线部分预留π型匹配电路
一个容易忽视的细节是RC522的天线设计。PCB天线的最佳尺寸是50×50mm,线圈匝数6-8圈。如果使用现成模块,要注意天线朝向,建议与外壳保持10mm以上距离以避免金属干扰。
重要提示:调试时先用杜邦线连接,确认功能正常后再制作PCB。我曾因PCB天线设计不当导致读取距离只有2cm,后来重新调整匹配电容才解决。
3. 软件开发与实现
3.1 开发环境搭建
使用Keil MDK作为开发环境,需要安装以下组件:
- STM32F1xx_DFP设备支持包
- RC522的HAL库驱动
- OLED显示驱动库
建议代码结构这样组织:
code复制/Drivers // 硬件驱动层
/RFID
/OLED
/EEPROM
/Application // 应用层
/DoorLock
/Attendance
/User // 主程序
3.2 核心算法实现
RFID卡号处理是关键,需要注意:
c复制// 卡号读取处理示例
uint8_t serNum[5];
MFRC522_ReadRegister(serNum, 5);
uint32_t cardID = (serNum[0]<<24) | (serNum[1]<<16) |
(serNum[2]<<8) | serNum[3];
考勤记录存储采用循环队列结构,避免频繁擦写EEPROM:
c复制#define MAX_RECORDS 500
typedef struct {
uint32_t cardID;
uint8_t hour,minute;
} Record;
void saveRecord(Record rec) {
static uint16_t writePointer = 0;
AT24CXX_Write(writePointer*sizeof(Record), (uint8_t*)&rec, sizeof(Record));
writePointer = (writePointer+1) % MAX_RECORDS;
}
3.3 功能逻辑实现
主程序状态机设计:
- 待机状态:OLED显示实时时钟
- 刷卡检测:每100ms查询RC522
- 验证状态:比对卡号与EEPROM中的白名单
- 开门状态:驱动继电器,延时5秒
- 记录状态:保存考勤数据
特别注意中断处理:
- 使用SysTick作为系统时基
- RFID中断接在EXTI线上
- 按键检测用定时器扫描方式
4. 系统调试与优化
4.1 常见问题排查
-
RFID读取不稳定
- 检查天线匹配电容(通常1-10pF)
- 确保3.3V电源纹波<50mV
- 调整MFRC522的增益寄存器
-
EEPROM数据丢失
- 写入前检查I2C总线是否空闲
- 单次写入不超过32字节
- 重要数据双备份存储
-
继电器误动作
- 在继电器线圈两端并联续流二极管
- GPIO口配置为推挽输出
- 添加软件去抖逻辑
4.2 性能优化技巧
-
降低功耗:
- 空闲时让STM32进入Stop模式
- 关闭未使用的外设时钟
- RFID模块定时唤醒检测
-
提高响应速度:
- 使用DMA传输I2C数据
- 优化数据库查询算法
- 关键代码用汇编重写
-
增强稳定性:
- 添加看门狗定时器
- 电源电压监测
- 异常状态自动恢复
5. 论文撰写要点
5.1 论文结构建议
-
引言部分要突出创新点:
- 低成本解决方案
- 离线工作能力
- 易扩展的架构设计
-
系统设计章节应包括:
- 整体框图(建议用Visio绘制)
- 电路原理分析
- 软件流程图
- 安全机制设计
-
测试部分需要:
- 不同材质卡片读取距离测试
- 连续工作稳定性测试
- 极端温度环境测试
5.2 答辩准备建议
-
实物演示注意事项:
- 准备备用电源
- 多张测试卡(M1卡、UID卡)
- 提前录制演示视频作为备用
-
常见答辩问题准备:
- 与传统门禁系统的对比优势
- 数据安全如何保障
- 系统容量和扩展性
-
展示材料建议:
- PCB设计3D效果图
- 代码量统计
- 成本核算明细表
6. 项目扩展方向
这个基础系统还可以进一步扩展:
-
联网升级版:
- 添加ESP8266实现云同步
- 微信小程序管理后台
- 人脸识别双因素认证
-
功能增强版:
- 体温检测联动
- 访客预约系统
- 数据可视化分析
-
低功耗版本:
- 改用STM32L系列MCU
- 太阳能供电系统
- 蓝牙Mesh组网
我在实际部署中发现,系统最关键的还是稳定性。建议在正式使用前进行至少72小时连续压力测试,模拟各种异常情况。另外,卡片数据库要定期备份,最好能实现自动备份到SD卡的功能。