目录
- 引言
- 项目背景
- 环境准备
- 硬件准备
- 软件安装与配置
- 系统设计
- 系统架构
- 关键技术
- 代码示例
- 密码验证模块
- 电机控制实现
- 门禁状态监控
- 应用场景
- 结论
1. 引言
智能门禁系统能够通过密码或其他验证方式(如指纹、刷卡等)控制门的开关,结合电机控制与状态监控,可以提高门禁的安全性和便利性。基于STM32的智能门禁系统设计简单高效,能够灵活扩展至多种验证方式。
2. 项目背景
随着对安全的要求不断提高,传统机械锁的不足日益明显。智能门禁系统不仅可以通过数字验证提高安全性,还可以增加方便的用户管理功能。基于STM32的智能门禁系统采用密码验证作为核心功能,通过电机控制开关门锁,并实时监控门的状态,适用于家庭、办公室和公共建筑等场景。
3. 环境准备
硬件准备
- STM32开发板:STM32F103或类似微控制器
- 按键模块:用于输入密码
- 电机:用于控制门的开关(如舵机或直流电机)
- OLED显示屏:显示系统状态和密码输入
- 蜂鸣器:提供音效反馈(如密码错误提示)
- 面包板及连接线:用于硬件连接
- 电源:为系统提供电力
软件安装与配置
- Keil uVision:用于编写和编译代码。
- STM32CubeMX:用于配置STM32的引脚和外设。
- ST-Link Utility:用于下载代码到STM32开发板中。
4. 系统设计
系统架构
智能门禁系统设计包括以下模块:
- 密码验证模块:用户通过按键输入密码,并与预设密码进行比对,正确后触发开门。
- 电机控制模块:通过控制电机实现门锁的开关操作。
- 状态监控模块:实时监控门的状态(开/关),并通过OLED显示系统状态。
- 音效反馈模块:当用户输入错误密码或系统故障时,蜂鸣器发出警报。
关键技术
- 密码验证:用户通过按键输入密码,与预设密码进行匹配验证,匹配成功后触发开门操作。
- 电机控制:通过控制舵机或直流电机,实现门的自动开关。
- 显示反馈:通过OLED屏幕实时显示当前的系统状态,如密码输入、门状态等。
- 安全控制:在多次密码输入错误时,系统会触发报警或锁定功能。
5. 代码示例
密码验证模块
#include "stm32f1xx_hal.h"
#include <string.h>
char correct_password[] = "1234"; // 预设密码
char input_password[5]; // 用户输入的密码
int input_index = 0;
// 按键输入处理
void Keypad_Handler(char key) {
if (key >= '0' && key <= '9') {
input_password[input_index++] = key;
if (input_index == 4) {
input_password[4] = '\0'; // 加上字符串结束符
input_index = 0; // 重置输入索引
}
}
}
// 验证密码
int Validate_Password(void) {
if (strcmp(input_password, correct_password) == 0) {
return 1; // 密码正确
} else {
return 0; // 密码错误
}
}
电机控制实现
// 初始化电机控制(如舵机)
void Motor_Init(void) {
// 配置PWM引脚
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 初始化TIM2用于PWM控制
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 72 - 1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1000 - 1;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htim2);
// 配置PWM通道
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}
// 开门操作
void Open_Door(void) {
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 800); // 设置PWM占空比打开门
HAL_Delay(2000); // 保持门打开2秒
}
// 关门操作
void Close_Door(void) {
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 200); // 设置PWM占空比关闭门
}
门禁状态监控
// 初始化蜂鸣器
void Buzzer_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
// 蜂鸣器提示
void Buzzer_Beep(void) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 打开蜂鸣器
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭蜂鸣器
}
// OLED显示状态
void OLED_Display_Status(char* status) {
// 此处为OLED显示屏的显示函数
OLED_Clear();
OLED_ShowString(0, 0, status);
}
// 主程序
int main(void) {
HAL_Init();
Motor_Init();
Buzzer_Init();
while (1) {
if (Validate_Password()) {
OLED_Display_Status("Access Granted");
Open_Door();
HAL_Delay(3000); // 保持门打开3秒
Close_Door();
} else {
OLED_Display_Status("Access Denied");
Buzzer_Beep(); // 密码错误提示
}
HAL_Delay(1000); // 1秒钟后重新接受输入
}
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
问题讨论,stm32的资料领取可以私信!
6. 应用场景
- 家庭门禁:可以应用在家庭中,保障家庭成员的安全,避免外来人员随意进入。
- 办公室门禁:用于企业办公室,保护办公区安全,允许特定人员进入。
- 公共建筑门禁:应用于公共场所,如实验室、会议室等,通过密码或其他验证方式控制进入权限。
7. 结论
基于STM32的智能门禁系统通过密码验证结合电机控制,实现了对门的安全管理。该系统设计灵活,可扩展为指纹、RFID卡等多种验证方式,适用于家庭、办公室和公共场所的安全需求。