51单片机的室内环境监测系统,MQ-2烟雾传感器和DHT11温湿度传感器,原理图,C编程和仿真

设计要求

1.以51单片机为控制核心,利用温湿度传感器和烟雾传感器完成对室内环境数据的采集和处理;

2.LCD1602液晶实时显示温湿度、烟雾浓度等数据;

3.用户能够通过按键设置温湿度上下限报警阀值和烟雾报警阀值;

4.当室内温湿度不在设定范围内、烟雾浓度超限时,蜂鸣器和LED灯提供声光报警;

系统概述
本文设计了一款基于MQ-2和DHT11传感器的室内温湿度-烟雾报警系统,它可以实现对室内温湿度、可燃气/烟雾浓度的实时监测和显示,并提供预警值设定和声光报警功能。

系统硬件主要由AT89C52单片机最小系统、MQ-2烟雾传感器模块、DHT11温湿度传感器模块、LCD1602显示模块、按键模块和声光报警模块组成,系统框架如下。
在这里插入图片描述
其中,AT89C52单片机作为整个系统的控制核心,用于接收、处理由传感器采集的信息,并将处理后的信息发送到LCD进行实时显示。

当室内温湿度、可燃气或烟雾浓度超出用户设定的阀值时,相关LED指示灯点亮,蜂鸣器发声。

仿真电路图
在这里插入图片描述
原理图
在这里插入图片描述
仿真分析
打开名为室内温湿度烟感监测.pdsprj的仿真文件,双击单片机,在弹出的对话窗口中点击黄色文件夹小图标,加载Monitor.hex文件(位于C程序文件夹内),运行仿真,效果如下。
在这里插入图片描述
由图可知,LCD第1行显示Monitor System(监控系统),第2行显示当前室内温度为27℃,湿度为55%RH,烟雾浓度为14%。LCD显示结果与传感器上的数值一致,表示数据采样正确。

通过DHT11传感器上的3个红色小箭头来模拟室内温湿度的改变。前两个红色小箭头用于数值的增减,后一个小箭头用于温度和湿度的切换。

由于Proteus仿真没有MQ-2烟雾传感器元件,而MQ-2传感器的原理是把烟雾浓度直接转化为电阻的变化,所以这里用滑动变阻器来替代它。

通过点击滑动变阻器RV2上下红色箭头,模拟室内烟雾浓度的改变。

例如,我们调整室内温度为31℃,湿度为48%RH,烟雾浓度为7%,结果如下。
在这里插入图片描述
用户可通过调整键、加键和减键设置温湿度上下限报警阀值和烟雾报警阀值。

点击调整键,系统进入温湿度上下限、烟雾报警阀值设置界面,如下图所示。其中T代表温度,H代表湿度,S代表烟雾浓度。

系统默认的温度范围为:20-35℃,湿度范围为:40-85%RH,烟雾报警阀值为:15%。
在这里插入图片描述
进入设置界面后,温度下限值光标闪烁,此时可通过加/减键对其数值进行调整,调整完成后,继续点击调整键,温度上限值光标闪烁,这时可对上限值进行调整。

依次类推,全部参数都设置好后,再次点击调整键,即可退出设置界面,回到系统显示界面。

例如,我们设置温度范围为28-36℃,湿度范围为40-65%RH,烟雾报警阀值为5%。
在这里插入图片描述
当系统检测到室内温湿度不在设定的上下限范围内或烟雾浓度大于报警阀值时,蜂鸣器鸣叫,对应LED灯点亮。当室内环境恢复正常后,报警解除。

返回显示界面后,系统监测到当前室内烟雾浓度为7%,大于设定的5%,此时烟感报警灯点亮,蜂鸣器发声,提醒用户注意。
在这里插入图片描述
综上所述,仿真运行效果满足设计要求。

部分C代码

		while(KeySet_P)				 		// “设置键”没有被按下,则一直处于烟雾限值的设置
		{
			if(KeyDown_P==0)		 		// 判断 “减按键“ 是否被按下
			{
				if(AlarmSK>0)			  	// 只有当烟雾限值大于0时,才能减1
					AlarmSK--;
				LcdGotoXY(0,14);	 		// 重新刷新显示更改后的烟雾限值
				LcdPrintNum(AlarmSK);
				LcdGotoXY(0,15);			// 重新定位闪烁的光标位置
				DelayMs(350);
				while(!KeyDown_P);
			}
			if(KeyUp_P==0)				 	// 判断 “加按键“ 是否被按下
			{
				if(AlarmSK<99)				// 只有当烟雾限值小于99时,才能加1
					AlarmSK++;
				LcdGotoXY(0,14);	 			// 重新刷新显示更改后的烟雾限值	
				LcdPrintNum(AlarmSK);
				LcdGotoXY(0,15);	 		// 重新定位闪烁的光标位置
				DelayMs(350);					// 延时
				while(!KeyUp_P);
			}	
		}

		LcdWriteCmd(0x0C);	  		// 取消光标闪烁
		LcdShowInit();						// 液晶显示为检测界面的

		DelayMs(10);	  					// 去除按键按下的抖动
		while(!KeySet_P);	 				// 等待按键释放
		DelayMs(10);					  	// 去除按键松开的抖动

资料内容
(1)基于MQ-2和DHT11的室内温湿度烟雾报警系统设计论文;

(2)Proteus8.6仿真;

(3)C程序;

(4)AD原理图;

(5)Visio流程图;

(6)参考资料;

(7)元器件清单;

资料图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重要的事情说一遍!!!

由于室内环境监测系统设计是我的原创设计,获取全套资料,

请搜索查看我的【公】(众*)“号”:交院小智

本资料是基于51单片机环境监测系统 /*--------------------------------------------------------------------- ds18b20.h文件 ds18b20的函数 作者: 创建日期:2008.05.05 最后修改日期:2008.05.10 版本:2.0 1 单线单口的ds18b20的度读取。 2 复位状态连续读取。 3 转换度值在Disbuf[5];。 所有子程序: delay_ds18b20(unsigned int t) //延时US unsigned char ReadOneChar(void) //读一个字节 void WriteOneChar(unsigned char dat) //写一个字节 bit Init_DS18B20(void) //初始化函数 void TemperatuerResult(void) //复位 void r_ds18b20() //读取并转换度值到Disbuf[]! ----------------------------------------------------------------------*/ #ifndef __ds18b20_1_H__ #define __ds18b20_1_H__ #include #define uchar unsigned char #define uint unsigned int /*--------------------------------------------------------- ds18b20数据、控制口定义 ---------------------------------------------------------*/ /*--------------------------------------------------------- void r_ds18b20(void) //读取并转换度值到Disbuf[]! { TemperatuerResult(); xiaoshu = tplsb&0x0f; tpmsb = tpmsb<>4; xiaoshutemp = xiaoshu *625; xiaoshutemp = xiaoshutemp/100; zhengshu = tpmsb + tplsb; if(zhengshu = 0x64)&&(zhengshu <= 0x7d)) { Disbuf[0] = zhengshu/100; Disbuf[1] = zhengshu%100/10; Disbuf[2] = zhengshu%10+10; Disbuf[3] = xiaoshutemp/10; Disbuf[4] = xiaoshutemp%10; } else; } #include "reg52.h" #include "ds18b20.h" #define uchar unsigned char #define uint unsigned int void main() //主函数 { Init_DS18B20(); while(1) { r_ds18b20(); } } ---------------------------------------------------------*/ #endif
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值