“爱农杯”电子电路设计大赛设计题目:(B题)远程温湿度测量装置报告日期:目录目录 (II)第一章任务要求 (1)第二章方案论证2.1温度测量方案 (1)2.2湿度测量方案 (1)2.3远程数据传输方案 (2)第三章系统设计与论证计算3.1总体设计 (2)3.2流程图 (2)第四章理论分析与计算4.1 HS1101湿度计算 (5)4.2 红外发射接收模块分析 (5)第五章电路图及软件设计5.1分部电路图 (8)5.2 整体电路仿真图 (10)5.3实物图 (11)5.4源程序 (11)第六章设计总结 (11)参考文献: (11)附录 (11)第一章任务要求(B题)远程温湿度测量装置一、任务设计并制作一个远程温湿度测量装置,该测试装置具有温湿度测量和远程显示等功能。
其结构框图如下:二、要求(1)通过可编程控制器、变换器和温湿度传感器采集温湿度数据并在LED上显示。
(2)温度误差<1℃,湿度误差<1%,温度测量范围0℃~100℃,湿度测量范围1%~99%。
(3)可用电池供电。
第二章方案论证2.1温度测量方案采用DS18B20数字温度传感器。
DS18B20温度传感器的技术性能:单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温范围-55℃~+125℃,固有测温分辨率0.5℃,工作电源: 3~5V/DC,测量结果以9~12位数字量方式串行传送。
基于设计要求的考虑,即温度误差<1℃,温度测量范围0℃~100℃,方案二完全能满足要求,且设计电路和程序编写较为简单,本设计采用方案二。
2.2湿度测量方案采用HS1101湿度传感器。
HS1101湿度传感器技术参数:工作温度:-40~100 ℃,湿度范围:0~100 %RH。
曲线精度(10%~90%):+/-2 %RH,供电电压:5~10 V。
特点:全互换性在标准环境下不需校正,长时间饱和下快速脱湿,高可靠性与长时间稳定性,可用于线性电压或频率输出回炉,快速反应时间。
从设计要求湿度误差<1%,湿度测量范围1%~99%出发,因此HS1101符合要求。
2.3远程数据传输方案使用射频发射电路和接收电路传输数据,性能较好,其无方向性,使用方便,但制作成本较高。
使用红外二极管发射电路和红外接收电路传输数据。
红外发射接收有方向性,发射器必须对准接收器,并且中间不能有阻挡物,距离较近,但不受电磁干扰,成本优势明显,制作成本低、价格便宜。
基于设计要求传输距离大于5米和成本问题,选择红外二极管发射电路和红外接收电路传输数据。
第三章 系统设计与论证计算3.1总体设计数据采集发射端采用单片机(STC89C52)作为处理器,由DS18B20直接采集温度数据与单片机进行双向通信,HS1101与7555定时器构成多谐震荡电路,将HS1101的电容值转换为频率值并用单片机的计数器测量并转换为相对湿度值,测得的数据将在1602液晶显示屏上显示,由红外发射管发射数据。
数据接收显示端也采用STC89C52单片机作为处理器,由红外接收管接收发射端发出的温度湿度数据,并显示在1602液晶显示屏上以便与发射端进行对比。
3.2流程图DS18B20 温度传感器 HS1101 湿度传感器89c521602液晶显示红外发送红外接收HS003889c521602液晶显示第四章理论分析与计算4.1 HS1101湿度计算由电路可知t 充电=C(R2 +R1 ) ln2t 放电=CR4 ln2因而, 输出的方波率f= 1 /(t 充电+t 放电)= 1 /[C(R2+ 2 R1) ln2 )]相对湿度与电容的关系可看成直线段,所以有相对湿度RH=2.7C+1634.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都存在镜像,以方便用户操作。
初始化时序图4.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位二进制数,在液晶上显示。
第五章电路图及软件设计5.1分部电路图温湿度传感器电路图1602液晶显示电路5.2 整体电路仿真图5.3实物图5.4 源程序(见附录)第六章设计总结功能介绍:温度误差<1℃,湿度误差<1%,温度测量范围0℃~100℃,湿度测量范围1%~99%。
比赛心得:在这次课程设计的调试过程中,我们遇到很多问题,如:在查找资料的过程中学到了许多,同时在协作过程中增进同学间的友谊。
提高了我们们针对实际问题进行电子设计、制作的综合能力,提高同学们的创新思维能力。
在比赛的参与中我们不但巩固了专业课模数电和单片机知识,同时也学习到了专业课本以外的更多知识,开阔了眼界,增强了专业自信心。
参考文献:[1]郭天祥.51单片机C语言教程.清电子工业出版社.2008[2]童诗白华成英.模拟电子技术基础.高等教育出版社.2006附录(部分重要程序设计)红外接收部分是通过测量HS0038接收到的红外线,然后所产生的正脉宽时间进行信号接收。
当测到第一个正脉宽在4.5-7.0ms时,开始准备计数,然后检测16次正脉宽的大小值。
当接收的正脉宽时间是1.7-2.1ms时,计0;当接收的正脉宽时间是2.1-2.5ms时,计1;得到16位二进制数,在液晶上显示。
红外发部分包温湿度采集和红外发射功能,红外发射的信号为38KHz,正脉宽时间接收端。
//红外接收和温度显示(11.0592MHz)#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit lcdrs=P3^7;sbit lcden=P3^6;sbit receive=P3^2;//红外接收口ulong num,num1,num2,num11,t;。
void display_tempzheng(uchar add,uint temp)//显示正温度{unsigned char count;unsigned char datas[] = {0, 0, 0, 0, 0};datas[0] = temp / 10000;datas[1] = temp % 10000 / 1000;datas[2] = temp % 1000 / 100;datas[3] = temp % 100 / 10;datas[4] = temp % 10;write_com(0x80+add);writeString("+ ", 2);if(datas[0] != 0){write_date(0x30+datas[0]);}for(count = 1; count != 5; count++){write_date(0x30+datas[count]);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};datas[0] = temp / 10000;datas[1] = temp % 10000 / 1000;datas[2] = temp % 1000 / 100;datas[3] = temp % 100 / 10;datas[4] = temp % 10;write_com(0x80+add);writeString("- ", 2);if(datas[0] != 0){write_date(0x30+datas[0]);}for(count = 1; count != 5; count++){write_date(0x30+datas[count]);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};datas[0] = haminity / 10000;datas[1] = haminity % 10000 / 1000;datas[2] = haminity% 1000 / 100;datas[3] = haminity% 100 / 10;datas[4] = haminity % 10;write_com(0x80+0x40+add);if(datas[0] != 0){write_date(0x30+datas[0]);}for(count = 1; count != 5; count++){write_date(0x30+datas[count]);if(count == 2){write_date('.');}}writeString("% ", 2);}。