Funcionamiento de una NTC control de temperatura
En este post vamos a continuar con las resistencias variables en función de una magnitud física como el caso de la LDR que varía su resistencia en función de la luminosidad, pues bien ahora vamos a estudiar la NTC que varía su resistencia en función de la temperatura.
Las siglas NTC corresponden a negative termal coefficient, coeficiente negativo de temperatura, la cual varía su resistencia en función de la temperatura a mayor temperatura menor resistencia y viceversa.
Aspecto de una NTC:
La imagen de la figura muestra una típica NTC en este caso de 10KΩ la dos primeras francas inferiores indican las dos primeras cifras, la tercera color naranja el multiplicador y la última color oro en este caso la tolerancia.

Símbolo de una resistencia NTC:

Existe otro tipo de estas resistencias que son las PTC que funcionan a mayor temperatura mayor resistencia.
Gráfica de funcionamiento:
La gráfica representativa de la NTC no es lineal sino que representa una exponencial inversa como se muestra en la siguiente gráfica obtenida de la siguiente página:

Debido a la no linealidad de su curva característica, hace un poco más complejo su uso, para ello podemos facilitar su utilización haciendo uso de la ecuación de SteinHart-Hart, con la que podemos calcular el valor de temperatura en función del valor de la resistencia.
Esta ecuación requiere de unos coeficientes A,B,C que podremos sacarlos de la siguiente página:
https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator/ntccalculator.html
Gracias a esto aun no teniendo el datashet de la NTC y sacando tres pares de valores resistencia-temperatura se puede sacar el comportamiento completo de esta.

Esta fórmula será la que implementemos en el programa de Arduino para saber que temperatura está midiendo la NTC.

Si quieres convertirte en un experto en Arduino pincha en el siguiente botón
Para usarla como es debido aplicaremos un divisor de tensión compuesto de una resistencia fija de igual valor al valor nominal (código de colores) de la NTC en este caso he elegido una de 10kΩ conectándolo a Arduino de la siguiente manera.

El circuito de la figura controla la puesta en marcha de un ventilador a 220 voltios cuando la temperatura supera los 25 grados y lo desactiva cuando es igual o menor a 25 grados centígrados.
Realización del programa control de un ventilador con NTC para Arduino:
En primer lugar debemos considerar que necesitamos conocer datos de temperatura, pero la ntc solo nos indica variaciones de resistencia, ¿cómo podemos pasar de resistencia a grados centígrados?
Arduino no mide resistencia directamente, pero si hay otra magnitud que podemos medir que es el voltaje presente en una entrada analógica.
Esta entrada analógica nos dará mediante su conversor analógico digital un número entre 0-1023.
Bien si te fijas bien en el divisor de tensión formado por la resistencia fija de 10KΩ y la NTC haciendo una pequeña regla de tres podemos obtener el voltaje que cae en la NTC sabiendo el valor de dicha entrada analógica


Como sabemos el voltaje que cae en la ntc, podremos calcular el valor que tiene la resistencia aplicando ley de ohm de la siguiente manera:

Como sabemos el valor de la R fija 10k ohmios y sabemos el voltaje que cae en ella podemos saber la intensidad sustituyendo la intensidad tendremos.

Y ya que tenemos la resistencia podemos aplicar la ecuación de SteinHart-Hart para hallar el valor de temperatura T, ojo que está en grados KELVIN tendríamos que pasarlo a grados centígrados si se desea.

El programa para Arduino quedaría así:
/*AUTOR: JOSE ANTONIO RIVERA MORALES
*FECHA: 12-11-2019
*www.pasionelectronica.com
* Este programa enciende un ventilador cuando la temperatura
* captada por la NTC es superior a 25ºC y lo apaga cuando es
* inferior, mostrando por el monitor serie el valor de la
* temperatura
*/
#include <math.h>
int ventilador=2;
int NtcPin=A1;
int Valim=5;
int Rfija=10000;//valor de la resistencia en serie con la ntc
float A =4.175255266e-3;//parametros Steinhart-Hart a,b,c
float B =-2.049607709e-4;//obtenidos de la pagina
////https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator///ntccalculator.html
float C =14.71083587e-7;
void setup()
{
Serial.begin(9600);
pinMode(ventilador,OUTPUT);//asignamos el pin donde conectaremos el relé para el ventilador
}
void loop()
{
float Valsntc = analogRead(NtcPin);
float Vntc=(Valsntc*Valim)/1024;//voltaje que cae en la ntc
float R=(Rfija*Vntc )/(Valim-Vntc);
float logR=log(R);
float TgradKelvin=1.0/(A+B*logR+C*logR*logR*logR);//fórmula de Steinhart-
float centigrados=TgradKelvin-273.15;//pasamos de grados kelvin a ºc
Serial.print(centigrados);
Serial.println("ºC ");
delay(1000);
if (centigrados>25){
digitalWrite(ventilador,LOW);//encendemos ventilador
//relé activo a nivel bajo
}
else {
digitalWrite(ventilador,HIGH);//apagamos ventilador
}
}