基于51单片机的室内烟雾温度与人体监测报警系统设计

基于51单片机的室内烟雾温度与人体监测报警系统设计

点击链接下载资料:https://download.csdn.net/download/m0_51061483/91698894

1. 系统功能介绍

本系统是一款基于STC89C52单片机的智能环境监测与安全报警装置,主要实现对室内烟雾浓度、温度以及人员活动的综合检测与报警功能。系统能够实时采集温度与烟雾传感器的数据,并通过红外人体感应模块判断室内是否有人。当监测到温度或烟雾浓度超过设定阈值时,系统会自动触发蜂鸣器和LED灯进行声光报警,以提醒用户及时采取安全措施。

此外,系统还提供了可调节功能,用户可以通过按键自由设置温度和烟雾报警阈值,以适应不同环境的安全标准。所有实时数据与状态信息通过LCD1602液晶显示模块显示,包括温度值、烟雾浓度、当前阈值、人体检测状态以及报警状态等。该系统广泛适用于家庭、实验室、仓库等需要进行环境安全监测的场所,具有良好的实用性与扩展性。

系统总体功能如下:

  1. 实时采集环境温度与烟雾浓度;
  2. 检测是否存在人员活动;
  3. 支持按键设置温度与烟雾报警阈值;
  4. 当超出阈值时蜂鸣器报警并点亮LED警示灯;
  5. LCD1602显示各项实时监测数据与系统状态。

2. 系统电路设计

整个系统以STC89C52单片机为核心控制单元,外围电路包括电源电路、温度检测电路、烟雾检测电路、红外人体检测电路、显示电路、按键输入电路以及报警输出电路等。各模块之间通过单片机的I/O口实现数据采集与控制信号交互。

2.1 主控制模块(单片机最小系统)

本系统采用STC89C52单片机作为核心控制器。该单片机内部集成了丰富的外设资源,包括定时器/计数器、串行通信接口、中断控制系统等,适合用于多传感器信号采集与逻辑控制。最小系统电路主要包括:

  1. 时钟电路:采用12MHz晶振电路,提供稳定的系统工作时钟。
  2. 复位电路:由电容、电阻与按钮组成的上电复位与手动复位电路,保证系统上电后进入初始状态。
  3. 电源部分:系统采用+5V直流电源供电,可通过稳压芯片7805获得稳定电压。

单片机的各I/O口用于连接外部模块,如P0口连接LCD1602、P1口连接传感器模块、P2口连接按键输入、P3口连接蜂鸣器和LED等。该结构清晰、易于扩展。


2.2 温度检测模块(DS18B20)

温度检测部分采用数字温度传感器DS18B20。该传感器内部集成A/D转换器,输出为数字信号,不需要外部信号放大与滤波电路,抗干扰能力强,测温范围广(-55℃~125℃),精度可达±0.5℃。

DS18B20采用单总线通信方式,只需占用单片机的一个I/O口即可完成通信。系统通过读取DS18B20的数字数据并进行转换,即可获取实时温度值。该模块的主要功能包括:

  1. 周期性读取温度数据;
  2. 对数据进行格式化处理;
  3. 与设定阈值进行比较并判断是否报警。

2.3 烟雾检测模块(MQ-2)

烟雾检测部分使用MQ-2气体传感器。该传感器能够检测可燃性气体与烟雾浓度,其输出为模拟电压信号,需经过A/D转换后才能由单片机读取。由于51单片机本身不具备A/D转换功能,因此系统采用外接A/D芯片(如ADC0832)完成采样。

该模块的工作流程如下:

  1. MQ-2传感器输出与烟雾浓度成比例的模拟电压信号;
  2. ADC0832将模拟电压转换为数字信号;
  3. 单片机读取数据并与预设阈值比较,判断是否进入报警状态。

烟雾检测模块设计时需注意电源稳定性与预热时间(约2分钟),确保检测精度。


2.4 红外人体检测模块

红外检测部分采用常见的被动红外传感器(PIR),用于检测室内是否存在活动人员。该模块通过感应人体红外辐射变化来判断是否有人活动,其输出为高低电平信号,逻辑清晰易于单片机读取。

系统通过定时读取该模块输出,当检测到高电平时认为有人存在,并在LCD上显示“有人”状态,否则显示“无人”。该模块可用于安全监测场景中判断是否为人为引发的警情。


2.5 显示模块(LCD1602)

LCD1602是一个常用的字符型液晶显示器,能够显示两行共16个字符的信息。系统通过4位或8位数据总线与单片机通信,显示的内容包括温度值、烟雾浓度、阈值设定、人体状态以及报警提示。

LCD初始化时需发送特定的命令字以设定显示模式,然后周期性更新显示内容。显示模块不仅增强系统的交互性,还方便用户直观了解环境状况。


2.6 按键设置模块

系统设置部分通过矩阵按键实现,主要用于调节温度与烟雾浓度报警阈值。用户可通过“加”“减”“确认”等按键对阈值进行修改并保存。

按键模块采用独立式结构,每个按键通过上拉电阻与单片机I/O口相连。软件中通过检测按键的电平变化判断按键动作,并加入延时消抖算法以避免误触发。


2.7 报警模块

报警部分由蜂鸣器与LED指示灯组成。当系统检测到温度或烟雾超限时,单片机输出高电平驱动蜂鸣器鸣叫,同时点亮红色LED,实现声光报警。

蜂鸣器采用有源类型,便于控制;LED可通过限流电阻直接由单片机控制。报警持续时间与频率均可通过软件设置,以便实现不同的提示方式。


3. 系统程序设计

程序部分采用C语言编写,基于Keil uVision环境开发。软件结构采用模块化设计,主要包括主程序、温度采集模块、烟雾采集模块、红外检测模块、显示模块、按键设置模块和报警控制模块。系统通过定时器中断实现周期性数据采集与更新。


3.1 主程序设计

主程序是系统的核心控制逻辑,主要任务是完成系统初始化、周期性读取传感器数据、阈值判断与报警控制。主程序流程如下:

  1. 初始化各外设模块;
  2. 周期性读取温度、烟雾、人体状态;
  3. 比较数据与阈值并判断是否报警;
  4. 更新LCD显示;
  5. 响应按键操作并调整设定值。

主程序部分代码如下:

#include <reg52.h>
#include "lcd1602.h"
#include "ds18b20.h"
#include "adc0832.h"
#include "key.h"

unsigned int temp_limit = 40;
unsigned int smoke_limit = 150;
unsigned int temp_value, smoke_value;
bit alarm_flag = 0;

void main()
{
    LCD_Init();
    DS18B20_Init();
    ADC0832_Init();
    Key_Init();

    while(1)
    {
        temp_value = DS18B20_ReadTemp();
        smoke_value = ADC0832_Read();

        if(temp_value > temp_limit || smoke_value > smoke_limit)
        {
            alarm_flag = 1;
            P2 = 0xFF; //蜂鸣器与LED报警
        }
        else
        {
            alarm_flag = 0;
            P2 = 0x00;
        }

        LCD_Show(temp_value, smoke_value, alarm_flag);
        Key_Scan();
    }
}

3.2 温度检测模块程序

DS18B20模块采用单总线通信方式,通过复位脉冲、命令字发送、数据读取等过程实现。核心代码如下:

unsigned int DS18B20_ReadTemp(void)
{
    unsigned char tempL, tempH;
    int temp;
    DS18B20_Reset();
    DS18B20_WriteByte(0xCC);
    DS18B20_WriteByte(0x44);
    DelayMs(500);
    DS18B20_Reset();
    DS18B20_WriteByte(0xCC);
    DS18B20_WriteByte(0xBE);
    tempL = DS18B20_ReadByte();
    tempH = DS18B20_ReadByte();
    temp = (tempH << 8) | tempL;
    temp = temp * 0.625; //转换为摄氏度
    return temp;
}

3.3 烟雾检测模块程序

MQ-2输出的模拟信号通过ADC0832进行采样转换,得到数字化的烟雾浓度数据。

unsigned int ADC0832_Read(void)
{
    unsigned int value;
    // SPI通信模拟读取ADC0832
    value = Read_ADC0832_Channel0();
    return value;
}

通过将采样值与烟雾阈值比较,判断是否需要触发报警。


3.4 红外人体检测模块程序

红外模块的输出信号直接接入单片机I/O口,例如P3.3。当检测到高电平时表示有人存在。

bit Check_Human(void)
{
    if(P3_3 == 1)
        return 1;
    else
        return 0;
}

系统根据返回值在LCD上显示“有人”或“无人”状态。


3.5 显示模块程序

LCD1602显示模块负责显示实时信息,包括温度、烟雾浓度、报警状态和人体检测结果。

void LCD_Show(unsigned int temp, unsigned int smoke, bit alarm)
{
    LCD_SetCursor(0,0);
    LCD_WriteString("T:");
    LCD_WriteInt(temp);
    LCD_WriteString("C ");

    LCD_WriteString("S:");
    LCD_WriteInt(smoke);

    LCD_SetCursor(0,1);
    if(alarm)
        LCD_WriteString("ALARM!");
    else
        LCD_WriteString("NORMAL");
}

3.6 按键设置模块程序

用户可通过按键设置温度与烟雾阈值。按键扫描函数如下:

void Key_Scan(void)
{
    if(KEY1 == 0)
    {
        DelayMs(20);
        if(KEY1 == 0) temp_limit++;
    }
    if(KEY2 == 0)
    {
        DelayMs(20);
        if(KEY2 == 0) smoke_limit++;
    }
    if(KEY3 == 0)
    {
        DelayMs(20);
        if(KEY3 == 0) temp_limit--;
    }
}

3.7 报警控制模块程序

当检测到报警条件成立时,系统会驱动蜂鸣器与LED灯提示用户。

void Alarm_Control(bit flag)
{
    if(flag)
    {
        BUZZER = 0;
        LED = 0;
    }
    else
    {
        BUZZER = 1;
        LED = 1;
    }
}

4. 系统工作原理总结

本系统通过多传感器协同检测,实现了室内环境温度、烟雾浓度及人员活动的智能监测。温度与烟雾传感器提供实时数据,红外模块辅助判断室内是否存在人员;LCD显示模块提供直观的数据显示;按键模块实现阈值灵活设置;报警模块在安全风险出现时及时提醒用户。

系统不仅能独立运行,还可通过扩展WiFi或GSM模块实现远程报警与监控,具备良好的可扩展性和实际应用价值。整体设计简洁高效,既可作为智能家居环境安全的基础方案,也适合作为电子信息专业学生的毕业设计项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值