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...

Encender un LED con un Pulsador en Arduino (Tutorial Completo y sin fallos)

Introducción Controlar un LED mediante un pulsador es el primer proyecto práctico que se realiza al iniciarse con Arduino. Aunque parece un ejercicio sencillo, es fundamental entenderlo bien , ya que en él se esconde uno de los errores más comunes en electrónica digital: el problema del "estado flotante" . En este tutorial analizamos la lógica, el esquema y el código, explicando por qué un LED puede parpadear de forma errática sin las conexiones adecuadas y cómo solucionarlo mediante una resistencia Pull-Down o utilizando la función interna INPUT_PULLUP . Materiales necesarios Para realizar este montaje en tu banco de pruebas vas a necesitar los siguientes componentes básicos: 1 Placa Arduino UNO, Nano o Mega 1 LED (5mm, cualquier color) 1 Pulsador o botón push-button (4 pines) 1 Resistencia de 220Ω (protección para el LED) 1 Resistencia de 10kΩ (para el circuito Pull-Down) Cables Dupont / jumpers de conexión 1 Protoboard (placa de prueba...

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...