基于51单片机的环境PM2.5监测系统设计(环境监测仪)

1、设计需求及目标

(1)利用PM2.5传感器模块检测环境PM2.5浓度值,用数码管显示PM2.5值;便携式系统,USB供电;

(2)利用CPU或其他flash存储芯片将PM2.5值进行存储,要求可存储24小时的PM2.5的值,PM2.5值测量采集可以设定1分钟采集一次,或10分钟采集一次,两种采集时间之间可以通过开关相互切换;

(3)PM2.5采集器可连续工作24个小时,进行数据采集;

(4)可以设置PM2.5范围,超过范围时报警 

2、设计思路及方案

 本设计采用由STC89C52单片机最小系统、GP2Y1010AU粉尘传感器、ADC0832模数转换器模块、LCD1602液晶模块、电源模块、蜂鸣器报警模块和按键模块模块组成。单片机实时通过ADC0832转换芯片采集GP2Y1010AU粉尘传感器的粉尘的浓度,通过单片机的数据转换处理后在液晶屏上显示空气中的质量,当测量空间中的粉尘浓度大于设置粉尘浓度时,蜂鸣器和发光二极管发出声光报警。粉尘的浓度报警值可以通过按键进行设置。电路图:

3、部分代码


#include"LCD1602.h"  //添加LCD1602头文件
#include"adc0832.h"//添加ADC0832头文件
//#include"time0.h"  	
sbit BUZZER = P1^3;	 //蜂鸣器驱动端口==P1^2

sbit Reduc  = P1^7;	 //按键键输入端口==P1^7
sbit Add = P3^0;	 //按键加输入端口==P3^1


sbit vled  = P3^2;

void Delay1us(uint t)		//@12MHz
{
	while(t--)_nop_();
}
uint read_data(uchar N)
{
	uint val=0;
	vled=0;
	Delay1us(20);
	val=adc0832(N);
	vled=1;
	Delay1us(400);	
	return val;
}
/************************************************
** 函数名称 : void main(void)
** 函数功能 : 主函数
** 输    入 : 无
** 输    出 : 无
** 说    明 :
************************************************/
void main(void)
{	
	double PM,pm1,pm2;
	int PMVAL=0,HPM=200,PM_count=0,pm1_count=0;
	uchar bueezr_flag=0,bueezr_count=0,buzzer_time=25;//蜂鸣器报警变量	                 
	LCD_Init();		 
	WriteChar(1,0,16,"PM:0020ug/m3");  				 //	初始化显示
	WriteChar(2,0,16,"HPM2.5:0200ug/m3");
	while(1)		  
	{												 
		Delay(120);					  				//延时
		pm1+=read_data(1);							//ad数据采集
		if(++PM_count>=40)							//40次数据累加
		{
		  	PM_count=0;
		   	pm1=pm1/40;							    //40次求平均值
			pm2+=pm1;								//再次累加3次数据
			if(++pm1_count>=3)
			{										
				PM=pm2/3;							//取平均值
				PM=PM*50/255;						//数据转换
				PM-=4;
		    	PM/=5;
				PM*=1000;							//单位转换成ug/m3
				PMVAL=PM;
//				PMVAL+=235;
				PMVAL+=625;	PMVAL=PMVAL/4;			//参数修正
				if(PMVAL>=9999)PMVAL=9999;			//范围内显示
				if(PMVAL<=0)PMVAL=0;
				WriteCOMDATA(0x83,0);			    //显示的数据地址
				WriteCOMDATA(PMVAL/1000+0x30,1);	//显示千位
				WriteCOMDATA(PMVAL/100%10+0x30,1);	//显示百位
				WriteCOMDATA(PMVAL/10%10+0x30,1);	//显示十位
				WriteCOMDATA(PMVAL%10+0x30,1);		//显示个位
				PM=pm1=pm2=0;
			}
		}
		//PM值与报警值比较
		if(PMVAL>HPM)
		{	
			bueezr_flag=1;
		}
		else
		{	
			bueezr_flag=0;
			BUZZER=1;
		} 
		
		if(PMVAL>=100)
		WriteChar(1,12,4,"weak");
		else if((PMVAL<100)&&(PMVAL>=50))
		WriteChar(1,12,4,"good");
		else if(PMVAL<50)
		WriteChar(1,12,4,"best");
		/*******蜂鸣器报警********/
		bueezr_count++;if(bueezr_count>buzzer_time*10)bueezr_count=buzzer_time+1;
		if(bueezr_count%buzzer_time==0 && bueezr_flag)
		{
			BUZZER=~BUZZER;//蜂鸣器取反  发出声音提示
		}
		if(!Reduc)
		{
			Delay(100);
			HPM--;
			WriteCOMDATA(0xC7,0);
			WriteCOMDATA(HPM/1000+0x30,1);
			WriteCOMDATA(HPM/100%10+0x30,1);
			WriteCOMDATA(HPM/10%10+0x30,1);
			WriteCOMDATA(HPM%10+0x30,1);
		}
		if(!Add)
		{
			Delay(100);
			HPM++;
			WriteCOMDATA(0xC7,0);
			WriteCOMDATA(HPM/1000+0x30,1);
			WriteCOMDATA(HPM/100%10+0x30,1);
			WriteCOMDATA(HPM/10%10+0x30,1);
			WriteCOMDATA(HPM%10+0x30,1);
		}
	}
}

完整资料:
https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=614264681054&ut_sk=1.WUpxx7gpwUoDAMmnnrBIzAno_12431167_1585228024499.Copy.detail.614264681054.1828622527&forceFlush=1

发布了23 篇原创文章 · 获赞 7 · 访问量 318

猜你喜欢

转载自blog.csdn.net/weixin_41017942/article/details/105129339