热敏电阻是一种根据您的温度改变电阻的电阻。一般由聚合物或陶瓷组成,它们的操作范围相对较短(-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);
→5V迷你冷却器
→TIP120 NPN晶体管(或等效);
→一个1N4007二极管;
→一个10k欧姆电阻;
→一个3.3k欧姆电阻;
→Protoboard;
→跳线。
第一步:
在Protoboard上,组装下面的电路:
哪里:
→红线和黑线分别针对VCC 5V和GND;
→橙色导线通过热敏电阻的内部电阻将电压连接到ADC(A0)。
→绿线连接将打开伽利略电机的信号(PWM或不)。
概要
第二步:
将以下代码上传到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
}
|
第三步:
现在,随着朝向热敏电阻冷却器,我们将一个温度控制的切换冷却器开/关时通过传感器读出的温度比预先设定的值(在为例,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
}
|
注意:这种类型的控制在工业制度中效率不高。在这些情况下,控制通常具有比例,积分和微分参数。虽然,为了教学的目的,这个简单的控制为我们提供了很好的服务。