温度传感器 - 从零开始认识各种传感器【第一期】

你了解生活中常见的各种传感器是如何工作的吗?今日起硬禾的器件小百科之传感器系列将正式上线啦。本系列共有30个传感器视频介绍,从零开始带你认识各种常见传感器,并学会使用这些传感器。

我们从温度传感器开始,温度传感器在日常生活中有着广泛的应用,像热水器,烘干机,空调,微波炉等家用电器,还有工业生产中的各种科研仪器,农业的温室大棚等都需要用温度传感器来实时监测温度。今天就带大家了解它的工作原理、常见种类,以及通过MCU实际演示对温度传感器数据的读取过程。 

1. 什么是温度传感器 

温度传感器是指能感受温度并转换成电信号输出的传感器。在日常生活以及各个行业的应用场景中都需要用到温度传感器。温度传感器通常由温度感测元件和信号处理电路组成。

温度传感器|从零开始认识各种传感器

温度感测元件用于测量环境或物体的温度,比如热敏电阻、热电偶、红外温度传感器等。上图是一个汽车水箱的水温传感器示意图,图中左侧它的温度感测元件是一个热敏电阻,发动机温度的变化将导致热敏电阻值的变化,这个变化被发动机控制单元电路检测到后,再将这个电信号处理转换成温度值显示以及进行相应的处理。

2. 温度传感器是如何工作的

其工作原理主要是基于材料的温度特性。当温度发生变化时,感温元件内部的电阻或电势也会发生变化,从而导致输出电信号的变化,这个电信号的变化由微控制器或其他设备读取处理后就可以表示出当前测试出来的温度。
我们还是以发动机冷却液的温度传感器来说明,当发动机温度升高时,由于热敏电阻的负温度特性,其电阻变小,流过的电流变大, 控制单元电路检测到电流的增大,将其转换显示为温度值的升高。

3. 常见的温度传感器的种类

现代电子设备中最常使用的温度传感器有四种类型:热电偶、RTD(电阻温度检测器)、热敏电阻和基于半导体的集成电路 (IC)。

3.1 热电偶

图1 热电偶

热电偶(图2)是最常用的温度传感器类型,多用于各种工业、汽车和消费应用。具有无需供电,工作温度范围宽,响应速度快的特点。热电偶是热电传感器,它是由焊接或压接在一起的不同金属(例如铜和康铜)的两个接头组成。一个结保持在恒温,称为参考结或者冷结,而另一个为测量结,也叫热结。当两个结处于不同温度时,由于热电效应,会在参考结上产生电压差,测量此电压差就能计算出对应的温度。

图2 热电偶工作方式

3.2 电阻温度检测器RTD

任何金属的电阻会随着温度的变化而变化。电阻温度检测器RTD(图4),就是利用这个了原理. 它是一种特殊的电阻,其阻值会随着温度的升高而变大,随着温度的降低而减小,它主要用于-200—500℃温度范围内的温度测量。由于具有几乎线性的温度与电阻的关系,并且具有足够大的电阻温度系数,铂金是最常见也是最精确的用于制造 RTD 的材料。

图3 RTD 电阻温度传感器

3.3 热敏电阻 

热敏电阻也是随温度变化的电阻(图5)。它和RTD的工作原理相同,但是制作材料不同,热敏电阻通常由陶瓷或聚合物材料制成,而RTD由纯金属制成。热敏电阻是高灵敏度和非线性的,而RTD相对不敏感但非常线性。因此,通常在高精度不重要的地方使用热敏电阻,而且由于其非线性。使用时需要进行校准。具有负温度系数的热敏电阻叫做(NTC),它们的电阻随着温度的升高而降低。 具有正温度系数 的热敏电阻叫做(PTC)。比较常用的是NTC。

图4 热敏电阻

3.4 IC型温度传感器

IC 型温度传感器是利用晶体管的物理特性,比如CMOS管的PN结温度特性来制作的传感器。 它具有集成度高,精度高,功耗低,响应快等优点。可广泛适用于工业、医疗、便携式设备、家用电器、可穿戴设备等方面。比如图6右边这款在分销商得捷电子网站上列出的这款微型温湿度传感器芯片,尺寸只有2毫米乘2毫米。

图5 微型温湿度传感器芯片

3.5 温度传感器特性对比

总结一下刚才介绍的四种常用温度传感器的特性对比,如下图7所示。可以看到,热电偶的应用温度范围最广,适合于极端温度的环境以及测试设备。热敏电阻具有快速响应高灵敏度,但是线性度差,适合吹风机,保护电路等应用。而RTD准确性最好,适合高精度测量。而芯片IC型温度传感器有良好的线性度以及支持数字接口,适合用于穿戴式设备场合。

图6 常见温度传感器特性对比

3.6 红外温度传感器 

另外从测量方式上还有非接触型的温度传感器,比如我们熟悉的红外测温计就是使用的红外辐射传感器来确定被测物体的温度。它通过检测物体放射出的红外辐射来确定其温度,因为物体的温度与其辐射的红外光谱有关。它可以使用TPIS 1S 1385 / 5029这颗红外温度传感来设计。

图7  红外测温枪

4. 温度传感器实验演示

最后,我们来演示如何使用配备显示屏的树莓派读取温度传感器的数据并将结果显示出来。 这里我们选用的是一款热敏电阻。树莓派MCU通过模拟接口读取到的数字进行数字化处理后,在显示屏上直观地显示出来。

图8 树莓派读取温度传感器过程展示

主控板卡:基于RP2040的带屏调试助手

以下是完整程序:

from breakout_colourlcd240x240 import BreakoutColourLCD240x240
from machine import ADC, Pin, Timer, PWM
from utime import sleep
import time, math,array
#------------------------------------------------------------------
width = BreakoutColourLCD240x240.WIDTH
height = BreakoutColourLCD240x240.HEIGHT
display_buffer = bytearray(width * height*2)
display = BreakoutColourLCD240x240(display_buffer)

timer1 = Timer() 

stemp = ADC(2)                       
current_temp = 0                   
#-------------------------------------------------------------------
def display_init():
    
    display.set_pen(0,255,0)
    display.rectangle(58,30,13,160)
    display.circle(64,190,10)
    display.set_pen(255,0,0)
  
    display.text("current", 150, 20, 194, 2)
    display.text("temp", 150, 35, 194, 2)
    display.update()
  
    for i in range(6):
        display.set_pen(0,200,0)
        display.pixel_span(80,27 + i*30,10)
        display.text(str(50 - i *10), 100, 20+i*30, 194, 2)
        display.set_pen(0,0,220)
        if i < 5:
            for j in range(4):
                display.pixel_span(80,33 + j*6 + i * 30,5)
        display.update()
    
#---------------------------------------------------------------------
def display_change(temp, color):
    global current_temp
    current_temp = temp
    #print(temp)
    display.set_pen(color[0], color[1], color[2])
    display.rectangle(58,30,13,160)
    display.circle(64,190,10)
    display.set_pen(0,0,150)
    display.rectangle(58,20,13,7+int((50-temp)/2)*6)
    display.set_pen(0,0,0)
    display.rectangle(150,50,90,40)
    display.set_pen(0,255,0)
    display.text(str(temp), 150, 50, 5, 5)
    display.update()
#----------------------------------------------------------------------
#温度获取
def get_temp():
    
    Analogvalue=stemp.read_u16()
    voltage=100*float(Analogvalue)/65535

    return voltage
#----------------------------------------------------------------------
def main():
    
    color = [0,255,0] 
    timer1 = Timer()
    display_init()
    timer1.init(freq=5,mode=Timer.PERIODIC, callback=lambda t:display_change(round(get_temp(),1), color))

    while True:
      sleep(0.1) 
main()

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值