传感器结题报告项目名称:PM2.5监测系统指导老师:付永生小组成员:王明祥电工一班201300121171张春婷电工二班201300110108一、概述1.1总体设计方案设计提出的“PM2.5监测系统”的方案最基本的实现方法是由单片机、粉尘检测传感器、显示模块、报警器等模块组成的电路。GP2Y1050AU0F粉尘传感器采集空气中PM2.5的浓度值,经过STC12C5A60S2单片机处理后,在LCD1602液晶上显示。并且设置一个报警值,检测的PM2.5浓度值超过报警值后,蜂鸣器报警,报警值可以按键手动调节。另外,该设计在实时检测浓度的同时,添加了温度检测和触摸控制开关。1.2系统原理框图二、主控制器和主要元件2.1STC12C5A60S2单片机STC12C5A60S2/AD/PWM系列单片机是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。2.2夏普粉尘传感器GP2Y1050AU0FSt12c5a60s2显示装置温度传感器PM2.5检测传感器报警装置触摸按键按键和其他反馈装置夏普公司灰尘传感器GP2Y1050AU0F,体积小,灵敏度高,可以用来测量PM2.5的浓度。此款产品不但可以检测出单位体积粒子的绝对个数,而且内置气流发生器,可以自行吸入外部空气。其内部对角安放着红外线发光二级管和光电晶体管,使得其能够探测到空气中尘埃反射光,即使非常细小的颗粒也能够被检测到。传感器工作原理图:传感器内部结构图:硬件连线图:输出特性:输出方式为标准串口输出。粉尘浓度计算方式:Ud=A*Vout(其中Ud为粉尘浓度,单位ug/m3;Vout为传感器输出信号,单位为V;A为比例系数)传感器参数选择:PM2.5传感器测量出来的数值一共七个字节,其中第二字节和第三字节是有效的字节,并且还电压和浓度值之间存在一个参数值,我们根据实际浓度值算出这个参数是350.2.3LM35D温度传感器概述:LM35D是把测温传感器与放大电路做在一个硅片上,形成一个集成温度传感器。它是一种得到广泛使用,由于它采用内部补偿,所以输出可以从0℃开始。封装型式:LM35有多种不同封装型式。在常温下,LM35不需要额外的校准处理即可达到±1/4℃的准确率。其电源供应模式有单电源与正负双电源两种,其引脚如图一所示。图4.1LM35封装规格参数1、工作电压:直流4~30V;2、工作电流:小于133μA3、输出电压:+6V~-1.0V4、输出阻抗:1mA负载时0.1Ω;5、精度:0.5℃精度(在+25℃时);6、漏泄电流:小于60μA;7、比例因数:线性+10.0mV/℃;8、非线性值:±1/4℃;9、校准方式:直接用摄氏温度校准;10、额定使用温度范围:-55~+150℃。11、引脚说明:①电源负GND;②电源正VCC;③信号输出S;传感器参数供电电压35V到-0.2V输出电压6V至-1.0V输出电流10mA指定工作温度范围LM35D0℃to+100℃计算公式:2.41602LCD液晶屏1602LCD尺寸图引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极引脚接口说明表1602液晶模块内部的控制器共有11条控制指令,如下表所示:控制命令表仿真截图:2.4蓝牙模块蓝牙模块应用领域:该模块主要用于短距离的数据无线传输领域。可以方便的和PC机(PDA手机)的蓝牙设备相连,也可以两个模块之间的数据互通。避免繁琐的线缆连接,能直接替代现有的串口线。蓝牙模块封装信息:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容BF10模块引脚图系统框图及应用电路图:BF10Reg.+3.3VRS232/USBtoUartMCU/CPUPIOUARTUARTBF10ApplicationBlockDiagram系统框图应用电路图注:蓝牙模块供电推荐使用AMS1117等纹波小的稳压芯片2.5触摸按键模块TTP223是触摸键检测IC,提供1个触摸键。触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的。低功耗和宽工作电压是触摸键的DC和AC特点。1.工作电压2.0V~5.5V2.工作电流@VDD=3V,无负载,SLRFTB=1低功耗模式下典型值1.5uA,最大值3.0uA快速模式下典型值3.5uA,最大值7.0uA@VDD=3V,无负载,SLRFTB=0低功耗模式下典型值2.0uA,最大值4.0uA快速模式下典型值6.5uA,最大值13.0uA3.最长响应时间大约为快速模式下60mS,低功耗模式下220mS@VDD=3V4.灵敏度可由外部电容(0~50pF)调节5.由选择管脚(SLRFTB管脚)提供两个采样长度的选择6.人体触摸检测稳定,可取代传统的直接的开关键7.由选择管脚(LPMB管脚)提供快速模式和低功耗模式的选择8.由选择管脚(TOG管脚)提供直接模式、触发模式的选择同时还保留漏极开路(OpenDrain)输出模式,OPDO管脚为漏极开路(OpenDrain)输出,Q管脚为CMOS输出9.各输出模式都可通过选择管脚(AHLB管脚)选择高电平或者低电平有效10.由选择管脚(MOTB管脚)提供100sec最长输出时间选择11.有外部上电复位管脚(RST管脚)12.上电之后需要约0.5sec的稳定时间,此时间段内不要对键进行触摸,此时所有功能都被禁止13.始终进行自校准三、硬件电路设计整体框图:仿真图;3.1粉尘传感器电路设计3.2LM35D温度传感器电路设计3.3DS1302电路3.41602LCD模块电路设计3.5按键电路3.6报警电路四、程序设计及软件应用开始初始化按键检测是否按下设置键?控制传感器采集数据更改报警值A/D转换计算浓度值是否大于报警值对应浓度范围的LED亮起液晶显示当前浓度,显示报警浓度值触发蜂鸣器是否五、实验数据从串口助手读数据:用示波器观察烟尘传感器的输出实际侧视图片:附件:程序清单/****************************函数名称:pm2.5检测传输**函数功能:接收pm2.5传感器数值串口发送出去**王明祥张春婷2015.11.18**************************/#includestc12c5a60s2.h#includeLCD1602.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitSCLK=P1^0;//DS1302始终控制总线sbitDATA=P1^1;//DS1302数据传输总线sbitRESET=P1^2;//DS1302复位总线uchartable2[8];ucharsecond,minute,hour,day,month,year;//定义秒分时日月年变量voiddelay1ms(void)//误差-0.018084490741us{unsignedchara,b;for(b=18;b0;b--)for(a=152;a0;a--);_nop_();//ifKeil,requireuseintrins.h}voiddelaynms(ucharm){while(m--){delay1ms();}}/***********************延时函数***********************/voiddelay(){_nop_();_nop_();}/*******************************单片机小精灵生成的延时1us代码*******************************/voiddelay1us(void)//误差-0.005353009259us{unsignedchara;for(a=1;a0;a--);_nop_();//ifKeil,requireuseintrins.h}/***********************************延时nus***********************************/voiddelaynus(uinti){while(i--){delay1us();}}/************************************函数功能:串口初始化波特率:2400工作方式:工作方式1************************************/voidUART_Init(){TMOD=0x20;//定时器1工作方式2八位自动重装模式TL1=0xF4;//波特率2400TH1=0xF4;//TR1=1;//开启定时器1SM0=0;SM1=1;//串行口通信方式1八位uart波特率可变REN=1;//允许串行口接收ES=0;//关闭串行口中断}/************************************ADC初始化************************************/voidADC_Init(){P1M0=0x08;//P1.3开漏模式00001000P1.3因为按键用到了P1.4-P1.7而时钟用到了P10-P12P1M1=0x08;//P1.0开漏ADC_CONTR&=0xF8;//设置转换速度最快ADC_CONTR|=0x03;//设置P1.3引脚为输入模拟量delaynms(5);//等待输入稳定}ucharAD_Change(){ucharresult;ADC_CONTR|=0x88;//启动转换while((ADC_CONTR&0x10)==0);//等待转换结束ADC_CONTR&=0xE7;//清标志位,停止AD转换result=ADC_RES;result=2;result=result+(ADC_RESL&0x03);//结果只取高八位return(result);}/*****************************向DS1302中写入一个字节的函数*****************************/voidDS1302_WriteByte(uchardat){uchari;for(i=0;i8;i++)//8位计数器{SCLK=0;//时钟线拉低delay();//延时等待dat=1;//移出数据DATA=CY;//送出到端口SCLK=1;//时钟线拉高delay();//延时等待}}/**************************************从DS1302读1字节数据**************************************/ucharDS1302_ReadByte(){uchari;uchardat=0;for(i=0;i8;i++)//8位计数器{SCLK=0;//时钟线拉低delay();//延时等待dat=1;//数据右移一位if(DATA)dat|=0x80;//读取数据SCLK=1;//时钟线拉高delay();//延时等待}returndat;}/*********************