Inicio » Sensores para Arduino » Sensor de temperatura TMP36

¿Qué es un sensor de temperatura TMP36?

El TMP36 es un sensor analógico que puede medir la temperatura ambiente en grados centígrados y convertirla en una señal eléctrica.

Es un componente económico y muy fácil de usar, puesto que solo necesita una conexión a una fuente de alimentación de 5V y ningún componente adicional, como resistencias u otro tipo de elementos.

La salida generada por el sensor es una señal eléctrica que puede ser leída por un microcontrolador como Arduino.

sensor de temperatura tmp36
Sensor TMP36

¿Para qué sirve el TMP36?

Debido a su bajo coste y a su sencillez, es un sensor muy popular para medir temperatura en escenarios muy diversos.

Su uso está muy extendido en distintos ámbitos. Algunos de los más comunes incluyen los siguientes:

  • Monitorización de temperatura en interiores
  • Termostatos inteligentes
  • Control de procesos industriales
  • Alarmas contra incendios
  • Gestión térmica de ordenadores
  • Automatización agrícola
  • Investigación y laboratorios
  • Sistemas sanitarios de monitoreo
  • Sistemas de refrigeración de vehiculos
  • Etc.

Especificaciones del sensor TMP36

Estructura física

El sensor de temperatura TMP36 tiene un encapsulado TO-02 de 3 pines.

Tiene un lado del cuerpo plano. Es la parte en las que están las especificaciones y la marca impresas. Y tiene otro lado curvo. Para que nunca te equivoques con los pines, coloca siempre la cara plana hacia ti. De esa forma, los pines siempre tienen el siguiente orden: +VS, VOUT, GND. Tal y como lo ves en la siguiente imagen:

pines sensor TMP26
Pines TMP36

El pin +VS es el que recibe la alimentación. Si lo conectas con un Arduino serán 3,3V o 5V, depende de la placa que uses.

El siguiente pin, etiquetado como VOUT, es la salida del sensor. Por este pin saldrá una tensión proporcional a la temperatura.

El último pin, el pin GND, es el que irá conectado a tierra.

Especificaciones técnicas

En la siguiente tabla puedes consultar todas las especificaciones técnicas del TMP36:

Rango de temperatura-40°C a 125°C
SensibilidadAproximadamente 10 mV/°C. Es decir, la salida aumenta en 10 mV por cada grado Celsius de aumento de temperatura
Precisión ±1°C en el rango de -40°C a 125°C
Calibración de fábricaNo requiere calibración adicional ya que está calibrado en fábrica
Tensión de alimentaciónEl rango de voltaje de operación típico es de 2.7V a 5.5V
Corriente de alimentación50 µA a 2.7V y 60 µA a 5.0V
Salida analógicaSalida de voltaje analógica lineal directamente proporcional a la temperatura
Aislamiento eléctricoNo tiene
DimensionesEncapsulado TO-92
Longitud: 3,5 mm
Anchura: 4,6 mm
Altura: 19 mm

Puedes consultar el datasheet completo del TMP36 aquí.

¿Cómo funciona el sensor TMP36?

El TMP36 está fabricado con un material semiconductor con propiedades termoeléctricas específicas. Utiliza la variación de la tensión en función de la temperatura para medir el calor y determinar la temperatura ambiente.

Como ya vimos anteriormente, el sensor tiene tres pines: +VS (alimentación), GND (tierra) y VOUT (salida). Cuando se alimenta con una fuente de voltaje a través del pin +VS, el TMP36 genera una tensión en el pin VOUT que es proporcional a la diferencia de temperatura entre la temperatura ambiente y una temperatura de referencia.

La relación entre la tensión en el pin VOUT y la temperatura ambiente es de 10mV por grado Celsius (10 mV/°C). Esto significa que la salida varia 10mV por cada grado ºC. Si la temperatura aumenta 1ºC, entonces la salida aumentará en 10 mV.

Con un Arduino podemos leer la tensión en el pin VOUT a través de un pin analógico y, utilizando esta relación de 10 mV/°C, determinar la temperatura actual.

Para entenderlo mejor vamos a calcular a continuación la temperatura a partir de una tensión dada.

Cómo calcular la temperatura

La formula para calcular la temperatura en grados Celsius a partir de la tensión del pin VOUT es la siguiente:

T(ºC) = (VOUT(mV) – 500mV) / 10

Debes tener en cuenta que el valor que sale por el pin VOUT para 0ºC siempre es 500mV, no 0mV, por eso en la formula se le resta -500mV.

Supongamos que obtenemos 600mV del pin VOUT del sensor. Si aplicamos la formula, la temperatura obtenida es 10ºC:

T(ºC) = (600mV – 500mV) / 10 = 10ºC

Sin embargo, si no restamos los 500mV, el resultado es muy distinto e incorrecto:

T(ºC) = 600mV / 10 = 60ºC

Ten cuidado con esto. Por lo demás, la formula es muy sencilla, solo debes tener claras las unidades.

Cómo calcular la temperatura con Arduino

Ahora supongamos que queremos conectar el sensor a un pin analógico de Arduino y calcular la temperatura. Aquí se nos presenta un pequeño problema.

Para aplicar la formula anterior necesitamos la tensión medida en mV que nos proporciona el sensor, pero Arduino tiene un conversor analógico-digital (ADC) interno que convierte las tensiones recibidas a través de los pines analógicos a valores digitales. Los valores generados van del 0 (cuando entran 0V) al 1023 (cuando entran 5V o 3,3V, depende de la placa), es decir, 1024 valores posibles.

Para solucionar este pequeño inconveniente, tendremos que hacer el calculo inverso para recuperar el valor original generado por la salida VOUT del sensor. Es tan sencillo como aplicar la siguiente formula para Arduinos de 5V:

VOUT = valor ADC * (5000mV / 1024)

Y esta otra en caso de usar un Arduino de 3,3V:

VOUT = valor ADC * (3300mV / 1024)

Los valores 5000 y 3300 son mV y se corresponden a 5v y 3,3V respectivamente.

El 1024 son los posibles valores que entran a través del pin analógico.

Supongamos que estamos utilizando un Arduino de 5V y el valor ADC que recibe a través del pin analógico en el que está conectado el sensor es 125. Aplicando la formula obtenemos la siguiente tensión:

VOUT = 125 * (5000mV / 1024) = 610,35mV

Si volvemos a aplicar la fórmula de la temperatura que vimos antes obtendremos el siguiente resultado:

T(ºC) = (610,35mV – 500mV) / 10 = 11,0ºC

Vemos que hay una pequeña variación de 1ºC con respecto al calculo que hicimos inicialmente sobre el valor real que genera el sensor en su pin VOUT. Esto es normal por culpa de la perdida de precisión en la conversión del valor digital entero que recibe el Arduino a través del pin analógico. Al no ser una variación muy exagerada, el error es asumible (dependiendo la finalidad, claro).

En los siguientes puntos vamos a ver como conectar el sensor con Arduino y cómo programar estos cálculos en un sketch.

¿Cómo conectar un sensor TMP36 con Arduino?

La conexión del sensor TMP36 con Arduino es muy sencilla. Puedes verla en la siguiente imagen:

Conexiones sensor temperatura tmp36 con Arduino

Como ya vimos anteriormente, el TMP36 tiene 3 pines: Alimentación (+Vs), salida (VOUT) y tierra (GND).

En la imagen, el primer pin empezando por la izquierda es el de alimentación. Como puedes ver, va conectado a 5V. En este caso estoy utilizando Arduino UNO, si utilizases otra placa de 3,3V, tendrías que conectarlo a ese voltaje.

El pin central es la salida. Va conectado a un pin analógico del Arduino. Yo lo estoy conectando al pin analógico 0 (A0) con el cable verde. Si prefieres usar otro pin puedes hacerlo sin problema, siempre que sea analógico.

Por último, el tercer pin del sensor va conectado a GND.

¿Cómo programar un sensor TMP36 con Arduino?

El siguiente sketch lee la entrada del pin analógico 0 (A0) y aplica las formulas que vimos en los puntos anteriores para convertir el dato en grados Celsius.

//DECLARACIONES
const int TMP36 = A0;
int entrada = 0;
float voltaje = 0.0;
float temperatura = 0.0;

//CONFIGURACIÓN
void setup() {
  Serial.begin(9600);
}

//FUNCIÓN LOOP
void loop() {
  entrada = analogRead(TMP36);
  voltaje = entrada * (5000 / 1024.0);
  temperatura = (voltaje - 500) / 10;
  
  //salida monitor serie:
  Serial.print(entrada);
  Serial.print(" - ");
  Serial.print(voltaje);
  Serial.print(" - ");
  Serial.println(temperatura);

  delay(500);
}

Declaraciones

La constante entera TMP36 representa el pin analógico 0, por eso le asigno el valor A0. Es donde está conectado el sensor y desde donde leeremos el dato que nos llega desde él. Si has usado otro pin analógico diferente asigna el valor correcto a esta constante.

Lo siguiente que he declaro es una variable entera a la que he llamado entrada. La usaremos después para almacenar el dato que recibamos a través del pin TMP36. Recuerda que el dato que recibimos por aquí es un entero comprendido entre 0 y 1023, por eso he declarado una variable de tipo entero.

La siguiente variable, voltaje, es para calcular el voltaje a partir de la entrada. Es de tipo float porque el resultado serán mV y puede tener decimales.

Y la última variable es temperatura. También es de tipo float porque nos servirá para calcular la temperatura en Celsius a partir del voltaje anterior. El resultado, evidentemente, puede tener decimales.

Configuración

Dentro de la función setup solo tenemos que inicializar el puerto serie para poder visualizar los resultados posteriormente en el monitor serie. Lo conseguimos con la instrucción Serial.begin(9600).

Función Loop

Dentro de la función loop es donde tenemos que hacer la lectura del pin analógico y aplicar las formulas para calcular la temperatura. Como es un bucle, se estarán tomando muestras del sensor de forma continua cada medio segundo (delay(500)), por lo que podremos conocer la temperatura en tiempo real.

La primera instrucción lee el dato que recibe Arduino a través del pin analógico TMP36 y lo almacena en la variable entrada. Recuerda que el dato estará comprendido entre 0 y 1023:

entrada = analogRead(TMP36);

En la siguiente línea aplicamos la formula para convertir el dato ADC que recibimos del pin analógico a voltaje (mV):

voltaje = entrada * (5000 / 1024.0);

Como yo estoy utilizando un Arduino UNO utilizo 5000, si tu placa es de 3,3V entonces cambia el 5000 por 3300.

Y por último, aplicamos la otra formula para transformar el voltaje a grados Celsius:

temperatura = (voltaje - 500) / 10;

Las formulas son las que vimos en el apartado ¿Cómo funciona el sensor TMP36? un poco más arriba en este mismo artículo.

Con estas tres líneas tenemos la temperatura. Como ves es muy sencillo programar el sensor TMP36 con Arduino.

El resto de instrucciones que quedan en la función loop simplemente muestran los datos en el monitor serie:

Serial.print(entrada);
Serial.print(" - ");
Serial.print(voltaje);
Serial.print(" - ");
Serial.println(temperatura);

El primer print muestra la entrada obtenida a través del pin analógico, el segundo print muestra un guión, el tercero el voltaje, el cuarto otro guión y el quinto, que es un println, la temperatura y un salto de línea.

La salida generada será algo como esto, pero ten en cuenta que los datos cambian en función de la temperatura que estés midiendo y puede que tu resultado no coincida con el mio:

La primera columna es la entrada, la segunda el voltaje en mV y la tercera es la temperatura en grados Celsius.

Ahora es tu turno. Prueba con distintas temperaturas a ver qué datos obtienes. Puedes intentar acercar un hielo al sensor o calentarlo con las manos para ver las variaciones que se producen.