基于51单片机温度、烟雾、火焰检测的火灾着火报警毕业设计
摘要
本项目设计并实现了一个基于51单片机的火灾着火报警系统,该系统集成了温度、烟雾和火焰检测功能,用于实时监测环境安全状况。系统采用了LCD1602显示屏用于直观展示当前温度、火焰状态以及系统状态,同时配备了DS18B20温度传感器用于精确测量环境温度,火焰传感器用于检测火焰的存在。此外,系统还通过按键控制驱动继电器,以实现对外部设备的控制,如启动报警器等。
在硬件设计方面,系统以51单片机为核心控制器,通过连接DS18B20温度传感器、火焰传感器以及LCD1602显示屏等模块,构建了一个完整的火灾检测与报警系统。同时,通过按键模块实现对继电器的控制,使得系统能够根据用户需求进行相应的操作。
在软件设计方面,本系统采用C语言进行编程,实现了数据的采集、处理、显示以及报警控制等功能。系统首先初始化各个模块,然后循环读取DS18B20温度传感器和火焰传感器的数据,根据预设的阈值判断是否存在火灾隐患。若检测到异常,系统将通过LCD1602显示屏显示报警信息,并驱动继电器控制外部设备(如报警器)进行报警。同时,用户还可以通过按键模块控制继电器的开关,实现手动报警或关闭报警。
经过实际测试,本系统能够准确检测环境温度、火焰状态,并在检测到火灾隐患时及时发出报警信号。LCD1602显示屏能够实时显示相关信息,方便用户了解当前环境状况。此外,按键模块使得系统操作更加灵活方便,用户可以根据需要控制继电器的开关。
综上所述,本毕业设计实现了一个基于51单片机的温度、烟雾与火焰检测火灾报警系统,该系统具有结构简单、成本低廉、功能齐全等优点,可广泛应用于家庭、工厂、仓库等场所的火灾预警和防范。通过本次设计,不仅提高了我的实践能力,也加深了我对单片机和传感器技术的理解。
一、项目概述
本项目旨在设计一款基于51单片机的火灾着火报警系统。该系统能够实时检测环境温度、烟雾浓度以及火焰状态,一旦检测到异常情况,便会触发报警并驱动继电器进行相应操作。系统采用LCD1602显示屏实时显示相关信息,使用DS18B20温度传感器进行温度检测,火焰传感器进行火焰检测,并通过按键控制驱动继电器。
二、系统组成
- 硬件部分
- 51单片机:作为系统的核心控制器,负责接收传感器数据、处理数据、控制报警和继电器驱动。
- LCD1602显示屏:用于实时显示温度、烟雾浓度、火焰状态等信息。
- DS18B20温度传感器:用于实时监测环境温度,并将数据发送给单片机。
- 火焰传感器:用于检测火焰状态,并将数据发送给单片机。
- 烟雾传感器:用于检测烟雾浓度,并将数据发送给单片机。
- 继电器:根据单片机的控制信号,驱动外部设备(如报警器、灭火器等)进行相应操作。
- 按键:用于手动控制继电器的开关。
- 软件部分
- C语言:作为系统的编程语言,实现数据的采集、处理、显示和报警控制。
- LCD1602驱动库:用于实现LCD1602显示屏的初始化、清屏、显示文本等功能。
- DS18B20温度传感器驱动:用于读取DS18B20温度传感器的数据。
- 火焰传感器和烟雾传感器驱动:用于读取火焰传感器和烟雾传感器的数据。
三、系统设计
- 硬件设计
- 将DS18B20温度传感器、火焰传感器和烟雾传感器分别连接到51单片机的相应引脚上,以便单片机能够读取传感器的数据。
- 将LCD1602显示屏连接到单片机的I/O口上,用于实时显示信息。
- 将继电器的控制线连接到单片机的输出引脚上,以便单片机能够控制继电器的开关。
- 将按键连接到单片机的输入引脚上,以便单片机能够接收按键的输入信号。
- 软件设计
- 初始化LCD1602显示屏和各个传感器。
- 循环读取DS18B20温度传感器、火焰传感器和烟雾传感器的数据。
- 根据读取到的数据判断是否有火灾发生,如果有则触发报警并驱动继电器进行相应操作。
- 通过LCD1602显示屏实时显示温度、烟雾浓度、火焰状态等信息。
- 实现按键控制继电器的功能,即按一下按键控制继电器开,再按一下按键控制继电器关。
四、系统测试
在实际环境中进行系统测试,验证系统的稳定性和可靠性。测试内容包括:
- 温度检测功能测试:测试系统能否正确读取DS18B20温度传感器的数据,并在LCD1602显示屏上正确显示。
- 火焰检测功能测试:测试系统能否正确读取火焰传感器的数据,并在检测到火焰时触发报警。
- 烟雾检测功能测试:测试系统能否正确读取烟雾传感器的数据,并在检测到烟雾时触发报警。
- 继电器控制功能测试:测试系统能否通过按键正确控制继电器的开关。
五、总结与展望
一、总结
本次基于51单片机的温度、烟雾、火焰检测火灾报警系统设计旨在构建一个功能全面、响应迅速的火灾预防与报警系统。通过采用LCD1602显示屏、DS18B20温度传感器、火焰传感器等核心组件,结合按键控制驱动继电器,该系统能够实时监测环境温度、火焰状态,并通过显示屏直观展示相关信息。在检测到火灾隐患时,系统能够迅速触发报警,并通过继电器控制外部设备,如报警器、灭火器等,实现火灾的初步控制。
在系统设计与实现过程中,我们取得了以下成果:
- 硬件设计合理:系统硬件部分采用了成熟的51单片机作为核心控制器,结合DS18B20温度传感器和火焰传感器,实现了对温度、火焰状态的实时监测。同时,LCD1602显示屏和按键模块为用户提供了友好的交互界面。
- 软件编程可靠:我们采用C语言编写系统程序,实现了数据的采集、处理、显示和报警控制等功能。程序逻辑清晰,运行稳定可靠,能够满足系统的各项要求。
- 功能实现完善:系统能够实时监测环境温度、火焰状态,并在检测到火灾隐患时触发报警。同时,通过继电器控制外部设备,实现了对火灾的初步控制。此外,系统还具备按键控制功能,方便用户进行设备控制和系统设置。
- 实用性高:该系统结构简单、成本低廉、易于实现,可广泛应用于家庭、工厂、仓库等场所的火灾预警和防范。其准确可靠的性能为人们的生命财产安全提供了有力保障。
二、展望
尽管本次设计的火灾报警系统已经具备了一定的实用性和可靠性,但仍存在一些改进和扩展的空间:
- 增加烟雾检测功能:目前系统仅支持温度和火焰检测,未来可以加入烟雾传感器,实现对烟雾浓度的实时监测,进一步提高系统的火灾预警能力。
- 优化报警方式:目前系统主要通过声光报警器进行报警,未来可以探索更多样化的报警方式,如短信通知、电话呼叫等,以便更及时地将火灾信息传达给用户。
- 提高系统智能化程度:可以引入机器学习等先进技术,对传感器数据进行智能分析,实现更准确的火灾预测和判断。同时,通过物联网技术将系统接入互联网,实现远程监控和控制。
- 增强系统稳定性与可靠性:在系统设计和实现过程中,需要进一步优化电路设计和软件编程,提高系统的稳定性和可靠性。同时,加强系统的抗干扰能力,确保在各种复杂环境下都能正常工作。
总之,基于51单片机的温度、烟雾、火焰检测火灾报警系统具有广阔的应用前景和巨大的发展潜力。未来我们将继续深入研究和完善该系统,为人们提供更加安全、智能的火灾预防与报警解决方案。
/*采用51系列的STC12C5A60S2单片机,是升级版带ADC采集功能的51单片机*/
#include "STC12C5A60S2.h"
#include "intrins.h"
#include "stdio.h"
#include "pm2.5.h"
#include "lcd.h"
#include "18b20.h"
#define FOSC 11059200L
uint buf=50,buf1=25,e=0,wen1=0;//设置阈值
uint bug=0;
sbit key1=P3^5;//设置
sbit key2=P3^6;//+
sbit key3=P3^7;//-
sbit led1=P2^2;//led1
sbit led2=P2^3;//led2
sbit beep=P2^0;//蜂鸣器
sbit huo=P3^3;//火焰传感器
void delay_m(int ms)//延时函数
{
int i;
do{
i = 11059200L / 13000;
while(--i) ; //14T per loop
}while(--ms);
}
void main()
{
USART_Init();
ADC_Init();//ADC初始化
init();//LCD初始化
delay_m(200);
key1=key2=key3=1;
while (1)
{
if(key1==0)//设置按键
{
bug++;
if(bug>2) bug=0;
}
if(key2==0&&bug==1)//温度按键+
{
buf++;
if(buf>99) buf=99;
}
if(key3==0&&bug==1)//温度按键-
{
buf--;
if(buf<1) buf=1;
}
if(key2==0&&bug==2)//浓度按键+
{
buf1++;
if(buf1>99) buf1=99;
}
if(key3==0&&bug==2)//浓度按键-
{
buf1--;
if(buf1<1) buf1=1;
}
e=ADC_Value(0)*100-180; //读取烟雾浓度
if(e>400) e=0;
write_1602(13, e%1000/100+0x30); //显示函数
write_1602(14, e%100/10+0x30);
write_1602(15, e%10+0x30);
write1_1602(13, buf%1000/100+0x30);
write1_1602(14, buf%100/10+0x30);
write1_1602(15, buf%10+0x30);
wen1=Get_Tmp(); //读取温度
write_1602(6, wen1%1000/100+0x30);//显示
write_1602(7, wen1%100/10+0x30);
write_1602(9, wen1%10+0x30);
write1_1602(6, buf1%100/10+0x30);
write1_1602(7, buf1%10+0x30);
beep=1;
if(e>buf)//浓度大于预设值 led和蜂鸣器报警
{
led1=0;
beep=0;
}
else led1=1;
if(wen1>(buf1*10))//温度大于预设值 led和蜂鸣器报警
{
led2=0;
beep=0;
}
else led2=1;
if(huo==0) beep=0; //检测到火焰传感器 蜂鸣器报警
if(bug==0)
{
write1_1602(11, 'E');
write1_1602(0, 'S');
}
if(bug==1)
{
write1_1602(11, 'B');
write1_1602(0, 'S');
}
if(bug==2)
{
write1_1602(11, 'E');
write1_1602(0, 'B');
}
}
}