《基于51单片机的空气粉尘质量检测仪的设计》14000字_第1页
《基于51单片机的空气粉尘质量检测仪的设计》14000字_第2页
《基于51单片机的空气粉尘质量检测仪的设计》14000字_第3页
《基于51单片机的空气粉尘质量检测仪的设计》14000字_第4页
《基于51单片机的空气粉尘质量检测仪的设计》14000字_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

③LED;④S-GND;⑤Vo;⑥Vcc主要系数:灵活性:0.5V/(0.1mg/m3);自动输出工作电压:0.9V(TYP);损耗工作电流:11mA;运行工作实际温度:-10~65.0摄氏度;本次研究设计里夏普粉尘感应设备GP2Y1010AU0F主要用于测量确定环境里的PM2.5数值,并将模拟量传输到单片机上。故粉尘传感器的电路设计如图3-8图3-8粉尘传感器电路设计在PROTEUS里没有粉尘感应设备GP2Y1010AU的仿真模拟实验模型,因此在仿真模拟原理示意图里,我们用滑动变阻控制器设备来模拟仿真粉尘感应设备发回的模拟仿真数据信号(工作电压数值)。工作电路综合设计仿真模拟图如下示意图3-9所示。图3-9PM2.5传感器电路设计3.5声光报警模块声光自动报警功能模块应用一个三极管构件与一个蜂鸣控制器以及LED指示灯组成与单片机设备的P1.4相连接,当P1.4口为高压电平,蜂鸣控制器不自动报警,当P13口为低压电平,蜂鸣控制器自动报警。工作电路示意图具体如下图3.10所示。图3-10声光报警电路3.6按键模块按键模块由按键加上电阻组成,连接到单片机设备的P3.5,P3.6,P3.73个端口,仿真模拟工作电路示意图,如下示意图3-11所示图3-11按键电路3.7总体电路图本次研究设计主要包含:PM2.5收集功能模块,ADC0832模数转换功能模块,声光自动报警功能模块以及按钮功能模块。整体设计规划工作电路图如图3-12所示图3-12总体电路图第四章软件部分4.1系统流程设计本次研究设计的操作应用软件组成部分通常都是操作控制PM2.5粉尘感应设备收集PM2.5实际有效浓度数据信息,操作控制ADC0832展开模数转换,将转换的数据存放起来,再和预设数值展开对比分析,假如高于设立的数值,则就会联动声光自动报警功能模块展开反应。能够经过按钮工作电路对预设数值展开修改调整。在运行时能够实时显示PM2.5浓度。具体流程图如图4-1所示。图4-1系统流程图通过编写C语言程序后,我们将程序放入KEIL软件中进行调试,并利用该软件将C代码烧录到单片机最小控制系统中,用于控制粉尘传感器采集PM2.5数据,同时控制AT89C51单片机将从传感器接收到的模拟数据转换为数字量,并利用LCD液晶显示屏显示当前环境中的PM2.5值,如下为本次程序语言综合设计的程序编译思路:(1)定义有效数值种类,使用延时应用程序,定义数据信息发送传输位;(2)PM2.5测量确定及A/D交换应用程序:使用应用程序联动粉尘感应设备实时监测PM2.5模拟仿真数据信息,并且把其发送传输给ADC0832;与此同时,AD功能模块把模拟仿真量交换为数据量发送传输给单片机设备全面处理并且用液晶电子显示屏自动显示;(3)污染极限值设立与自动报警综合系统设计。主程序如下:voidmain() //主函数{ Init1602(); //初始化液晶函数 init(); //初始化定时器 while(1) //进入循环 { for(m=0;m<50;m++) //读50次AD值 sum=adc0832(0)+sum; //读到的AD值,将读到的数据累加到sum temp=sum/50; //跳出上面的for循环后,将累加的总数除以50得到平均值temp if(temp>K_ZERO) temp=temp-K_ZERO;//首先减去零点漂移,一般是130mV else temp=0; sum=0; //平均值计算完成后,将总数清零 if(set==0) //set为0,说明现在不是设置状态 Display_1602(temp,WARNING); //显示AD数值和报警值 if(temp<WARNING&&set==0) //AD数值小于报警值 { flag=0; //关闭报警 } elseif(temp>WARNING&&set==0)//AD值大于报警值 { flag=1; //打开报警 } Key(); //调用按键函数 }}4.2ADC0832模数转换设计ADC0832在一般情况下与单片机只有四条线相连,分别为CS、CLK、DO、DI。但是在使用的过程中你,D0,D1接口一般情况下不会同时使用,而且由于接口双向通信的缘故,所以在使用的过程中一般将D0与D1直接相连,然后在接入单片机的接口上,实现双向通信。当ADC0832的CS端口的电平为高时,这个芯片就会被禁止使用,整个芯片的转化工作停止。当使用该芯片进行模数转换的时候,要先将CS端口的电平置为低电平,此时芯片开始工作,而且在芯片工作期间,CS端口的电平要一直保持低电平。当芯片不工作的时,其他接口的电平随意,当芯片工作的时候,同时由处理器向芯片输入时钟脉冲信号,D0/DI根据处理器发出的控制信号来选择通道。在开始工作的时候,第一个时钟脉冲信号在D1接口时其下沉之前必须是高电平,充当起始信号。接下来的两个脉冲用来选择输入通道。其功能项见表4-1,当通道选择的端口输入为“1”和“0”时,此时转换通道为CH0。当通道选择的端口输入为“1”与“1”的时候,这个时候交换信号通道为CH1。当信号通道选用的接口自动输入为“0”与“0”时,此时转换通道是由CH0与CH1共同组成其前者作为正输入端口,后者为负输入端口。当通道选择的端口输入为“0”和“1”时,此时转换通道是由CH0与CH1共同组成其前者作为负输入端口,后者为正输入端口。此时当选择通道结束时将会接受转换指令进行数据转换。在选择通道结束的三个脉冲时间后,ADC0832的DI端口将会失去作用,可以任意电平对其不产生任何影响。之后D0/DI端口开始进行数据转换,这个步骤是在下一个脉冲到来前完成。下一个信号脉冲开始这个时候输出终端口D0把交换自动输出数据信息的最大位,以后的每一个信号脉冲均会交换移位数据信息,一直到8位数据信息所有交换实现了,这个时候一个储存字节的交换结束完成。从上一个字节转换结束开始,将会输出相反的字节,直至相反字节输出完成,这个时候才算实现了1次模数转换。在交换结束之后,会把接口CS置高压电平展开禁止使用,之后把交换的数据信息全面处理自动输出。ADC0832模数转换流程示意图,如下示意图4-2所示。表4-1ADC0832通道选择通道地址通道工作方式说明SGL/DIFODD/SIGN0100+-差分输入01-+10+单端输入方式11+,图4-2ADC0832流程图ADC0832模数转换程序如下:unsignedcharadc0832(unsignedcharCH){ unsignedchari,test,adval; adval=0x00; test=0x00; Clk=0;//初始化 DATI=1; _nop_(); CS=0; _nop_(); Clk=1; _nop_(); if(CH==0x00)//通道选择 { Clk=0; DATI=1;//通道0的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DATI=0;//通道0的第二位 _nop_(); Clk=1; _nop_(); } else { Clk=0; DATI=1;//通道1的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DATI=1;//通道1的第二位 _nop_(); Clk=1; _nop_(); } Clk=0; DATI=1; for(i=0;i<8;i++)//读取前8位的值 {nop_(); adval<<=1; Clk=1; _nop_(); Clk=0; if(DATO) adval|=0x01; else adval|=0x00; } for(i=0;i<8;i++)//读取后8位的值 {test>>=1; if(DATO) test|=0x80; else test|=0x00; _nop_(); Clk=1; _nop_(); Clk=0; } if(adval==test)//比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉 dat=test; nop_(); CS=1;//释放ADC0832 DATO=1; Clk=1; returndat;}

第五章设计仿真与调试5.1仿真软件介绍5.1.1KeilKeil是KeilSoftware企业推出的51体系兼容支持单片机设备C编辑语言操作应用软件研发体系,KeilC51是美国KeilSoftware企业推出的51体系兼容支持单片机设备C编辑语言操作应用软件研发体系,和汇编对比,C编辑语言在作用功能上、组成结构性、可读取性、可恢复性上有非常显著的功能优势,从而简单容易学习简单容易使用。用过汇编编程语言之后再运用C来研发,体会感受更为深刻。它相比汇编语言来说更加高效且易懂,对于刚接触单片机编程的新手来说,Keil是一个十分得力的帮手,他可以完成编辑,编译,连接,调试,仿真整个开发流程。它在开发过程中起到不可替代的作用,可以有效减少资源的浪费,还可以在编译出错后进行不断的调整。自带编程查错功能,能够有效的查出编程过程中的逻辑以及语法的错误并可以定位其位置。经过编程,编译,连接,调试等过程后生成可以被Proteus所接受的程序来进行仿真。其界面如图5-1所示。图5-1Keil编程界面5.1.2Proteus简介Proteus是英国公司开发出来的从原理示意图布图、程序代码测试到单片机设备和外围工作电路联合仿真模拟,一键转换到PCB综合系统设计,真正完成了从含义到产品的完整综合系统设计。是全球上唯一把工作电路仿真模拟操作应用软件、PCB应用软件与虚拟构造实验模型仿真模拟操作应用软件三合一的综合深化设计应用平台,并且连续增长其他体系运算处理器设备实验模型。在编辑翻译方面,它也支持IAR、Keil与MATLAB等很多种不同编译处理器设备。它可以将大量芯片元件仿真模拟出来,比如各种单片机芯片以及电阻,三极管,显示屏等元件还可以将灯光和声音仿真模拟出来,具有很强的实用性。在设计仪器和模拟仿真方面都有非常不错的表现。如图5-2为Proteus开发界面图5-2Proteus界面5.2设计仿真结果通过不断调试,其中遇到不少问题,比如因为前期在蜂鸣器选择上有些问题导致不响,最后通过选择合适的蜂鸣器,达到想要的结果。在最后的仿真结果如图5-3所示。图5-3仿真结果图

第六章结论社会在快速发展,人们从开始追求物质财富到追求精神层面得到宝藏,也越来越注重生存环境的质量。人类生存在蓝色星球上,生活在同一片蓝天之下,随着大气粉尘污染的加剧,蓝天白云不在,换来的是一张雾蒙蒙的大网,但唤醒的是我们保护环境的意识,所以对PM2.5的检测是十分有意义的事情。这次毕业设计用了大量的时间去查找资料,了解整个课题设计的背景意义,也去重新学习了关于单片机的知识,对模数转换模块又重新进行学习理解。由于在学习阶段对这些方面的认识还不够多,在学习的过程中也遇到了很多问题,但在慢慢地学习以及老师和同学的指导下逐渐攻克这些难题。在这次毕业设计中,我系统地了解到设计一个东西的流程。在设计过程中要考虑到设计的方方面面,部件是否满足设计需要,是否考虑到成品的体积等多种因素,还要考虑到做出的成品是否物美价廉等很多因素。在学习以及设计的过程中,也认识到自己在之前学习过程中的忽略的部分,这也提醒我在未来的工作中要抱着认真学习的态度。经过多次试验验证,将本系统所测的数据与监测站提供的专业测量数据相对比,本次毕设所设计的空气粉尘质量检测仪基本能够实现空气中PM2.5数据的测量,并维持在较少的误差范围内。特别是污染等级提示模块具有较好的实用价值,可以很好给监测人员提供依据。综上所述,本系统在应对较简单的环境时能够快速测出当前区域的空气指数,以其实时性和便捷性而广受人们的关注。当然,就目前实验的结果来看,所采用的夏普粉尘传感器GP2Y1010AU0F采集的PM2.5值与专业的环境监测站所测得数据进行对比,发现数据的精确度较低,不太适合进行高精确度的监测,只能应用在实验室研究中。因此,在接下来的研究中,可以向着精度和灵敏度更好的方面进行。另外,雾霾中的颗粒物还有很多,环境指数的评判指标也很多。下一步可以在本系统中加入更多的模块,比如PM10监测模块、温湿度监测模块、GPS定位模块等,以实现实时、全面地监测,为环境污染治理工作提供一个更加准确、科学、合理的数据。最后,所设计的电路也有待于进一步完善,提供稳定、固定的电源供电,合理地进行线路布线,使得硬件整体设计更加合理美观。参考文献李金亮,李兵,王泽华.浅谈PM2.5的危害及治理[J].邯郸职业技术学院学报,2020,33(2):43-44张理博,孙鹏,罗淑年.大气细颗粒物PM2.5的危害及其治理政策的研究[J].环境科学与管理,2020(4):15-17.索丹凤,曾三武.空气细颗粒物PM2.5对人体各系统危害的研究[J].医学信息,2019(9):112-115.边际.PM2.5的危害[J].国土绿化,2017,(10)杨新兴,冯丽华,尉鹏.大气颗粒物PM2.5及其危害[J].前沿科学,2012(01):24-33.SongyunJiang.TheDesignofTemperatureandSmokeDetectionandAlarmSystemBasedonSingle-ChipMicrocomputer[J].Electronicproduction,2017(11):21-22.QiZhang,QunguiDu.TheDesignTechniquesofSingle-ChipMicrocomputerApplicationSystem-BasedonCLanguageProgramming[M].Beijing:electronicindustrypress,2004.罗曼.基于便携式检测仪的空气PM2.5浓度监测与分析[J].科技与企业,2014(14):408-410.杨书申,邵龙义,龚铁强等.大气颗粒物浓度检测技术及其发展[J].北京工业职业技术学院学报,2005,4(1):36-39.盛成龙,夏凤毅大气细颗粒物自动检测技术比较[J].环境与健康杂志,2013,30(4):294.

附录附录一原理图附录二程序//程序头函数#include<reg52.h>#include<intrins.h> //包含头文件//显示函数#include<display.h>//宏定义#defineuintunsignedint#defineucharunsignedchar//管脚声明sbitFENG=P1^4; //蜂鸣器sbitCS=P3^2;sbitClk=P3^3;sbitDATI=P3^4;sbitDATO=P3^4; //ADC0832引脚//按键sbitKey1=P3^5;sbitKey2=P3^6;sbitKey3=P3^7;/*******************************定义全局变量********************************/unsignedchardat=0;//AD值unsignedcharCH=0;//通道变量unsignedintsum=0; //平均值计算时的总数unsignedcharm=0;bitbdataflag; //定义位变量ucharset; //设置变量ucharK_ZERO=00;//传感器零点漂移,//函数声明//PM2.5浓度变量uchartemp=0;//指示灯变量ucharWARNING=150; //报警值变量//宏定义//函数声明externvoidKey();/*/****************************************************************************函数功能:AD转换子程序入口参数:CH出口参数:dat****************************************************************************/unsignedcharadc0832(unsignedcharCH){ unsignedchari,test,adval; adval=0x00; test=0x00; Clk=0;//初始化 DATI=1; _nop_(); CS=0; _nop_(); Clk=1; _nop_(); if(CH==0x00)//通道选择 { Clk=0; DATI=1;//通道0的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DATI=0;//通道0的第二位 _nop_(); Clk=1; _nop_(); } else { Clk=0; DATI=1;//通道1的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DATI=1;//通道1的第二位 _nop_(); Clk=1; _nop_(); } Clk=0; DATI=1; for(i=0;i<8;i++)//读取前8位的值 { _nop_(); adval<<=1; Clk=1; _nop_(); Clk=0; if(DATO) adval|=0x01; else adval|=0x00; } for(i=0;i<8;i++)//读取后8位的值 { test>>=1; if(DATO) test|=0x80; else test|=0x00; _nop_(); Clk=1; _nop_(); Clk=0; } if(adval==test)//比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉 dat=test; nop_(); CS=1;//释放ADC0832 DATO=1; Clk=1; returndat;}voidinit() //定时器初始化函数{ TMOD=0x01; //定时器工作方式 TL0=0xb0; TH0=0x3c; //赋初值50ms EA=1; //打开中断总开关 ET0=1; //打开定时器0中断允许开关 TR0=1; //打开定时器0定时开关}voidAlcoholCalibration(void)//PM2.5浓度初始化校准函数{ sum=0; for(m=0;m<50;m++) //读50次AD值 { sum=adc0832(0)+sum; //读到的AD值,将读到的数据累加到sum } temp=sum/50; //跳出上面的for循环后,将累加的总数除以50得到平均值temp K_ZERO=500*temp/256;//8位ADC,首先得到电压值,单位10毫伏 Display_1602(0,WARNING); //显示AD数值和报警值}voidmain() //主函数{ Init1602(); //初始化液晶函数 init(); //初始化定时器 while(1) //进入循环 { for(m=0;m<50;m++) //读50次AD值 sum=adc0832(0)+sum; //读到的AD值,将读到的数据累加到sum temp=sum/50; //跳出上面的for循环后,将累加的总数除以50得到平均值temp if(temp>K_ZERO) temp=temp-K_ZERO;//首先减去零点漂移,一般是130mV else temp=0; sum=0; //平均值计算完成后,将总数清零 if(set==0) //set为0,说明现在不是设置状态 Display_1602(temp,WARNING); //显示AD数值和报警值 if(temp<WARNING&&set==0) //AD数值小于报警值 { flag=0; //关闭报警 } elseif(temp>WARNING&&set==0)//AD值大于报警值 { flag=1; //打开报警 } Key(); //调用按键函数 }}voidKey() //按键函数{ if(Key1==0) //设置键按下 { while(Key1==0); //按键松开 FENG=0; //蜂鸣器响 set++; //设置变量加 flag=0; //关闭报警 TR0=0; //关闭定时器 } if(set==1) //设置报警值时 { write_com(0x38);//屏幕初始化 write_com(0x80+0x40+10);//位置 write_com(0x0f);//打开显示无光标光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 FENG=1; //关闭蜂鸣器 } elseif(set>=2) //设置完成时 { set=0; //变量清零 write_com(0x38);//屏幕初始化 write_com(0x0c);//打开显示无光标无光标闪烁 FENG=1; //关闭蜂鸣器 flag=1; //打开报警 TR0=1; //打开定时器 } if(Key2==0&&set!=0) //设置报警值时加键按下 { while(Key2==0); //按键松开 FENG=0; //打开蜂鸣器 WARNING++; //报警值加 if(WARNING>=255) //最大加到255 WARNING=0; //清零 write_com(0x80+0x40+8); //选中液晶屏上的第二行第7 write_data('0'+WARNING/100);//开始显示报警值。例如报警值是123,123除以100的商是1,加上‘0’是为了得到液晶中对应1的显示码 write_data('0'+WARNING%100/10);//123除以100的余数是23,23再除以10得到的商是2 write_data('0'+WARNING%100%10);//23除以10的余数是3 write_com(0x80+0x40+10);//位置 FENG=1; //关闭蜂鸣器 } elseif(Key2==0&&set==0) { AlcoholCalibration();//PM2.5浓度初始值 } if(Key3==0&&set!=0) //注释同加按键 { while(Key3==0); FENG=0; WARNING--; if(WARNING<=0) WARNING=255; write_com(0x80+0x40+8); write_data('0'+WARNING/100); write_data('0'+WARNING/10%10); write_data('0'+WARNING%10); write_com(0x80+0x40+10);//位置 FENG=1; }}voidtime1_int(void)interrupt1 //定时器工作函数{ ucharcount; //定义计时变量 TL0=0xb0; TH0=0x3c; //重新赋初值50ms count++; //变量加一次就是50ms if(count==10) //加到10次就是500ms { if(flag==0) //flag=0时,也就是不开启报警 { FENG=1; //关闭蜂鸣器 } if(flag==1) //flag为1时,也就是打开报警 { FENG=0; //打开蜂鸣器 } } if(count==20) //计数20次,就是1s { //在1s时,红绿灯都是熄灭状态,蜂鸣器也是关闭状态,装可以达到闪烁的目的 count=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论