基于STM32F103单片机智能门禁热释人体感应报警设计

1 系统功能介绍

本设计基于 STM32F103C8T6 单片机,通过多种传感器、执行器以及通信模块实现智能门禁和安防报警功能。其主要功能是检测门外人员情况,结合环境光照强度判断是否需要照明,同时结合 GSM 模块在异常情况下发送报警信息,为家庭安全提供保障。整个系统不仅具备基础的门禁迎宾功能,还增加了夜间照明、主人状态设置、门铃提示、逗留报警等智能化特性。

系统整体由以下部分组成:

  1. 核心控制电路:以 STM32F103C8T6 单片机为核心,负责对各模块的数据采集与逻辑控制。
  2. 人体感应电路:采用热释红外传感器 E18,用于检测是否有人靠近门口。
  3. 光照检测电路:通过光敏电阻检测环境光照强度,结合逻辑控制自动开关 LED 灯。
  4. 照明模块:由 9 个高亮 LED 灯组成,夜间有人靠近自动点亮,白天或无人时自动关闭。
  5. 液晶显示模块:采用 LCD1602 显示系统状态、提示欢迎语、门禁状态等信息。
  6. 蜂鸣器电路:作为门铃提示装置和报警提示装置,结合主人状态设置实现不同功能。
  7. 拨动开关与按键电路:主人可通过拨动开关设置家庭状态(有人/无人),客人通过按键(门铃)触发提示。
  8. 状态指示灯:用于直观显示当前系统处于有人模式还是无人模式。
  9. GSM 通信模块:通过 SIM800A 模块在检测到人员逗留过久时发送报警短信给主人。
  10. 电源电路:为系统稳定供电,提供 5V 和 3.3V 电压输出。

整体功能概括如下:

  • 迎宾与照明功能:当热释红外传感器检测到人员靠近,LCD 显示"Welcome to home!",若为夜间,自动点亮 LED 灯。
  • 门禁状态切换:主人可通过拨动开关选择"有人"或"无人"模式,LCD1602 实时显示对应状态。
  • 门铃提示:当系统处于"有人"模式时,按下门铃,蜂鸣器鸣叫提示;若处于"无人"模式,门铃按下无效。
  • 逗留报警功能:若检测到人员在门口停留超过设定时间,系统通过蜂鸣器报警并向主人手机发送短信提示。
  • 状态指示:通过 LED 指示灯明确显示当前系统模式。

该系统集成了门禁、照明与报警功能,结合 GSM 短信远程报警,具备实用性和智能化特点。


2 系统电路设计

2.1 单片机最小系统电路

STM32F103C8T6 作为核心控制芯片,主要负责:

  • 与传感器通信,获取人体感应与光照数据;
  • 驱动 LCD1602 显示状态;
  • 控制继电器或驱动电路点亮高亮 LED;
  • 控制蜂鸣器进行提示与报警;
  • 与 GSM 模块通信实现短信发送。

其最小系统包括:

  • 晶振电路:采用 8MHz 外部晶振,保证系统稳定运行。
  • 复位电路:上电复位和手动复位功能,保证系统可靠性。
  • 电源电路:单片机工作电压 3.3V,由电源电路转换得到。

2.2 热释红外传感器电路(E18)

  • 工作原理:E18 热释红外传感器能够检测人体红外辐射变化,从而判断是否有人进入监控区域。

  • 功能作用:当检测到人员时,单片机接收到高电平信号,触发 LCD 提示与灯光控制逻辑。

  • 应用逻辑

    • 白天有人:LCD 显示欢迎词,不点亮灯。
    • 夜间有人:LCD 显示欢迎词,并点亮 9 个高亮 LED 灯。
    • 无人:灯光关闭,LCD 显示默认状态。

2.3 光敏电阻电路

  • 工作原理:光敏电阻阻值随光照强度变化。通过与电阻分压,将电压信号送入 ADC 通道,单片机即可判断环境亮度。
  • 功能作用:用于判断当前是否为夜间环境。若光照低于设定阈值,则认定为夜间,触发照明逻辑。

2.4 高亮 LED 灯照明电路

  • 电路构成:9 个高亮 LED 灯,通常通过 MOSFET 或三极管驱动,以避免单片机直接承受过大电流。
  • 功能作用:为夜间来访人员提供照明,提高安全性与便利性。

2.5 液晶显示模块电路(LCD1602)

  • 接口方式:采用 4 位数据接口模式节省 IO 口资源。

  • 显示内容

    • 人体检测提示:Welcome to home!
    • 状态显示:Somebody! 或 Nobody!
    • 报警提示:Alarm!
  • 功能作用:直观显示门禁系统当前状态,提升人机交互体验。


2.6 蜂鸣器电路

  • 电路构成:采用有源蜂鸣器,单片机通过 IO 口输出高低电平控制。

  • 功能作用

    • 当处于"有人"模式且有人按下门铃时,发出提示音。
    • 当检测到逗留超时,发出报警音。
    • 在无人模式时,按下门铃无提示音。

2.7 拨动开关与按键电路

  • 拨动开关:用于设置家庭状态。

    • 拨上:LCD 显示 Somebody!,进入有人模式。
    • 拨下:LCD 显示 Nobody!,进入无人模式。
  • 按键:模拟门铃功能,当处于有人模式时触发蜂鸣器鸣叫。


2.8 状态指示灯电路

  • 功能作用:直观显示系统状态。

    • 有人模式:状态指示灯常亮。
    • 无人模式:状态指示灯熄灭。

2.9 GSM 通信模块电路(SIM800A)

  • 功能作用:通过 AT 指令与 STM32F103 通信,当检测到有人逗留超过设定时间,自动发送报警短信。
  • 通信方式:UART 串口通信,波特率设置为 9600bps。
  • 应用场景:增强安防功能,使用户在外也能第一时间获知异常情况。

2.10 电源电路

  • 功能作用:为单片机及外围模块提供稳定电压。
  • 电路构成:采用 AMS1117-3.3 稳压芯片提供 3.3V 电压,继电器、蜂鸣器与 GSM 模块则由 5V 供电。

3 程序设计

3.1 主程序框架

c 复制代码
#include "stm32f10x.h"
#include "lcd1602.h"
#include "dht11.h"
#include "esp8266.h"
#include "relay.h"
#include "sim800a.h"
#include "led.h"
#include "key.h"

int main(void)
{
    SystemInit();
    LCD_Init();
    LED_Init();
    Key_Init();
    Buzzer_Init();
    GSM_Init();
    Sensor_Init();

    while(1)
    {
        HumanDetect_Task();
        LightControl_Task();
        DoorBell_Task();
        Alarm_Task();
    }
}

主程序完成各模块初始化,并在循环中调用任务函数,实现模块化运行。


3.2 人体感应检测程序

c 复制代码
void HumanDetect_Task(void)
{
    if(E18_Detected())
    {
        LCD_ShowString(0,0,"Welcome to home!");
        if(Light_Level() < THRESHOLD) LED_On();
    }
    else
    {
        LCD_Clear();
        LCD_ShowString(0,0,"Nobody!");
        LED_Off();
    }
}

通过红外传感器检测是否有人,并结合光照强度自动开灯或关灯。


3.3 门禁状态设定程序

c 复制代码
void Mode_Set(void)
{
    if(SWITCH_STATE == 1)
    {
        LCD_ShowString(1,0,"Somebody!");
        MODE = 1;
        StatusLED_On();
    }
    else
    {
        LCD_ShowString(1,0,"Nobody!");
        MODE = 0;
        StatusLED_Off();
    }
}

通过拨动开关切换家庭状态,LCD 显示相应内容。


3.4 门铃控制程序

c 复制代码
void DoorBell_Task(void)
{
    if(MODE == 1 && KEY_Pressed())
    {
        Buzzer_On();
        Delay_ms(500);
        Buzzer_Off();
    }
}

仅在"有人"模式下,按下门铃才有提示音。


3.5 逗留报警程序

c 复制代码
int stay_time = 0;

void Alarm_Task(void)
{
    if(E18_Detected())
    {
        stay_time++;
        if(stay_time > STAY_LIMIT)
        {
            Buzzer_On();
            GSM_SendSMS("Alarm! Someone stays too long at the door!");
        }
    }
    else
    {
        stay_time = 0;
        Buzzer_Off();
    }
}

当检测到人员停留超过设定阈值时间,触发蜂鸣器报警并通过 GSM 发送短信。


3.6 GSM 短信发送程序

c 复制代码
void GSM_SendSMS(char *msg)
{
    USART_SendString("AT+CMGF=1\r\n");    // 设置短信为文本模式
    Delay_ms(100);
    USART_SendString("AT+CMGS=\"+8613812345678\"\r\n"); // 目标手机号
    Delay_ms(100);
    USART_SendString(msg);
    USART_SendData(0x1A);  // 发送Ctrl+Z结束
}

利用 SIM800A 模块,通过 AT 指令实现短信发送。


4 总结

本设计基于 STM32F103 单片机,实现了一个功能完备的智能门禁系统。其特点包括:

  1. 人体感应与迎宾功能:通过热释红外传感器检测人员靠近,并通过 LCD 显示欢迎信息。
  2. 智能照明控制:结合光敏电阻实现夜间自动照明,提高便利性。
  3. 门禁状态切换:通过拨动开关区分"有人/无人"模式,提升系统灵活性。
  4. 智能门铃提示:仅在有人模式下生效,避免无效干扰。
  5. 逗留报警功能:检测到门外人员逗留过久时,蜂鸣器报警并通过 GSM 模块发送短信。
  6. 状态直观:通过 LCD 和 LED 指示灯实时显示系统运行状态。
  7. 可靠性与扩展性:采用模块化设计,便于后续功能扩展,如增加人脸识别、摄像头监控等。

该系统集成了安防、照明、门禁三大功能,为家庭安全提供了一个实用、低成本且可扩展的解决方案。