Sensor de temperatura con Arduino y Termistor

Hoy en día es posible hacer un medidor de temperatura de varias maneras, aquí os explicaré como hacer un sensor de temperatura con Arduino y un termistor.  Un termistor es un componente pasivo bastante barato comparado con sensores digitales para medición de temperatura. Para poder interactuar con los sensores digitales, arduino necesita las librerías específicas, las cuales las podemos encontrar por la red o las podemos programar con ayuda de los datasheet…

Básicamente un termistor es una resistencia que varía su valor en función de la temperatura del entorno. Existen 2 tipos de termistores que se categorizan en PTC (Positive Temperature Coefficient) y NTC (Negative Temperature Coefficient), la diferencia es que las PTC aumentan su resistencia con el aumento de temperatura y las NTC disminuyen su resistencia  con el aumento de temperatura.

En este tutorial, vamos a utilizar el típico termistor  que utilizan lasimpresoras 3D en el extrusor, son muy baratos y muy fáciles de encontrar. El modelo que utilizaré es de 100K y un coeficiente B 3950, estos dos valores son básicos para poder hacer los cálculos y conversiones a temperatura.

Termistor NTC 100K 3950 Arduino

Los 100K es el valor de la NTC que nos indica el fabricante para una temperatura ambiente de 25ºC, y el parámetro B y una constante que define la curva de temperatura del termistor, este parámetro nos lo da el fabricante.

Circuito básico del termistor

Como he dicho anteriormente, un termistor es un elemento pasivo resistivo,  que varía su resistencia en función de la temperatura, por lo que si sabemos el valor de la resistencia del termistor, podremos calcular la temperatura.

Para conocer el valor del termistor, 

colocamos una resistencia en serie con el termistor y medimos la caída de tensión en el termistor, una vez conocemos la caída de tensión en el termistor, conoceremos la caída de tensión en la resistencia y con un  simple divisor de tensión conoceremos el valor resistivo de la NTC.

Divisor de tension Arduino

En el circuito de la figura anterior la salida VOUT viene dada por la fórmula:

Vout=\frac{R2}{R1+R2}*Vcc

Si consideramos que VOut, la mediremos con el ADC (VADC) de arduino, R1 = 100K y VCC = 3v3 y su valor en el ADC 1023, podemos despejar R2 para conocer el valor del termistor:

R2=\frac{Vout*R1}{Vcc-Vout}= \frac{Vadc*100k}{1023-Vadc}

R2=\frac{Vadc*R1}{1023-Vadc}

Conversión a temperatura

Y ahora que ya conocemos el valor resistivo del termistor que hacemos?, pues solo nos hace falta aplicar las ecuaciones de Steinhart–Hart, para ello utilizamos la siguiente formula:

\frac{1}{T}=\frac{1}{T0}+\frac{1}{B}*\ln \frac{R}{R0}

T –> Temperatura que queremos conocer (grados Kelvin)

T0–> Temperatura nominal de la NTC para esta NTC 25º

B –> Constante de la NTC para este modelo 3950

R –> Resistencia nominal de la NTC para este modelo 100K

R0 –> Resistencia que hemos calculado anteriormente

Una vez calculado el valor de T lo pasamos a grados centígrados simplemente restándole 273,15 y ya conocemos la temperatura de ambiente donde se encuentra la NTC

Si queremos saber el valor en grados Fahrenheit aplicamos la siguiente formula de conversión:

F=\frac{C*9}{5}+32

Conectando el termistor a Arduino

En este punto nos toca realizar el montaje final del divisor de tensión con el termistor a Arduino, para ello conectamos la salida VOut al pin A0 de Arduino y alimentamos nuestro divisor de tensión mediante la salida estabilizada de 3v3 que dispone Arduino Nano.

Conectamos la entrada Aref de Arduino a 3v3, con esta conexión le indicaremos a Arduino que el valor máximo del ADC (1023) corresponde a una tensión de 3v3.

analogReference(EXTERNAL);
Termistor divisor de tension arduino

Sensor de temperatura con Arduino y un termistor, el software de Arduino

Hora de implementar en Arduino toda la teoría que he explicado anteriormente, el sketch básico para leer la temperatura y mostrarla por la consola es el siguiente:

#define termistorPin A0
#define termistorNominalRes 100000
#define termistorNominalTemp 25
#define termistorBValue 3950
#define VoltageDividerResistor 100000
float termistorRes = 0.0;
float steinhart;
void setup() {
    Serial.begin(115200);
    analogReference(EXTERNAL);
}

void loop() {
  termistorRes = ((float)analogRead (termistorPin)* VoltageDividerResistor)/(1023 - (float)analogRead (termistorPin));
  steinhart = termistorRes / termistorNominalRes;     // (R/Ro)
  steinhart = log(steinhart);                         // ln(R/Ro)
  steinhart /= termistorBValue;                       // 1/B * ln(R/Ro)
  steinhart += 1.0 / (termistorNominalTemp + 273.15); // + (1/To)
  steinhart = 1.0 / steinhart;                        // Invert  
  steinhart -= 273.15;                                // convert to C
  Serial.print("Temperature "); 
  Serial.print(steinhart);
  Serial.println(" *C");
  delay(1000);
}

Podéis descargar el software dese mi repositorio en este link.

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Aviso sobre Cookies en WordPress por Real Cookie Banner