1 系统功能介绍
本系统是基于 STM32F103C8T6 单片机 的智能门禁报警与自动控制系统,综合应用了 热释红外传感器、光敏电阻、LED 照明、LCD1602 显示屏、蜂鸣器、GSM 模块 等多个硬件模块,能够实现门禁管理、智能照明、报警提示和远程短信通知。该系统特别适合家庭、宿舍、办公室等小型安防环境,兼顾了实用性与扩展性。
主要功能如下:
-
热释红外感应检测人员接近:当检测到有人靠近时,LCD1602 显示 "Welcome to home!",夜间自动点亮 9 个高亮 LED 作为照明,无人时自动关闭。
-
拨动开关设定系统状态:主人可选择 "家中有人" 或 "无人" 状态,LCD 屏同步显示状态信息。
- 拨上:显示 "Somebody!",蜂鸣器具备门铃提示功能;
- 拨下:显示 "Nobody!",门铃按下时无任何反应。
-
门外逗留时间检测与报警 :若外来人员在门外长时间停留,系统通过 GSM 模块 发送短信报警。
-
状态指示灯:实时显示门禁状态(有人/无人),增强直观性。
2 系统电路设计
2.1 单片机最小系统
核心为 STM32F103C8T6,具有 ARM Cortex-M3 内核,运行速度可达 72MHz,资源丰富,足以支持多模块并行控制。
- 复位电路:上电自动复位 + 手动复位按键;
- 晶振电路:8MHz 外部晶振,内部倍频 72MHz;
- 电源电路:统一由 5V 供电,通过 AMS1117 稳压芯片转换为 3.3V 供 STM32 使用,外设根据需要使用 3.3V 或 5V。
2.2 热释红外传感器 E18
-
作用:检测是否有人接近门口;
-
原理:人体释放的红外线经 Fresnel 透镜聚焦到传感器上,触发电平变化;
-
接口:输出数字信号(高电平表示有人,低电平表示无人);
-
应用:
- 检测到人 → LCD 显示欢迎词;
- 夜间检测到人 → 自动开灯。
2.3 光敏电阻电路
- 作用:检测环境光照强度,判断是否为夜间;
- 原理:光敏电阻阻值随光照强度变化,通过电阻分压获得模拟电压;
- 接口:STM32 ADC 通道采集电压,转换为光照等级;
- 应用:若光照强度低且检测到人 → 打开 LED 灯。
2.4 高亮 LED 照明模块
- 构成:9 颗高亮 LED 并联,分组驱动;
- 接口:通过 NPN 三极管或 MOSFET 控制开关,由 STM32 GPIO 输出高低电平控制。
- 应用:实现夜间自动开灯与无人时关灯。
2.5 拨动开关电路
-
作用:设定门禁工作模式(有人/无人);
-
接口:一端接 VCC,一端接 GND,中间端接 STM32 GPIO 口;
-
应用:
- 拨上 → LCD 显示 "Somebody!",启用蜂鸣器门铃;
- 拨下 → LCD 显示 "Nobody!",蜂鸣器失效。
2.6 按键电路
-
作用:作为门铃使用,客人按下时触发蜂鸣器;
-
应用:
- 家中有人时,按键触发蜂鸣器响起提示;
- 无人时,按键无效。
2.7 LCD1602 液晶显示模块
-
作用:显示欢迎词、门禁状态、系统提示;
-
接口:使用并口方式连接(D0-D7 数据线,RS、RW、E 控制线);
-
应用:
- 显示 "Welcome to home!";
- 显示系统状态 "Somebody!" / "Nobody!"。
2.8 蜂鸣器报警电路
-
作用:用于门铃提示或报警提示;
-
接口:GPIO 控制三极管驱动有源蜂鸣器;
-
应用:
- 门铃提示(仅在有人模式下有效);
- 长时间逗留触发报警提示。
2.9 GSM 短信模块(SIM800A)
-
作用:通过 AT 指令发送报警短信;
-
接口:STM32 UART 串口通信,波特率 9600bps;
-
应用:
- 检测外来人员在门外逗留时间过长时发送短信报警;
- 短信内容如 "警告:门外有人长时间停留!"。
2.10 状态指示灯
-
作用:通过红/绿指示灯显示门禁状态;
-
应用:
- 绿灯亮:家中有人;
- 红灯亮:家中无人。
3 程序设计
3.1 主程序框架
程序总体流程:
初始化 → 检测拨动开关状态 → 检测红外传感器 → 检测光照强度 → 控制 LCD、LED、蜂鸣器 → GSM 模块报警。
c
#include "stm32f10x.h"
#include "lcd1602.h"
#include "usart.h"
#include "gpio.h"
#include "delay.h"
#include "gsm.h"
uint8_t mode = 0; // 0无人,1有人
uint8_t personDetected = 0;
uint16_t stayCounter = 0;
int main(void)
{
SystemInit();
LCD1602_Init();
USART1_Init(9600);
GPIO_Init_All();
LCD1602_ShowString(0,0,"Smart Door System");
while(1)
{
mode = Read_Switch(); // 读取拨动开关状态
personDetected = Read_PIR(); // 红外检测
if(mode == 1) // 家中有人
{
LCD1602_ShowString(0,1,"Somebody!");
if(Read_Button()) // 门铃
Buzzer_On();
else
Buzzer_Off();
}
else // 无人
{
LCD1602_ShowString(0,1,"Nobody!");
Buzzer_Off();
}
// 夜间自动开灯
if(personDetected)
{
LCD1602_ShowString(0,0,"Welcome to home!");
if(Read_LightSensor() < 2000) // 光照不足
LED_On();
else
LED_Off();
stayCounter++;
if(stayCounter > 5000) // 逗留时间过长
{
GSM_SendMessage("警告:门外有人长时间停留!");
stayCounter = 0;
}
}
else
{
LED_Off();
stayCounter = 0;
}
delay_ms(10);
}
}
3.2 红外检测模块程序
c
uint8_t Read_PIR(void)
{
return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); // 返回1表示有人
}
说明:通过 E18 输出引脚直接读取电平,高电平表示有人经过。
3.3 光敏电阻检测程序
c
uint16_t Read_LightSensor(void)
{
return ADC_Read(ADC_Channel_1); // 返回ADC值,范围0-4095
}
说明:ADC 值越大说明光照越强,夜间阈值约 2000。
3.4 拨动开关读取程序
c
uint8_t Read_Switch(void)
{
return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1); // 1有人模式,0无人模式
}
3.5 门铃按键程序
c
uint8_t Read_Button(void)
{
return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2); // 按下返回1
}
3.6 蜂鸣器控制程序
c
void Buzzer_On(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_10);
}
void Buzzer_Off(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_10);
}
3.7 GSM 短信发送程序
c
void GSM_SendMessage(char *msg)
{
USART_SendString("AT+CMGF=1\r"); // 设置短信文本模式
delay_ms(500);
USART_SendString("AT+CMGS=\"18812345678\"\r"); // 目标号码
delay_ms(500);
USART_SendString(msg);
USART_SendData(USART1, 0x1A); // 发送Ctrl+Z结束符
delay_ms(1000);
}
4 总结
该基于 STM32F103 单片机 的智能门禁系统,通过 热释红外传感器 检测人员接近,通过 光敏电阻 判断昼夜,控制 LED 自动照明 ,结合 拨动开关 切换有人/无人模式,实现了灵活的门禁控制。
系统在有人模式下支持门铃提示,在无人模式下屏蔽门铃,提升安全性。同时,当检测到外来人员在门口长时间逗留时,系统通过 GSM 模块发送短信,实现远程报警功能。
该系统设计结构清晰,功能完整,具备很强的实用性和可扩展性。未来还可进一步增加摄像头模块,实现视频监控,从而打造更完善的智能安防解决方案。