0
点赞
收藏
分享

微信扫一扫

基于51单片机的GSM家庭环境监测报警系统

单调先生 2022-02-05 阅读 55

一.硬件方案

本次设计主要分五个功能,分别为测温湿度,pm2.5和CO及发送信息和报警。将这几个个功能巧妙的与家居结合,我们已经知道五个单独功能如何实现,现在要将五个功能通过单片机系统化反馈,以达到能实现综合五种功能的智能家居。
设计涉及主硬件为:STC89C52RC单片机,DHT11温湿度传感器,GSM模块,CO传感器,PM2.5传感器,按键设置与LCD1602液晶显示模块,蜂鸣器报警电路,以及超标指示显示模块组成。如图:
在这里插入图片描述

二.设计功能

(1)采用DHT11温湿度传感器检测温湿度,PM2.5粉尘传感器检测空气质量,MQ-2(MQ系列可换)烟雾传感器检测可燃气体或烟雾浓度给ADC0832模数转换芯片,0832将模拟量装换成数字量给单片机。
(2)采用LCD1602液晶屏显示温度、湿度、烟雾浓度和pm2.5粉尘数据以及各个指标的阀值。
(3)四个按键:按键1设置、按键2加、按键3减、按键4确定。按键可以设置温湿度的上下限值、烟雾的上限值和粉尘的上限值,设置的值可以存储到单片机(STC系列)内部的EEPROM中,实现掉电存储,设置的值掉电不丢失。
(4)当温湿度值低于下限或高于上限时,或者烟雾浓度高于上限时,或粉尘数据超过上限值时,相应的指示led灯亮,同时蜂鸣器响,实现声光报警。
(5)采用GSM模块发送短信,当各个指标的任何一个指标超过阀值,GSM模块就会向手机发送短信,提示注意,发送内容为各个指标的实时采集数据。

三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:
在这里插入图片描述

四.软件设计

(1)程序流程图
在这里插入图片描述

(2)主程序源码

//T:23C P0.12mg/m3
//H:45% C:000mL/m3

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
***********************************************************************/
void main()
{
    uint testnum;
	uchar ys;
	
    Uart_init();    //串口初始化
	RW=0;
  	init_eeprom();  //EEPROM初始画
	read_eeprom();    //读取设定值
	L1602_init();     //显示屏初始画
	for(ys=0;ys<10;ys++)
	{
		delayms_1000ms();	
	}
	SendString("AT\r\n");    //GSM初始化指令
	delayms_1000ms();
	delayms_1000ms();
	SendString("AT\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("ati\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("ati\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("ATH\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("AT+CMGF=1\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("AT+CNMI=2,1,0,0,0\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("ATH\r\n");
	delayms_1000ms();
	delayms_1000ms();
	SendString("AT+CSCS=");
	SendASC('"');
	SendString("UCS2");
	SendASC('"');
	SendString("\r\n");	 
	delayms_1000ms();
	write_1602com(0x80);
	write_string("T:  C P .  mg/m3");
	write_1602com(0xc0);
	write_string("H:  % M:   mL/m3");
//	Uart_init();
//	TH=30;TL=20;HH=80;HL=50;COH=100;PMH=100;
	while(1)
	{
		KEY();     //按键扫描
		if(flag==0)
		{
			if(FlagStartRH==1)
			{
				testnum = RH();
				FlagStartRH = 0;
	//			TR0 = 1;
				humidity = U8RH_data_H;	 //读出温湿度,只取整数部分
				temperature = U8T_data_H;	
				
				DA=sum/40;
				sum=0;
				PM=DA*(float)(DA/4);
				MQ=adc0832(1);
				display();
			}
			if(temperature>=TH)
			LED1=0;
			else
			LED1=1;
			if(temperature<=TL)
			LED2=0;
			else
			LED2=1;
			if(humidity>=HH)
			LED3=0;
			else
			LED3=1;
			if(humidity<=HL)
			LED4=0;
			else
			LED4=1;
			if(PM/10>=PMH)
			LED5=0;
			else
			LED5=1;
			if(MQ>=MQH)
			LED6=0;
			else
			LED6=1;
			if(temperature>=TH||temperature<=TL||humidity>=HH||humidity<=HL||PM/10>=PMH||MQ>=MQH)    //判断当前检测值
			{
				Onealarm();	
			}
			else
			alarm=1;
			if((temperature>=TH||temperature<=TL||humidity>=HH||humidity<=HL||PM/10>=PMH||MQ>=MQH)&&flag_ok==1)
			{
				TR0=0;
				TransmitText();	
				flag_ok=0;
				TR0=1;
			}
		}
	}
}

举报

相关推荐

0 条评论