当前位置:网站首页>【NTC 热敏电阻与 Arduino 读取温度】
【NTC 热敏电阻与 Arduino 读取温度】
2022-08-02 03:28:00 【WENJIE科技】
这里写目录标题
前言
热敏电阻是简单、便宜且准确的组件,可让您轻松获取项目的温度数据。热敏电阻或热敏电阻是可变电阻,其电阻会随温度而变化。此功能使我们能够通过测量热敏电阻的电阻来读取温度或温度变化。热敏电阻用于各种日常用品,如恒温器、SMPS、浪涌保护电路和可充电电池组等。
NTC 热敏电阻管脚
引脚1==》NTC热敏电阻端子1
引脚2==》NTC热敏电阻端子2
热敏电阻的类型
根据所使用的材料以及它们与温度热敏电阻的反应方式,可分为两种类型:
负温度系数热敏电阻或 NTC 热敏电阻
正温度系数热敏电阻或 PTC 热敏电阻
正温度系数热敏电阻或 PTC 热敏电阻
对于 PTC 热敏电阻,电阻随温度升高而增加,这通常是由于热晶格搅动增加所致。它们通常用于过流保护,作为自恢复保险丝。
负温度系数热敏电阻或 NTC 热敏电阻
对于 NTC 热敏电阻,电阻随着温度升高而降低,这是由于价带的热扰动所激发的传导电子数量增加。NTC 通常用作温度传感器或与电源等电路串联用作浪涌电流限制器。
这是来自波长电子学的 TCS610 10K NTC 的电阻与温度响应图。您可以看到,在 25⁰C 时,NTC 热敏电阻的电阻为 10Kohms。当温度升高时,电阻减小。
NTC热敏电阻如何工作?
如前所述,NTC 热敏电阻的电阻会随着温度的变化而变化。因此,我们可以测量热敏电阻的电阻,并可以计算与测量电阻相关的温度。热敏电阻当然不是精确温度测量的最佳选择,但它非常便宜并且非常容易使用。这是一个显示 NTC 热敏电阻工作的小动画。
关于 NTC 热敏电阻的常见问题
什么是 NTC 热敏电阻?
NTC热敏电阻是一种具有负温度系数的热敏电阻。当温度升高时,它的电阻会降低。
NTC是如何计算的?
特定 NTC 热敏电阻的实际电阻值是通过将比率 RT/R25(表格值)乘以 25°C 时的电阻值获得的,该值在数据表中指定。
NTC热敏电阻是由什么制成的?
热敏电阻由烧结陶瓷制成,该陶瓷由高度敏感的材料组成,电阻与温度的关系具有始终如一的可再现特性。
NTC热敏电阻是线性的吗?
不是。热敏电阻是非线性可变电阻器件。
为什么 NTC 热敏电阻用于锂离子电池组?
NTC热敏电阻用于测量电池温度。由于锂离子电池在高温下非常危险,因此有必要连续监测其温度
测量 NTC 电阻和温度
为了测量 NTC 热敏电阻的电阻,我们将使用分压器。热敏电阻的一个端子将通过一个已知值的电阻器连接到 VCC 线,另一端子将连接到地。连接将如下所示。要测量 NTC 热敏电阻的电阻,首先,我们将测量分压器的电压。分压器方程如下。
既然我们知道五在, R1, 和 输出电压 我们可以使用以下等式计算 NTC 热敏电阻 R2 的值
Arduino NTC热敏电阻接口电路图
连接非常简单。我们将创建一个带有 NTC 热敏电阻和一个已知值电阻的分压器。对于这种情况,我们将为此使用 10K 电阻。分压器由连接到 5V 的 10K 电阻器和热敏电阻器接地,在 NTC 热敏电阻器和电阻器连接在一起的位置测量电压。由于我们知道参考电阻的值和参考电压,我们可以从测量的电压降计算热敏电阻的电阻。从这个电压降,我们可以计算出热敏电阻的电阻。从计算出的热敏电阻电阻,我们也可以计算出温度。
您可能想知道为什么我们将参考电阻连接到 GPIO2 而不是 5V 引脚。这是因为自热现象。如果我们把一个10K的热敏电阻和一个10K的电阻连接成一个分压器,分压器接5V再接地,我们会得到电流最小电流约为25mA(5V/(10K+10K)=0.25)毫安)一直。即使这看起来不是很多电流,这肯定会加热您的热敏电阻,因为即使是 25mA 的电流也会导致大约 0.625mW(0.25mAx 2.5V)的功耗。如果我们考虑热敏电阻和参考电阻的值是否保持不变,情况也是如此。众所周知,热敏电阻的电阻会随着温度的变化而剧烈变化。因此,允许连续电流流动会影响读数。所以,为了避免这种情况,我们只会在读取时将 GPIO 设置为高电平,一旦读取,我们会将 GIO 状态更改为低电平。实际连接如下图所示。
Arduino 代码
让我们看一下代码部分。代码非常简单。使用分压器测量 NTC 热敏电阻电阻,然后从中计算温度。
在第一行中,我们已经声明了全局变量和引脚。模拟引脚 A0用于测量分压器的电压。D2 引脚用于为分压器提供 5V 电压。NTC 在 25⁰C 时的标称电阻值、NTC 的 Beta 系数和已知值电阻器的电阻值也被公布。采样率是平均采样的数量。
#define ntc_pin A0 // Pin, to which the voltage divider is connected
#define vd_power_pin 2 // 5V for the voltage divider
#define nominal_resistance 10000 //Nominal resistance at 25⁰C
#define nominal_temeprature 25 // temperature for nominal resistance (almost always 25⁰ C)
#define samplingrate 5 // Number of samples
#define beta 3950 // The beta coefficient or the B value of the thermistor (usually 3000-4000) check the datasheet for the accurate value.
#define Rref 10000 //Value of resistor used for the voltage divider
int samples = 0; //array to store the samples
在setup()函数中,我们已经初始化了串行通信并将 D2 引脚设置为输出。波特率设置为 9600,您可以根据用户的需要进行设置。
void setup(void) {
pinmode(vd_power_pin,OUTPUT);
Serial.begin(9600); initialize serial communication at a baud rate of 9600
}
在循环功能中,分压器的电压是使用模拟引脚 A0 测量的。取五个样本并取平均值以获得更好的准确性。该值用于计算 NTC 的电阻。使用电阻、标称电阻和 β 系数,使用 Steinhart-Hart 方程计算温度。然后将电阻和温度打印到串行监视器上。
void loop(void) {
uint8_t i;
float average;
sample = 0;
// take voltage readings from the voltage divider
digitalWrite(vd_power_pin,HIGH);
for (i=0; i< samplingrate; i++) {
samples += analogRead(ntc_pin);
delay(10);
}
digitalWrite(vd_power_pin,LOW)
average = 0;
average = samples/ samplingrate;
Serial.print("ADC readings ");
Serial.println(average);
// Calculate NTC resistance
average = 1023 / average - 1;
average = Rref/ average;
Serial.print("Thermistor resistance ");
Serial.println(average);
float temperature;
temperature = average / nominal_resistance; // (R/Ro)
temperature = log(steinhart); // ln(R/Ro)
temperature /= beta; // 1/B * ln(R/Ro)
temperature += 1.0 / (nominal_temeprature + 273.15); // + (1/To)
temperature = 1.0 / temperature; // Invert
temperature -= 273.15; // convert absolute temp to C
Serial.print("Temperature ");
Serial.print(temperature);
Serial.println(" *C");
delay(1000);
}
测量 NTC 热敏电阻电阻和温度
下面的图片显示了我们如何将 NTC 热敏电阻与 Arduino 连接。您可以看到,当烙铁接触热敏电阻时,其电阻开始降低。
边栏推荐
- 深入了解为何面试官常说:你还没准备好,我不会录用你
- BSN:Boundary-Sensitive Network for Temporal Action Proposal Generation论文阅读笔记
- SyntaxError: unexpected character after line continuation character
- 记账凭证的种类、记账凭证的基本内容、记账凭证的填制要求、记账凭证的审核
- win10内存占用很高,关闭所有应用程序依然降不下来(win11)
- 十大实用的办公工具网站,可以解决你日常100%的问题
- Laravel随笔记录
- View的滑动
- [Spark]-协同过滤
- 会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核
猜你喜欢
分布式消息队列平滑迁移技术实战
Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记
深入了解为何面试官常说:你还没准备好,我不会录用你
umi3 权限路由PrivateRoute未执行
会计账簿、会计账簿概述、会计账簿的启用与登记要求、会计账簿的格式和登记方法
关于我的项目-微信公众号~
公司产品太多了,怎么实现一次登录产品互通?
从Attention到Self-Attention和Multi-Head Attention
在 UUP dump 被墙的情况下如何用 UUP 下载 ISO 镜像
如何在正则表达式里表达可能存在也可能不存在的内容?
随机推荐
Spark数据读取和创建
库存现金、现金管理制度、现金的账务处理、银行存款、银行存款的账务处理、银行存款的核对
Gradle源码解析:生命周期的三个阶段
php中魔术方法详解
关于我的项目-微信小程序2(uniapp->wx小程序)
Selenium-WebDriverApi接口
自定义view实现半圆弧进度条
大厂底层必修:“应用程序与 AMS 的通讯实现”
深度学习理论:测试集与验证集的区别及各自用途
十大实用的办公工具网站,可以解决你日常100%的问题
Transformer结构解析及常见问题
Windows下MySQL数据库报“ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:8000‘ (10061)”错误解决
浅谈性能优化:APP的启动流程分析与优化
Visual Studio2022创建setup项目
Microsoft Office安装全过程记录
聊聊MySQL的10大经典错误
关于我的大创、论文~
解决flex布局warp自动换行下最后一行居中问题
面试必备:Android性能分析与优化实战进阶手册
【使用树莓派时碰到的一些问题】