Skip to Content

Tutorial del sensor de temperatura analógico TMP36 con Arduino

Tutorial del sensor de temperatura analógico TMP36 con Arduino

En este tutorial, aprenderás a utilizar un sensor de temperatura analógico TMP36 con Arduino. ¡He incluido un diagrama de cableado y varios códigos de ejemplo para ayudarte a empezar!

En la primera parte de este artículo, puedes encontrar las especificaciones e información sobre los sensores TMP35, TMP36 y TMP37. A continuación, veremos cómo conectar el sensor al Arduino.

El primer ejemplo de código puede ser usado para tomar lecturas de temperatura del sensor y mostrar los resultados en el Monitor Serial. En el segundo ejemplo, le mostraré cómo mostrar la temperatura en un LCD I2C para crear un termómetro independiente.

Si quiere saber más sobre otros sensores de temperatura, consulte los artículos siguientes.

Artículos recomendados

Suministros

Componentes de hardware

Sensor de temperatura analógico TMP36 (TO-92)× 1Amazon
Arduino Uno× 1Amazon
Tablero de pruebas× 1Amazon
Cables de puente~ 10Amazon
LCD I2C de 16×2 caracteres× 1Amazon
Cable USB tipo A/B× 1Amazon

Software

Arduino IDEArduino IDE

Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we earn from qualifying purchases.

Acerca de los sensores de temperatura analógicos TMP35/TMP36/TMP37

Los TMP35/TMP36/TMP37 son sensores de temperatura centígrados de precisión y bajo voltaje fabricados por Analog Devices. Proporcionan una salida de voltaje que es linealmente proporcional a la temperatura en grados centígrados (°C) y son, por tanto, muy fáciles de usar con el Arduino. Además, son precisos, nunca se desgastan y son muy baratos.

Los sensores TMP35/TMP36/TMP37 no requieren ninguna calibración externa para proporcionar una precisión típica de ±1°C a +25°C y ±2°C en el rango de temperatura de -40°C a +125°C.

La diferencia entre el TMP35, el TMP36 y el TMP37 es su rango de temperatura de funcionamiento y el factor de escala de salida. El TMP35 lee temperaturas de 10°C a 125°C y proporciona una salida de 250 mV a 25°C. Este sensor es funcionalmente compatible con el LM35 fabricado por Texas Instruments. Puedes encontrar un tutorial dedicado al LM35 aquí:

El TMP36 lee temperaturas de -40°C a 125°C, proporciona una salida de 750mV a 25°C y funciona hasta +125°C con una única alimentación de 2,7 V. Este sensor es funcionalmente compatible con el LM50.

El TMP35 y el TMP36 tienen el mismo factor de escala de salida de 10 mV/°C.

El TMP37 está pensado para un rango de funcionamiento de 5°C a 100°C y proporciona una salida de 500 mV a 25°C. Este sensor proporciona una precisión ligeramente mayor que los otros sensores y tiene un factor de escala de salida de 20 mV/°C.

tmp35 tmp36 tmp37 tensión de salida en función de la temperatura
Tensión de salida (V) frente a la temperatura (°C). Fuente: Analog Devices

Como puede ver en la figura anterior, el rango de salida de todos los sensores está entre 0,1 V y 2 V. Tenga en cuenta que la tensión de salida es independiente de la tensión de alimentación que utilice.

Configuración de los pines del TMP35/TMP36/TMP37

Los sensores TMP35/TMP36/TMP37 vienen en 3 factores de forma diferentes, pero el tipo más común es el paquete TO-92 de 3 pines, que se parece a un transistor. La versión TMP36 de este sensor tiene el número de modelo TMP36GT9Z.

En la figura siguiente se muestra la distribución de las clavijas del sensor:

Pinout of TMP36

Tenga en cuenta que la clavija 1 (+VS) es la más a la izquierda cuando el lado plano del sensor (con el texto impreso) está orientado hacia usted.

Puede encontrar más especificaciones del TMP36 en la tabla siguiente.

Especificaciones del sensor de temperatura analógico TMP36

Tensión de alimentación2,7 V a 5,5 V
Corriente de reposo50 µA
Rango de temperatura-40°C a + 125°C
Precisión±1°C a +25°C
±2°C de -40°C a +125°C
Factor de escala de salida10 mV/°C
Tensión de salida a 25°C750 mV
PaqueteTO-92 de 3 polos
FabricanteDispositivos analógicos
CosteComprobar el precio

Para más información, también puede consultar la hoja de datos aquí:

Cableado - Conexión del sensor de temperatura TMP36 a Arduino

Conectar un TMP36 al Arduino es muy fácil ya que sólo necesitas conectar 3 pines. Comienza conectando el pin +VS a la salida de 5 V del Arduino y el pin GND a la tierra. Si estás usando un Arduino de 3,3 V, simplemente conecta +VS a 3,3 V en su lugar.

A continuación, conecta el pin del medio (VOUT) a cualquiera de las entradas analógicas del Arduino. En este caso, he utilizado el pin de entrada analógica A0.

Sensor de temperatura analógico TMP36 con diagrama de cableado de Arduino Uno
Sensor de temperatura analógico TMP36 con diagrama de cableado de Arduino Uno

Las conexiones también se indican en la tabla siguiente:

Conexiones del sensor de temperatura analógico TMP36

TMP36Arduino
Pin 1 (+VS)5 V
Pin 2 (VOUT)Pin A0
PIN 3 (GND)GND

Para mejorar la estabilidad del sensor, la hoja de datos recomienda añadir un condensador cerámico de 0,1 μF entre el pin +VS y GND. Si utiliza cables largos, añadir una pequeña resistencia (por ejemplo, 750 Ω) en serie con la línea de señal (VOUT) también puede reducir el ruido.

TMP36 con condensador y resistencia
TMP36 con resistencia y condensador opcionales

Cuando probé el sensor con un Arduino Uno, obtuve lecturas estables sin el condensador y la resistencia, pero tus resultados pueden variar.

Conversión de la tensión de salida del TMP36 en temperatura

Para convertir la tensión de salida del sensor en la temperatura en grados centígrados, puede utilizar la siguiente fórmula:

Temperatura (°C) = (VOUT - 500) / 10

con VOUT en milivoltios (mV). Así que si la salida del sensor es de 750 mV, entonces la temperatura es:

(750 - 500) / 10 = 25°C

Como puedes ver en el diagrama de cableado anterior, la salida del TMP36 está conectada a una de las entradas analógicas del Arduino. El valor de esta entrada analógica se puede leer con la función analogRead() como verás en los ejemplos de código más abajo. Sin embargo, la función analogRead(pin) no devolverá realmente la tensión de salida del sensor.

Las placas Arduino contienen un convertidor analógico-digital (ADC) multicanal de 10 bits, que asignará los voltajes de entrada entre 0 y la tensión de funcionamiento (5 V o 3,3 V) a valores enteros entre 0 y 1023. En un Arduino Uno, por ejemplo, esto produce una resolución entre las lecturas de 5 voltios / 1024 unidades o, 0,0049 voltios (4,9 mV) por unidad.

Así que si usas analogRead() para leer el voltaje en una de las entradas analógicas del Arduino, obtendrás un valor entre 0 y 1023.

Para volver a convertir este valor en la tensión de salida del sensor, puedes utilizar

VOUT = lectura del ADC * (5000 / 1024)

Y si estás usando un Arduino de 3,3 V:

VOUT = lectura del ADC * (3300 / 1024)

Utilizaremos estas fórmulas en los ejemplos de código que aparecen a continuación.

Sensor de temperatura analógico TMP36 con código de ejemplo de Arduino

Con el siguiente código de ejemplo, puedes leer la temperatura de un sensor TMP36 y mostrarla en el Monitor Serial.

Puedes cargar el código de ejemplo en tu Arduino utilizando el IDE de Arduino.

Para copiar el código, haga clic en el botón de la esquina superior derecha del campo de código.

/* TMP36 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the TMP36 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in Celsius:
  float temperature = (voltage - 500) / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}

Debería ver la siguiente salida en el Monitor Serial (Ctrl + Shift + M).

Salida del monitor en serie

Asegúrese de que la tasa de baudios del Monitor Serial también está ajustada a 9600.

Cómo funciona el código

En primer lugar, he definido a qué pin del Arduino se dirige el VOUT del sensor está conectado. En este caso, utilizamos el pin analógico A0. La declaración #define se puede utilizar para dar un nombre a un valor constante. El compilador sustituirá todas las referencias a esta constante por el valor definido cuando se compile el programa. Por lo tanto, en todos los casos en los que se menciona sensorPinel compilador lo sustituirá por A0 cuando se compile el programa.

// Define to which pin of the Arduino the output of the TMP36 is connected:
#define sensorPin A0

En la sección de configuración del código, comenzamos la comunicación en serie a una velocidad de 9600 baudios.

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

En la sección de bucle del código, comenzamos tomando una lectura del sensor con la función analogRead(pin).

  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

A continuación, utilizamos las fórmulas que he mencionado antes en el artículo para convertir la lectura en tensión y luego en temperatura.

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = (voltage - 500) / 10;

Si estás usando un Arduino de 3,3 V, como el Arduino Due o el Arduino Nano 33 BLE, tienes que conectar el pin +VS a 3,3 V y sustituir la línea resaltada por:

  // Convert the reading into voltage:
  float voltage = reading * (3300 / 1024.0);

Por último, los resultados se imprimen en el monitor de serie:

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

Mostrar las lecturas de temperatura del TMP36 en una pantalla LCD I2C

Si quieres hacer un termómetro autónomo que no necesite un ordenador, puede ser bueno saber cómo mostrar las lecturas de temperatura en una pantalla LCD.

Con el código de ejemplo que se muestra a continuación, puede mostrar las lecturas de temperatura en una pantalla LCD I2C de 16×2 caracteres.

La conexión de la pantalla LCD I2C es bastante fácil como puedes ver en el diagrama de cableado de abajo. Usted puede comprobar mi tutorial detallado a continuación para obtener más información.

Si quieres usar un LCD estándar no-I2C en su lugar, echa un vistazo a este artículo:

Sensor de temperatura analógico TMP36 con LCD I2C de 16x2 caracteres y diagrama de cableado de Arduino.
Sensor de temperatura analógico TMP36 con LCD I2C de 16×2 caracteres y diagrama de cableado de Arduino.

Las conexiones también se indican en la tabla siguiente:

Conexiones I2C LCD

LCD de caracteres I2CArduino
GNDGND
VCC5 V
SDAA4
SCLA5

Tenga en cuenta que el sensor de temperatura TMP36 se conecta de la misma manera que antes.

Instalación de las librerías Arduino necesarias

Para utilizar una pantalla LCD I2C, es necesario instalar la biblioteca LiquidCrystal_I2C Arduino.

Para instalar esta biblioteca, vaya a Herramientas > Gestionar Bibliotecas (Ctrl + Shift + I en Windows) en el IDE de Arduino. El Administrador de Bibliotecas se abrirá y actualizará la lista de bibliotecas instaladas.

Instalar una librería Arduino paso 1 abrir Library Manager
Library Manager

Ahora busca 'liquidcrystal_i2c' y busca la biblioteca de Frank de Brabander. Selecciona la última versión y haz clic en Instalar.

Instalación de la biblioteca LiquidCrystal_I2C Arduino

TMP36 con código de ejemplo LCD I2C

/* TMP36 analog temperature sensor with I2C LCD and Arduino example code. More info: https://www.makerguides.com */

// Include the required Arduino libraries:
#include "LiquidCrystal_I2C.h"

// Create a new instance of the LiquidCrystal_I2C class:
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Degree symbol:
byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

// Define to which pin of the Arduino the TMP36 is connected:
#define sensorPin A0

void setup() {
  // Start the LCD and turn on the backlight:
  lcd.init();
  lcd.backlight();

  // Create a custom character:
  lcd.createChar(0, Degree);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = (voltage - 500) / 10;

  // Print the temperature on the LCD;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  lcd.write(0); // print the custom character
  lcd.print("C");

  delay(1000); // wait a second between readings
}

Debería ver la siguiente salida en la pantalla LCD:

DS18B20-16x2-I2C-LCD-output
Salida LCD

Conclusión

En este tutorial, he mostrado cómo utilizar un sensor de temperatura analógico TMP36 con Arduino. Espero que lo hayas encontrado útil e informativo. Si lo hiciste, por favor comparte este artículo con un amigo que también le guste la electrónica y hacer cosas.

Me encantaría saber qué proyectos planeas construir (o ya has construido) con este sensor. Si tienes alguna pregunta, sugerencia, o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.

Tenga en cuenta que los comentarios son retenidos por la moderación para evitar el spam.

Licencia Creative Commons

Laura

Monday 6th of February 2023

Thank you for your tutorial!

Lee A

Miércoles 31 de marzo de 2021

En la clase de STEM, conectamos el sensor TMP36 a los 5V del Arduino, que estaba conectado al ordenador. Dos estudiantes cambiaron el +/- y el sensor se calentó tanto que se quemó los dedos. Cambié a un sensor diferente, pero también incluí una advertencia muy notable en mis notas del profesor para los que seguían usando el TMP36.