Ir al contenido principal

Mostrar valores en Pantalla LCD con Arduino: Crear una barra visual con Asteriscos (I2C)

Introducción

Leer datos de sensores y mostrarlos en el Monitor Serie de tu PC está bien para pruebas, pero si quieres crear un proyecto real (un termómetro, un medidor de distancia, un controlador de motor), necesitas que tu Arduino pueda mostrar información de forma autónoma sin depender de un ordenador conectado.

En este tutorial vamos a aprender a usar una Pantalla LCD 16x2 con módulo I2C junto con un potenciómetro. Pero no solo vamos a mostrar un número aburrido; vamos a enseñarte un truco profesional: crear una barra gráfica visual usando asteriscos (*) que se llenan o vacían según giras el potenciómetro, ideal para representar niveles de batería, volumen o intensidad de luz.

¿Por qué usar un módulo I2C para el LCD?

Las pantallas LCD tradicionales necesitan 16 cables conectados a tu Arduino, lo cual es un desastre en la protoboard y un dolor de cabeza para cablear. El módulo I2C es un adaptador que se suelda en la parte posterior del LCD y reduce todos esos cables a solo 4 conexiones (VCC, GND, SDA y SCL), ahorrando pines y simplificando enormemente el montaje.

⚠️ El Error más Común: La Dirección I2C

Para que el código funcione, debes saber la dirección hexadecimal (hex) de tu módulo I2C. La mayoría de los módulos clones usan la dirección 0x27, pero otros utilizan 0x3F. Si tu LCD no enciende o se queda iluminado sin texto, es porque estás usando la dirección incorrecta en el código. Para encontrar la dirección exacta de tu módulo, busca en el IDE el sketch "I2C Scanner" de Arduino, cárgalo y te dirá la dirección en el Monitor Serie.

Materiales Necesarios

Para realizar este proyecto necesitarás los siguientes componentes de electrónica:

Componente Descripción Enlace
Placa Arduino UNO R3 / R4 Placa de desarrollo base para el proyecto Ver en Amazon
Pantalla LCD 16x2 con I2C Pantalla alfanumérica con adaptador I2C integrado Ver en Amazon
Potenciómetro de 10kΩ Potenciómetro rotatorio para control analógico Ver en Amazon
Protoboard Placa de pruebas sin soldadura (400 u 830 puntos) Ver en Amazon
Cables Dupont Jumper cables Macho-Macho y Macho-Hembra Ver en Amazon

Esquema de Conexiones

Gracias al módulo I2C, el cableado es extremadamente simple:

  • VCC del I2C: Al pin de 5V de Arduino.
  • GND del I2C: Al pin GND de Arduino.
  • SDA del I2C: Al pin A4 de Arduino UNO/Nano (o pin 20 en Mega).
  • SCL del I2C: Al pin A5 de Arduino UNO/Nano (o pin 21 en Mega).
  • Potenciómetro: Un pin extremo a 5V, el otro extremo a GND, y el pin central (wiper) al Pin Analógico A0 de Arduino.

Código de Arduino: La Barra de Asteriscos

Antes de cargar este código, asegúrate de tener instalada la librería LiquidCrystal_I2C en tu IDE de Arduino (Ve a Programa -> Incluir Librería -> Administrar Librerías, y busca "LiquidCrystal I2C" de Frank de Brabander).

barra_asteriscos.ino
// Incluimos las librerías necesarias para I2C y LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// INICIALIZA EL LCD. Dirección 0x27, 16 caracteres, 2 filas.
// ¡SI TU LCD NO FUNCIONA, CAMBIA EL 0x27 POR 0x3F!
LiquidCrystal_I2C lcd(0x27, 16, 2); 

// Definimos el pin donde conectamos el potenciómetro
const int potPin = A0; 

// Variables para almacenar datos
int potValue = 0;      // Valor raw leído del potenciómetro (0 a 1023)
int numStars = 0;      // Número de asteriscos que vamos a dibujar (0 a 16)

void setup() {
  lcd.init();         // Inicializa la comunicación con el LCD
  lcd.backlight();    // Enciende la luz de fondo de la pantalla
  
  // Imprimimos un texto fijo en la primera fila
  lcd.setCursor(0, 0); // Cursor en columna 0, fila 0
  lcd.print("Nivel Pot:");
}

void loop() {
  // 1. Leemos el valor analógico del potenciómetro
  potValue = analogRead(potPin);
  
  // 2. Mapeamos el valor. Convertimos el rango 0-1023 al rango 0-16
  // (16 es el número máximo de columnas/asteriscos en una pantalla 16x2)
  numStars = map(potValue, 0, 1023, 0, 16);
  
  // 3. Posicionamos el cursor en la segunda fila (fila 1)
  lcd.setCursor(0, 1);
  
  // 4. Dibujamos los asteriscos llenos según el valor calculated
  for (int i = 0; i < numStars; i++) {
    lcd.print("*");
  }
  
  // 5. TRUCO PRO: Limpiar el resto de la fila con espacios en blanco
  // Si dibujamos 10 asteriscos y luego giramos el potenciómetro a 5,
  // los últimos 5 asteriscos anteriores seguirían en pantalla.
  // Para "borrarlos", llenamos las columnas restantes con espacios vacíos.
  for (int i = numStars; i < 16; i++) {
    lcd.print(" ");
  }
  
  // Pequeña pausa para que la pantalla no parpadee demasiado rápido
  delay(150);
}

Explicación del Código: Los Detalles que Importan

Este código tiene tres conceptos clave que lo hacen funcionar perfectamente:

  1. La función map(): Un potenciómetro conectado a un pin analógico entrega un valor entre 0 y 1023. Pero nuestra pantalla LCD 16x2 solo tiene 16 columnas. La función map(valor, mínimo_entrada, máximo_entrada, mínimo_salida, máximo_salida) hace la matemática por ti. Si el potenciómetro está a la mitad (512), map() lo convierte en 8. Si está al máximo (1023), lo convierte en 16. Es la herramienta perfecta para adaptar escalas.
  2. El bucle for de los Asteriscos: Usamos for (int i = 0; i < numStars; i++) para imprimir la cantidad exacta de * correspondiente al nivel.
  3. El bucle for de Espacios en Blanco (El Truco Pro): Este es el paso que 90% de los blogs omiten. Un LCD no "borra" lo que había antes; simplemente sobreescribe. Si tenías 12 asteriscos y el valor baja a 5, el LCD imprimirá 5 asteriscos nuevos sobre los 5 primeros, pero los 7 asteriscos antiguos de la derecha seguirán ahí. El segundo bucle for llena de espacios vacíos " " las columnas desde el último asterisco hasta la columna 16, borrando visualmente los restos del valor anterior.

Conclusión

Mostrar datos en un LCD es imprescindible para proyectos autónomos. Usar la función map() para transformar datos en gráficos visuales (como barras de asteriscos) le da a tus proyectos un look profesional y mucho más intuitivo que leer números crudos. Este concepto de barra gráfica se puede aplicar a cualquier sensor: distancia, temperatura, luz...

Si quieres leer sensores más avanzados en lugar de un simple potenciómetro para mostrarlos en esta pantalla, te recomiendo visitar nuestro tutorial sobre Cómo leer un sensor de ultrasonidos con Arduino.

Comentarios

Entradas populares de este blog

Cómo evitar que Windows apague la pantalla o el disco duro (con gpedit)

Introducción Uno de los problemas más frecuentes en Windows es la suspensión automática del sistema, el apagado de la pantalla o la desactivación del disco duro tras unos minutos de inactividad. Aunque esto busca ahorrar energía, puede resultar frustrante si utilizas tu PC como servidor doméstico, servidor Plex, máquina de descargas o para tareas de larga duración . Si bien es posible cambiar estos ajustes desde la configuración tradicional de energía, muchas veces Windows ignora nuestras preferencias debido a directivas internas. La solución definitiva para evitar que tu ordenador se apague o suspenda es utilizar el Editor de Directivas de Grupo Local (gpedit.msc) . ⚠️ Advertencia sobre la versión de Windows El comando gpedit.msc solo está disponible de forma nativa en las ediciones Windows Pro, Enterprise y Education . Si utilizas Windows Home , esta herramienta no estará presente por defecto y deberás recurrir a la configuración convencional del Panel de Control. Paso 1...

Alarma con Arduino y Sensor Ultrasónico HC-SR04 (Tutorial paso a paso)

Introducción Crear un sistema de seguridad o detección de movimiento no tiene que ser complicado ni caro. En este tutorial vamos a construir una alarma con Arduino y un sensor de ultrasonidos (el famoso HC-SR04). Este proyecto es ideal para principiantes porque aprendes a leer sensores externos y a generar una respuesta física (encender un LED y hacer sonar un buzzer) cuando alguien se acerca demasiado. A continuación, te explico cómo funciona el sensor, qué materiales necesitas, cómo montar el circuito y te desgloso el código línea por línea para que realmente entiendas lo que estás programando. ¿Cómo funciona el Sensor Ultrasónico HC-SR04? Este sensor funciona igual que un sonar o los delfines: emite un sonido imperceptible para el humano (ultrasonido) y espera a que ese sonido choque contra un objeto y regrese (eco). Pin Trig (Trigger - Disparo): Le dice al sensor que debe "gritar" y emitir el pulso de ultrasonido. Pin Echo (Eco - Recepción): Se queda escuchando...

Instalar el driver USB a TTL PL2303HX en Windows 10 (Solución al Error Code 10)

Introducción: ¿Para qué sirve el convertidor USB a TTL? Los adaptadores USB a TTL (equipados con chips como el PL2303HX , FTDI o CP2102) son herramientas indispensables en el taller de cualquier maker, técnico o entusiasta de la electrónica. Nos permiten establecer comunicación serie UART entre un ordenador y dispositivos como Arduino, ESP32-CAM, routers, receptores de satélite o tablets . Sin embargo, conectar este tipo de cables en Windows 10 o Windows 11 suele transformarse en un dolor de cabeza. Al conectar el dispositivo, el sistema instala automáticamente el controlador más reciente y muestra un aviso de fallo con el icono amarillo de advertencia: "Este dispositivo no puede iniciar (Código 10)" . A continuación te explicamos por qué sucede y cómo solucionarlo en pocos minutos. ⚠️ Causa del fallo: Bloqueo de chips no oficiales por Prolific La inmensa mayoría de los módulos USB-TTL económicos integran una revisión o clon del chip Pr...