目录

温度传感器

1. 什么是温度传感器?

温度传感器是一种用于测量和检测温度的设备或传感器。它能够将物体或环境的温度转换为可供测量、记录或控制的电信号或数字信号。温度传感器广泛应用于各个领域,包括工业控制、环境监测、医疗设备、家电、汽车等。温度传感器在各个领域中起着至关重要的作用,帮助监测和控制温度,确保设备的正常运行和安全性,同时也提供数据用于分析和决策。

2. 温度传感器的分类

3. 热敏电阻温度传感器

工作原理:

热敏电阻温度传感器利用材料的电阻随温度变化的特性来测量温度。它使用热敏电阻材料作为敏感元件,该材料的电阻值会随着温度的变化而变化。通过测量热敏电阻的电阻值变化,可以确定与温度相关的值。热敏电阻的电阻值随温度的升高或降低而呈非线性变化。热敏电阻温度传感器的输出是模拟信号,通常需要通过模数转换器(ADC)将其转换为数字形式以进行进一步的处理和读取。

种类:

热敏电阻温度传感器根据材料类型和电阻温度特性的不同,可以分为两种常见类型:负温度系数(NTC)热敏电阻和正温度系数(PTC)热敏电阻。

NTC热敏电阻:NTC热敏电阻的电阻值随温度升高而下降。常用材料包括氧化锌、硅酮、镍锌等。常用型号如:NTC103、NTC10D-9、NTC10K、NTC3950、NTC10D-11、NTC10D-20、NTC20D-9、NTC20D-11等。

PTC热敏电阻:PTC热敏电阻的电阻值随温度升高而上升。常用材料包括钴酸锂、硼硅酸锌等。常用型号如:PTC180、PTC1000、PTC1200、PTC1500等。

测量范围:

热敏电阻温度传感器的测量范围取决于具体的材料和设计。一般来说,测量范围可以从低温度(例如-50°C)到中等温度(例如+150°C)。

测量精度:

热敏电阻温度传感器的测量精度受到多个因素的影响,包括材料特性、电路设计和环境条件等。一般而言,测量精度可以达到几个小数点的摄氏度或华氏度。

优点:

相对较小的尺寸和简单的结构,便于集成和安装。

价格相对较低,成本效益较高。

快速响应时间和良好的稳定性。

缺点:

精度相对较低,受到环境和电路影响较大。

受到温度漂移和时效效应的影响,需要定期校准和补偿,可将电阻放入0°冰水进行校准。

测量范围较窄,不能适用于极高温度和极低温度的测量。

4. 电阻温度计

工作原理:

电阻温度计(Resistance Temperature Detector,RTD)利用电阻温度系数的特性来测量温度。它使用一种电阻材料(通常是铂)作为敏感元件,随着温度的变化,电阻值相应地发生变化。其电阻值随温度的变化呈现线性关系。根据电阻与温度之间的关系,可以确定与温度相关的值。

种类:

电阻温度计的常见类型是铂电阻温度计,其中最常用的是PT100和PT1000。PT100表示电阻在0°C时为100欧姆,而PT1000表示电阻在0°C时为1000欧姆。此外,还有其他材料的电阻温度计,如铜、镍等。常用型号PT100-3850、PT100-3911、PT100-PTC、PT1000-3851、PT1000-3850等。

测量范围:

电阻温度计的测量范围取决于具体的型号和设计。一般而言,铂电阻温度计的测量范围通常在-200°C至+850°C之间。

测量精度:

电阻温度计的测量精度取决于多个因素,包括材料的质量、线路设计、接线电阻和环境条件等。一般而言,铂电阻温度计的测量精度可以达到几个小数点的摄氏度。

优点:

高精度和稳定性:铂电阻温度计具有较高的测量精度和稳定性。

宽测量范围:能够覆盖广泛的温度范围,适用于不同的应用需求。

较小的尺寸和简单的结构,易于集成和安装。

缺点:

相对较高的成本:与其他温度传感器相比,铂电阻温度计的成本较高。

较慢的响应时间:由于电阻的热容性,铂电阻温度计响应时间较长,不能实时测量快速变化的温度。

对线性化和补偿电路的要求:需要使用专门的线性化和补偿电路来提高测量精度和抵消线路误差。

5. 热电偶温度传感器

工作原理:

热电偶温度传感器利用热电效应来测量温度。它由两种不同金属导线(通常是铂和铂铑合金)焊接在一起形成的热电接点。当热电偶的一端暴露在被测温度下时,产生的温差会在两个接点之间形成电动势。这个电动势与接点温度差以及导线材料的热电系数有关。通过测量热电偶产生的电动势,可以确定与温度相关的值。

种类:

K型热电偶:使用铬和镍铬合金作为金属导线材料。

J型热电偶:使用铁和铜镍合金作为金属导线材料。

T型热电偶:使用铜和铜镍合金作为金属导线材料。

E型热电偶:使用镍铬和铜镍合金作为金属导线材料。

测量范围:

K型热电偶:适用于测量温度范围从-200°C到+1350°C。

J型热电偶:适用于测量温度范围从-40°C到+750°C。

T型热电偶:适用于测量温度范围从-200°C到+350°C。

E型热电偶:适用于测量温度范围从-200°C到+900°C。

测量精度:

热电偶的测量精度取决于多个因素,包括材料的质量、接头的焊接技术、电缆长度和环境条件等。通常,热电偶的测量精度可以达到几个小数点的摄氏度或华氏度。

优点:

宽工作温度范围:热电偶能够在极低温度和极高温度环境下工作,适用于多种应用场景。

耐用性和稳定性:热电偶具有较高的耐用性和稳定性,能够在恶劣的工作条件下长时间稳定运行。

快速响应:热电偶具有快速的温度响应速度,能够快速捕捉温度变化。

缺点:

较低的灵敏度:相对于其他温度传感器,热电偶的灵敏度较低,需要一定的放大和补偿电路来提高测量精度。

需要冷端补偿:热电偶的测量结果受到冷端温度的影响,需要进行冷端补偿以减小误差。

较大的响应时间:由于热电偶的热容性较大,其响应时间较长,不能实时测量快速变化的温度。

6. 红外温度传感器

工作原理:

红外温度传感器基于物体的热辐射特性。物体在一定温度下会发出红外辐射,传感器通过红外线传感器接收物体发出的红外辐射能量,并将其转换为与物体表面温度相关的电信号。这个转换过程利用了热电效应或红外吸收的原理。

种类:

红外温度传感器可以分为点式红外温度传感器和成像红外温度传感器两类。

点式红外温度传感器:它通过一个小的视场角测量单个点或小区域的温度。常见的点式传感器包括热电偶式传感器、热电阻式传感器和热敏电阻式传感器。常用型号如:MLX90614、AMG8833、TMP006、G5TAR、D6T、Grove - Infrared Temperature Sensor等。

成像红外温度传感器:它可以获取整个区域的温度分布,并生成热图像。常见的成像传感器包括红外热像仪和红外热成像相机。如:FLIR ONE Pro、Seek Thermal Compact Pro、Hti HT-175、Testo 872等。

测量范围:

点式传感器的测量范围在-50°C至+2000°C之间。

成像传感器的测量范围在-40°C至+2000°C之间。

测量精度:

点式传感器的测量精度可达到±0.5°C或更高。

而成像传感器的测量精度可达到±2°C或更高。

优点:

非接触测量:无需物理接触目标物体,减少了污染和交叉感染的风险。

快速响应:传感器能够快速获取温度值,适用于实时监测和快速反应的应用场景。

宽测量范围:能够测量从极低温度到极高温度的范围,满足不同应用的需求。

多样化应用:广泛应用于工业控制、医疗、建筑、农业等领域。

缺点:

测量目标的要求:目标物体的表面特性(如反射率、发射率)会影响测量精度,需要进行校准和适当的设置。

需要考虑环境因素:大气湿度、粉尘、烟雾等环境因素可能对测量结果产生影响,需要适当的补偿和防护措施。

7. 半导体温度传感器

工作原理:

半导体温度传感器是利用半导体材料的电特性随温度变化而变化来测量温度的传感器。它使用半导体材料中的温度相关的电阻、电压或电流来确定温度值。根据具体的设计,半导体温度传感器可以利用PN结、热敏电阻效应、反向热电效应等原理工作。

种类:

常见的半导体温度传感器包括硅基和蓝宝石基的温度传感器。

硅基温度传感器:基于硅材料的温度特性,常见的型号包括LM35、DS18B20等。

蓝宝石基温度传感器:基于蓝宝石材料的温度特性,常见的型号包括FLINTEC的系列传感器。

测量范围:

半导体温度传感器的测量范围取决于具体的型号和设计。一般而言,硅基温度传感器的测量范围通常在-55°C至+150°C之间,蓝宝石基温度传感器的测量范围可以更广,可达-200°C至+1000°C之间。

测量精度:

半导体温度传感器的测量精度受到多个因素的影响,包括制造工艺、环境条件和供电电压等。一般而言,硅基温度传感器的测量精度可以达到几个小数点的摄氏度,而蓝宝石基温度传感器的测量精度通常较高。

优点:

快速响应和高灵敏度:半导体温度传感器响应时间较短,能够快速捕捉温度变化。

较小的尺寸和简单的结构,便于集成和安装。

价格相对较低,成本效益较高。

缺点:

受到供电电压波动的影响,需要稳定的供电电压。

一些半导体温度传感器对环境的湿度和化学物质敏感,需要适当的环境保护措施。

测量范围相对较窄,不能适用于极高温度和极低温度的测量。

8. 如何应用温度传感器

温度传感器在各个领域都有广泛的应用。

1.温度监测和控制:温度传感器用于测量和监测环境温度,帮助实现温度控制和调节。适用于家庭、办公室、商业建筑和工业场所等。

2.家电和空调系统:温度传感器被广泛应用于家电产品如冰箱、烤箱、洗衣机等,以及空调系统中,用于监测和控制温度。

3.汽车和交通工具:温度传感器用于测量引擎温度、冷却系统温度和车内温度。有助于监测和控制温度,确保车辆的安全性和性能。

4.医疗设备:温度传感器在医疗设备中起着重要作用,用于测量体温、环境温度和液体温度。广泛应用于体温计、输液设备、手术室和实验室设备等。

5.食品和饮料行业:温度传感器在食品和饮料行业中用于监测和控制食品加工、存储和运输过程中的温度。确保食品安全和质量控制。

6.热水器和供暖系统:温度传感器用于测量热水器、供暖系统和热交换器中的水温和供暖系统温度,以实现适当的供热和节能控制。

7.气象站和环境监测:温度传感器在气象站和环境监测中用于测量室内外温度、土壤温度和水体温度。帮助记录气象数据、环境监测和预警系统。

9. 主要的温度传感器供应商

1.honeywell (霍尼韦尔国际公司)

2.泰科 (泰科电子有限公司)

3.TI (德州仪器公司)

4.ST (意法半导体有限公司)

5.OMRON (欧姆龙公司)

6.Panasonic (松下电器产业株式会社)

7.Amphenol (安费诺集团)

8.NXP (恩智浦半导体有限公司)

9.Sensirion (Sensirion公司)

10.Maxim (美信集成产品公司)

11.ANLOK (安纳洛格设备公司)

12.Microship (微芯科技公司)

13.Siemens (西门子公司)

14.Emerson (艾默生电气公司)

10. 常用的温度传感器介绍

DS18B20

简介:

DS18B20是一种数字温度传感器,采用单总线接口,可直接与微控制器或计算机进行通信。它具有高精度的温度测量能力和多功能特性,适用于各种应用领域。

测温范围:

DS18B20的测温范围广泛,通常为-55°C至+125°C。某些型号的DS18B20还可以支持更广的测温范围,例如-40°C至+125°C。

精度:

DS18B20的测温精度为±0.5°C,在大多数应用中能够提供可靠的温度测量结果。

分辨率:

DS18B20具有可编程分辨率功能,可以根据需要调整测量精度和响应时间。它支持9位、10位、11位或12位的分辨率设置,默认分辨率为12位。

功耗:

DS18B20具有低功耗特性,在温度转换过程中的功耗很低。在非转换状态下,它进入休眠模式以节省能量。

接口:

DS18B20采用单总线接口,即通过一个引脚进行通信和供电。这使得DS18B20的布线和连接非常方便,只需要一个GPIO引脚即可完成通信。

封装:

DS18B20有多种封装形式可供选择,最常见的是TO-92封装,也有其他封装形式如DS18B20-PAR(有保护外壳)和DS18B20-TO-92(带引脚套筒)等。

LM35

简介:

LM35是一种模拟输出的温度传感器,具有线性输出与温度成比例的特点。它可以直接测量环境温度并输出对应的电压信号,广泛应用于温度监测和控制领域。

测温范围:

LM35的测温范围通常为-55°C至+150°C。这使其能够适应广泛的温度测量需求,并覆盖了许多应用场景。

精度:

LM35具有高精度的温度测量能力,通常可以提供±0.5°C的测温精度。在一些特定型号中,精度可达到更高的水平,如±0.25°C。

分辨率:

由于LM35是模拟温度传感器,其分辨率受到所连接的模数转换器(ADC)的影响。通常情况下,它可以提供10位或12位的分辨率。

功耗:

LM35的功耗非常低,通常在工作范围内只消耗几微安的电流。这使得它适用于功耗要求较低的应用场景,并且有助于节省能源。

接口:

LM35是一款模拟温度传感器,输出为线性电压信号。它可以通过模拟输入引脚与微控制器或其他模拟电路进行连接和读取。

封装:

LM35有多种封装形式可供选择,常见的封装类型包括TO-92、SOT-23和SOIC等。这些封装形式提供了不同的安装和连接方式,以适应不同的应用需求。

PT100

简介:

PT100是一种铂电阻温度传感器,使用铂金材料的电阻随温度变化的特性来测量温度。它是工业和实验室中常用的高精度温度传感器。

测温范围:

PT100的测温范围通常为-200°C至+850°C,具体范围可以根据不同的型号和规格进行选择。它能够适应广泛的温度测量需求。

精度:

PT100具有很高的测温精度,通常可以提供±0.1°C至±0.3°C的精度范围。某些型号的PT100甚至能够达到更高的精度级别。

分辨率:

由于PT100是模拟温度传感器,其分辨率取决于所连接的模数转换器(ADC)。通常情况下,它可以提供12位或更高的分辨率。

功耗:

PT100的功耗相对较低,通常在几毫瓦到几十毫瓦的范围内。具体的功耗取决于使用环境和电路设计。

接口:

PT100通常采用模拟电压输出,它的电阻值随温度变化而变化,可通过模拟输入引脚连接到模数转换器(ADC)或测量电路。

封装:

PT100有多种封装形式可供选择,常见的封装类型包括玻璃封装和金属封装。它们具有不同的物理特性和安装方式,以适应不同的应用需求。

TMP36

简介:

TMP36是一种模拟输出的温度传感器,可直接测量环境温度并输出与温度成比例的电压信号。它是一种低成本、易于使用的温度传感器,适用于各种温度测量应用。

测温范围:

TMP36的测温范围通常为-40°C至+125°C,适用于常见的温度测量需求。

精度:

TMP36通常具有较高的测温精度,可以提供±1°C的精度范围。在一些特定型号中,精度可能更高。

分辨率:

由于TMP36是模拟温度传感器,其分辨率取决于所连接的模数转换器(ADC)。通常情况下,它可以提供10位或12位的分辨率。

功耗:

TMP36的功耗非常低,通常在几十微瓦的范围内。这使得它非常适合用于低功耗的应用场景,并且有助于节省能源。

接口:

TMP36是一款模拟温度传感器,其输出为线性电压信号。它可以通过模拟输入引脚与微控制器或其他模拟电路进行连接和读取。

封装:

TMP36通常以TO-92封装形式出现,这是一种常见的封装形式,方便安装和连接。

NTC103

简介:

NTC103是一种常见的NTC热敏电阻温度传感器,利用材料的电阻随温度变化的特性来测量温度。它是一种成本低、响应快的温度传感器,广泛应用于各种温度测量和控制场景。

测温范围:

NTC103的测温范围通常为-40°C至+125°C,适用于常见的温度测量需求。也有一些型号的NTC热敏电阻提供更广泛的测温范围选择。

精度:

NTC103的测温精度通常取决于其特性曲线和电路设计,精度范围一般在±1°C至±5°C之间。

分辨率:

NTC103的分辨率主要取决于所连接的测量电路和模数转换器(ADC)。通常情况下,它可以提供10位或12位的分辨率。

功耗:

NTC103的功耗非常低,通常在几毫瓦的范围内。这使得它非常适合用于低功耗和便携式设备,有助于节省能源。

接口:

NTC103一般以两个引脚形式出现,其中一个引脚用于电阻与测量电路的连接,另一个引脚用于供电。

封装:

NTC103有多种封装形式可供选择,常见的封装类型包括玻璃封装、片状封装等。不同的封装形式适用于不同的安装和连接方式。

AMG8833

简介:

AMG8833是一种红外温度传感器阵列,具有8×8个独立的红外温度传感器,可以同时测量多个点的温度。它可以实现非接触式红外热像图的温度测量,适用于许多应用领域。

测温范围:

AMG8833的测温范围通常为-20°C至+80°C,适用于常见的温度测量需求。

精度:

AMG8833的测温精度通常在±2.5°C范围内。精度受到多个因素的影响,如环境条件和传感器校准等。

分辨率:

AMG8833具有8×8的阵列,每个像素的分辨率由传感器自身决定。通常情况下,它可以提供0.25°C至1°C的分辨率。

功耗:

AMG8833的功耗取决于工作模式和采样频率等因素。在低功耗模式下,功耗较低,适用于要求节能的应用场景。

接口:

AMG8833通常通过I2C接口与微控制器或其他设备进行通信。它使用I2C总线来传输温度数据和配置命令。

封装:

AMG8833一般以表面贴装封装(Surface Mount Package)形式出现,常见的封装类型包括QFN和LGA等。

11. 参考使用案例

NTC热敏电阻转化为温度值

NTC热敏电阻温度计算方法,B值法

这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;其中T2=(273.15+25)[通常都是用25℃]

R1是热敏电阻在T1温度下的阻值;

R2是热敏电阻在T2温度下的标称阻值,T2一般是常温25℃

B值是热敏电阻的重要参数(参考具体型号热敏电阻datasheet)

exp是e的n次方;

NTC热敏电阻随环境温度(T)升高,电阻值(R)会下降,反之,当温度(T)下降,电阻值(R)会上升。其对温度感应非常灵敏,NTC热敏电阻电路相对简单,价格低廉,组件精确,可以轻松获取项目的温度数据,因此广泛应用于各种温度的感测与补偿中。

常规NTC热敏电阻参数:温度为(R25℃)时,阻值为10kΩ,B值(25/85)为3435。温度为(R25℃)时,阻值为100kΩ,B值(25/50)为3950

转换代码如下:

from machine import Pin,ADC
import time
import math

A0 = ADC(0)

temp=1
temp1=1

while True:
    Analogvalue=A0.read_u16()
    print("Analogvalue=",Analogvalue)
    voltage=3.32*float(Analogvalue)/65535
    print("voltage=",voltage)
    Rt=10000*voltage/(3.32-voltage)
    print("Rt=",Rt)

    temp=1/(((math.log(Rt/10000))/3950)+(1/(273.15+25)))
    temp=temp-273.15
    print('temperature=',temp,'c')
    if(temp>34):
        print('hot')
    else:
        print('cold')
    time.sleep(1)

NTC热敏电阻模拟温度传感器模块:KY-028

KY-028数字温度传感器根据热敏电阻测量温度变化。该模块具有数字和模拟输出,有一个电位计用于调整数字接口上的检测阈值。注:该模块不能精准的测量温度,只能测量温度相对变化,可做固定环境下的温度报警器使用。

使用KY-028来监测温度变化,调节模块上的可变电阻器使其在正常环境下报警输出引脚输出为低电平,将传感器连接到树莓派拓展板上。

树莓派——-KY-028

3.3——+

GND——G

DO——-GPIO20

A0——-GPIO26(ADC0)

当温度正常时RGB灯为常绿,oled显示屏显示Normal

当温度升高时发出报警信息RGB灯变为红色闪烁,oled显示屏显示Warn!!!,同时蜂鸣器响起

from machine import Pin,ADC,PWM
from oled import oled
from ssd1306 import SSD1306_SPI
from board import pin_cfg
import framebuf
import array
import rp2
import time
import math

D0 = Pin(20,Pin.IN)
A0 = ADC(0)
pwm0 = PWM(Pin(19))      # 从引脚创建 PWM 对象
pwm0.freq(7000)         # 设置频率
pwm0.duty_u16(500)      # 设置占空比, 范围 0-65535

status=1
temp=1

NUM_LEDS = 12

#设置pio工作模式
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)


def ws2812():
    T1 = 2
    T2 = 5
    T3 = 3
    wrap_target()
    label("bitloop")
    out(x, 1)               .side(0)    [T3 - 1]
    jmp(not_x, "do_zero")   .side(1)    [T1 - 1]
    jmp("bitloop")          .side(1)    [T2 - 1]
    label("do_zero")
    nop()                   .side(0)    [T2 - 1]
    wrap()

#使用 ws2812 程序创建状态机,输出到 Pin(22)上。
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(18))

# 启动状态机,它将等待其FIFO上的数据。
sm.active(1)

# 通过一系列 LED RGB 值在 LED 上显示图案。
ar = array.array("I", [0 for _ in range(NUM_LEDS)])

while True:
    Analogvalue=A0.read_u16()#读取ADC值
    voltage=3.3*float(Analogvalue)/65535#将ADC值转换为电压值
    status=D0.value()
    oled.fill(0)
    oled.show()#oled清屏
    if(status==1):#报警状态
        pwm0.freq(7000)
        pwm0.duty_u16(500)#使蜂鸣器响起
        print('Warn!!!')
        oled.text("Warn!!!",35,20)
        oled.show()
        for j in range(NUM_LEDS):
            ar[j]=3840
        sm.put(ar, 8)
        time.sleep(0.4)
        for j in range(NUM_LEDS):
            ar[j]=0
        sm.put(ar, 8)
        time.sleep(0.4)
    else:#正常状态
        pwm0.deinit()
        print('Normal')
        oled.text("Normal",35,20)
        oled.show()
        for j in range(NUM_LEDS):
            ar[j]=983040
        sm.put(ar, 8)
    time.sleep(1)

火焰红外传感器KY-026

KY-026火焰传感器模块可检测火灾发出的红外光。该模块具有数字和模拟输出以及用于调节灵敏度的电位计。常用于火灾探测系统。注:该模块只可监测火焰的红外光,不能测出准确的温度值

使用KY-026来监测火灾的发生,调节模块上的可变电阻器使其在正常环境下报警输出引脚输出为低电平,将传感器连接到树莓派拓展板上。

树莓派——-KY-028

3.3——+

GND——G

DO——-GPIO20

A0——-GPIO26(ADC0)

当温度正常时RGB灯为常绿,oled显示屏显示Normal

当温度升高时发出报警信息RGB灯变为红色闪烁,oled显示屏显示Fire!!!,同时蜂鸣器响起

from machine import Pin,ADC,PWM
from oled import oled
from ssd1306 import SSD1306_SPI
from board import pin_cfg
import framebuf
import array
import rp2
import time
import math

D0 = Pin(20,Pin.IN)
A0 = ADC(0)
pwm0 = PWM(Pin(19))      # 从引脚创建 PWM 对象
pwm0.freq(7000)         # 设置频率
pwm0.duty_u16(500)      # 设置占空比, 范围 0-65535

status=1
temp=1

NUM_LEDS = 12

#设置pio工作模式
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)


def ws2812():
    T1 = 2
    T2 = 5
    T3 = 3
    wrap_target()
    label("bitloop")
    out(x, 1)               .side(0)    [T3 - 1]
    jmp(not_x, "do_zero")   .side(1)    [T1 - 1]
    jmp("bitloop")          .side(1)    [T2 - 1]
    label("do_zero")
    nop()                   .side(0)    [T2 - 1]
    wrap()

#使用 ws2812 程序创建状态机,输出到 Pin(22)上。
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(18))

# 启动状态机,它将等待其FIFO上的数据。
sm.active(1)

# 通过一系列 LED RGB 值在 LED 上显示图案。
ar = array.array("I", [0 for _ in range(NUM_LEDS)])

while True:
    Analogvalue=A0.read_u16()#读取ADC值
    voltage=3.3*float(Analogvalue)/65535#将ADC值转换为电压值
    status=D0.value()
    oled.fill(0)
    oled.show()#oled清屏
    if(status==1):#报警状态
        pwm0.freq(7000)
        pwm0.duty_u16(500)#使蜂鸣器响起
        print('Fire!!!')
        oled.text("Fire!!!",35,20)
        oled.show()
        for j in range(NUM_LEDS):
            ar[j]=3840
        sm.put(ar, 8)
        time.sleep(0.4)
        for j in range(NUM_LEDS):
            ar[j]=0
        sm.put(ar, 8)
        time.sleep(0.4)
    else:#正常状态
        pwm0.deinit()
        print('Normal')
        oled.text("Normal",35,20)
        oled.show()
        for j in range(NUM_LEDS):
            ar[j]=983040
        sm.put(ar, 8)
    time.sleep(1)

半导体温度传感器DS18B20

使用RP2040驱动DS18B20的示例

import machine
import onewire
import ds18x20
import time

# 定义连接到DS18B20数据线的引脚
data_pin = machine.Pin(2)

# 创建单总线类
ow = onewire.OneWire(data_pin)

# 创建DS18B20类
temp_sensor = ds18x20.DS18X20(ow)

# 扫描OneWire总线上的DS18B20器件
devices = temp_sensor.scan()

if len(devices) == 0:
    print("No DS18B20 devices found")
else:
    print("Found", len(devices), "DS18B20 device(s)")
    print("Device addresses:", devices)

while True:
    # 执行温度转换和读取温度
    temp_sensor.convert_temp()
    time.sleep_ms(750)  # 等待转换完成

    for device in devices:
        temperature = temp_sensor.read_temp(device)
        print("Temperature:", temperature, "°C")

    time.sleep(1)  # 等待 1 秒,然后进行下一次读数

数字温度传感器TCN75A

TCN75AVUA是一种温度传感器芯片其测温物理原理基于热敏电阻原理。

在TCN75AVUA芯片中,使用了一种称为负温度系数(NTC)的热敏电阻。

NTC热敏电阻的电阻值随温度升高而下降,而在温度下降时电阻值则上升。

该芯片中的热敏电阻与温度敏感元件组成一个温度敏感电路。

在特定的温度下,电路会产生一个电压,该电压与温度成比例。

芯片内部的模拟电路和ADC将该电压转换为相应的数字值,这个数字值就代表测量到的温度。

由芯片TCN75A设计了一款数字温度传感器,该传感器使用I2C通信,可直接读取温度。

from machine import I2C,Pin
import math
import time

# I2C 地址
TCN75A = 0x48

#I2C设备内部寄存器
TA = 0x00#温度寄存器地址
CONFIG = 0x01#配置寄存器地址
THYST = 0x02#温度报警下限地址
TSET = 0x03#温度报警上限地址

#常用参数
Temp_9bit = 0x00#设置温度精度为0.5 C
Temp_10bit = 0x20#设置温度精度为0.25 C
Temp_11bit = 0x40#设置温度精度为0.125 C
Temp_12bit = 0x60#设置温度精度为0.0625 C
Comparator = 0x00#设置报警输出为比较器模式
Interrupt = 0x02#设置报警输出为中断模式
Alert_high = 0x04#设置报警输出为高
Alert_low = 0x00#设置报警输出为低


code=0
temp=0
#初始化I2C
i2c = I2C(id=0,scl=Pin(21),sda=Pin(20),freq=50_000)

#向指定寄存器写入数据
def reg_write(i2c, addr, reg, data):
    # Construct message
    msg = bytearray()
    msg.append(data)

    i2c.writeto_mem(addr, reg, msg)

#从指定寄存器中读取指定字节的数据
def reg_read(i2c, addr, reg, nbytes):

    data = i2c.readfrom_mem(addr, reg, nbytes)
    return data

#读取总线上挂载的I2C设备并返回其地址
addr_list = i2c.scan()
print(addr_list)

reg_write(i2c,TCN75A,TA,Temp_12bit)#设置温度精度

while True:
    code=reg_read(i2c,TCN75A,TA, 2)
    temp=code[0]+code[1]*0.00390625#将接收到的数据转换为温度
    print("Temperature = "+str(temp)+" C")
    time.sleep(1)