• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【我的毕设作品】PM2.5颗粒浓度在线监测系统的设计

摘要:

文设计的PM2.5颗粒浓度在线检测系统的控制核心为AT89S52单片机,PM2.5颗粒浓度检测采用日本夏普公司的灰尘传感器GP2Y1010AU,采集到的PM2.5模拟数据信号经过ADC0832数模转换后将数字信号输送给单片机进行处理,LCD1602显示屏第一行显示设定的PM2.5颗粒浓度安全值,第二行显示实时监测到的PM2.5颗粒浓度值。当PM2.5颗粒浓度超过设定的2倍安全值时,设计的红色LED灯闪烁,同时蜂鸣器发出警报;当PM2.5颗粒浓度介于安全值和2倍安全值之间时,黄色LED灯闪烁发出警告;当PM2.5颗粒浓度低于安全值时,绿色LED灯闪烁表示污染程度较低。

通过设计的单片机最小系统、ADC转换模块、粉尘传感器模块等电路在Proteus中搭建了PM2.5颗粒浓度在线检测仿真电路,并在Keil软件中编写程序。

全部回复(15)
正序查看
倒序查看
vera69
LV.1
2
2019-08-26 20:40

AT89S52是ATMEL公司出品的兼容MCS-51系统的低功耗CMOS单片机,它的内部还集成了8位CPU和ISP Flash存储单元,AT89S52单片机原理图如下:

0
回复
vera69
LV.1
3
2019-08-26 20:41
@vera69
AT89S52是ATMEL公司出品的兼容MCS-51系统的低功耗CMOS单片机,它的内部还集成了8位CPU和ISPFlash存储单元,AT89S52单片机原理图如下:[图片]

显示屏用的是:LCD1602

0
回复
vera69
LV.1
4
2019-08-26 20:42
@vera69
显示屏用的是:LCD1602[图片]

夏普粉尘传感器GP2Y1010AU0F

粉尘浓度检测传感器通常应用在煤矿、面粉加工车间等其他粉尘浓度较高的场合,而这些粉尘传感器检测的大都是颗粒较大的粉尘物,不适宜于用来检测PM2.5这类直径较小的颗粒物浓度。

0
回复
vera69
LV.1
5
2019-08-26 20:48

本文设计的PM2.5颗粒浓度在线监测系统硬件电路是由AT89S52单片机为控制核心,还包括电源电路、晶振电路、复位电路、报警电路、按键电路、1206显示电路、ADC转换模块组成,硬件电路框图如图3.1所示。

0
回复
vera69
LV.1
6
2019-08-26 20:50
@vera69
本文设计的PM2.5颗粒浓度在线监测系统硬件电路是由AT89S52单片机为控制核心,还包括电源电路、晶振电路、复位电路、报警电路、按键电路、1206显示电路、ADC转换模块组成,硬件电路框图如图3.1所示。[图片]

单片机系统运行需要5V电压,而电脑上的USB输出电压刚好是5V,输最大电流为500mV,因此可以为单片机供电电路上设计USB接口,使用数据线连接电脑即可为系统供电,缩短了单片机与电脑的距离可便于单片机程序烧写,也有利于观察和调试硬件电路。并采用7805稳压芯片为系统提供稳定的电压,然后进行滤波,并在输出端设计一个防倒流的二极管。在输入端还另加了两孔的排插接口,方便在必要时使用干电池对系统供电。设计的供电电路如图3.2所示:

0
回复
vera69
LV.1
7
2019-08-26 20:51
@vera69
单片机系统运行需要5V电压,而电脑上的USB输出电压刚好是5V,输最大电流为500mV,因此可以为单片机供电电路上设计USB接口,使用数据线连接电脑即可为系统供电,缩短了单片机与电脑的距离可便于单片机程序烧写,也有利于观察和调试硬件电路。并采用7805稳压芯片为系统提供稳定的电压,然后进行滤波,并在输出端设计一个防倒流的二极管。在输入端还另加了两孔的排插接口,方便在必要时使用干电池对系统供电。设计的供电电路如图3.2所示:[图片]

本设计的单片机最小系统如图3.5所示。

0
回复
vera69
LV.1
8
2019-08-26 20:52
@vera69
本设计的单片机最小系统如图3.5所示。[图片]

夏普GP2Y1010AU粉尘传感器将空气中的微小颗粒物检测到以后输出的为模拟电压信号,再送往ADC0832数模转换电路中转换为数字信号,设计的粉尘传感器电路如图3.7所示。

0
回复
vera69
LV.1
9
2019-08-26 20:53
@vera69
夏普GP2Y1010AU粉尘传感器将空气中的微小颗粒物检测到以后输出的为模拟电压信号,再送往ADC0832数模转换电路中转换为数字信号,设计的粉尘传感器电路如图3.7所示。[图片]

LCD1602显示电路如图所示:

0
回复
vera69
LV.1
10
2019-08-26 20:54
@vera69
LCD1602显示电路如图所示:[图片]

本文设计的按键虽然只有3个,但是而这些按键全部是机械弹性的开关,由于弹簧片的作用,当按下按键后并不能迅速将开关闭合,同理当松开按键时也不会立刻断开,因此在按下和松开按键时会存在短时间的抖动。按键的抖动时长通常是由人为的因素以及按键自身的机械特性相关,按键抖动时长通常在在5ms~25ms。按键抖动原理如图所示。

0
回复
vera69
LV.1
11
2019-08-26 20:55

系统软件流程图

0
回复
vera69
LV.1
12
2019-08-26 20:56
@vera69
系统软件流程图[图片]

在Proteus中搭建PM2.5颗粒浓度在线监测系统仿真电路,并结合Keil中编写的系统软件程序,以对本文的理论分析和软硬件做验证。由于Proteus的库文件中并没有加入类似于粉尘传感器功能的模块,因此采用了滑动变阻器进行模拟。LCD1602液晶屏能够显示两行信息,因此在第一行显示的值为设定PM2.5浓度的警报值,第二行为可调节的当前PM2.5浓度值,当调节到不同浓度值时,红黄绿指示灯会根据当前的值发亮,并且在超过设定浓度值的2倍时发出警报。下图为Proteus搭建的系统仿真电路。

0
回复
vera69
LV.1
13
2019-08-26 20:57
@vera69
在Proteus中搭建PM2.5颗粒浓度在线监测系统仿真电路,并结合Keil中编写的系统软件程序,以对本文的理论分析和软硬件做验证。由于Proteus的库文件中并没有加入类似于粉尘传感器功能的模块,因此采用了滑动变阻器进行模拟。LCD1602液晶屏能够显示两行信息,因此在第一行显示的值为设定PM2.5浓度的警报值,第二行为可调节的当前PM2.5浓度值,当调节到不同浓度值时,红黄绿指示灯会根据当前的值发亮,并且在超过设定浓度值的2倍时发出警报。下图为Proteus搭建的系统仿真电路。[图片]

仿真电路中LCD1602显示屏的第一行为PM2.5颗粒浓度参考值,由滑动变阻器将该阀值设置为20μg/m3,LCD1602显示屏的第二行为实时显示的PM2.5浓度值。当PM2.5浓度低于20μg/m3时,绿色LED灯亮,蜂鸣器处于关闭状态,表明此时污染程度较低。在Proteus中的仿真.效果如图所示。

0
回复
vera69
LV.1
14
2019-08-26 20:58
@vera69
仿真电路中LCD1602显示屏的第一行为PM2.5颗粒浓度参考值,由滑动变阻器将该阀值设置为20μg/m3,LCD1602显示屏的第二行为实时显示的PM2.5浓度值。当PM2.5浓度低于20μg/m3时,绿色LED灯亮,蜂鸣器处于关闭状态,表明此时污染程度较低。在Proteus中的仿真.效果如图所示。[图片]

调节按键,继续增加LCD1602第二行的PM2.5浓度值,当PM2.5浓度介于20μg/m3~40μg/m3时黄色LED亮,蜂鸣器处于关闭状态,表明此时有PM2.5颗粒污染。在Proteus中的仿真效果如图所示。

0
回复
vera69
LV.1
15
2019-08-26 20:58
@vera69
调节按键,继续增加LCD1602第二行的PM2.5浓度值,当PM2.5浓度介于20μg/m3~40μg/m3时黄色LED亮,蜂鸣器处于关闭状态,表明此时有PM2.5颗粒污染。在Proteus中的仿真效果如图所示。[图片]

调节按键继续增加PM2.5浓度值,当PM2.5浓度高于40μg/m3时,红色LED亮,蜂鸣器打开,表明此时污染较为严重。在Proteus中的仿真效果如图所示。

0
回复
vera69
LV.1
16
2019-08-26 21:00
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
***********************************************************************/
void main()
{
	uchar h;
	uint sum;		 //参数局部变量 
    EA = 0;			 //关闭中端
	Timer0_Init();   //定时器0初始化
	EA = 1;		     //打开中断
	RW=0;		     //关闭读写命令
	L1602_init();
	while(1)
	{
		 if (FlagStartRH == 1&&set==0)	 //PM2.5转换标志检查
		 {
		    TR0 = 0;
			for(h=0;h<50;h++)	         //求取数字信号的平均值 50次采集
			{
				DA=adc0832(0);			 //缓存AD转换数值
				sum=sum+DA;
				delay_ms(100);
				Key();				     //按键扫描
			}
			DA=sum/50;				     //求均值
			sum=0;						 //局部参量清零
			DA=DA*(float)(DA/5);	     //整型浮点化
			ALARM();					 //参数报警
			if(set==0)
			display();				     //LCD1602显示数值
			TR0 = 1;
		}
		Key();					         //按键扫描
		ALARM();
	}
}
0
回复