🌡️ Práctica: Termómetro Digital con TMP36

Medí temperatura y mostrala en Serial y LCD

Nivel: Intermedio | Duración: 60 minutos

🎯 Objetivo de la Práctica

En esta práctica vas a construir un termómetro digital usando el sensor TMP36. El Arduino leerá la temperatura ambiente y la mostrará por puerto serial y opcionalmente en una pantalla LCD.

💡 ¿Qué vas a aprender?
  • Conexión de sensores analógicos
  • Lectura de valores analógicos (0-1023)
  • Conversión de valores a temperatura (°C)
  • Uso de variables decimales (float)
  • Visualización en Serial y LCD

📦 Materiales Necesarios

⚠️ Atención con el TMP36:
  • No confundir con el LM35 (son similares pero tienen diferente escala)
  • La patita izquierda es 5V, centro es señal, derecha es GND
  • No conectar al revés o se puede quemar el sensor

🔌 Diagrama de Conexiones

Conexión del TMP36

Diagrama de conexión del TMP36
     ┌─────────────────────────┐
     │      VISTA FRONTAL      │
     │       DEL TMP36         │
     │                         │
     │    ┌─────────┐          │
     │    │   TMP   │          │
     │    │   36    │          │
     │    └───┬┬┬───┘          │
     │        │││              │
     │        ││└──────→ GND   │
     │        │└───────→ A0   │
     │        └────────→ 5V   │
     └─────────────────────────┘

     CONEXIONES AL ARDUINO:
     ─────────────────────
     TMP36 Izquierda (5V)  →  Arduino 5V
     TMP36 Centro (Señal)  →  Arduino A0
     TMP36 Derecha (GND)   →  Arduino GND
        
Patita TMP36 Función Conexión Arduino Color Sugerido
Izquierda Alimentación 5V 🔴 Rojo
Centro Señal Analógica A0 🟡 Amarillo
Derecha Tierra (GND) GND ⚫ Negro
💡 Tip: La imagen muestra la vista frontal del TMP36 (lado plano hacia vos). Si la imagen no carga, usá el diagrama ASCII de arriba como referencia.

💻 Código AlbertCode (Básico)

Copiá y pegá este código en el Traductor AlbertCode:

Variables
  entero valorSensor
  decimal temperatura
fin variables

al iniciar
  serial 9600
  pin A0 entrada
fin al iniciar

para siempre
  valorSensor = leer A0
  temperatura = valorSensor * 0.488 - 50
  imprimir "Temperatura: "
  imprimir temperatura
  imprimir " C"
  demorar 1000
fin parasiempre
📐 Fórmula de conversión:

El TMP36 entrega un voltaje proporcional a la temperatura:

  • 0.5V = 0°C
  • 10mV por cada °C
  • Fórmula: temperatura = (voltaje - 0.5) × 100

📄 Código Arduino Generado

Esto es lo que AlbertCode traduce automáticamente:

int valorSensor;
float temperatura;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop() {
  valorSensor = analogRead(A0);
  temperatura = valorSensor * 0.488 - 50;
  Serial.println("Temperatura: ");
  Serial.println(temperatura);
  Serial.println(" C");
  delay(1000);
}

📟 Código con LCD (Opcional)

Si tenés un LCD I2C, agregá esta versión mejorada:

Variables
  entero valorSensor
  decimal temperatura
fin variables

al iniciar
  serial 9600
  lcd i2c 0x27
  pin A0 entrada
fin al iniciar

para siempre
  valorSensor = leer A0
  temperatura = valorSensor * 0.488 - 50
  
  lcd limpiar
  lcd cursor 0, 0
  lcd imprimir "Temp: "
  lcd imprimir temperatura
  lcd imprimir " C"
  
  imprimir "Temperatura: "
  imprimir temperatura
  demorar 1000
fin parasiempre
⚠️ Nota sobre LCD en Tinkercad:

El simulador Tinkercad no soporta LCD I2C. Para probar esta versión necesitás:

  • Arduino físico + módulo LCD I2C
  • O usar el LCD paralelo (con más cables)

🚨 Código con Alarma de Temperatura

Versión avanzada con LED que se enciende si hace mucho calor:

Variables
  entero valorSensor
  decimal temperatura
fin variables

al iniciar
  serial 9600
  lcd i2c 0x27
  pin A0 entrada
  pin 13 salida
fin al iniciar

para siempre
  valorSensor = leer A0
  temperatura = valorSensor * 0.488 - 50
  
  lcd limpiar
  lcd cursor 0, 0
  lcd imprimir "Temp: "
  lcd imprimir temperatura
  lcd imprimir " C"
  
  si temperatura > 30 entonces
    encender 13
    lcd cursor 0, 1
    lcd imprimir "ALERTA CALOR!"
  sino
    apagar 13
  fin si
  
  imprimir "Temperatura: "
  imprimir temperatura
  demorar 1000
fin parasiempre

📋 Paso a Paso para la Clase

1 Reunir materiales: Verificar que cada grupo tenga su Arduino, TMP36 y cables.
2 Armar el circuito: Conectar el TMP36 según el diagrama. ¡Verificar polaridad!
3 Escribir el código: Usar AlbertCode para escribir el pseudocódigo básico.
4 Traducir: Clic en "Traducir a Arduino" y copiar el código generado.
5 Subir al Arduino: Pegar en Arduino IDE y subir a la placa.
6 Ver resultados: Abrir Monitor Serial (9600 baudios) y ver la temperatura.
7 Probar: Acercar el dedo al sensor para ver cómo cambia la temperatura.

📊 Tabla de Valores de Referencia

Estos valores te ayudan a debuggear si las lecturas no son correctas:

Temperatura Voltaje Valor Analógico Estado
-50°C 0.0V 0 Mínimo teórico
0°C 0.5V 102 Punto de referencia
25°C 0.75V 154 Temperatura ambiente
30°C 0.8V 164 Umbral de alarma
50°C 1.0V 205 Máximo práctico
150°C 2.0V 410 Máximo teórico
💡 Tip de debuggeo:

Si leés valores cercanos a 0 o 1023, revisá las conexiones. Un TMP36 conectado correctamente en ambiente interior debería dar valores entre 150-200 (20-30°C).

🎯 Desafíos para los Alumnos

Desafío 1: Cambiar el umbral de alarma

Modificá el código para que la alarma se active a 25°C en lugar de 30°C.

Desafío 2: Agregar un segundo LED

Agregá un LED azul que se encienda cuando la temperatura sea menor a 20°C (frío).

Desafío 3: Mostrar en 2 líneas del LCD

Mostrá la temperatura en la línea 1 y el estado (FRÍO/NORMAL/CALIENTE) en la línea 2.

Desafío 4: Guardar temperatura máxima

Usá una variable para guardar y mostrar la temperatura máxima registrada.

🔧 Solución de Problemas

Problema Posible Causa Solución
Temperatura siempre 0°C Sensor mal conectado Verificar que las 3 patitas estén en los pines correctos
Temperatura muy alta (>100°C) Sensor al revés Rotar el TMP36 180 grados
Lecturas inestables Cables sueltos Presionar bien los cables en la protoboard
LCD no muestra nada Dirección I2C incorrecta Probar con 0x3F en lugar de 0x27
Serial muestra caracteres raros Baudios incorrectos Verificar que Monitor Serial esté en 9600

🔗 Enlaces Útiles

🔧 Abrir Traductor AlbertCode 📖 Manual Completo 🎮 Tinkercad (Simulador) 🏠 Volver a Robótica