




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“京信杯”电子创新设计大赛设计项目:远程温湿度测量系统计参赛队员:李伟 李孟飞 王泽夏 报告时间: 2012/12/13 目录目录II第一章方案比较与论证11.1温度测量方案11.2湿度测量方案11.3远程数据传输方案1第二章系统设计与论证计算12.1总体设计2 2.2流程图.2第三章理论分析与计算23.1 HS1101湿度计算23.2 红外发射接收模块分析2第四章电路图及软件设计24.1电路图24.1.1 红外发射端24.1.2 红外接收端44.2源程序5第五章测量方法及仪器5第六章测量数据及测试结果分析5第七章设计总结5参考文献(References):619第一章 方案比较与论证1.1温度测量方案方案一:本方案采用PT100热电阻温度传感器。PT100温度传感器的主要技术参数如下:测量范围:-200+850;A级 精度为(0.15+0.002*|t|);B级 精度为(0.30+0.005*|t|);其中|t|为实际温度的绝对值。热响应时间30s;最小置入深度:热电阻的最小置入深度200mm;允通电流5mA。另外,PT100温度传感器还具有抗振动、稳定性好、准确度高、耐高压等优点。但在实际应用中,使用单片机来进行温度的计算,表达式比较复杂,用单片机处理这样的计算过程,将会占用大量的资源,程序的编写上很复杂。方案二:本方案采用DS18B20数字温度传感器。DS18B20温度传感器的技术性能:单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温范围 55+125,固有测温分辨率0.5,工作电源: 35V/DC,测量结果以912位数字量方式串行传送。基于设计要求的考虑,即温度误差1,温度测量范围0120,方案二完全能满足要求,且设计电路和程序编写较为简单,本设计采用方案二。1.2湿度测量方案方案一:本方案采用HR202电阻型湿度传感器。HR202电阻型湿度传感器技术参数:工作范围 2095%RH,060,供电电压为1.5V AC,工作频率为500Hz2kHz,湿度检测精度为5%RH。特点:线性优良,高性价比,能耗低,测量范围宽,响应迅速,抗污染能力强,性能稳定。方案二:本方案采用HS1101湿度传感器。HS1101湿度传感器技术参数:工作温度:-40100 ,湿度范围: 0100 %RH。曲线精度(10%90%):+/-2 %RH,供电电压: 510 V。特点:全互换性 在标准环境下不需校正,长时间饱和下快速脱湿,高可靠性与长时间稳定性,可用于线性电压或频率输出回炉,快速反应时间。从设计要求湿度误差1,湿度测量范围199出发,HS1101更符合要求,本设计采用方案二。1.3远程数据传输方案方案一:使用射频发射电路和接收电路传输数据。射频技术是用无线电波来传送控制信号的,它的特点没有方向性,可以不“面对面”控制、距离远,可达数十米。发射器和接收器之间只要没有能起屏蔽作用的金属阻挡物,就可正常使用。射频发射电路制作成本较高,但其无方向性,使用方便。方案二:使用红外二极管发射电路和红外接收电路传输数据。红外发射接收有方向性,发射器必须对准接收器,并且中间不能有阻挡物,距离较近,但不受电磁干扰,成本优势明显,制作成本低、价格便宜。 基于设计要求传输距离大于5米和成本问题,选择方案二。 第二章 系统设计与论证计算2.1总体设计数据采集发射端采用单片机(STC89C52)作为处理器,由DS18B20直接采集温度数据与单片机进行双向通信,HS1101与7555定时器构成多谐震荡电路,将HS1101的电容值转换为频率值并用单片机的计数器测量并转换为相对湿度值,测得的数据将在1602液晶显示屏上显示,由红外发射管发射数据。数据接收显示端也采用STC89C52单片机作为处理器,由红外接收管接收发射端发出的温度湿度数据,并显示在1602液晶显示屏上以便与发射端进行对比。89c52红外接收HS0038红外发送89c522.2流程图DS18B20 温度传感器HS1101湿度传感器1602液晶显示1602液晶显示 第三章 理论分析与计算3.1 HS1101湿度计算由电路可知t 充电 =C(R2 +R1 ) ln2 t 放电 =CR4 ln2 因而 , 输出的方波率 f= 1 /(t 充电 +t 放电 )= 1 /C(R2+ 2 R1) ln2 )相对湿度与电容的关系可看成直线段,所以有相对湿度RH=2.7C+163所以有3.2 DS18B20工作原理 DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是: ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。 RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。 初始化时序图 写数据时序图 读数据时序图3.3 红外发射与HS0038工作原理 HS0038红外接收电路一体化的红外接收装置将遥控信号的接收、放大、检波、整形集于一身,并且输出可以让单片机识别的TTL 信号,这样大大简化了接收电路的复杂程度和电路的设计工作,方 便使用。在本系统中我们采用红外一体化接收头HS0038,外观图如图3 所示。HS0038 黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。在用小功率发射管发射信号情况下,其接收距离可达35m。它能与TTL、COMS 电路兼容。HS0038 为直立侧面收光型。它接收红外信号为38 kHz,周期约26 s,同时能对信号进行放大、检波、整形,得到TTL 电平的编码信号。三个管脚分别是地、5 V 电源、解调信号输出端。 红外一体化接收头的测试可以利用图4 所示的电路进行,在HS0038 的电源端与信号输出端之间接上一只二极管及一只发光二极管后,再配上规定的工作电源(为5V),当手拿遥控器对着接收头按任意键时,发光二极管会闪烁,说明红外接收头和遥控器工作都正常;如果发光二极管不闪烁发光,说明红外接收头和遥控器至少有一个损坏。只要确保遥控器工作正常,很容易判断红外接收头的优劣。 红外管发出波形和HS0038信号输出原理 红外接收部分是通过测量HS0038接收到的红外线,然后所产生的正脉宽时间进行信号接收。当测到第一个正脉宽在4.5-7.0ms时,开始准备计数,然后检测16次正脉宽的大小值。当接收的正脉宽时间是1.7-2.1ms时,计0;当接收的正脉宽时间是2.1-2.5ms时,计1;得到16位二进制数,在液晶上显示。 第四章 电路图及软件设计(见附录)4.1整体电路图 液晶显示电路 第五章 测量方法及仪器 将测得的温度和湿度数据与家用温湿表对比,调整参数,得到粗略数据,然后进实验室进行更为精确的测试。第六章 测量数据及测试结果分析 在常温下测试的数据与普通的温度计对比,温度相差应小于一度。湿度传感器由于过于灵敏,需要在实验室做进一步调试。 第七章 设计总结本设计能够比较准确的走时,并能够通过硬件对时钟进行时间调整。u 功能介绍:达到测试温度范围-55125摄氏度,湿度范围1%99%, 采用红外发射与接收,距离大于5m,采用1602液晶显示。u 制作心得:在这次课程设计的调试过程中,我遇到很多问题,如: 在查找资料的过程中学到了许多,同时在协作过程中增进同学间的友谊。参考文献(References):1 郭天祥51单片机C语言教程 清电子工业出版社20082 童诗白 华成英模拟电子技术基础 高等教育出版社20063 邱玉娟运用KEILC 分析HS1101 湿度传感器F-RH转换算法江阴职业技术学院2008附录(程序设计)/* 红外接收部分是通过测量HS0038接收到的红外线,然后所产生的正脉宽时间进 行信号接收。当测到第一个正脉宽在4.5-7.0ms时,开始准备计数,然后检测16次 正脉宽的大小值。当接收的正脉宽时间是1.7-2.1ms时,计0;当接收的正脉宽时间 是2.1-2.5ms时,计1;得到16位二进制数,在液晶上显示。红外发部分包温湿度采 集和红外发射功能,红外发射的信号为38KHz,正脉宽时间接收端。*/红外接收和温度显示(11.0592MHz)#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit lcdrs=P37;sbit lcden=P36;sbit receive=P32;/红外接收口ulong num,num1,num2,num11,t;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=10;y0;y-);void write_com(uchar com)/写1602地址 lcdrs=0; lcden=0; P2=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date)/写1602数据 lcdrs=1; lcden=0; P2=date; delay(5); lcden=1; delay(5); lcden=0; void writeString(uchar * str, uchar length)/写一个数组 uchar i; for(i = 0; i length; i+) write_date(stri); void display_tempzheng(uchar add,uint temp)/显示正温度 unsigned char count; unsigned char datas = 0, 0, 0, 0, 0; datas0 = temp / 10000; datas1 = temp % 10000 / 1000; datas2 = temp % 1000 / 100; datas3 = temp % 100 / 10; datas4 = temp % 10; write_com(0x80+add); writeString(+ , 2); if(datas0 != 0) write_date(0x30+datas0); for(count = 1; count != 5; count+) write_date(0x30+datascount); if(count = 2) write_date(.); write_date(0x63); write_date(0xDF); void display_tempfu(uchar add,uint temp)/显示负温度 unsigned char count; unsigned char datas = 0, 0, 0, 0, 0; datas0 = temp / 10000; datas1 = temp % 10000 / 1000; datas2 = temp % 1000 / 100; datas3 = temp % 100 / 10; datas4 = temp % 10; write_com(0x80+add); writeString(- , 2); if(datas0 != 0) write_date(0x30+datas0); for(count = 1; count != 5; count+) write_date(0x30+datascount); if(count = 2) write_date(.); write_date(0x63); write_date(0xDF); void display_huminity(uchar add,uint haminity)/显示湿度 unsigned char count; unsigned char datas = 0, 0, 0, 0, 0; datas0 = haminity / 10000; datas1 = haminity % 10000 / 1000; datas2 = haminity% 1000 / 100; datas3 = haminity% 100 / 10; datas4 = haminity % 10; write_com(0x80+0x40+add); if(datas0 != 0) write_date(0x30+datas0); for(count = 1; count != 5; count+) write_date(0x30+datascount); if(count = 2) write_date(.); writeString(% , 2); void init() / 初始化函数 lcdrs=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); EA=1; TMOD=0x01; TH0=(65535-9206)/256; TL0=(65535-9206)%256; ET0=1; TR0=0; writeString( temp:,7); write_com(0x80+0x40); writeString( rh :, 6); void main() uchar i; init(); while(1) TH0=0; TL0=0; TR0=0; while(receive=1); while(receive=0); TR0=1; while(receive); TR0=0; num1=TH0*256+TL0; num11=num1*1085/1000; if(num117000)continue;/如果在4.5-7ms内,开始接收数据 delay(4); for(i=0;i2500|t1; if(t1700&t2100&t=0&num=10000&num22500&num=28000)display_tempfu(7,num-22500);/显示负温度 void time0() interrupt 1 TH0=(65535-9206)/256; TL0=(65535-9206)%256;/温湿度采集&发送(24MHz晶振)#include #include #include #define uchar unsigned char#define uint unsigned intsbit send=P30;/红外发送口sbit RS = P37; sbit LCDEN = P36; uint flag,F1;int temp;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=47;y0;y-);void send_num(uint num)/发送数据 uchar i; uint num1; num=num*2; TR0=1; delay(6); TR0=0; delay(30);/4.5-7.0ms开始发送数据 for(i=0;ii; num1=num1&0x01; delay(3); TR0=0; if(num1=0x00)delay(10);/1.7ms-2.1ms if(num1=0x01)delay(12);/2.1ms-2.5ms发送16位数据 void delayUs() _nop_();void delayMs(uint a) uint i, j; for(i = a; i 0; i-) for(j = 100; j 0; j-);void writeComm(uchar comm)/写1602地址 RS = 0; P2 = comm; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(2);void writeData(uchar dat) /写1602数据 RS = 1; P2 = dat; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(2); void writeString(uchar * str, uchar length)/写一个数组 uchar i; for(i = 0; i 0) i-; ds = 1; i = 4; while(i0) i-; void dsWait() unsigned int i; while(ds); while(ds); i = 4; while(i 0) i-;bit readBit() /读一位数据函数 unsigned int i; bit b; ds = 0; i+; ds = 1; i+; i+; b = ds; i = 8; while(i0) i-; return b;unsigned char readByte() /读一个字节数据函数 unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); dat = (j 1); return dat;void writeByte(unsigned char dat)/向DS18B20写一个字节数据函数 unsigned int i; unsigned char j; bit b; for(j = 0; j = 1; if(b) ds = 0; i+; i+; ds = 1; i = 8; while(i0) i-; else ds = 0; i = 8; while(i0) i-; ds = 1; i+; i+; void sendChangeCmd() dsInit(); /DS18B20复位,初始化函数 dsWait(); delayMs(1); /延时 writeByte(0xcc);/写跳过读ROM指令 writeByte(0x44);/写温度转换指令void sendReadCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0xbe);/ 读温度int getTmpValue() unsigned int tmpvalue; int value; float t; unsigned char low, high; sendReadCmd(); low = readByte(); /读低八位 high = readByte();/读高八位 tmpvalue = high; tmpvalue 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5 return value;void display(int v) /显示温度 unsigned char count; unsigned char datas = 0, 0, 0, 0, 0; unsigned int tmp = abs(v); datas0 = tmp / 10000; datas1 = tmp % 10000 / 1000; datas2 = tmp % 1000 / 100; datas3 = tmp % 100 / 10; datas4 = tmp % 10; if(v 0) writeString(- , 2); else writeString(+ , 2); if(datas0 != 0) writeData(0x30+datas0); for(count = 1; count != 5; count+) writeData(0x30+datascount); if(count = 2) writeData(.); writeData(0x63); writeData(0xDF); void init() /初始化程序 TMOD=0x11; TCON=0x01; EA=1; EX0=0; ET0=1; ET1=1; TH0=(65535-20)/256; TL0=(65535-20)%256; TR0=0; TR1=0; sendChangeCmd(); writeComm(0x38); writeComm(0x0c); writeComm(0x06); writeComm(0x01); writeComm(0x80); writeComm(0x80+0x40); writeString( rh :,6); writeComm(0x80); writeString( temp:,6); void display_temp()/得到温度值temp delayMs(1500); /温度转换时间需要750ms以上 writeComm(0x80+7); temp=getTmpValue(); display(temp); sendChangeCmd();void display_F1()/得到频率值F1 TH1=(65535-39200)/256; TL1=(65535-39200)%256; TR1=1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院文艺汇演主持词(35篇)
- 2025年甘肃省天水市辅警人员招聘考试题库及答案
- 2025年甘肃省定西市辅警招聘考试题库及答案
- 江苏省扬州市梅岭中学教育集团2023-2024学年七年级上学期语文10月素养体验试卷(含答案)
- 员工培训计划与效果评估表人力资源开发工具
- 2025年度鹤岗市继续教育公需科目考试题(含答案)
- 国网安全管理平台培训课件
- 国家安全知识培训会标课件
- 小鼓响咚咚教学设计-2025-2026学年小学音乐人音版五线谱北京二年级上册-人音版(五线谱)(北京)
- 老旧小区外立面翻新施工方案
- 标志设计(全套课件88P)
- 数字货币投资入门指南
- 人教版(2024)七年级上册数学第一次月考测试卷(含答案)
- DL∕T 1804-2018 水轮发电机组振动摆度装置技术条件
- 新版学校班主任工作手册模板
- HG-T 5367.5-2022 轨道交通车辆用涂料 第5部分:防结冰涂料
- 国家公祭日成品课件
- 原油加工承揽合同
- QCT268-2023汽车冷冲压加工零件未注公差尺寸的极限偏差
- 八年级下册英语补全对话及答案
- 大便失禁课件
评论
0/150
提交评论