传感器终期报告第三版_第1页
传感器终期报告第三版_第2页
传感器终期报告第三版_第3页
传感器终期报告第三版_第4页
传感器终期报告第三版_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、传感器结题报告 项目名称: PM2.5监测系统 指导老师: 付永生 小组成员: 王明祥 电工一班 201300121171 张春婷 电工二班 201300110108一、概述1.1 总体设计方案 设计提出的“PM2.5监测系统”的方案最基本的实现方法是由单片机、粉尘检测传感器、显示模块、报警器等模块组成的电路。GP2Y1050AU0F粉尘传感器采集空气中PM2.5的浓度值,经过STC12C5A60S2单片机处理后,在LCD1602液晶上显示。并且设置一个报警值,检测的PM2.5浓度值超过报警值后,蜂鸣器报警,报警值可以按键手动调节。另外,该设计在实时检测浓度的同时,添加了温度检测和触摸控制开关

2、。1.2 系统原理框图报警装置显示装置St12c5a60s2触摸按键温度传感器按键和其他反馈装置PM2.5检测传感器二、主控制器和主要元件2.1 STC12C5A60S2单片机STC12C5A60S2/AD/PWM系列单片机是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。2.2 夏普粉尘传感器GP2Y1050AU0F 夏普公司灰尘传感器GP2Y1050AU0F,体积小,灵敏度高,可以用来测量PM2.5的浓度。此款产品不但可以检测出单位体积粒子的绝对个数,而且内置气流发

3、生器,可以自行吸入外部空气。其内部对角安放着红外线发光二级管和光电晶体管,使得其能够探测到空气中尘埃反射光,即使非常细小的颗粒也能够被检测到。传感器工作原理图:传感器内部结构图:硬件连线图:输出特性: 输出方式为标准串口输出。 粉尘浓度计算方式:Ud=A*Vout (其中Ud为粉尘浓度,单位ug/m3;Vout为传感器输出信号,单位为V;A为比例系数)传感器参数选择: PM2.5传感器测量出来的数值一共七个字节,其中第二字节和第三字节是有效的字节,并且还电压和浓度值之间存在一个参数值,我们根据实际浓度值算出这个参数是350.2.3 LM35D温度传感器概述:LM35D是把测温传感器与放大电路做

4、在一个硅片上,形成一个集成温度传感器。它是一种得到广泛使用,由于它采用内部补偿,所以输出可以从0开始。封装型式:LM35有多种不同封装型式。在常温下,LM35 不需要额外的校准处理即可达到 ±1/4的准确率。其电源供应模式有单电源与正负双电源两种,其引脚如图一所示。图4.1 LM35封装规格参数 1、工作电压:直流430V; 2、工作电流:小于133A 3、输出电压:+6V-1.0V 4、输出阻抗:1mA负载时0.1; 5、精度:0.5精度(在+25时); 6、漏泄电流:小于60A; 7、比例因数:线性+10.0mV/; 8、非线性值:±1/4; 9、校准方式:直接用摄氏温

5、度校准; 10、额定使用温度范围:-55+150。 11、引脚说明:电源负GND;电源正VCC;信号输出S;传感器参数供电电压35V到-0.2V输出电压6V至-1.0V输出电流10mA指定工作温度范围LM35D 0 to +100计算公式:2.4 1602 LCD液晶屏1602LCD尺寸图引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据

6、7D0数据15BLA背光源正极8D1数据16BLK背光源负极引脚接口说明表1602液晶模块内部的控制器共有11条控制指令,如下表所示:序号指令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读出

7、的数据内容控制命令表仿真截图:2.4 蓝牙模块蓝牙模块应用领域: 该模块主要用于短距离的数据无线传输领域。可以方便的和PC机(PDA手机)的蓝牙设备相连,也可以两个模块之间的数据互通。避免繁琐的线缆连接,能直接替代现有的串口线。蓝牙模块封装信息:<BF10模块 引脚图>系统框图及应用电路图:系统框图应用电路图注:蓝牙模块供电推荐使用AMS1117等纹波小的稳压芯片2.5 触摸按键模块 TTP223是触摸键检测IC,提供1个触摸键。触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的。低功耗和宽工作电压是触摸键的DC和AC特点。1.工作电压 2.0V5.5V2.工作电流 VDD=

8、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.灵敏度可由外部电容(050pF)调节5.由选择管脚( SLRFTB管脚)提供两个采样长度的选择6.人体触摸检测稳定,可取代传统的直接的开关键7.由选择管脚( LPMB管脚)提供快速模式和低功耗模式的选择8.由选择管脚( TOG管脚)提供直接模式、触发模式的选择同

9、时还保留漏极开路(Open Drain)输出模式,OPDO管脚为漏极开路(Open Drain)输出, Q管脚为CMOS输出9.各输出模式都可通过选择管脚( AHLB管脚)选择高电平或者低电平有效10.由选择管脚( MOTB管脚)提供100sec最长输出时间选择11.有外部上电复位管脚( RST管脚)12.上电之后需要约0.5sec的稳定时间,此时间段内不要对键进行触摸,此时所有功能都被禁止13.始终进行自校准3、 硬件电路设计整体框图: 仿真图;3.1粉尘传感器电路设计3.2 LM35D 温度传感器电路设计3.3 DS1302电路3.4 1602 LCD模块电路设计3.5按键电路3.6 报警

10、电路4、 程序设计及软件应用5、 实验数据从串口助手读数据:用示波器观察烟尘传感器的输出实际侧视图片:附件: 程序清单/*函数名称:pm2.5检测 传输*函数功能:接收pm2.5传感器数值 串口发送出去*王明祥 张春婷 2015.11.18 */#include<stc12c5a60s2.h>#include<LCD1602.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit SCLK=P10; /DS1302始终控制总线 sbit DATA=P11;

11、 /DS1302数据传输总线sbit RESET=P12; /DS1302复位总线 uchar table28;uchar second,minute,hour,day,month,year; /定义秒分时日月年变量 void delay1ms(void) /误差 -0.018084490741us unsigned char a,b; for(b=18;b>0;b-) for(a=152;a>0;a-); _nop_(); /if Keil,require use intrins.hvoid delaynms(uchar m) while(m-) delay1ms(); /*延时

12、函数*/void delay() _nop_(); _nop_();/*单片机小精灵生成的延时1us代码*/void delay1us(void) /误差 -0.005353009259us unsigned char a; for(a=1;a>0;a-); _nop_(); /if Keil,require use intrins.h/*延时nus*/void delaynus(uint i) while(i-) delay1us(); /*函数功能:串口初始化波特率:2400工作方式:工作方式1 */void UART_Init() TMOD=0x20; /定时器1工作方式2 八位自

13、动重装模式 TL1=0xF4; /波特率2400 TH1=0xF4; / TR1=1; /开启定时器1 SM0=0; SM1=1; /串行口通信方式1 八位uart 波特率可变 REN=1; / 允许串行口接收 ES=0; /关闭串行口中断 /*ADC 初始化 */void ADC_Init() P1M0=0x08; /P1.3开漏模式0000 1000 P1.3 因为按键用到了P1.4-P1.7 而时钟用到了P10-P12 P1M1=0x08; /P1.0开漏 ADC_CONTR&=0xF8; /设置转换速度最快 ADC_CONTR|=0x03; /设置P1.3引脚为输入模拟量 de

14、laynms(5); /等待输入稳定 uchar AD_Change() uchar result; 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中写入一个字节的函数*/void DS1302_WriteByte(uchar dat) uchar

15、i; for (i=0; i<8; i+) /8位计数器 SCLK = 0; /时钟线拉低 delay(); /延时等待 dat >>= 1; /移出数据 DATA = CY; /送出到端口 SCLK = 1; /时钟线拉高 delay(); /延时等待 /*从DS1302读1字节数据*/uchar DS1302_ReadByte() uchar i; uchar dat = 0; for (i=0; i<8; i+) /8位计数器 SCLK = 0; /时钟线拉低delay(); /延时等待 dat >>= 1; /数据右移一位if (DATA) dat

16、|= 0x80; /读取数据SCLK = 1; /时钟线拉高delay(); /延时等待 return dat;/*向DS1302某个地址写入一个数据*/void WriteDat(uchar Addr,uchar Data) RESET=0; SCLK=0; RESET=1; delaynus(2); /延时2us 使硬件做好准备 DS1302_WriteByte(Addr); /写入命令字 DS1302_WriteByte(Data); /写入数据 SCLK=1; RESET=0; /禁止数据传输 /*函数功能:从1302某个地址读取一个字节的数据* C*/uchar ReadDat(uc

17、har Addr) unsigned char dat; RESET=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RESET=1; /启动数据传输 DS1302_WriteByte(Addr); /写入命令字 dat=DS1302_ReadByte(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RESET=0; /禁止数据传递 return dat; /将读出的数据返回/*函数功能:1302初始化初始化时间:15年11月3日*/void Init_DS1302(void) WriteDat(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 W

18、riteDat(0x80,(0/10)<<4|(0%10); /根据写秒寄存器命令字,写入秒的初始值 WriteDat(0x82,(5/10)<<4|(5%10); /根据写分寄存器命令字,写入分的初始值 WriteDat(0x84,(19/10)<<4|(19%10); /根据写小时寄存器命令字,写入小时的初始值 WriteDat(0x86,(3/10)<<4|(3%10); /根据写日寄存器命令字,写入日的初始值 WriteDat(0x88,(11/10)<<4|(11%10); /根据写月寄存器命令字,写入月的初始值 Write

19、Dat(0x8c,(15/10)<<4|(15%10); /根据写年寄存器命令字,写入小时的初始值/*函数功能:读数据*/void Read_Data(void) uchar ReadValue; / ReadValue=ReadDat(0x81); /读取1302的秒数据 second=(ReadValue&0x70)>>4)*10+(ReadValue&0x0F); /将读出的BCD码转化成10进制数据 ReadValue = ReadDat(0x83); /从分寄存器读 minute=(ReadValue&0x70)>>4)*1

20、0 + (ReadValue&0x0F); /将读出数据转化 ReadValue = ReadDat(0x85); /从分寄存器读 hour=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /将读出数据转化 ReadValue = ReadDat(0x87); /从分寄存器读 day=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /将读出数据转化 ReadValue = ReadDat(0x89); /从分寄存器读 month=(ReadValue&

21、amp;0x70)>>4)*10 + (ReadValue&0x0F); /将读出数据转化 ReadValue = ReadDat(0x8d); /从分寄存器读 year=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /将读出数据转化 /有争议,不确定是否是&0x70 也许是0xf0 table20=0x30+hour/10; table21=0x30+hour%10; table22=':' table23=0x30+minute/10; table24=0x30+minute%

22、10; table25=':' table26=0x30+second/10; table27=0x30+second%10; /*函数功能:时钟显示函数*/void Show_Data() uint i; Write_1602_Com(0x48|0x80); for(i=0;i<8;i+) Write_1602_Data(table2i); delay1ms(); /*蜂鸣器*/void beep()/产生1KHZ频率声音的函数 P36=0;delaynus(500);P36=1;delaynus(500);void main() uint i,j; uchar dat

23、,AD_result; float pm25_result,tempurature; uchar up2=80; uchar cal7=0; UART_Init(); LCD_1602_Init(); ADC_Init(); Init_DS1302(); while(1) AD_result=AD_Change(); tempurature=(AD_result*5.0)/1024*100; Write_1602_Com(0x40|0x80); Write_1602_Data('T'); Write_1602_Data(':'); Write_1602_Data(0x30+tempurature/100); Write_1602_Data(0x30+tempurature/10); Write_1602_Data(0x30+(uchar)tempurature%10); Write_1602_Data('.'); Write_1602_Data(0x30+(uchar)(tempurature*10)%10); Write_1602_Data('C'); dat=SBUF; while(!RI); RI=0; if(d

温馨提示

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

评论

0/150

提交评论