深圳市敏创电子有限公司

热敏电阻生产厂家
专注热敏电阻12年,可特殊定制
您当前所在的位置:主页 > 技术文档 > 技术文档

使用10K NTC热敏电阻和5V冷却器进行温度控制

时间:2018-01-09   来源:敏创电子  编辑:热敏电阻厂家  浏览:

热敏电阻是一种根据您的温度改变电阻的电阻。一般由聚合物或陶瓷组成,它们的操作范围相对较短(-90℃〜130℃),但也具有良好的精度和价格。

通过一阶近似,我们可以得出热阻和电阻变化之间的线性关系:

ΔR=kΔT

解释:

ΔR=电阻变化;

ΔT=热变化;

k =一阶近似系数(T或R)。

实际上,上述的近似只能在一个小的操作范围内工作。因此,我们使用一个更精确的近似,称为“Steinhart-Hart方程”。这个三阶近似描述如下:

1 / T = a + b ln(R)+ c(ln(R))3

解释:

R =电阻(欧姆)

ΔT=以开尔文为单位的温度;

a,b和c = Steinhart-Hart参数(通常在NTC数据表中找到)。

对于下面的经验,我们将使用这个方程的简化版本,仅使用一个参数(B)将伽利略ADC接收到的mV信号转换为摄氏度(°C)。

所需组件:

→NTC热敏电阻(10K);

NTC

→5V迷你冷却器

NTC

→TIP120 NPN晶体管(或等效);

→一个1N4007二极管;

→一个10k欧姆电阻;

→一个3.3k欧姆电阻;

→Protoboard;

→跳线。

第一步:

在Protoboard上,组装下面的电路:

Proto3

哪里:

→红线和黑线分别针对VCC 5V和GND;

→橙色导线通过热敏电阻的内部电阻将电压连接到ADC(A0)。

→绿线连接将打开伽利略电机的信号(PWM或不)。

概要

Schem3

第二步:

将以下代码上传到Galileo,使用Arduino IDE或从Linux终端直接编译:

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
    const int pinTemp = A0; // Temperature sensor pin 
    float temperatura;
    int B=3975; // A common B Value between NTC thermistors. 
    float resistencia;
        
    void setup() {
        Serial.begin(9600); 
              }
    void loop () {
      int val = analogRead(pinTemp); // Acquiring the received values on A0 
      resistencia=(float)(1023-val)*10000/val; // Acquiring resistance value 
      temperatura=1/(log(resistencia/10000)/B+1/298.15)-273.15; /* Calculating the Celsius temperature through a simplified version of Steinhart-Hart equation */
      Serial.println(temperatura);
      delay(1000); //Delay 1s between readings 
      }
     
print3

 

第三步:

现在,随着朝向热敏电阻冷却器,我们将一个温度控制的切换冷却器开/关时通过传感器读出的温度比预先设定的值(在为例,30℃)高。为了便于理解这种体验,您可以将NTC传感器接近热源(如白炽灯,或者用手指触摸传感器)以获得更快的结果。使这个“开/关”控制的代码如下:

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    const int pinTemp = A0; // Temperature sensor pin 
    const int pinCooler = 3; //Cooler Pin 
    float temperatura;
    int B=3975; // A common B Value between NTC thermistors. 
    float resistencia;
        
    void setup() {
        Serial.begin(9600); 
        pinMode(pinCooler,OUTPUT); 
              }
    void loop () {
      int val = analogRead(pinTemp); // Acquiring the received values on A0 
      resistencia=(float)(1023-val)*10000/val; // Acquiring resistance value 
      temperatura=1/(log(resistencia/10000)/B+1/298.15)-273.15; /* Calculating the Celsius temperature through a simplified version of Steinhart-Hart equation */
     
if (temperatura > 30.00) //This if describes the On/Off control (or Switched)
      {
      
digitalWrite(pinCooler,HIGH); 
      }else
      

      
digitalWrite(pinCooler,LOW); 
      

      Serial.println(temperatura);
      delay(1000); //Delay 1s between readings 
      }
     

注意:这种类型的控制在工业制度中效率不高。在这些情况下,控制通常具有比例,积分和微分参数。虽然,为了教学的目的,这个简单的控制为我们提供了很好的服务。