1、摘要
温度测量技术应用十分广泛,而且在现代设备故障检测领域中也是一项非常重要的技术。但在某些应用领域中,要求测量温度用的传感器不能与被测物体相接触,这就需要一种非接触的测温方式来满足上述测温需求。本论文正是应上述实际需求而设计的红外测温仪。
本设计将对硬件选择以及结构进行设计,并且采用新型的可编程温度传感器TN901,它的优点是能直接与单片机完成数据采集和处理,实现方便、精度高,性能稳定,并且不需复杂的信号调理电路和A/D转换电路。不需要使传感器TN901与人体接触,进行温度感应后,TN901就可以感应温度并且直接送入AT89S51单片机中,经过单片机的信号处理并将其送出,通过LCD1602显示屏进行显示。这样的好处是可以快速并精准的测量出人体体温,与传统的水银体温计相比,它的优点是测量精准度高、测量时间短、并且方便读数。
2、系统原理及方案
本设计将对硬件选择以及结构进行设计,并且采用新型的可编程温度传感器TN901,它的优点是能直接与单片机完成数据采集和处理,实现方便、精度高,性能稳定,并且不需复杂的信号调理电路和A/D转换电路。不需要使传感器TN901与人体接触,进行温度感应后,TN901就可以感应温度并且直接送入AT89S51单片机中,经过单片机的信号处理并将其送出,通过LCD1602进行显示。这样的好处是可以快速并精准的测量出人体体温,与传统的水银体温计相比,它的优点是测量精准度高、测量时间短、并且方便读数。
2.1 红外测温系统的方案介绍
本设计将对硬件选择以及结构进行设计,并且采用新型的可编程温度传感器TN901,它的优点是能直接与单片机完成数据采集和处理,实现方便、精度高,性能稳定,并且不需复杂的信号调理电路和A/D转换电路。不需要使传感器TN901与人体接触,进行温度感应后,TN901就可以感应温度并且直接送入AT89S51单片机中,经过单片机的信号处理并将其送出,通过LCD1602数码管进行显示。这样的好处是可以快速并精准的测量出人体体温,与传统的水银体温计相比,它的优点是测量精准度高、测量时间短、并且方便读数。
非接触式电子体温计主要由TN901非接触式温度传感器控制,测量采集被测目标温度,将温度信号转变成电信号传送给单片机,由程序处理之后转变成文字信号在1602液晶显示屏上显示被测目标具体温度数字。非接触式电子体温计由两大部分构成,第一部分TN901非接触式温度传感器;第二部分主体控制电路板,电路板由51单片机、1602液晶显示屏、10K排阻、4.7K滑动变阻器、晶振、蜂鸣器、复位电路等构成。主要实现TN901温度传感器测量目标温度,经过程序处理之后在1602液晶显示屏上显示目标温度的具体数字。设置程序最大测量温度和最小测量温度,目标温度超出此范围蜂鸣器发出警报。通过按键复位测量完成后还原读数。4.7K滑动变阻器调节1602液晶显示屏亮度等。
3 红外测温系统的硬件设计
本红外测温仪采用模块化的设计思想,它的硬件结构由STC89C51单片机模块,红外测温模块,电源模块,键盘模块和LCD显示模块组成。
STC89C51单片机是本系统的控制中心,它负责控制启动温度测量、接收测量数据、计算温度值、并根据取得的键值控制显示过程;红外测温模块负责温度数据的采集、测量,并将采集到的数据通过数据端口传送给STC89C51单片机; LCD显示模块把测量的温度值直观地显示给观测者;电源模块负责本红外测温仪电源的供应。
3.1 单片机处理模块
该红外测温仪是以STC89C51单片机为核心器件,此单片机模块的工作原理是:加载相应程序的STC89C51单片机把红外测温模块传来的数据加以处理,送LCD显示屏显示。
STC89C51各引脚的功能描述如下:
(1)电源和晶振:VCC——运行和程序校验时加的电压;
VSS——接地;
XTAL1——输入到振荡器的反向放大器;
XTAL2——反向放大器输出,输入到内部时钟发生器。
(2)RST:单片机的上电复位或掉电保护端;
(3)ALE: 地址锁存有效信号输出端;
3.2 红外测温模块
它的测量距离大约为30米,测量回应时间大约为0.5秒。而且它具备SPI接口,可以很方便地与单片机(MCU)传输数据。
红外测温传感器的引脚介绍:
红外测温传感器引脚图如图2-4,其中V为电源引脚VCC,VCC一般为3V到5V之间的电压,一般取3.3V;D为数据接收引脚,没有数据接收时D为高电平;C为2KHz Clock输出引脚;G为接地引脚;A为测温启动信号引脚,低电平有效。
3、程序
#define uchar unsigned char
#define uint unsigned int
//头函数
#include <reg52.h>
//全局变量定义
float Temp;
float HJTemp,MBTemp;
//TN9温度传感器头函数
#include <TN9.h>
//LCD头函数
#include <LCD.h>
//按键
sbit K =P1^0;
sbit LR=P1^7;
sbit LG=P1^1;
void delay1(uint x)
{
uint a,b;
for(a=0;a<20;a++)
{ for(b=x;b>0;b--);
}
}
void delay(uint x)
{
uint a,b;
for(a=0;a<20;a++)
{ for(b=x;b>0;b--);
}
}
//主函数
void main()
{ // while(1)
//if(K==1) //屏幕初始化
Init_LCD();
//开启指示灯
LR=1;
LG=0;
delay1(20);
//开始按键
//while(K==1);
//温度显示初始化
// Init_T();
//循环读码
//while(1)
while(1)
{
// Display(MBTemp,HJTemp);
if(K==0)
{ Init_T();
while(K==0)
{ LR=~LR;
//读取目标温度
TN_IRACK_UN();
TN_IRACK_EN();
TN_GetData(0x4c);
MBTemp=Temp;
LR=~LR;
//读取环境温度
TN_IRACK_UN();
TN_IRACK_EN();
TN_GetData(0x66);
HJTemp=Temp;
//显示
Display(MBTemp,HJTemp);}