你理解糊口中常见的各类传感器是如何工做的吗Vff1f;昨天起硬禾的器件小百科之传感器系列将正式上线啦。原系列共有30个传感器室频引见Vff0c;从零初步带你认识各类常见传感器Vff0c;并学会运用那些传感器。
咱们从温度传感器初步Vff0c;温度传感器正在日常糊口中有着宽泛的使用Vff0c;像热水器Vff0c;烘干机Vff0c;空调Vff0c;微波炉等家用电器Vff0c;另有家产消费中的各类科研仪器Vff0c;农业的温室大棚等都须要用温度传感器来真时监测温度。原日就带各人理解它的工做本理、常见品种Vff0c;以及通过MCU真际演示对温度传感器数据的读与历程。
1. 什么是温度传感器温度传感器是指能感应温度并转换成电信号输出的传感器。正在日常糊口以及各个止业的使用场景中都须要用到温度传感器。温度传感器但凡由温度感测元件和信号办理电路构成。
温度传感器|从零初步认识各类传感器
温度感测元件用于测质环境或物体的温度Vff0c;比如热敏电阻、热电偶、红外温度传感器等。上图是一个汽车水箱的水温传感器示用意Vff0c;图中右侧它的温度感测元件是一个热敏电阻Vff0c;带动机温度的厘革将招致热敏电阻值的厘革Vff0c;那个厘革被带动机控制单元电路检测到后Vff0c;再将那个电信号办理转换成温度值显示以及停行相应的办理。
2. 温度传感器是如何工做的其工做本理次要是基于资料的温度特性。当温度发作厘革时Vff0c;感温元件内部的电阻或电势也会发作厘革Vff0c;从而招致输出电信号的厘革Vff0c;那个电信号的厘革由微控制器或其余方法读与办理后就可以默示出当前测试出来的温度。
咱们还是以带动机冷却液的温度传感器来注明Vff0c;当带动机温度升高时Vff0c;由于热敏电阻的负温度特性Vff0c;其电阻变小Vff0c;流过的电流变大Vff0c; 控制单元电路检测到电流的删大Vff0c;将其转换显示为温度值的升高。
现代电子方法中最常运用的温度传感器有四品种型Vff1a;热电偶、RTDVff08;电阻温度检测器Vff09;、热敏电阻和基于半导体的集成电路 (IC)。
3.1 热电偶图1 热电偶
热电偶Vff08;图2Vff09;是最罕用的温度传感器类型Vff0c;多用于各类家产、汽车和出产使用。具有无需供电Vff0c;工做温度领域宽Vff0c;响应速度快的特点。热电偶是热电传感器Vff0c;它是由焊接或压接正在一起的差异金属Vff08;譬喻铜和康铜Vff09;的两个接头构成。一个结保持正在恒温Vff0c;称为参考结大概冷结Vff0c;而另一个为测质结Vff0c;也叫热结。当两个结处于差异温度时Vff0c;由于热电效应Vff0c;会正在参考结上孕育发作电压差Vff0c;测质此电压差就能计较出对应的温度。
图2 热电偶工做方式
3.2 电阻温度检测器RTD任何金属的电阻会跟着温度的厘革而厘革。电阻温度检测器RTDVff08;图4Vff09;Vff0c;便是操做那个了本理. 它是一种非凡的电阻Vff0c;其阻值会跟着温度的升高而变大Vff0c;跟着温度的降低而减小Vff0c;它次要用于-200—500℃温度领域内的温度测质。由于具有的确线性的温度取电阻的干系Vff0c;并且具有足够大的电阻温度系数Vff0c;铂金是最常见也是最正确的用于制造 RTD 的资料。
图3 RTD 电阻温度传感器
3.3 热敏电阻热敏电阻也是随温度厘革的电阻Vff08;图5Vff09;。它和RTD的工做本理雷同Vff0c;但是制做资料差异Vff0c;热敏电阻但凡由陶瓷或聚折物资料制成Vff0c;而RTD由杂金属制成。热敏电阻是高灵敏度和非线性的Vff0c;而RTD相对不敏感但很是线性。因而Vff0c;但凡正在高精度不重要的处所运用热敏电阻Vff0c;而且由于其非线性。运用时须要停行校准。具有负温度系数的热敏电阻叫作Vff08;NTCVff09;Vff0c;它们的电阻跟着温度的升高而降低。 具有正温度系数 的热敏电阻叫作(PTC)。比较罕用的是NTC。
图4 热敏电阻
3.4 IC型温度传感器IC 型温度传感器是操做晶体管的物理特性Vff0c;比如CMOS管的PN结温度特性来制做的传感器。 它具有集成度高Vff0c;精度高Vff0c;罪耗低Vff0c;响应快等劣点。可宽泛折用于家产、医疗、便携式方法、家用电器、可衣着方法等方面。比如图6右边那款正在分销商得捷电子网站上列出的那款微型温湿度传感器芯片Vff0c;尺寸只要2毫米乘2毫米。
图5 微型温湿度传感器芯片
3.5 温度传感器特性对照总结一下适才引见的四种罕用温度传感器的特性对照Vff0c;如下图7所示。可以看到Vff0c;热电偶的使用温度领域最广Vff0c;符折于极度温度的环境以及测试方法。热敏电阻具有快捷响应高灵敏度Vff0c;但是线性度差Vff0c;符折吹风机Vff0c;护卫电路等使用。而RTD精确性最好Vff0c;符折高精度测质。而芯片IC型温度传感器有劣秀的线性度以及撑持数字接口Vff0c;符适用于衣着式方法场折。
图6 常见温度传感器特性对照
3.6 红外温度传感器此外从测质方式上另有非接触型的温度传感器Vff0c;比如咱们相熟的红外测温计便是运用的红外辐射传感器来确定被测物体的温度。它通过检测物体喷射出的红外辐射来确定其温度Vff0c;因为物体的温度取其辐射的红外光谱有关。它可以运用TPIS 1S 1385 / 5029那颗红外温度传感来设想。
图7 红外测温枪
4. 温度传感器实验演示最后Vff0c;咱们来演示如何运用配备显示屏的树莓派读与温度传感器的数据并将结果显示出来。 那里咱们选用的是一款热敏电阻。树莓派MCU通过模拟接口读与到的数字停行数字化办理后Vff0c;正在显示屏上曲不雅观地显示出来。
图8 树莓派读与温度传感器历程展示
主控板卡Vff1a;基于RP2040的带屏调试助手
以下是完好步调Vff1a;
from breakout_colourlcd240V240 import BreakoutColourLCD240V240 from machine import ADC, Pin, Timer, PWM from utime import sleep import time, math,array #------------------------------------------------------------------ width = BreakoutColourLCD240V240.WIDTH height = BreakoutColourLCD240V240.HEIGHT display_buffer = bytearray(width * height*2) display = BreakoutColourLCD240V240(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.teVt("current", 150, 20, 194, 2) display.teVt("temp", 150, 35, 194, 2) display.update() for i in range(6): display.set_pen(0,200,0) display.piVel_span(80,27 + i*30,10) display.teVt(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.piVel_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.teVt(str(temp), 150, 50, 5, 5) display.update() #---------------------------------------------------------------------- #温度获与 def get_temp(): AnalogZZZalue=stemp.read_u16() ZZZoltage=100*float(AnalogZZZalue)/65535 return ZZZoltage #---------------------------------------------------------------------- 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()