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

1 系统功能介绍

本系统是基于 STM32F103C8T6 单片机 的智能门禁报警与自动控制系统,综合应用了 热释红外传感器、光敏电阻、LED 照明、LCD1602 显示屏、蜂鸣器、GSM 模块 等多个硬件模块,能够实现门禁管理、智能照明、报警提示和远程短信通知。该系统特别适合家庭、宿舍、办公室等小型安防环境,兼顾了实用性与扩展性。

主要功能如下:

  1. 热释红外感应检测人员接近:当检测到有人靠近时,LCD1602 显示 "Welcome to home!",夜间自动点亮 9 个高亮 LED 作为照明,无人时自动关闭。

  2. 拨动开关设定系统状态:主人可选择 "家中有人" 或 "无人" 状态,LCD 屏同步显示状态信息。

    • 拨上:显示 "Somebody!",蜂鸣器具备门铃提示功能;
    • 拨下:显示 "Nobody!",门铃按下时无任何反应。
  3. 门外逗留时间检测与报警 :若外来人员在门外长时间停留,系统通过 GSM 模块 发送短信报警。

  4. 状态指示灯:实时显示门禁状态(有人/无人),增强直观性。


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 模块发送短信,实现远程报警功能。

该系统设计结构清晰,功能完整,具备很强的实用性和可扩展性。未来还可进一步增加摄像头模块,实现视频监控,从而打造更完善的智能安防解决方案。

相关推荐
Ronin-Lotus5 分钟前
嵌入式硬件篇---Buck&Boost电路
单片机·嵌入式硬件
清风6666663 小时前
基于51单片机自动智能浇花系统设计
stm32·单片机·嵌入式硬件·毕业设计·课程设计
玖別ԅ(¯﹃¯ԅ)5 小时前
ADC的实现(单通道,多通道,DMA)
stm32·单片机·嵌入式硬件
anghost1507 小时前
基于单片机的防酒驾系统设计
单片机·嵌入式硬件·毕业设计·流程图
AI+程序员在路上7 小时前
单片机驱动LCD显示模块LM6029BCW
c语言·单片机·嵌入式硬件
ye1501277745512 小时前
DC6v-36V转3.2V1A恒流驱动芯片WT7017
单片机·嵌入式硬件·其他
scilwb1 天前
RoboCon考核题——scilwb
单片机
点灯小铭1 天前
基于STM32单片机智能RFID刷卡汽车位锁桩设计
stm32·单片机·汽车·毕业设计·课程设计
bai5459361 天前
STM32 软件I2C读写MPU6050
stm32·单片机·嵌入式硬件