# **Arduino开发NTC热敏电阻实验**

Arduino开发NTC热敏电阻实验

哈喽,
大家好呀我是一名初次学习Arduino的一名初学者,很高兴跟大家分享这次的学习经验,秉承着互相学习,互相进步的原则,我将这次项目的经验分享给大家。

1.这是NTC模块的电路图:
NTC热敏模块电路图
因为NTC热敏电阻是负温度系数电阻,就是温度越高阻值反而越低,也有正温度系数电阻PTC,随着温度的升高,阻值也增加。所以我们不能直接测量NTC热敏电阻的阻值,只能测量热敏电阻的电压,通常我们会将两个电阻串联的方式,通过分压比算出热面电阻的电压,然后算出阻值。
2.这是Arduino与NTC热敏电阻模块的接线图:

在这里插入图片描述
3.由于热敏电阻是可变电阻,因此在计算温度之前,需要测量电阻。但是,Arduino无法直接测量电阻,只能测量电压。
Arduino将在热敏电阻和已知电阻之间的一点上测量电压。这被称为分压器。分压器的公式为:
在这里插入图片描述
算出电压后可以根据公式,反向求出R2的阻值,公式为:
R2=(R1*VOUT)/(VIN-VOUT)
4.大家可以参考程序解读这部分内容,在程序中第一步先算出VOUT的电压用的是:

const float voltagePower=5;
//获得A1处的电压值
double digitalValue=analogRead(A1);
double voltageValue=(digitalValue/1023)voltagePower;
//将模拟量换算转换 为电压值。
5.然后就是求热敏电阻的阻值:
//通过分压比获得热敏电阻的阻值
double Rt=(voltageValue
R1)/(voltagePower-voltageValue);
Serial.print(“Current registor value=”);
Serial.println(Rt);
可以通过Arduino自带的串口监视器查看数据。
6.就是通过公式算出温度,公式为:
Rt = R EXP(B(1/T1-1/T2))
NTC 热敏电阻温度计算公式:Rt = R EXP(B(1/T1-1/T2))
其中,T1和T2指的是K度,即开尔文温度。
Rt 是热敏电阻在T1温度下的阻值。
R是热敏电阻在T2常温下的标称阻值。100K的热敏电阻25℃的值为100K(即R=100K)。T2=(273.15+25)
EXP是e的n次方
B值是热敏电阻的重要参数
通过转换可以得到温度T1与电阻Rt的关系T1=1/(ln(Rt/R)/B+1/T2)
对应的摄氏温度t=T1-273.15,同时+0.5的误差矫正。

以上就是我在做NTC热敏电阻这个项目时的流程和方法,希望能对大家有所帮助,欢迎大家互相交,互相学习共同进步嘛。
附两张效果图:测量的还是很准确的,嘿嘿。
摄氏度 ℃
在这里插入图片描述
华氏度 ℉

在这里插入图片描述

下面是代码:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<math.h>

const float voltagePower=5;
//const float Rs=10;//采样电阻为10千欧
const int B=3590;
const double T1=273.15+25.0;//常温
const double R1=10.0;//常温对应的阻值,注意单位是千欧

#define OLED_RESET 4
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);

static const unsigned char PROGMEM str1[] =
{
0x00,0x00,0x00,0x00,0x00,0x10,0x1B,0xE8,0x09,0x18,0x01,0xF0,0x21,0x70,0x01,0x80,
0x00,0x08,0x1B,0xFC,0x12,0xA8,0x12,0xA8,0x22,0xCC,0x2F,0x30,0x00,0x00,0x00,0x00
};/“温”,0/

static const unsigned char PROGMEM str2[] ={
0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x70,0x0F,0xC0,0x0B,0x20,0x09,0xD0,0x0F,0x40,
0x09,0x80,0x08,0xE0,0x11,0x40,0x11,0x40,0x20,0xC0,0x41,0x30,0x0E,0x1E,0x00,0x00
};
/“度”,1/
static const unsigned char PROGMEM str3[] =
{
0x00,0x00,0x00,0x00,0x08,0x40,0x08,0x40,0x08,0xA0,0x09,0x10,0x3D,0x08,0x0A,0xC7,
0x1C,0x10,0x2C,0x10,0x49,0x50,0x09,0x20,0x08,0x20,0x17,0xFC,0x00,0x00,0x00,0x00
};/“检”,0/

static const unsigned char PROGMEM str4[] =
{
0x00,0x00,0x00,0x00,0x00,0x04,0x17,0xC4,0x04,0x84,0x05,0x94,0x25,0xA4,0x25,0xA4,
0x15,0xA4,0x26,0x84,0x23,0x04,0x22,0xC4,0x04,0x54,0x00,0x0C,0x00,0x00,0x00,0x00
};/“测”,1/
static const unsigned char PROGMEM str5[] =
{
0x00,0x00,0x20,0x00,0x50,0x00,0x50,0xF0,0x23,0x0C,0x02,0x04,0x06,0x00,0x04,0x00,
0x04,0x00,0x04,0x00,0x04,0x04,0x06,0x04,0x03,0x0C,0x01,0xF8,0x00,0x00,0x00,0x00
};//

static const unsigned char PROGMEM str6[] =
{
0x00,0x00,0x20,0x00,0x50,0x00,0x53,0xFE,0x23,0x00,0x03,0x00,0x03,0x00,0x03,0x00,
0x03,0xF8,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};/°F/
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 初始化OLED并设置其IIC地址为 0x3C
display.setTextColor(WHITE);//开像素点发光
}

void loop() {
display.clearDisplay();//清屏
delay(1000);

/display.setTextSize(1); //设置字体大小
display.setCursor(40, 5);//设置显示位置
display.println("-Welcom-");//输出字符
/
// 设置字体颜色,白色可见
display.setTextColor(WHITE);
display.drawBitmap(25, 4, str1, 16, 16,1); //温
display.drawBitmap(45, 4, str2, 16, 16, 1); //度
display.drawBitmap(65, 4, str3, 16, 16, 1); //检
display.drawBitmap(85, 4, str4, 16, 16, 1); //测
display.drawBitmap(90, 25, str5, 16, 16, 1); //℃
display.drawBitmap(110, 45, str6, 16, 16, 1); //℉
delay(100);
words_display();
delay(1000);
display.display();
}

/const float voltagePower=5.0;
const float Rs=16;//采样电阻为21.5千欧
const int B=3950;
const double T1=273.15+25;//常温
const double R1=10;//常温对应的阻值,注意单位是千欧
/

void words_display()
{
//获得A1处的电压值
double digitalValue=analogRead(A1);
double voltageValue=(digitalValue/1023)*voltagePower;//将模拟量换算转换为电压值
Serial.print(“Current voltage value=”);
Serial.println(voltageValue);

//通过分压比获得热敏电阻的阻值
//double Rt=((voltagePower-voltageValue)Rs)/voltageValue;
//double Rt=R1
((voltagePower/voltageValue)-1);
double Rt=(voltageValue*R1)/(voltagePower-voltageValue);
Serial.print(“Current registor value=”);
Serial.println(Rt);

//换算得到温度值
Serial.print(“Current temperature value=”);
const double C=(((T1B)/(B+T1log(Rt/R1)))-273.15);//摄氏度
const double F=(C1.8)+32;//华氏度
Serial.println();
delay(1000);
/

换算华氏公式华氏度 = 32°F+ 摄氏度 × 1.8
换算摄氏公式摄氏度 = (华氏度 - 32°F) ÷ 1.8
*/

//设置字体大小
display.setTextSize(1);
display.setCursor(0, 30);
display.print("Celsius: ");
//显示传感器的值:
display.print©;
display.setTextSize(1);
display.setCursor(0,50);
display.print("Fahrenheit: ");
//显示传感器的值:
display.println(F);
}

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值