空气质量检测实训论文.docx
《空气质量检测实训论文.docx》由会员分享,可在线阅读,更多相关《空气质量检测实训论文.docx(29页珍藏版)》请在冰豆网上搜索。
空气质量检测实训论文
一.实验意义
雾霾是我们经常讨论的热门话题,灰蒙蒙的天,能见度很低、空气中呛人的气味,相信大多数同学都遭受过这样的经历。
雾霾笼罩下的城市
现在已经知道,造成雾霾天气的主要“元凶”是PM2.5,即空气动力学当量直径小于等于2.5微米的颗粒物。
这种能够直接进入肺泡的小颗粒,对人体健康危害最大。
当前,人们已经像关注天气一样,关注着空气质量。
大多数情况,我们都像查天气预报一样,通过监测站发布的数值,了解当前的PM2.5浓度。
但实际上,PM2.5并不像温度一样均匀分布,你呼吸到的PM2.5浓度,可能与报道的数值相差甚远。
通过该项目使我们可以采用电子积木搭接一个简单的空气质量检测仪。
既学习了知识,还能知道我们身边PM2.5的浓度,获得我们身边的真实数据。
查询到的焦作空气质量报告
空气质量指数(AirQualityIndex,简称AQI)是定量描述空气质量状况的指数,其数值越大说明空气污染状况越严重,对人体健康的危害也就越大。
参与空气质量评价的主要污染物为细颗粒物(pm2.5)、可吸入颗粒物(pm10)、二氧化硫(SO2)、二氧化氮(NO2)、臭氧(O3)、一氧化碳(CO)等六项。
pm2.5是指大气中直径小于或等于2.5微米的颗粒物,也称为可入肺颗粒物。
被吸入人体后会直接进入支气管,干扰肺部的气体交换,引发包括哮喘、支气管炎和心血管病等方面的疾病。
二.硬件系统设计
2.1系统整体结构
本实验采用“电子积木+底板”的形式,通过电子积木拼接,实现项目功能。
主要积木包括:
51单片机核心板、4位LED数码管模块、空气质量传感器模块、LCD1602液晶模块。
系统框图
2.2基础硬件模块介绍
2.2.1空气质量传感器模块
该模块选用ZPH01空气粉尘传感器,能够同时实现对VOC与PM2.5的同时检测。
传感器中的VOC检测单元对甲醛、苯、二氧化碳、氨气、氢气、酒精、香烟烟雾、香精等有机挥发气体具有极高的灵敏度。
PM2.5检测单元,采用粒子计数原理,可灵敏检测直径1μm以上灰尘颗粒物。
空气质量传感器模块
VOC测量原理:
采用专门的电化学传感器模块,实现VOC气体的检测。
不同气体灵敏度对比
该传感器将测得的气体浓度直接转化为A、B、C、D四个等级。
具体标定方法如下,将洁净空气质量默认为A级,以酒精浓度作为参考,大于50ppm时,设定为D级,中间均匀划定3个等级。
PM2.5测量原理:
采用光散射法测量原理,实现空气粉尘的测量。
使用该方法,在传感器内置一个加热器,加热引起气流上升使外部空气进传感器内部。
采用一个LED作为发光源,另一个光电传感器,通过测量光强度,判断空气粉尘的数量。
可检测的粒子为1μm以上粒子,如香烟、房屋灰尘、霉菌、花粉、孢子等。
微粒和分子在光的照射下会产生光的散射现象,和此同时,还吸收部分照射光的能量。
当一束平行单色光入射到被测颗粒场时,会受到颗粒周围散射和吸收的影响,光强将被衰减。
如此一来便可求得入射光通过待测浓度场的相对衰减率。
而相对衰减率的大小基本上能线性反应待测场灰尘的相对浓度。
光强的大小和经光电转换的电信号强弱成正比,通过测得电信号就可以求得相对衰减率。
光散射检测原理
测量结果输出为低脉冲率,根据下图对应关系,可转化为μg/m3单位。
PM2.5低脉冲率与灰尘颗粒物浓度对照图
测量结果输出帧格式
该传感器测量结果以PWM和UART串口两种方式输出,可通过PIN1(控制引脚)设置。
该引脚悬空时为PWM模式;接地时,为串口模式。
在本项目中,采用了串口模式,基本设置如下:
波特率:
9600
数据位:
8位
停止位:
1位
校验位:
无
Ø通讯命令:
模块每间隔1s发送一次浓度值,只发送不接收。
命令帧格式如下:
硬件连接:
该传感器共有5个接口:
本项目中,采用串口模式。
因此,连接如下图所示:
空气质量传感器
连接端
备注
PIN1(控制脚)
接地
设为串口模式
PIN2(输出脚OUT2/RXD/PM25)
接单片机P3.1(TXD)
也可不接
PIN3(电源正VCC)
接正5V电源
PIN4(输出脚OUT1/TXD/VOC等级)
接单片机P3.0(RXD)
PIN5(电源地)
接地
2.2.2创新平台底板模块
该底板采用标准定位孔的设计,并集成有5V直流电源接口及自锁电源开关、3.3V电源、8路LED显示、外接接口拓展等。
在课程设计中,为各模块提供固定、供电和接口转换功能。
底板的硬件资源:
Ø5V直流电源接口及自锁电源开关,带自恢复保险。
Ø大功率3.3V稳压芯片,可将外接5V电源转为3.3V。
Ø双路音频接口转换,既可做为音频输入也可作为输出。
Ø8路LED指示灯,高电平驱动。
Ø双排16PIN接口拓展转换口。
Ø板子的四周分别提供了16组5V和3.3V的电源接口。
Ø板子中间提供了17×23个间隔为10mm的定位孔。
模块位置图:
电子创新平台底板位置图
Ø电源端:
+5V电源接入端,+5V和+3.3V电源输出端(四角四组)。
ØLED控制端:
8路LED控制端分别控制相对应的8个LED(高电平有效,1亮;0灭)。
Ø音频输入端:
麦克风输入插孔,耳机输入插孔。
Ø拓展端:
拓展输入、输出接口,方便和外围设备的连接。
Ø模块定位孔:
固定模块,方便试验。
原理及功能:
(1)固定电子积木
该底板采用标准定位孔的设计,电子积木可固定在底板上,为设计项目提供相对稳定的机械结构。
电子积木之间的连线也可沿底板布线,通过线扎绑结在定位孔上。
(2)提供供电
Ø 底板四周分别提供了16组5V和3.3V的电源接口。
电子积木可就近选择相应的接口,通过杜邦线,提供供电。
连接电源时,需注意区分正负。
Ø以下图为例,左侧4个插针为正,右侧为负。
2.2.351单片机核心模块
Ø51单片机核心板即CORE51-BOARD模块。
该模块为51单片机最小系统板,采用标准定位孔的设计,支持JTAG和串口两种下载方式,四组I/O口全部引出,可广泛用于单片机基础学习和电子创新等电子电路的微控制系统。
硬件资源:
Ø直流电源5V插孔,方便模块接通电源单独使用。
Ø使用跳线帽,选择不同功能。
Ø串口和JTAG双下载通道,使用更方便。
Ø复位电路,方便单片机的复位。
模块位置图:
51核心板模块位置图
端口说明:
Ø下载端:
与51下载器配合,可实现自动上电,无需复位一键下载。
Ø电源拓展接口:
可做电源使用,为外围电路模块等供电。
Ø4组I/O端口
2.2.4LED数码管模块
LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O接口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O接口线控制。
核心思想是通过位码选择让4个数码管中的哪一个数码管亮,然后通过段码决定该数码管显示的具体数据。
在本实验主程序中体现如下:
Ø/***********数码管显示部分***********/
for(i=0;i<4;i++)
{
P2=wei[i];
P0=duan[xs[i]];
delay
(2);
}
Ø工作过程为:
第一步使右边第一个数码管的公共端D0为1,其余的数码管的公共端为0,同时在I/O
(1)上发送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的公共端D1为1,其余的数码管的公共端为0,同时在I/O
(1)上发送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依此类推,直到最后一个,这样4个数码管轮流显示相应的信息,一次循环完毕后,下一次循环又这样轮流显示,从计算机的角度看是一个一个地显示,但由于人的视觉暂留效应,只要循环的周期足够快,则看起来所有的数码管就都是一起显示的了,这就是动态显示的原理。
Ø本实验中采用四位一体的七段LED数码管组成的动态扫描电路。
用于LED动态扫描电路的学习及在单片机等应用中作为显示模块使用。
硬件资源:
Ø采用一个4位一体共阳极LED数码管作为显示器件
Ø8个段选数据端,分别对应4个数码管的A~dp,低电平有效。
Ø4个位选数据端,分别对应4个数码管的公共端(即位控端),低电平有效。
模块位置图:
4位LED显示模块位置图
端口说明:
Ø段选端:
A~DP分别对应数码管的8个段,低电平有效。
Ø位选端:
A1~A4分别对应数码管的4个公共端,低电平有效。
Ø电源端:
接电源,供电电压5V。
硬件连接:
在本项目中,该模块的电路连接如下所示
4LED数码管模块
连接端
备注
段选端,A-DP
接单片机P0.0-P0.7
位选端,A1-A4
接单片机P2.0-P2.3
电源端
接正5V电源正负
2.2.5位独立按键模块(扩展模块)
本模块共8个独立按键,分别分为“上”、“下”、“左”、“右”键和A、B、C、D四个功能键,每个按键对应一个输出端口。
输出端默认高电平,当对应按键按下时,输出低电平。
硬件资源:
●8KEY按键模块工作电压可根据需要选用5V或3.3V。
●输出端口正常状态下输出高电平,有键按下后,对应端口输出低电平。
●8个按键是分别独立的按键,可根据需要任意组合使用。
模块位置图:
8独立按键模块位置图
端口说明:
●电源端:
+5V电源接入端。
●输出端:
8位并行数据接口。
2.2.6蜂鸣器模块(扩展模块)
模块介绍:
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。
广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
工作原理:
本实验使用的蜂鸣器的响与不响取决于单片机I/O口的电平,当单片机输出位低电平时蜂鸣器响,高电平时不响。
2.2.7LCD1602液晶模块(扩展模块)
LCD1602液晶模块,即LCD1602-BOARD板。
该模块以工业液晶LCD1602为核心,采用标准定位孔的设计,在原有液晶的基础上增加了背光控制功能。
该模块能够同时显示2行16列共计32个字符,可广泛用于电子创新应用、智能电子产品设计等的显示器件。
硬件资源:
●显示:
ASCII字符集,16列×2行,32个字符。
●背光:
包含背光驱动,I/O口可直接控制背光。
●接口:
并行
模块位置图:
LCD1602液晶模块位置图
端口说明:
●电源端:
+5V电源接入端。
●数据端:
D0-D7共8位并行数据接口。
●控制端:
RS,RW,EN与液晶控制端对应。
●背光端:
K,高电平有效,”1″开背光,”0″关背光。
三.软件系统设计
3.1主程序
3.1.1主程序模块代码
voidmain(void)
{
uart_int();
while
(1)
{
key_scan();//检测按键函数
if(buffnew==1)//接收到新的1帧数据
{buffnew=0;
i=FucCheckSum(buff,9);
if(i==buff[8])//校验成功
{if(ct1<5)
{ct1++;
vsum=vsum+buff[7];
//psum=psum+buff[3]*100+buff[4];
psum=psum+buff[3]*100+buff[4];
}
else//每测得5组数据,取平均值
{ct1=0;
voc=vsum/5;
pm25=psum/5;
vsum=0;
psum=0;
pm25=pm25*2/10//根据低脉冲率与灰尘浓度的关系,转化为ug/m3单位
}
}
}
else
{
jiemianhanshu();//界面显示函数
}
baojinghanshu();//蜂鸣器报警函数
}
}
3.1.2程序流程图
3.1.3主程序程序流程说明
1、初始化
开机后,首先完成串口初始化,开启串口中断。
2、主循环
进入主循环,根据变量buffnew,判断是否接收到新的一帧数据。
当接收到新的一帧数据:
1、对该帧数据进行校验,如果校验成功继续,如果失败则放弃本次操作。
2、连续取5组数据,分别是“低脉冲率”和“VOC浓度等级”,并求平均值。
3、根据低脉冲率与灰尘浓度的关系,转化为μg/m3单位。
如果未接收到新的一帧数据:
1、将数据转化为显示格式。
2、通过数码管动态扫描的方式,显示数据。
3.2扩展模块程序
3.2.1按键模块的扩展
通过按键可以控制数码管多界面切换和完成对pm2.5的报警提醒阀值的设置,本扩展模块分为以下两个界面。
界面一:
实时显示VOC等级与PM2.5的值。
界面二:
显示pm2.5的报警提醒阀值,通过按键可以对其进行加减操作,操作完成后,按“确认”按键保存阀值并返回界面一。
代码如下:
/*******************按键扫描函数*******************/
voidkey_scan()
{
if(key_LEFT==0)//进入调整阀值界面
{
delay1(5);
if(key_LEFT==0)
{
qiehuan_flag=1;
}
}
if(key_TOP==0)//加
{
delay1(5);
if(key_TOP==0)
{
while(!
key_TOP);
T=T+5;
}
}
if(key_DOWN==0)//减
{
delay1(5);
if(key_DOWN==0)
{
while(!
key_DOWN);
T=T-5;
}
}
if(key_RIGH==0)//返回显示界面
{
delay1(5);
if(key_RIGH==0)
{
qiehuan_flag=0;
flag=0;
}
}
if(key_C==0)//按键C关闭蜂鸣器报警功能
{
delay1(5);
if(key_C==0)
{
flag=1;
}
}
if(key_D==0)//按键D打开正常报警功能
{
delay1(5);
if(key_D==0)
{
flag=0;
}
}
}
3.2.2蜂鸣器模块
蜂鸣器主要有提醒和报警两个功能
提醒功能:
针对pm2.5,对于pm2.5超过设定阀值时,蜂鸣器开始响500ms,不响2500ms,从而起到提醒功能。
报警功能:
针对VOC等级,VOC等级测可测可燃性气体,当可燃性气体到达一定浓度时,非常危险,因此蜂鸣器响的急促一点(响300ms,不响300ms),从而起到报警的效果。
关键代码如下:
/*******************蜂鸣器报警函数*************************/
voidbaojinghanshu()
{
staticunsignedintnum=0,num1=0;
if(flag==0)
{
if(xs[3]==0x0d)//voc是D等级时报警码
{
num1++;
if(num1<300)
{
buzz=0;//蜂鸣器响
delay1
(1);
}
if(num1>300)
{
buzz=1;//蜂鸣器不响
delay1
(1);
if(num1==600)
num1=0;
}
}elseif(pm25>T)//PM2.5的提醒功代
{
num++;
if(num<500)
{
buzz=0;//蜂鸣器响
delay1
(1);
}
if(num>500)
{
buzz=1;//蜂鸣器不响
delay1
(1);
if(num==3000)
num=0;
}
}else
{
buzz=1;//蜂鸣器不响
}
}else
{
buzz=1;//蜂鸣器不响
}
if(flag==0)
{
led=0;//led灯亮,表示报警功能正常打开
}else
{
led=1;//led灯灭,表示报警功能关闭
}
}
3.3.主要算法
3.3.1帧数据的校验算法原理
帧数据的校验原理:
该函数将数组的第一个元素至倒数第二个元素分别相加后求和,再将其和取反+1,然后将结果送至主函数。
在主函数里面,将结果与数组的最后一位(即校验值)相比较,如果相等,则帧数据校验成功,否则丢弃该帧数据。
Ø本实验中根据求和校验函数实现传感器输出串口数据帧的校验功能。
如下:
Ø求和校验函数:
********************************************************************/
unsignedcharFucCheckSum(unsignedchar*i,unsignedcharln)
{unsignedcharj,tempq=0;
i+=1;
for(j=0;j<(ln-2);j++)
{tempq+=*i;
i++;
}
tempq=(~tempq)+1;
return(tempq);
}
低脉冲率与灰尘浓度的关系转换算法:
Ø根据传感器资料,数据帧的第3数是:
“低脉冲率整数部分”,第4位是“低脉冲率小数部分”。
因此,低脉冲率可由:
buff[3]*100+buff[4],得到。
Ø根据低脉冲率与灰尘浓度对照表,以线性关系和20.00%与400μg/m3为参考,将低脉冲率乘以0.2,得到灰尘浓度。
即通过:
pm25*2/10,得到。
3.4主要函数
3.4.1求和校验函数
该函数实现传感器输出串口数据帧的校验功能。
*函数名:
ucharFucCheckSum(uchar*i,ucharln)
*功能描述:
求和校验(取发送、接收协议的1\2\3\4\5\6\7的和取反+1)
*函数说明:
将数组的元素1-倒数第二个元素相加后取反+1(元素个数须大于2)
********************************************************************/
unsignedcharFucCheckSum(unsignedchar*i,unsignedcharln)
{unsignedcharj,tempq=0;
i+=1;
for(j=0;j<(ln-2);j++)
{tempq+=*i;
i++;
}
tempq=(~tempq)+1;
return(tempq);
}
主程序中有i=FucCheckSum(buff,9);//取由接收到的数据计算出的校验值
if(i==buff[8])//判断校验值是否相等
{
………
}
校验原理:
数据在发送前通过对数据帧中的数据求和取反加一,得到一个校验值(随数据传送到接收端),在接收端接收到数据后对数据进行同样的处理之后,也得到一个值,通过与接收的检验值的比较,如果两者相等,则说明数据传送无差错,反之,数据传送错误,就丢弃此次数据。
3.4.2串口初始化函数
该函数实现单片机的串口初始化,将串口设定为波特率9600,数据位8,停止位1,效验位无。
*功能描述:
串口初始化
*函数说明:
********************************************************************/
voiduart_int(void)
{SCON=0x50;//REN=1允许串行接受状态,串口工作模式1
PCON=0x00;
TMOD|=0x20;//定时器工作方式2
TH1=0xFD;//baud*2/*波特率9600、数据位8、停止位1。
效验位无
TL1=0xFD;
TR1=1;
EA=1;
ES=1;
}
3.4.3串口中断函数
该函数实现串口中断接收,并将接收的数据整理出完整的一帧,同时将接收标置置位。
********************************************************************/
*功能描述:
串口中断
*函数说明:
用于接收传感器的数据帧,每帧9个数据
********************************************************************/
voidSerial()interrupt4
{unsignedchari;
RI=0;
i=SBUF;//SUBF接受/发送缓冲器
if(i==0xff)//判断数据头
{ct=0;
buff[ct]=i;
}
elseif(i==0x18)
{ct=1;
buff[1]=i;
}
else
{ct++;
buff[ct]=i;
if(ct==8)buffnew=1;//接收满9个数据后,buffnew置位
}
}
四.调试分析
4.1硬件组装和程序的下载调试
4.1.1硬件组装和连接
Ø将单片机最小系统板、LED数码显示模块、PM2.5传感器模块合理的分配在底板上,并用螺丝钉固定。
Ø将最小系统板和LED数码管的VCC和GND线分别链接在底板上的VCC和GND引脚上。
Ø将最小系统板上的RXD和TXD分别连接在传感器模块的第4和第2引脚接口。
Ø将LED数码管的A、B、C、D、E、F、G段分别对应连接在单片机P0.0和P0.7引脚上,将LED数码管的A1、A1、A3、A4位选分别链接在单片机的P2.0和P2.3引脚上。
Ø将PM2.5检测模块的VCC和GND连接到底板上
Ø插上下载线,硬件连接完毕。
4.2调试过程中出现的问题
4.2.1STC单片机程序下载失败原因分析
在做实验的过程中,有许多同学的实验板出现了向单片机里面下载程序失败的现象,我在此将原因及解决