基于51单片机的室内烟雾温度与人体监测报警系统设计
点击链接下载资料:https://download.csdn.net/download/m0_51061483/91698894
1. 系统功能介绍
本系统是一款基于STC89C52单片机的智能环境监测与安全报警装置,主要实现对室内烟雾浓度、温度以及人员活动的综合检测与报警功能。系统能够实时采集温度与烟雾传感器的数据,并通过红外人体感应模块判断室内是否有人。当监测到温度或烟雾浓度超过设定阈值时,系统会自动触发蜂鸣器和LED灯进行声光报警,以提醒用户及时采取安全措施。
此外,系统还提供了可调节功能,用户可以通过按键自由设置温度和烟雾报警阈值,以适应不同环境的安全标准。所有实时数据与状态信息通过LCD1602液晶显示模块显示,包括温度值、烟雾浓度、当前阈值、人体检测状态以及报警状态等。该系统广泛适用于家庭、实验室、仓库等需要进行环境安全监测的场所,具有良好的实用性与扩展性。
系统总体功能如下:
- 实时采集环境温度与烟雾浓度;
- 检测是否存在人员活动;
- 支持按键设置温度与烟雾报警阈值;
- 当超出阈值时蜂鸣器报警并点亮LED警示灯;
- LCD1602显示各项实时监测数据与系统状态。
2. 系统电路设计
整个系统以STC89C52单片机为核心控制单元,外围电路包括电源电路、温度检测电路、烟雾检测电路、红外人体检测电路、显示电路、按键输入电路以及报警输出电路等。各模块之间通过单片机的I/O口实现数据采集与控制信号交互。
2.1 主控制模块(单片机最小系统)
本系统采用STC89C52单片机作为核心控制器。该单片机内部集成了丰富的外设资源,包括定时器/计数器、串行通信接口、中断控制系统等,适合用于多传感器信号采集与逻辑控制。最小系统电路主要包括:
- 时钟电路:采用12MHz晶振电路,提供稳定的系统工作时钟。
- 复位电路:由电容、电阻与按钮组成的上电复位与手动复位电路,保证系统上电后进入初始状态。
- 电源部分:系统采用+5V直流电源供电,可通过稳压芯片7805获得稳定电压。
单片机的各I/O口用于连接外部模块,如P0口连接LCD1602、P1口连接传感器模块、P2口连接按键输入、P3口连接蜂鸣器和LED等。该结构清晰、易于扩展。
2.2 温度检测模块(DS18B20)
温度检测部分采用数字温度传感器DS18B20。该传感器内部集成A/D转换器,输出为数字信号,不需要外部信号放大与滤波电路,抗干扰能力强,测温范围广(-55℃~125℃),精度可达±0.5℃。
DS18B20采用单总线通信方式,只需占用单片机的一个I/O口即可完成通信。系统通过读取DS18B20的数字数据并进行转换,即可获取实时温度值。该模块的主要功能包括:
- 周期性读取温度数据;
- 对数据进行格式化处理;
- 与设定阈值进行比较并判断是否报警。
2.3 烟雾检测模块(MQ-2)
烟雾检测部分使用MQ-2气体传感器。该传感器能够检测可燃性气体与烟雾浓度,其输出为模拟电压信号,需经过A/D转换后才能由单片机读取。由于51单片机本身不具备A/D转换功能,因此系统采用外接A/D芯片(如ADC0832)完成采样。
该模块的工作流程如下:
- MQ-2传感器输出与烟雾浓度成比例的模拟电压信号;
- ADC0832将模拟电压转换为数字信号;
- 单片机读取数据并与预设阈值比较,判断是否进入报警状态。
烟雾检测模块设计时需注意电源稳定性与预热时间(约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 主程序设计
主程序是系统的核心控制逻辑,主要任务是完成系统初始化、周期性读取传感器数据、阈值判断与报警控制。主程序流程如下:
- 初始化各外设模块;
- 周期性读取温度、烟雾、人体状态;
- 比较数据与阈值并判断是否报警;
- 更新LCD显示;
- 响应按键操作并调整设定值。
主程序部分代码如下:
#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模块实现远程报警与监控,具备良好的可扩展性和实际应用价值。整体设计简洁高效,既可作为智能家居环境安全的基础方案,也适合作为电子信息专业学生的毕业设计项目。
2086

被折叠的 条评论
为什么被折叠?



