摘要
近几年,出现了一个新的天气状态:霾,它肆虐全球的大部分地区,尤其在我国北方冬季,已经有很多的地区出现了大范围持续性的低能见度污染天气,并且有愈演愈烈的趋势。本文进一步指出人类社会的经济活动产生的人为因素和气候变化带来的气候因素两者共同作用使中国的雾霾天气进一步增多。雾霾人们早就有所耳闻,如早年的伦敦烟雾事件,在短短几天内就夺走了近万条人命。而引起我们重视的是近年发生在北京的雾霾事件,因为雾霾的肆虐,一时间防霾口罩风靡市场。考虑到人们的身体以及生活的健康,必须要检测空气中的粉尘浓度,因此设计空气质量检测仪是一个非常有现实意义以及市场价值的课题。此次的设计是一个检测空气中雾霾含量的仪器,是一个由传感器、单片机、LED、蜂鸣器等器件组成的自动检测空气的仪器(自动空气检测仪器)。本设计的空气质量检测仪实现了智能化控制,具有功耗小,检测精度高,价格便宜,易于携带等优点。
关键词:雾霾;单片机;自动检测
1引言
1.1研究的主要目的和意义
随着工业的发展,由雾霾带来的各种各样的消极影响逐渐进入人们的视线,比如温室效应,土地沙漠化,盐碱地的扩大以及雾霾天气的肆虐等等,近年来,空气质量的急剧恶化是我们每个人都深切的体会到的。空气质量的逐渐恶化导致空气出现普遍浑浊现象,各种危害也相应加重。我国已将雾霾列入重点关注对象。在环境空气的空气动力学中,这些液态或固态的极细粒子主要是PM10和PM2.5,他们可随空气直接进入人体,又称可吸入颗粒物。可吸入颗粒物半径小,并且携带有毒、有害物质,因此,不仅危害环境,同时也危害人体健康。
世界卫生组织发出的报告称,颗粒物的危害遍及全球,包括发达国家以及发展中国家.作为最早起步工业的国家,英国也也曾遭受空气污染和雾霾天气的侵害。1952年,发生了震惊全球的伦敦雾霾时间,在大雾笼罩五天中,城市白天能见度只有1米左右,大雾期间1万多人丧生,最后还有几千人因此死亡。由此可见,雾霾对人体的危害并不比沙尘暴等极端气候对人体的危害小。雾霾,即可吸入颗粒物,携带多种有害物质,随空气直接进入人体,粘附在呼吸道以及聚集到肺部,导致呼吸道阻塞或炎症,也可能导致心血管方面的疾病。其中,颗粒物中的环芳氢不仅是致癌物,而且可致基因突变和畸形,这些对小孩、老人及伴有呼吸系统疾病的患者影响会更加显著。并且这种恶劣的天气限制了人们的外出活动,使人们的日常锻炼受到影响,它对人的情感方面的影响就像持续的大雨,容易让人产生消极悲观的情绪,严重时还可能引发抑郁,狂躁等心理疾病。因此,为了我们的生命及生活安全,空气质量检测是刻不容缓的,并且在监测时,要对粉尘进行致细检测。
1.2国内外研究现状
PM2.5具有很强的散射作用,是大气复合型污染的首要污染物,极易导致灰霾天气的形成。在不同城市中,空气中颗粒物污染呈现多类型污染的趋势。可分为:传统的煤炭的燃烧,如太原、乌鲁木齐等;烟尘、燃煤和汽车尾气排放混合型,如运城、郑州、石家庄等;以及复合型,如北京、广州等地区。随着经济的快速发展,2010年,因为PM2.5检测数据爆表,X驻华大使馆曾用“Crazybad”来形容我国空气质量。目前,根据质量检测结束显示,我国已经有超过2/3的城市空气质量不达标。目前,我国部分地区PM2.5污染已经尤为严重,其中的华东、华北等地区为最为突出。研究表明,近50年,中国的雾霾特点:持续时间长、范围广。
英国在降低空气污染方面采取了许多有效的对策,但污染还是较为严重;
X加州地区花了近60年,治理和控制空气污染源,取得了较为可观的成绩;墨西哥城由于尾气排放和地理位置的原因和成为雾霾污染较为严重的地区,在政策的督促下,污染物排放大大降低,也取得了明显的成果。
表124小时空气质量标准值分布
世界卫生组织《空气质量准则》
项目 年均值 日均值
准则值 10 25
过渡期目标1 35 75
过渡期目标2 25 50
过渡期目标3 15 37.5
空气质量等级 24小时PM2.5平均值标准值
优 0~35
良 35~75
轻度污染 75~115
中度污染 115~150
重度污染 150~250
严重污染 大于250及以上
1.3研究的任务和目标
我国现在处于灰霾天加剧的状态,雾霾天带来的影响给人们带来严重的压力,为了使人们能够呼吸干净、清新的空气。所以,必须发展长期检测系统,准确的模拟和预报天气变化,及时检测空气中的气体颗粒并进行有效的治理。
2总体方案设计
2.1检测原理
设计一款PM2.5空气质量检测仪,它主要由单片机、灰尘传感器、LED液晶显示屏、报警器(蜂鸣器)等组成。本设计所要实现的主要功能及实现方法如下:
(1)对空气中中的灰尘浓度进行准确测量并且进行显示,本部分由GP2Y1010AU0F灰尘传感器,LCD1602液晶屏以及相应的软件程序完成。
(2)完成数据的传输以及报警设置。本部分由AT89S52单片机和蜂鸣器以及LED灯进行实现。首先设置一个PM2.5浓度报警值,该报警值可以通过手动调节,其次通过程序将传感器采集到的数据传到单片机,有单片机进行处理。[1]当该数据达到设定值时蜂鸣器响起,并且当当检测的PM2.5的浓度值在0-0.1之间,绿灯亮,表示良好;当检测的PM2.5的浓度值在0.1-0.3之间,黄灯亮,表示轻度污染;此外,红灯亮,表示中度及更大程度的污染。
2.2电路设计框图
图1电路系统图
图2系统框图
图3电路系统图
3主控制器及主要器件
3.1AT89S52单片机
AT89S528位CMOS型微控制器内部集成了CPU、4kb的程序存储器、数据存储并行I/O口、串行口、2个定时器,是一种低功耗的的微控制器。除此之外还有一个中断控制系统和总线扩展控制器等。单芯可编程Flash存储器来自ATMEL公司,能以超低压工作,为众多嵌入式控制系统提供的高效,灵便的处理方案。
AT89S52具备以下标准性能:8K系统可编程Flash存储器,32位可编程I/O口,2级中断结构,256字节RAM,1000次擦写周期,串行接口、模数转换、看门狗、定时器,中断源等。片内程序存储器为E2PROM,擦除时间10ms左右,并且数据保存长达时间10年以上。8位CPU和系统可重复擦写编程Flash存储器,使用广性价比高,使用寿命长。
图4AT89S52结构框图
图5AT89S52引脚功能与封装
按功能,AT89S52的引脚可分为电源引脚、时钟引信号脚、控制信号引脚、第29引脚、第30引脚、第31引脚、输入、输出引脚、P0口、P1口、P2口、P3口.
I/O口P1.0与P1.1可以配置外部计数输入端(P1.0/T2),与定时/计数器2的触发输入端
表1P1口管脚复用功能
端口引脚 复用功能
P1.0 T2(定时器/计算器2的外部输入端)
P1.1 T2EX(定时器/计算器2的外部触发端和双向控制)
P1.5 MOSI(用于在线编程)
P1.6 MISO(用于在线编程)
P1.7 SCK(用于在线编程)
表2P3端口与复用功能表
端口引脚 复用功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外部中断0)
P3.3 INT1(外部中断1)
P3.4 T0(定时器0的外部输入)
P3.5 T1(定时器1的外部输入)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
3.2A/D转换芯片ADC0832
A/D转换器是模数转换器,即将模拟信号转换成数字信号。ADC0832由X半导体公司生产,是一种双甬道、8位分辨率转换芯片,它的工作频率250KHZ,转换时间32微秒,内部电源输入和参考复用。由于它体积小、转换时间短、速度高,仅需几十纳秒,所以深受广大单片机爱好者欢迎。
本设计采用ADC0832型逐次逼近式A/D转换器精度较高,转换速度快,结构也比较简单。
ADC0832特点:
①8位分辨率;
②双通道A/D转换;
③输入输出电平与TTL/CMOS相兼容;
④5V电源供电时输入电压在0~5V之间;
⑤工作频率为250KHZ,转换时间为32μS;
⑥一般功耗仅为15mW;
⑦8P、14P—DIP(双列直插)、PICC多种封装;
⑧商用级芯片温宽为0°Cto+70°C,工业级芯片温宽为−40°Cto+85°C;
图6芯片接芯片顶视图
AD0832工作原理:
传感器采集模拟信号,将模拟电压Vin信号送入Ch0通道,A/D转换器片内有一个D/A转换器,首先向片内D/A转换器输入10000000,如果电压比较器:Vin>Vn(Vn为片内的D/A转换输出,Vin为A/D转换器的输入电压),则N位寄存器的第一位置1;(若Vin<Vn,则寄存器首位写0);再向D/A转换输入11000000(首位写0时,输入01111111),若Vin>Vn则寄存器第二位置1(若Vin<Vn,则写0);再向D/A转换输入11100000(或00111111),若Vin>Vn则寄存器第三位置1(若小于,则写0);顺次执行,直至寄存器第8位赋值结束,控制逻辑监测到比较放大器进行8次后,Eoc输入信号,A/D转换器将结果输出至D0~D9。
CLK:芯片时钟输入。
3.31602LCD液晶显示屏
LCD1602是低功耗显示屏、能显示32位比较清晰美观的字体,优点突出,在电子产品应用广泛。在Proteus中字符型液晶有IM016L、M017L、M018L、M020L等,这些都是并行操作的LED。本设计用LCD1602输出信息采用LCD1602显示16*2模块。和LED显示屏相比较,LCD液晶显示屏小巧、耗电压低、无辐射等特点。LCD1602第一行的首地址指令是80H(ox80),第二行首地址指令是C0H(oxC0)。
LCD1602主要技术参数
显示容量为16×2个字符;
芯片工作电压为4.5~5.5V;
工作电流为2.0mA(5.0V);
工作电压为5.0V。
LCD1602的引脚说明
LCD1602采用14脚接口,其中:
第1脚:VSS地电源;
第2脚:VDD电源正极;
第3脚:V0液晶显示对比调节;
第4脚:数据/命令选择端;
第5脚:R/W读写选择端
第6脚:E使能端
第7-14脚:数据
第15-16脚:空脚
控制指令说明
表3控制命令表
序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1 清显示 0 0 0 0 0 0 0 0 0 1
2 光标返回 0 0 0 0 0 0 0 0 1 *
3 置输入模式 0 0 0 0 0 0 0 1 I/D S
4 显示开/关控制 0 0 0 0 0 0 1 D C B
5 光标或字符移位 0 0 0 0 0 1 S/C R/L * *
6 置功能 0 0 0 0 1 DL N F * *
7 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址
8 置数据存贮器地址 0 0 1 显示数据存贮器地址
9 读忙标志或地址 0 1 BF 计数器地址
10 写数到CGRA或DDRAM) 1 0 要写的数据内容
11 从CGRAM或DDRAM读数 1 1 读出的数据内容
3.4夏普粉尘传感器GP2Y1010AU0F
灰传感器GP2Y1010AU是日本夏普公司生产的。该传感器将PM2.5粒子与其他悬浮颗粒分离,内置气流发生器将空气吸入进风口,传感器检测单位体积粒子的个数。其内部的红外线发光二极管和光电晶体管可以探寻到空气中尘埃的反射光,像烟雾颗粒等细小颗粒也是可以被检测到的。该传感器具有小型化,耗电流低,免维护,寿命长,检测精度高等特点通。常应用在空气净化系统中。可以检测室内环境中烟雾、粉尘等浓度。该传感器的输出值与粉尘浓度值成正比。
图7夏普灰尘传感器GP2Y1010AU0F
图8传感器内部图
应用领域:
1、空气净化器;
2、空调;
3、空气质量监控仪;
4、空调等相关产品。
主要参数:
灵敏度:0.5V/(0.1mg/m3)
输出电压:0.9V(TYP)
消耗电流:11mA
工作温度:-10~65℃
存储温度:-20~80℃
4硬件电路设计
4.1单片机最小系统
单片机的最小系统就是单片机正常工作的最低配置。对51系列单片机来说,最小系统组成模块:复位系统、时钟系统、电源系统
时钟电路:
XTAL1和XTAL2是独立的输入、输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,图3中采用的是内时钟模式,即采用利用芯片内部的振荡电路,在XTAL1、XTAL2的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡[12]。
图9时钟电路图
复位电路:
在单片机系统中,复当程序不能正常运行或死机就需要进行复位。复位操作有上电自动复位和开关复位两种基本形式。
图10复位电路图
为防止读取数据出错,外接上拉电阻。
图11P0口外接上拉电阻
4.2粉尘传感器电路设计
图12粉尘传感器GP2Y1010AU中管脚
图13对应管脚
图14粉尘传感器电路图
粉尘传感器GP2Y1010AU通过对空气粉尘颗粒浓度的检测输出模拟电压,其
显示值和粉尘的浓度是成正比的。用可变电阻设计的局部限压电路代替传感器:
15仿真原理图
4.3A/D转换
A/D转换器显示将模拟量转化为数字量
图16封装机管脚说明图
CS_:片选使能,低电平芯片使能;CH0:模拟输入通道0,或作为IN+/-使用;CH1:模拟输入通道1,或作为IN+/-使用;GND:接地;DI:数据信号输入,选择通道控制[14]。
A/D转换参数;
分辨率;
误差转换;
转换时间;
图17电路设计图
4.4LCD显示模块设计
LCD1602显示器可以直观的显示当前空气中粉尘浓度、实时了解报警器工作情况,故在电路中加入液晶显示器,显示当前粉尘浓度和预警浓度。
图18根据各管脚的功能电路设计
图19仿真电路图
4.5按键电路
使用单片机的P3.3,P3.4,P3.5三个口。
图20按键电路
4.6报警电路
报警电路的控制输出,使用单片机的P3.6口:
图21报警电路
4.7污染级别提醒电路和程序下载电路
本设计提醒电路,使用如图示三个口。不同的浓度值对用不同色的灯光颜色。
图22污染级别提醒电路
单片机下载电路设计:
图23程序下载电路
5程序设计及软件应用
5.1主程序设计
主程序代码:
/*****主函数*****/
voidmain(void)
{
InitTimer();//初始化定时器
LED=1;
LED2=1;
LED3=1;
LED4=1;
BEEP=0;
lcd_init();//初始化显示
delay1ms(100);
lcd_init();//初始化显示
delay1ms(100);
while(1)
{
checkkey();//按键检测
if(set_st==0)
{
wr_com(0x0c);
if(FlagStart==1)//1次数据采集完成
{
num++;
ADC_Get[num]=abc;
if(num>9)
{
num=0;
DUST=Error_Correct(ADC_Get,10); //求取10次AD采样的值
DUST_Value=(DUST/256.0)*5000; //转化成电压值MV
DUST_Value=DUST_Value*0.17-0.1;//固体悬浮颗粒浓度计算Y=0.17*X-0.1X–采样电压V
if(DUST_Value<0) DUST_Value=0;
if(DUST_Value>760) DUST_Value=760; //限位
DUST=(uint)DUST_Value;
}
TL0=(65536-10000)/256;
TH0=(65536-10000)%256;
TR0=1;//开启定时器0
EA=1;
FlagStart=0;
}
Alarm();//报警检测
}
disp(DUST);//显示粉尘浓度值
baojing();//显示报警值
if(set_st==1)//报警值闪动
{
wr_com(0xca);
wr_com(0x0d);
delay1ms(150);
}
}
}/*****END*****/
图24主程序框图
5.2主要子函数的设计
除主程序外,为方便主程序调用,程序设计中还定义了一些函数,主要有液晶初始化程序,按键检测函数,显示函数,报警显示,A/D转换函数,中值滤波等。
函数的调用方式有;
函数语句;
函数表达式;
函数参数。
表4
表5
表6脉冲
图25ADC0832数据读取程序流程图
实际程序设计代码为:
/***********AD0832转换程序******************/
ucharADC0832(bitmode,bitchannel)//AD转换,返回结果
{
uchari,dat,ndat;
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADDI=1; //第1个下降沿为高电平
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI=mode; //低电平为差分模式,高电平为单通道模式。
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADDI=channel; //低电平为CH0,高电平为CH1
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束(经试验必需)
dat=0;
//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)
for(i=0;i<8;i++)
{
dat<<=1;
ADCLK=1;//拉高时钟端
_nop_();
_nop_();
ADCLK=0;//拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
dat|=ADDO;
}
ndat=0;//记录D0
if(ADDO==1)
ndat|=0x80;
//下面开始继续读取反序的数据(从D1到D7)
for(i=0;i<7;i++)
{
ndat>>=1;
ADCLK=1;//拉高时钟端
_nop_();
_nop_();
ADCLK=0;//拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
if(ADDO==1)
ndat|=0x80;
}
ADCS=1;//拉高CS端,结束转换
ADCLK=0;//拉低CLK端
ADDI=1;//拉高数据端,回到初始状态
if(dat==ndat)
return(dat);
else
return0;
}
5.3keilC51的应用
KeilC51是XKeilSoftware公司出品的软件,集编程和仿真于一体。51系列兼容单片机C语言软件开发系统。与汇编语言比较,C语言在性能、结构性、可维护性上有着教为显著的亮点,使用和学习都非常的简单,适合每个阶段开发人员。而且,KeilC51生成的目标代码语句紧凑,而且速度很快。本设计采用C语言编写程序,程序直观、易懂,同时也方便于后期调试修改。
KeilC51开发系统使用
图26Keil_c软件界
5.4Proteus仿真
我们知道的电路原理图绘制类软件有很多种,常用的有Protel99se、Multism、Proteus、DXP2000等。
用C语言程序,编译好后,立即进行硬件系统联合仿真。仿真成功后,直接单击ARES图标就可以进行系统PCB板设计,同时还能够生成多种格式的网络表文件,提供给人们PCB设计软件调用,方便后续PCB的设计与制造。其处理器模型支持8051、PIC、AVR、MSP430和DSP等更高级的ARM仿真,同时也支持IAR、Keil和MPLAB等多种编译器。
本设计采用的是Proteus软件来进行原理图绘制与仿真,它能最大限度地模拟煤气报警器各单元的功能,效果直观,调试方便。
电路原理图设计:
Proteus虽是在计算机上运行的虚拟环境,但是使用Proteus开发单片机系统同样应遵循其开发步骤和软、硬件设计方法。
1.电路原理图方案确定;
2.设置界面环境;
3.添加元器件;
4.元器件连接;
5.检查调整;
6.仿真验证;
7.建立网络表;
8.存盘并输出报表。
图27主界面
28仿真图
5.5仿真与调试
用Keil5进行程序的编写,写好以后对程序进行编译调试,等到把最终编写好的程序运行调试成功后,根据要求后生成相应的HEX文件[16],将HEX文件添加到Proteus的DSN仿真图中的51单片机内进行仿真。
最后进行Proteus仿真运行,点击运行按键,对不同场景进行检测,观察报警器系统,记录检测数据。
最后进行实物的焊接、调试,最终可以满足设计需求。
6设计的应用及相关实验
6.1PM2.5简介
生活中因为我们经常说雾霾这个词,所以导致很多人以为雾就是霾,其实不然。雾和霾是两种完全不同的天气状态。雾的主要成分是水蒸气,单纯的雾是正常的气候对人体是没有伤害的。霾则不同,霾又称为阴霾、灰霾,他的主要成分并不是水蒸气,而是由许多的不明的烟、尘等微粒组成的,是一种气溶胶颗粒。霾是对人体有特大伤害的,当吸入雾霾或者长期生活在霾的环境中,容易引起呼吸系统疾病、心血管系统疾病、血液系统疾病等等各种各样的疾病。雾和霾主要有六点不同,分别是能见度范围不同、相对湿度不同、厚度不同、边界特征不同、颜色不同、日变化不同。
PM2.5是霾的主要成分,粒径小于2.5微米,虽然它是非常小的颗粒,但是他常常携带有毒物质,当你在雾霾天不戴口罩时会明显的感觉到喉咙疼痛,鼻子有黑色异物,对身体是非常不利的一种物质。PM2.5是1997年X人提出的,当时主要为了监测工业排放物;2013年4月9,根据央视新闻报道,征询各方专家意见,PM2.5的中文名称终于尘埃落定,即PM2.5–“细颗粒物”。
6.2PM2.5的主要来源
大气中的颗粒物、气体污染物和气候变化是雾霾发生的主要原因。在雾霾天气里,空气相对湿度大、风速小、多静风,不利于污染物扩散;而污染物累积,浓度增大,又加重雾霾。雾霾产生的原因有自然和人为两类。
自然源包括海盐,风扬微尘等;自然界中的灾害事件,如沙尘暴,森林火灾以及陨石进入地球分解所形成的物质都会将大量细颗粒物输送到大气层中;还与气候条件有关,如持续的高温静稳气象条件,有导致气态污染物转向颗粒物,以及颗粒物的吸湿增长等,加重PM2.5浓度水平。
人为源,有煤、石油、天然气等化石燃料的燃烧。如,家庭烧煤碳取暖做饭;各种工业过程中煤排放的烟尘;各类交通工具行驶过程中排放的尾气。
大气中诸如二氧化硫和氮的氧化物等气体的转化可产生相应数量的颗粒。这些污染物主要还是由于垃圾、秸秆的焚烧,汽车尾气排放等造成的。随着传统城市和工业活动中煤和焦炭燃烧是所产生的烟和其它颗粒物质的污染,同时也发生了气体的污染。在净化空气行动之前,烟主要是由家庭火炉产生的;同样污染严重的还有,小汽车、卡车、飞机用油的燃烧以及石油化工业;在室内,吸烟不完全燃烧产生的颗粒物。吸高品质香烟,对人体以及环境危害并没有降低;还有纸张燃烧、焚香及燃烧蚊香。
大气化学反应:
除自然、人为外,化学反应生成
6.3设计主要用途及应用的场景
6.3.1主要用途
本设计主要可用于用于生活环境中PM2.5的检测,设置一个预警范围,直观的反应当前的空气中细颗粒物的含量。
6.3.2应用场景
家里,公司,学校,动车飞机等禁止吸烟的场合,空调和通风口处监测,气人流量大的马路口,公园,气象台等
6.4应用设计进行的相关实验及结论分析
日期 7:00 12:30 20:00 平均
5月31日 0.07 0.12 0.09 0.093
6月1日 0.09 0.14 0.10 0.11
6月2日 0.08 0.15 0.10 0.11
表8东湖公园检测测
(单位:毫克/立方米)
时间/地点 7:00 12:30 20:00 平均
6.1/罗湖区东湖路 0.18 0.15 0.19 0.173
6.2/罗湖区东湖路 0.20 0.15 0.20 0.183
6.3/深南大道科技园段 0.28 0.22 0.32 0.27
6.4/深南大道科技园段 0.29 0.21 0.31 0.27
表9路口检测
(单位:毫克/立方米)
时间/地点 7:00 12:30 20:00 平均
6.1/卧室 0.07 0.10 0.09 0.86
6.2/卧室 0.07 0.10 0.08 0.83
6.3/办公室 0.10 0.11 0.11 0.106
6.4/办公室 0.10 0.10 0.10 0.10
6.3/地铁高新园站 0.12 0.10 0.11 0.11
6.4/地铁高新园站 0.11 0.10 0.11 0.106
表10常见生活场景检测
(单位:毫克/立方米)
6.4.1检测分析
表8可以看出,树木植被覆盖的大面积覆盖有利于空气质量较为清新。周末的公园的车流量和人流量都较多,但记录的数据显示,晚上PM2.5值开始下降,说明了植被的大面积覆盖有助于净化空气。
表9的两个地方主要是车流量不同,后者车流量大,同时,数据显示的PM2.5数值也比前面的地方高,两个地方的早晚都出现数值高峰,可能是由于早高峰晚高峰引起的。
表10对我们的日常生活的地方进行监测,检测结果良好。
6.4.2应对方法
治理方法:完善气象观测系统、建立雾霾天气预测系统;多植树;减少机动车和机动车安装尾气处理器;开发新能源;控制源头,监督工厂排放;加强宣传教育等
生活应对雾霾方法:1、雾霾天气减少开窗,2、外出戴专业防尘口罩,或者尽量减少出门;3、多食清肺的食物,多喝清肺的茶饮;4、补充维生素D;5、饮食清淡;7、减少吸烟甚至不吸烟[15]。
总结
从全世界范围来看,伴随城市化进程的加快,部分国家的大型城市都曾因工业发展、能源结构、交通以及生活方式等遇到过雾霾等空气污染问题。如今,中国的许多城市特别是东部沿海发达城市,由于气候、工业、认为等因素造成雾霾现象更为严重。空气的污染对人体健康的众多方面产生直接和巨大的影响,因此,应用所学的知识,制作一个经济,简单PM2.5浓度检测仪,检测空气中的PM2.5,直观的反映周围的空气质量,从个人角度缓解环境的压力
本次设计的空气质量检测仪通过灰尘传感器采集空气中PM2.5,经过单片机处理后在LCD液晶上显示PM2.5浓度值[1],设置一个报警值,当检测浓度值超过报警值后,蜂鸣器自动报警,并且根据浓度值范围亮起相应的灯。
在本设计中,主要的难点在于对传感器原理的理解、C语音编程及烧录,实物的测试。通过查阅专业课本以及网上搜索相关的资料制作出本次设计的空气质量检测仪。而且对于资料理解极其重要,非常的锻炼独自学习、设计能力。
当然在设计完成后,从目的性、现实性、实用性出发,在不同的时间段,对宿舍,校园,马路上等地方进行了反复测验。同时也对PM2.5的产生有了更加具体的了解。
参考文献
[1]刘少军,王瑜瑜.基于单片机控制的空气质量检测系统的设计[J].西安:西安航空职业技术学院,2015.(04):117-120.
[2]王幸之,钟爱琴.AT89系列单片机原理与接口技术[M].北京:北京航空航天大学出版社,2004.(02):77-80.
[3]郑锋,王巧芝.51单片机应用系统典型模块开发大全[M].北京:中国铁道出版社,2011.(03):57-61.
[4]林喆,孙清,于莹莹.基于STC89C52的单片机开发系统的研究与设计[J].电大理工,2011.(05):86-88
[5]李全利.单片机原理及应用技术[M].北京:高等教育出版社,2009.(02):77-80.
[6]罗亚萍.基于AT89S52单片机的室内有害气体监控系统[M].山西电子技术,2011.(04):88-90.
[7]范红刚,魏学海.51单片机自学笔记[M].北京:北京航空航天大学出版社,2010.(04):58-61
[8]杨将新,李华军.单片机程序设计及应用从基础到实践[M].北京.机械工业出版社,2006.(03):52-54.
[9]李维提,郭强.液晶显示应用技术[M].北京:电子工业出版社,2006.[15]
[10]周鸿武.基于单片机的酒精浓度检测仪设计[J].制造业自动化,2012.(04):85-87.
[11]郭文川.MCS-51单片机原理、接口及应用[M].北京:电子工业出版社,2013.
[12]王啸东.PM2.5粉尘颗粒检测仪的研制[M].电子世界,2013.
[13]万松峰.基于51单片机的PCB在线测试仪的设计[J].科技风,2013.
[14]李建荣.基于单片机的酒精浓度检测仪的设计[J].南通纺织职业技术学院学报,2013.(03):55-56.
[15]龚大宁,马善恒。植物为何总会追逐太阳生长[J].中文科技,2014.(03):112-114.
[16]熊娟,张思维.基于KEIL的单片机实验项目研究[[J].铜仁学院学报,2014,(04):87-90.
附录
附录1原理图
附录2源程序
#include<AT89X52.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar//宏定义
sbitRS=P2^5;//液晶接口
sbitRW=P2^6;
sbitEN=P2^7;
sbitLED1=P2^3;//指示灯接口
sbitLED2=P2^0;//绿灯接口
sbitLED3=P2^1;//黄灯接口
sbitLED4=P2^2;//红灯接口
sbitLED=P1^1;//粉尘传感器控制接口
sbitADCS=P1^4;//AD0832接口
sbitADCLK=P1^0;
sbitADDI=P1^2;
sbitADDO=P1^2;
sbitSET=P3^3;//按键接口
sbitADD=P3^4;
sbitDEC=P3^5;
sbitBEEP=P3^6;//蜂鸣器接口
ucharset_st;
uchartab[4];
uintDUST_SET=35;//固体颗粒的阈值
bitshanshuo_st;//闪烁间隔标志
bitbeep_st;//蜂鸣器间隔标志
ucharx=4;//计数器
//定义标识
ucharFlagStart=0;
floatDUST_Value;
uintDUST;
ucharnum=0;
ucharmm;
ucharabc;
ucharADC_Get[10]={0};//定义AD采样数组
ucharstr[5]={0};
/*****初始化定时器0*****/
voidInitTimer(void)
{
TMOD=0x01;
TL0=(65536-10000)/256;//定时10ms
TH0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
}
/*************************lcd1602程序**************************/
voiddelay1ms(uintms)//延时1毫秒(不够精确的)
{uinti,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
unsignedcharrolmove(unsignedcharm)
{
unsignedchara,b,c,d,e,f,g,h;
a=(m&0x01)<<7;
b=(m&0x02)<<5;
c=(m&0x04)<<3;
d=(m&0x08)<<1;
e=(m&0x10)>>1;
f=(m&0x20)>>3;
g=(m&0x40)>>5;
h=(m&0x80)>>7;
m=a|b|c|d|e|f|g|h;
returnm;
}
voidwr_com(ucharcom)//写指令//
{delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=rolmove(com);
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
voidwr_dat(uchardat)//写数据//
{delay1ms(1);;
RS=1;
RW=0;
EN=0;
P0=rolmove(dat);
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
/*****************************液晶初始化*********************************************/
voidlcd_init()//初始化设置//
{ delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
wr_com(0x80);
wr_dat(‘P’);//
wr_com(0x81);
wr_dat(‘M’);//:
wr_com(0x82);
wr_dat(‘2’);//
wr_com(0x83);
wr_dat(‘.’);//:
wr_com(0x84);
wr_dat(‘5’);//:
wr_com(0x85);
wr_dat(‘:’);
wr_com(0x8b);
wr_dat(‘m’);
wr_com(0x8c);
wr_dat(‘g’);
wr_com(0x8d);
wr_dat(‘/’);
wr_com(0x8e);
wr_dat(‘m’);
wr_com(0x8f);
wr_dat(‘3’);
wr_com(0xc0);
wr_dat(‘A’);
wr_com(0xc1);
wr_dat(‘l’);
wr_com(0xc2);
wr_dat(‘a’);
wr_com(0xc3);
wr_dat(‘r’);
wr_com(0xc4);
wr_dat(‘m’);
wr_com(0xc5);
wr_dat(‘:’);
wr_com(0xcb);
wr_dat(‘m’);
wr_com(0xcc);
wr_dat(‘g’);
wr_com(0xcd);
wr_dat(‘/’);
wr_com(0xce);
wr_dat(‘m’);
wr_com(0xcf);
wr_dat(‘3′);
}
/*****************显示函数******************************/
voiddisp(unsignedintData)//PM2.5值显示
{
uintTemp;
Temp=Data%10000;
str[0]=Temp/1000+0x30;//千位
Temp%=1000;
str[1]=’.’;
str[2]=Temp/100+0x30; //百位
Temp%=100;
str[3]=Temp/10+0x30; //十位
str[4]=Temp%10+0x30; //个位
wr_com(0x87);
wr_dat(str[0]);
wr_com(0x88);
wr_dat(str[1]);
wr_com(0x89);
wr_dat(str[2]);
wr_com(0x8a);
wr_dat(str[3]);
}
/************************报警值显示************************************/
voidbaojing()
{
wr_com(0xc7);
wr_dat(tab[0]+0x30);
wr_com(0xc8);
wr_dat(tab[1]);
wr_com(0xc9);
wr_dat(tab[2]+0x30);
wr_com(0xca);
wr_dat(tab[3]+0x30);
}
/*****延时子程序*****/
voidDelay(uintnum)
{
while(–num);
}
/**************************按键检测*******************************************/
voidcheckkey()
{
if(SET==0)
{
Delay(2000);
do{}while(SET==0);
set_st++;
if(set_st>1)set_st=0;
}
if(set_st==0)
{
}
elseif(set_st==1)
{
if(DEC==0)
{
Delay(2000);
do{}while(DEC==0);
if(DUST_SET>0)DUST_SET–;
if(DUST_SET==0)DUST_SET=0;
}
if(ADD==0)
{
Delay(2000);
do{}while(ADD==0);
DUST_SET++;
if(DUST_SET>80)DUST_SET=80;
}
}
tab[0]=DUST_SET/100;
tab[1]=’.’;
tab[2]=DUST_SET%100/10;
tab[3]=DUST_SET%100%10;
}
/*****报警子程序*****/
voidAlarm()
{
if(x>=10){beep_st=~beep_st;x=0;}
if(DUST/10>DUST_SET&&beep_st==1)BEEP=1;
elseBEEP=0;
if(DUST/10>0&&DUST/10<10){LED2=0;LED3=1;LED4=1;}
if(DUST/10>=10&&DUST/10<30){LED2=1;LED3=0;LED4=1;}
if(DUST/10>=30){LED2=1;LED3=1;LED4=0;}
}
/**************************AD0832转换程序***********************************************/
ucharADC0832(bitmode,bitchannel)//AD转换,返回结果
{
uchari,dat,ndat;
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADDI=1; //第1个下降沿为高电平
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI=mode; //低电平为差分模式,高电平为单通道模式。
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADDI=channel; //低电平为CH0,高电平为CH1
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束(经试验必需)
dat=0;
//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)
for(i=0;i<8;i++)
{
dat<<=1;
ADCLK=1;//拉高时钟端
_nop_();
_nop_();
ADCLK=0;//拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
dat|=ADDO;
}
ndat=0;//记录D0
if(ADDO==1)
ndat|=0x80;
//下面开始继续读取反序的数据(从D1到D7)
for(i=0;i<7;i++)
{
ndat>>=1;
ADCLK=1;//拉高时钟端
_nop_();
_nop_();
ADCLK=0;//拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
if(ADDO==1)
ndat|=0x80;
}
ADCS=1;//拉高CS端,结束转换
ADCLK=0;//拉低CLK端
ADDI=1;//拉高数据端,回到初始状态
if(dat==ndat)
return(dat);
else
return0;
}
/*****定时器0中断服务程序*****/
voidtimer0(void)interrupt1
{
uintj;
TL0=(65536-10000)/256;//定时10ms
TH0=(65536-10000)%256;
LED=1; //开启传感器的LED
x++;
for(j=0;j<30;j++);//0.28ms//延时0.28ms
abc=ADC0832(1,0); //开启ADC采集
FlagStart=1;
TR0=0;//先关闭定时器0
EA=0;
LED1=~LED1;//工作指示灯
LED=0;//关闭传感器LED
}
//中值滤波
//算法:先进行排序,然后将数组的中间值作为当前值返回。
ucharError_Correct(uchar*str,ucharnum)
{
unsignedchari=0;
unsignedcharj=0;
ucharTemp=0;
//排序
for(i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{
if(str[i]<str[j])
{
Temp=str[i];
str[i]=str[j];
str[j]=Temp;
}
}
}
//去除误差,取中间值
returnstr[num/2];
}
/*****主函数*****/
voidmain(void)
{
InitTimer();//初始化定时器
LED=1;
LED2=1;
LED3=1;
LED4=1;
BEEP=0;
lcd_init();//初始化显示
delay1ms(100);
lcd_init();//初始化显示
delay1ms(100);
while(1)
{
checkkey();//按键检测
if(set_st==0)
{
wr_com(0x0c);
if(FlagStart==1)//1次数据采集完成
{
num++;
ADC_Get[num]=abc;
if(num>9)
{
num=0;
DUST=Error_Correct(ADC_Get,10); //求取10次AD采样的值
DUST_Value=(DUST/256.0)*5000; //转化成电压值MV
DUST_Value=DUST_Value*0.17-0.1;//固体悬浮颗粒浓度计算Y=0.17*X-0.1X–采样电压V
if(DUST_Value<0) DUST_Value=0;
if(DUST_Value>760) DUST_Value=760; //限位
DUST=(uint)DUST_Value;
}
TL0=(65536-10000)/256;
TH0=(65536-10000)%256;
TR0=1;//开启定时器0
EA=1;
FlagStart=0;
}
Alarm();//报警检测
}
disp(DUST);//显示粉尘浓度值
baojing();//显示报警值
if(set_st==1)//报警值闪动
{
wr_com(0xca);
wr_com(0x0d);
delay1ms(150);
}
}
}/*****END*****/
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:打字小能手,如若转载,请注明出处:https://www.447766.cn/chachong/28791.html,