Ir al contenido principal

Mostrar Volts y Porcentaje de un Potenciómetro en LCD I2C con Arduino

Introducción

Leer un potenciómetro y mostrar su valor en una pantalla LCD es un ejercicio fundamental en proyectos de electrónica, pero la mayoría de los tutoriales se limitan a mostrar el valor entero crudo que entrega el conversor analógico-digital de Arduino (de 0 a 1023). Para aplicaciones prácticas, este número resulta poco intuitivo; lo ideal es **convertir la lectura en Voltios reales (0V a 5V) o en un Porcentaje (0% a 100%)**.

En este tutorial aprenderás paso a paso a transformar ese valor analógico mediante fórmulas matemáticas sencillas y a representarlo de forma limpia y ordenada en una pantalla LCD I2C. (Nota: Si prefieres mostrar una representación visual mediante una barra de progreso con asteriscos, consulta nuestro guía Mostrar un potenciómetro en LCD con barra de asteriscos).

Materiales Necesarios

Para realizar este montaje de forma rápida y limpia en protoboard, se requieren los siguientes componentes recomendados:

Componente Descripción Enlace
Arduino UNO R3 / R4 Placa de desarrollo principal para el procesamiento analógico. Ver en Amazon
Pantalla LCD 16x2 con I2C Módulo LCD alfanumérico con mochila I2C (reduce el cableado a 4 hilos). Ver en Amazon
Potenciómetro 10kΩ Potenciómetro rotatorio lineal para variación de tensión analógica. Ver en Amazon
Protoboard y Cables Jumper Placa de pruebas y cables de conexión para interconexión rápida. Ver en Amazon

La Matemática detrás del Potenciómetro

Arduino cuenta con un convertidor analógico-digital (ADC) de 10 bits en sus pines analógicos (como el A0). Esto significa que la señal continua de 0V a 5V se cuantifica internamente en una escala discreta que va desde 0 hasta 1023.

Para traducir esta escala numérica a variables físicas legibles, se utilizan dos fórmulas matemáticas directas:

  • Conversión a Voltaje: Sabiendo que el nivel máximo de referencia de la placa es 5V, dividimos la lectura analógica por la resolución total (1023) y la multiplicamos por 5.0: Voltaje = (Valor * 5.0) / 1023.0. Es imprescindible declarar los divisores con decimales (5.0 y 1023.0) para obligar al procesador a realizar una división de punto flotante (float) en lugar de un redondeo entero.
  • Conversión a Porcentaje: Escalamos el rango analógico original (0-1023) a una escala porcentual (0-100). La forma más eficiente en Arduino es emplear la función integrada: map(valor, 0, 1023, 0, 100).

⚠️ Diagnóstico Frecuente: La Dirección I2C

Para entablar comunicación con el controlador del display, la librería debe apuntar a la dirección hexadecimal correcta del circuito integrado I2C. Generalmente, la mayoría de módulos con chip PCF8574 emplean la dirección 0x27, aunque otros modelos utilizan 0x3F. Si tras cargar el programa la pantalla enciende el backlight pero no muestra caracteres, ejecuta previamente un sketch del tipo "I2C Scanner" para verificar la dirección de tu hardware y modifica el valor en la inicialización: LiquidCrystal_I2C lcd(0x27, 16, 2).

Esquema de Conexiones

El uso del bus de comunicación I2C permite simplificar notablemente el circuito frente al conexionado tradicional paralelo, reduciendo el bus de la pantalla a únicamente 4 conexiones:

  • VCC (Módulo I2C): Alimentación a 5V de la placa Arduino.
  • GND (Módulo I2C): Conexión de masa a GND de Arduino.
  • SDA (Módulo I2C): Línea de datos al pin A4 (en Arduino UNO / Nano).
  • SCL (Módulo I2C): Línea de reloj al pin A5 (en Arduino UNO / Nano).
  • Potenciómetro: Terminal izquierdo a 5V, terminal derecho a GND y terminal central (wiper) al pin analógico A0.

Esquema de conexion de potenciometro y pantalla LCD I2C en Arduino

Código de Arduino: Volts y Porcentaje

Antes de compilar y subir el código a la placa, comprueba que has instalado la librería LiquidCrystal_I2C mediante el Gestor de Librerías integrado en el IDE de Arduino (Herramientas > Administrar bibliotecas).

voltios_porcentaje.ino
// Incluimos librerías requeridas
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Configuración del objeto LCD: Dirección I2C, Columnas, Filas
LiquidCrystal_I2C lcd(0x27, 16, 2); 

const int potPin = A0; // Pin analógico conectado al potenciómetro

// Declaración de variables
int potValue = 0;      // Valor analógico crudo (0 - 1023)
float voltage = 0.0;   // Valor de voltaje calculado (0.00V - 5.00V)
int percentage = 0;    // Porcentaje equivalente (0% - 100%)

void setup() {
  lcd.init();          // Inicializa el bus y el controlador LCD
  lcd.backlight();     // Activa la retroiluminación LED
}

void loop() {
  // 1. Lectura del pin analógico
  potValue = analogRead(potPin);
  
  // 2. Cálculo de Voltaje usando matemáticas decimales (float)
  voltage = (potValue * 5.0) / 1023.0;
  
  // 3. Mapeo a porcentaje con la función map()
  percentage = map(potValue, 0, 1023, 0, 100);
  
  // 4. Muestra de Voltios en la primera fila
  lcd.setCursor(0, 0); // Columna 0, Fila 0
  lcd.print("Volts: ");
  lcd.print(voltage, 2); // Imprime el float con exactamente 2 decimales
  lcd.print(" V  ");    // Espacios al final para sobreescribir caracteres
  
  // 5. Muestra de Porcentaje en la segunda fila
  lcd.setCursor(0, 1); // Columna 0, Fila 1
  lcd.print("Nivel: ");
  
  // Formateo de espacios para evitar desfases visuales
  if (percentage < 10) {
    lcd.print("  ");   // Añade 2 espacios si el valor tiene 1 cifra
  } else if (percentage < 100) {
    lcd.print(" ");    // Añade 1 espacio si el valor tiene 2 cifras
  }
  lcd.print(percentage);
  lcd.print(" %  ");   // Espacios de limpieza al final
  
  delay(200);          // Refresco de lectura equilibrado
}

Explicación del Código: Claves de Programación

Este firmware incluye varios métodos recomendados para optimizar el formateo visual en pantallas LCD:

  1. Aritmética en Punto Flotante: En la instrucción voltage = (potValue * 5.0) / 1023.0;, se explicita el uso de decimales (.0). De utilizar valores enteros simples, el compilador redondea internamente el resultado previo truncando los decimales.
  2. Formateo de Decimales con lcd.print(): La sintaxis lcd.print(voltage, 2) restringe la impresión del valor flotante a dos posiciones decimales estrictas, evitando la desalineación de la pantalla causada por cadenas numéricas extensas.
  3. Gestión de Caracteres Fantasma: Las pantallas LCD alfanuméricas conservan en memoria el contenido escrito previamente en cada matriz de píxeles. Al pasar de un número de 3 dígitos (ej: "100%") a uno de 1 dígito (ej: "5%"), sin la adecuada adición de espacios de compensación previo o posterior, el último carácter previo permanecería visible imprimiendo valores erróneos como "5%0%".

Conclusión

La conversión y formateo de lecturas analógicas crudas en magnitudes físicas reconocibles representa uno de los pilares del desarrollo de interfaces en proyectos de automatización e IoT. Emplear un display LCD I2C simplifica las conexiones físicas y permite supervisar el comportamiento de sensores sin requerir un ordenador conectado por puerto serie.

Si deseas continuar ampliando las técnicas de visualización en pantallas LCD alfanuméricas, revisa nuestra guía práctica para desarrollar indicadores gráficos mediante Barras de progreso con asteriscos en LCD.

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