温度测量及湿度检测解读.docx
- 文档编号:23451807
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:36
- 大小:181.58KB
温度测量及湿度检测解读.docx
《温度测量及湿度检测解读.docx》由会员分享,可在线阅读,更多相关《温度测量及湿度检测解读.docx(36页珍藏版)》请在冰豆网上搜索。
温度测量及湿度检测解读
智能测控系统
课程大作业
作业题目:
环境温度测量及湿度检测
学院名称:
电气工程学院
专业班级:
测控1303班
学生姓名:
杜栋梁
学号:
201323030320
完成时间:
2016-6
任课教师:
王威
1课程大作业内容
1.1课题设计背景
随着科技的发展对对检测技术要求的不断增高,迫使新材料的开发及寻找检测能力的不断提升。
传感器的种类与测量精度以及测量稳定性也发生了巨大的变化,从最初的接触式测温到非接触式测温,膨胀式、热电阻式以及热电偶式测温,使温度检测领域得到了快速发展。
再加上单片机技术的不断发展,测量检测变得更加方便。
温湿度传感器除电阻式、电容式湿敏元件之外,还有电解质离子型湿敏元件、重量型湿敏元件(利用感湿膜重量的变化来改变振荡频率)、光强型湿敏元件、声表面波湿敏元件等。
湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。
在公共工作场所为了达到让人感到舒适的环境温度及湿度,往往需要对温度、湿度进行检测已达到最佳的效果。
本课题以ds18b20温度传感器为温度检测器件,设计了一个对单点温度实时检测的单片机温度检测系统。
以bsp_dht11湿度传感器为湿度检测器件。
1.2课题设计的意义
(1)、该设计具有以下优点:
制作简单,便于使用,价格便宜,稳定可靠,功耗低省电。
(2)通过设计与制作可以达到这些目的:
熟悉MSP430单片机技术的应用范围;掌握MSP430单片机编程的特点,提高实践操作能力能够在制作过程中发现并改正错误。
达到一定的解决问题的能力。
提高了动手的能力。
1.3设计目标
使用ds18b20温度传感器测量环境温度并完成A/D转换。
bsp_dht11湿度传感器测量湿度,把数据发送到MSP430中进行转换用LCD进行显示。
2系统设计方案
系统设计方案的选择是决定设计作品完整度与精度的重要前提,一个好的作品的完成需要选择比较多种方案,从多种方案中选择最优方案,才能使设计作品精度更高。
本次设计主要从实用性,稳定性,精度等级,可靠性,经济性等方面进行考虑。
在完成本次课程设计要求、目的的情况下尽可能的准确和经济的条件下进行选择。
2.1温湿度传感器选型与论证
本设计采用测量精度高,性能稳定可靠的ds18b20温度传感器作为温度检测器件和bsp_dht11温湿度传感器作为湿度监测器件。
尽管bsp_dht11也能够检测出环境温度,但该传感器的测温范围窄,精度不够,和要求测量的环境较为苛刻。
因此选用较为精确的ds18b20来测量温度。
该传感器具有适应性强检测迅速,受环境影响较小。
且对温度可以接触和非接触测量均可。
而其他传感器价格和测量条件较为苛刻因此不建议选取。
2.2显示屏的选择与论证
方案一:
采用LCD1602显示。
LCD1602是一种专门用于显示字母、数字、符号等点阵式LCD,能够同时显示16x02即32个字符。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
由于它不能显示汉字,而温度湿度的显示需要显示汉字,所以此方案不可行。
方案二:
采用LCD5110显示。
LCD5110采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,支持多种串行通信协议,传输速率高达4Mbps,可全速写入显示数据,无等待时间。
它由84x48的点阵LCD组成,可显示汉字和字符。
LCD5110工作电压3.3V,正常显示时工作电流200uA以下,而且接口简单,体积小便于安装携带,速度快,价格便宜。
所以采用此方案,显示模块选择用LCD5110。
但屏幕色彩较暗,在光线较强的地方无法清晰的辨别。
方案三:
采用TFT彩屏显示。
TFT-LCD采用低压应用,低驱动电压,固体化使用安全性和可靠性提高;平板化,又轻薄,节省了大量原材料和使用空间;低功耗,它的功耗约为CRT显示器的十分之一,反射式TFT-LCD甚至只有CRT的百分之一左右,节省了大量的能源;高亮度,高对比度,高响应速度。
无辐射、无闪烁,对使用者的健康无损害。
适用范围宽,从-20℃到+50℃的温度范围内都可以正常使用,寿命超过3万小时,且价格便宜因此本次设计采用TFT-LCD作为显示屏。
2.2信号采集电路
ds18b20是一种64位只读存储器储存器件的唯一片序列号。
高速暂存器含有两个字节的温度寄存器,这两个寄存器用来存储温度传感器输出的数据。
除此之外,高速暂存器提供一个直接的温度报警值寄存器(TH和TL),和一个字节的配置寄存器。
配置寄存器允许用户将温度的精度设定为9,10,11或12位。
TH,TL和配置寄存器是非易失性的可擦除程序寄存器(EEPROM),所以存储的数据在器件掉电时不会消失。
ds18b20通过达拉斯公司独有的单总线协议依靠一个单线端口通讯。
当全部器件经由一个3态端口或者漏极开路端口(DQ引脚在ds18b20上的情况下)与总线连接的时候,控制线需要连接一个上拉电阻。
在这个总线系统中,微控制器(主器件)依靠每个器件独有的64位片序列号辨认总线上的器件和记录总线上的器件地址。
由于每个装置有一个独特的片序列码,总线可以连接的器件数目事实上是无限的。
ds18b20的另一个功能是可以在没有外部电源供电的情况下工作。
当总线处于高电平状态,DQ与上拉电阻连接通过单总线对器件供电。
同时处于高电平状态的总线信号对内部电容(Cpp)充电,在总线处于低电平状态时,该电容提供能量给器件。
这种提供能量的形式被称为“寄生电源”。
作为替代选择,ds18b20同样可以通过VDD引脚连接外部电源供电。
如下图2.1
s18b20的工作原理图2.1
用户单片机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信采集。
信号发送如图所示。
数据时序图2.2
bsp_dht11时序原理图2.2
2.3供电电源的选择
本设计采用标准USB数据线5V为该设计供电。
3硬件设计
硬件电路的设计是该系统重要的部分,是系统运行的前提,如果硬件设计的科学合理就能大大增加该系统功能的稳定性,可靠性。
系统软件的设计是以硬件设计为前提,硬件设计是单片机高效工作的前提与重要保障,但是只有软件和硬件都正确,并且软件与硬件能够相互兼容、协调工作才能使系统工作达到我们想要的效果。
本系统的硬件设计部分主要包括传感器电桥电路设计、运算放大电路的设计、单片机最小系统设计下面进行详细介绍。
3.1结构框图
本设计采用均采用3.3V电源供电,温度传感器和温湿度传感器采集到数据后发送到单片机,单片机根据接收到的数据进行处理后再LCD屏幕上显示。
如图3.1位系统结构框图。
图3.1系统结构框图
3.2温度信号采集电路
温度信号的获取关系到后续电路设计的难度,因此温度信号是获取是本设计的关键。
3.2.1传感器简介
ds18b20的简介:
独特的单线接口仅需一个端口引脚进行通讯
每个器件有唯一的64位的序列号存储在内部存储器中
简单的多点分布式测温应用
无需外部器件
可通过数据线供电。
供电范围为3.0V到5.5V
测温范围为-55~+125℃(-67~+257℉)
在-10~+85℃范围内精确度为±5℃
温度计分辨率可以被使用者选择为9~12位
最多在750ms内将温度转换为12位数字
用户可定义的非易失性温度报警设置
报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
与ds1822兼容的软件
应用包括温度控制、工业系统、消费品、温度计或任何热感测系统
bsp_dht11的简介:
DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
实际使用时发现小数位都是0,这一步忽略对结果也不造成影响。
3.3单片机的最小电路图
MSP430g2553简介:
MSP430G2553性能参数(DIP-20)工作电压范围:
1.8~3.6V。
5种低功耗模式。
16位的RISC结构,62.5ns指令周期。
超低功耗运行模式-230µA;待机模式-0.5µA;关闭模式-0.1µA;可以在不到1µs的时间里超快速地从待机模式唤醒。
基本时钟模块配置:
具有四种校准频率并高达16MHz的内部频率;内部超低功耗LF振荡器;32.768KHz晶体;外部数字时钟源。
两个16位Timer_A,分别具有三个捕获比较寄存器。
用于模拟信号比较功能或者斜率模数(A/D)转换的片载比较器。
带内部基准、采样与保持以及自动扫描功能的10位200-ksps模数(A/D)转换器。
16KB闪存,512B的RAM。
16个I/O口。
这里给出了本次实验的最小电路图3.1
最小电路图3.1
4软件设计
4.1程序模块
本装置主要用到MSP430g2553单片机的IO功能程序设计中主要包括:
1.单片机对温度传感器的数据接收模块。
2.单片机对温湿度传感器的数据接收模块。
3.对LCD屏的显示模块。
4.2软件设计流程图
图4.1软件流程图
5调试
本次设计最主要的工作之一就是对系统的调试部分,因为一个测量显示软件的主要功能就是显示正确的结果。
开始显示的数据会因为采集的不准确和其他方面的误差导致接收到的数据不能正确表示想要的得到的数据,也可能会因为采集过程出现频繁的错误等问题。
因此调试的工作极其重要,在温度传感器的采集过程中经过和标准的温度值的校准,测出了误差的范围和误差的大致规律最后在现实过程中消除了这种误差让温度测量更加准确稳定。
在湿度传感器的调试过程中的工作更是复杂,湿度传感器可以返回温度和湿度值,但经过检测返回的温度值与实际的温度值偏差较大,而湿度的计算方法是在该温度条件下的空气中水含量的多少,这就使得测得的温度不准导致湿度不准确,最后查阅资料找到了湿度的测量计算方法。
将返回的湿度值加权后再显示出来。
这些工作很复杂湿度传感器的工作要求的时序很高就导致在时序配置上要花很大功夫一点不对就不能返回正确的结果屡屡出错。
总之调试工作发杂多变。
6总结
本次设计的东西看起来很简单,好像没有什么技术含量。
但当实际操作时想要完美的运行却遇到了重重的困难。
因为MSP430是开始接触的单片机,之前也一直没有做过关于它的太多试验。
修改驱动显示屏程序也花费了很长时间才将原来51单片机的程序移植过来,结果刷屏与显示与想要显示的位置不符,后来请教同学计算了LCD的显示位置才更改过来。
接下来的湿度调试,因为开始找不到bsp_dht11温湿度传感器的原理图就在网上找了关于它的程序结果发现不能用不管怎么更改总是无法返回正确的数值,最后终于找到了关于该传感器的详细资料。
发现该传感器的工作要求对时序的要求特别严格,最后精确计算了延时时间并且进行了延时时间的修改才能返回结果。
但得到的湿度值与正常的湿度值存在较大的偏差,但没有标准湿度值可以进行比较于是选取了天气预报软件上面公布的湿度值进行校准。
因为这次作业选用的是模块化的传感器且传感器对电压的要求不太严格3.0V~5.0V均可以,为了降低设计设计的复杂度就选取了给单片机供电的3.3V电压作为传感器和显示屏的供电电压。
本次对单片机的实际制作成东西才感到动手的重要性,和一些看起来简单的东西也许不那么简单。
在以后的学习中要增加动手的能力。
参考文献
[1]杨家成.单片机原理与应用及C51程序设计.北京:
清华大学出版社,2007
[2]夏路易石宗义.Protel99se电路原理图与电路板设计教程.北京:
北京希望电子出版社,2004
[3]李林功.单片机原理与应用——基于实例驱动和Proteus仿真.北京:
科学出版社,2011
[4]皮大能等.单片机课程设计指导书.北京:
北京理工大学出版社,2010
[5]MSP430单片机C语言应用程序设计实例精讲电子工业出版社2006.05
附件
程序
主程序
#include
#include"font.h"
#include"sys.h"
#include"lcd.h"
#include"ds18b20.h"
#include"dht11.h"
voidCLK_Init(void)//时钟配置
{
if(CALBC1_16MHZ==0xFF||CALDCO_16MHZ==0xFF)
{
while
(1);//Ifcalibrationconstantserased
//donotload,trapCPU!
!
}
DCOCTL=0;
BCSCTL1=CALBC1_16MHZ;//Setrange
DCOCTL=CALDCO_16MHZ;//SetDCOstep+modulation*/
BCSCTL2|=0X06;//SMCLK为DCO的8分频,2M
}
voidshowjiemian()//界面显示
{
LCD_Fill(0,0,128,40,WHITE);//在指定区域填充颜色
showhanzi(0,4,0);
showhanzi(32,4,1);
showhanzi(64,4,2);
showhanzi(96,4,3);//环境监测
LCD_ShowString(100,68,"%");//%:
showhanzi1(14,42,0,RED,YELLOW);
showhanzi1(34,42,1,RED,YELLOW);//温度
showhanzi1(100,42,2,BLUE,YELLOW);//℃
showhanzi1(14,68,3,RED,YELLOW);
showhanzi1(34,68,4,RED,YELLOW);//湿度
LCD_ShowString(56,42,"");//温度显示
LCD_ShowChar(72,42,'.',0);
LCD_ShowString(70,68,"");//湿度显示
}
intmain(void)
{
WDTCTL=WDTPW|WDTHOLD;//Stopwatchdogtimer
unsignedinttemp=0,temp1,temp2,temp3;
//ucharRH_data_H=0;
P2DIR|=0x1f;//设置P2为输出方式输出方式
P2OUT|=0X1f;
BACK_COLOR=YELLOW;
POINT_COLOR=BLUE;//背景色,画笔色
CLK_Init();
Lcd_Init();
LCD_Clear(YELLOW);
DHT11_IO_Init();
showjiemian();
while
(1)
{
temp=Read_Temp();
temp1=temp/100;
temp2=temp%100/10;
temp3=temp%10;
LCD_ShowNum(56,42,temp1,2);//显示数字
LCD_ShowNum(80,42,temp2,1);//显示数字
LCD_ShowNum(88,42,temp3,1);//显示数字
DHT11();
LCD_ShowNum(88,68,ucharRH_data_H,3);
delay_ms(1000);
}
}
温度采集
#include
#include"ds18b20.h"
#include"sys.h"
voidDS18B20_Init(void)//DS18B20初始化函数
{
DQ_OUT;
DQ_L;//拉低总线
delay_us(480);//精确延时大于480us
DQ_H;//释放总线
delay_us(48);
DQ_IN;
DQ_OUT;
DQ_H;
delay_us(360);
}
voidDS18B20_WriteData(u8dat)//写一个字节
{
u8i;
for(i=0;i<8;i++)//位计数值
{
DQ_L;//拉低总线产生写信号
delay_us(5);
if(dat&0x01)DQ_H;//此位数据是否为高,是高则将单总线拉高
elseDQ_L;//是低则将单总线拉低
dat>>=1;//准备下一位数据的传送
delay_us(50);
DQ_H;//释放总线,等待总线恢复
delay_us(8);
}
}
u8DS18B20_ReadData(void)//读一个字节
{
u8i;
u8dat=0;
for(i=0;i<8;i++)//位计数值
{
dat>>=1;//右移,准备接受新的数据位
DQ_L;//拉低总线产生读信号
delay_us(5);
DQ_H;//释放总线准备读数据
delay_us(5);//等待5微秒
DQ_IN;//配置为输入,开始读取数据位
_NOP();
if(READ_DQ)//该位是否为高
{
dat|=0x80;//是就将此位置高
}
delay_us(50);//等待50微秒
DQ_OUT;
DQ_H;
delay_us(5);
}
return(dat);//将读到的一个字节返回
}
u16Read_Temp(void)//读取温度
{
u16temp_low,temp_high,d;
floatc;
DS18B20_Init();//初始化,每次写命令都从初始化开始
DS18B20_WriteData(0xcc);//跳过ROM命令
DS18B20_WriteData(0x44);//温度转换命令
DS18B20_Init();//初始化,每次写命令都从初始化开始
DS18B20_WriteData(0xcc);//跳过ROM命令
DS18B20_WriteData(0xbe);//
temp_low=DS18B20_ReadData();//读温度低字节
temp_high=DS18B20_ReadData();//读温度高字节
temp_high<<=8;
d=temp_high|temp_low;
c=d*0.0625;
d=(u16)(c*100);
return(d);//返回16位变量
}
湿度采集
#include"dht11.h"
#include"sys.h"
#include
unsignedintuchartemp;
unsignedcharucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,ucharcheckdata;
unsignedcharucharT_data_H_temp,ucharT_data_L_temp,ucharRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;
voidDHT11_IO_Init()
{
P1SEL&=~BIT0;
}
voidCOM(void)
{
unsignedchari;
unsignedcharucharFLAG;
uchartemp=0;
P1DIR&=~BIT0;
for(i=0;i<8;i++)
{
ucharFLAG=2;
while((!
(P1IN&0x01))&&ucharFLAG++);
delay_us(30);
uchartemp=uchartemp<<1;
if((P1IN&0x01))
{
uchartemp|=1;
}
ucharFLAG=1;
while(((P1IN&0x01))&&ucharFLAG++);
}
}
voidDHT11(void)
{
unsignedcharucharFLAG;
P1DIR|=BIT0;//设置P1.0为输出口
DATA_L;
delay_ms(20);//>18MS
DATA_H;
delay_us(30);
P1DIR&=~BIT0;
if(!
(P1IN&0x01))
{
ucharFLAG=1;
while((!
(P1IN&0x01))&&ucharFLAG++);
ucharFLAG=1;
while(((P1IN&0x01))&&ucharFLAG++);
COM();
ucharRH_data_H_temp=uchartemp;
COM();
ucharRH_data_L_temp=uchartemp;
COM();
ucharT_data_H_temp=uchartemp;
COM();
ucharT_data_L_temp=uchartemp;
COM();
ucharcheckdata_temp=uchartemp;
uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);
if(uchartemp==ucharcheckdata_temp)
{
ucharRH_data_H=ucharRH_data_H_temp;
ucharRH_data_L=ucharRH_data_L_temp;
ucharT_data_H=ucharT_data_H_temp;
ucharT_data_L=ucharT_data_L_temp;
ucharcheckdata=ucharcheckdata_temp;
}
}
else
{
ucharRH_data_H=12;
ucharT_data_H=23;
}
//P2DIR|=BIT0;
}
显示
#include
#include"font.h"
#include"sys.h"
#include"lcd.h"
u16BACK_COLOR,POINT_COLOR;//背景色,画笔色
voidLCD_Writ_Bus(charda)//串行数据写入
{
u8i;
for(i=0;i<8;i++)
{
if(da&0x80)
{
SDA_H;
}
else
{
SDA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 测量 湿度 检测 解读