Mostrar datos en una pantalla LCD

Conecta una pantalla LCD 16×2 al Arduino Uno y muestra la temperatura y el estado de la alerta.

Qué vas a construir

Una pantalla LCD de 16 caracteres por 2 líneas que muestra la temperatura en la primera línea y el estado de la alerta en la segunda. Ya no necesitas la computadora para ver los datos.

Lo que aprendes

  • Cómo conectar una pantalla de caracteres con su librería.
  • Cómo escribir en posiciones concretas con lcd.setCursor().
  • Por qué hay que borrar los caracteres viejos al actualizar la pantalla.
  • Cómo ajustar el contraste con un potenciómetro.

Materiales en Tinkercad

  • Arduino Uno R3
  • LCD 16×2 (LCD Display)
  • Potenciómetro de 10 kΩ, para el contraste
  • Sensor TMP36
  • LED y resistencia de 220 Ω
  • Protoboard y cables

Paso 1: Conecta la pantalla

Usa estas conexiones:

Pantalla LCD Arduino
RS pin 12
E pin 11
D4 pin 5
D5 pin 4
D6 pin 3
D7 pin 6
VSS y RW GND
VDD 5V
A (backlight) 5V, con resistencia de 220 Ω si la simulación lo pide
K (backlight) GND
V0 cursor del potenciómetro

El potenciómetro de contraste va entre 5V y GND, con el cursor en V0.

Paso 2: Conecta el sensor y la alerta

  • TMP36 en A0, como en Leer un sensor de temperatura.
  • LED de alerta en pin 8, con resistencia de 220 Ω a GND.

Paso 3: Escribe el código

Tinkercad incluye la librería LiquidCrystal. Escribe:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 6);  // RS, E, D4, D5, D6, D7

const int SENSOR = A0;
const int ALERTA = 8;
const float UMBRAL = 30.0;

float leerCelsius() {
  int lectura = analogRead(SENSOR);
  float voltaje = lectura * 5.0 / 1024.0;
  return (voltaje - 0.5) * 100.0;
}

void setup() {
  lcd.begin(16, 2);
  pinMode(ALERTA, OUTPUT);
}

void loop() {
  float celsius = leerCelsius();

  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(celsius, 1);   // un decimal
  lcd.print(" C   ");      // espacios para borrar restos del valor anterior

  lcd.setCursor(0, 1);
  if (celsius >= UMBRAL) {
    lcd.print("ALERTA          ");
    digitalWrite(ALERTA, HIGH);
  } else {
    lcd.print("Normal          ");
    digitalWrite(ALERTA, LOW);
  }

  delay(500);
}

Los espacios al final de cada print() no son decoración. Si el valor anterior era más largo, sin ellos quedan caracteres viejos en la pantalla.

Paso 4: Ejecuta la simulación

Inicia la simulación. Gira el potenciómetro de contraste hasta que el texto se vea nítido.

Cómo sabes que lo lograste

  • La primera línea muestra la temperatura con un decimal.
  • La segunda línea dice “Normal” o “ALERTA”, según el umbral.
  • El LED de alerta cambia junto con el texto.

Qué salió mal

La pantalla está encendida pero sin texto. Gira el potenciómetro de contraste. Es el error más común.

La pantalla muestra cuadros o símbolos raros. Revisa las conexiones D4 a D7. Un cable cruzado cambia los caracteres.

Aparecen restos de números viejos. Agrega más espacios al final del print() correspondiente.

El código no compila con LiquidCrystal. Confirma que la primera línea sea #include <LiquidCrystal.h> y que el nombre esté escrito exactamente así.

Siguiente clase

En la siguiente clase vas a juntar todo en una estación de alerta con dos sensores, una pantalla y un botón para cambiar el umbral.