Código de búsqueda

Lección 20/31: Mostrando voltaje en LCD1602

Lección 20/31: Mostrando voltaje en LCD1602

Este proyecto demuestra cómo construir un voltímetro digital usando un Arduino y una pantalla LCD1602 con interfaz I2C. Al leer el voltaje analógico de un potenciómetro y mostrarlo en la pantalla, aprenderás las habilidades esenciales de conversión analógico-digital, comunicación I2C y control de LCD. 

LCD_sunFounder

Este proyecto es un gran trampolín para muchas aplicaciones prácticas. Aquí tienes algunas ideas sobre las que puedes construir:

  • Construir un monitor de voltaje de batería portátil para tus proyectos.
  • Crear una fuente de alimentación simple con lectura visual de voltaje.
  • Monitorear la salida de un panel solar u otra fuente de voltaje variable.
  • Mostrar el valor de cualquier sensor analógico, como una fotorresistencia (LDR), como un número legible.

Al final de esta guía, tendrás una comprensión clara de cómo conectar los componentes, configurar las librerías necesarias y escribir el código para crear tu propio display de voltaje.

potentiometer

Componentes de Hardware

Para construir este proyecto, necesitarás los siguientes componentes. El curso se basa en el kit Arduino 3-en-1 de SunFounder, que incluye todas estas piezas.

  • Placa Arduino (ej., Uno)
  • Pantalla LCD1602 con módulo I2C
  • Potenciómetro (10kΩ recomendado)
  • Cables de conexión
  • Protoboard

Entendiendo el LCD1602 y el Módulo I2C

El LCD1602 es una pantalla alfanumérica popular con 16 columnas y 2 filas. Un LCD paralelo estándar requeriría muchos pines digitales para controlarlo. Sin embargo, esta pantalla viene con un módulo I2C dedicado adjunto a su parte trasera (en el video en 01:30). Este módulo simplifica drásticamente el cableado, reduciendo la conexión a solo cuatro cables: VCC, GND, SDA y SCL. Esto es posible porque el módulo I2C actúa como un puente, traduciendo la señal serial I2C simple a las señales paralelas que el LCD necesita.

Este proyecto utiliza la interfaz I2C, que es un protocolo de comunicación que permite que tu Arduino hable con múltiples dispositivos usando solo dos cables. Esta es una habilidad fundamental para conectar muchos tipos de sensores y pantallas.

Guía de Cableado

LCD1602_pot_wiring

Conectar el LCD y el potenciómetro al Arduino es sencillo. El módulo I2C necesita alimentación y dos líneas de comunicación. El potenciómetro actúa como un divisor de voltaje variable, permitiéndote ajustar el voltaje en su pin central.

Aquí está la configuración de cableado detallada:

  • Módulo I2C del LCD al Arduino:
    • GND al GND del Arduino (en el video en 05:38).
    • VCC al 5V del Arduino (en el video en 05:47).
    • SDA al A4 del Arduino (en el video en 05:47).
    • SCL al A5 del Arduino (en el video en 05:57).
  • Potenciómetro al Arduino:
    • Pin Izquierdo al 5V del Arduino (en el video en 33:39).
    • Pin Central (Cursor) al A0 del Arduino (en el video en 33:43).
    • Pin Derecho al GND del Arduino (en el video en 33:43).

Instalando la Librería Requerida

Este proyecto requiere una librería externa para controlar el LCD a través de I2C. La librería utilizada en el video es la librería "Arduino Liquid Crystal I2C". Puedes descargarla desde el enlace proporcionado en la página de recursos de Robojax o desde GitHub (en el video en 06:16).

Para instalarla, descarga la librería como un archivo ZIP. Luego, en tu IDE de Arduino, ve a Sketch > Include Library > Add .ZIP Library... y selecciona el archivo descargado (en el video en 06:41).

Encontrando la Dirección I2C de tu LCD

Antes de subir el código principal, es crucial determinar la dirección I2C de tu módulo LCD específico. Esta dirección puede variar según el fabricante. El video demuestra cómo usar un escáner I2C para encontrarla (en el video en 08:11).

Puedes encontrar este escáner yendo a File > Examples > Wire > i2c_scanner. Sube este código a tu Arduino con el LCD conectado y abre el Monitor Serial. Mostrará la dirección, que a menudo es 0x27 o 0x3F. Necesitarás usar esta dirección en tu código principal.

Explicación del Código

El código para este proyecto se centra en leer un valor analógico y formatearlo para mostrarlo. Vamos a desglosar las partes clave y configurables por el usuario.

1. Inclusiones de Librerías y Objeto LCD

Esta sección incluye las librerías necesarias y crea un objeto para tu LCD. La parte más importante aquí es la dirección I2C, que debes cambiar para que coincida con la que encontraste en el paso anterior.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Establece la dirección LCD a 0x27 para una pantalla de 16 o 20 caracteres y 2 o 4 líneas
LiquidCrystal_I2C lcd(0x27, 16, 2);
  • #include <Wire.h>: Esta librería está integrada en Arduino y es necesaria para la comunicación I2C.
  • #include <LiquidCrystal_I2C.h>: Esto incluye la librería que acabamos de instalar, que proporciona las funciones para controlar la LCD.
  • LiquidCrystal_I2C lcd(0x27, 16, 2);: Esta línea crea un objeto llamado lcd. El primer parámetro, 0x27, es la dirección I2C que encontraste antes. El segundo y tercer parámetros definen las dimensiones de la LCD: 16 columnas y 2 filas. Debes cambiar 0x27 a tu dirección específica si es diferente.

2. Funciones de Configuración y Bucle

La función setup() inicializa la LCD y enciende su retroiluminación. La función loop() contiene la lógica principal para leer el voltaje y mostrarlo.

void setup()
{
  lcd.begin();
  lcd.backlight();
}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  // ... (código de visualización en LCD)
  delay(1000);
}
  • lcd.begin(): Esto inicializa la interfaz de la LCD y la prepara para su uso.
  • lcd.backlight(): Esto enciende la retroiluminación de la pantalla, haciendo visible el texto.
  • int potValue = analogRead(A0);: Esto lee el valor analógico bruto del pin A0, que está conectado al cursor del potenciómetro. El valor será un entero entre 0 y 1023, que representa el voltaje de 0V a 5V.
  • float voltage = potValue * (5.0 / 1023.0);: Este es el paso de conversión crucial. Convierte el valor ADC bruto en una lectura de voltaje real. La fórmula multiplica el valor bruto por la relación entre el voltaje de referencia (5.0V) y el valor máximo del ADC (1023). Esto es necesario porque el ADC no lee el voltaje directamente; lee un número proporcional.

3. Mostrando el Voltaje

El código luego limpia la pantalla e imprime el valor del voltaje en una posición específica en la segunda línea.

  lcd.clear();
  lcd.print("Tutorial LCD1602");
  lcd.setCursor (0,1); // ir al inicio de la 2da línea
  lcd.print("Voltaje:");
  lcd.setCursor (9,1); // establecer en línea 2 carácter 9
  lcd.print(voltage); 
  lcd.setCursor (13,1); // establecer en línea 2 carácter 14
  lcd.print("V"); 
  • lcd.clear(): Limpia cualquier texto anterior de la pantalla.
  • lcd.print("Tutorial LCD1602"): Imprime el título en la primera línea.
  • lcd.setCursor (0,1): Establece el cursor al inicio de la segunda línea. El primer parámetro es la columna (0-15), y el segundo es la fila (0 para la primera línea, 1 para la segunda).
  • lcd.print(voltage): Imprime el valor de voltaje calculado. La variable float se imprimirá con dos decimales por defecto.
  • lcd.setCursor (13,1): Mueve el cursor a la columna 13 en la segunda línea para posicionar el carácter "V" justo después del número.

Demostración del Proyecto en Vivo

Una vez que hayas subido el código, la LCD debería mostrar "Tutorial LCD1602" en la primera línea. En la segunda línea, mostrará "Voltaje:" seguido de la lectura de voltaje actual. A medida que gires la perilla del potenciómetro, verás el voltaje mostrado cambiar en tiempo real, variando de aproximadamente 0.00V a 5.00V (en el video en 35:25).

Este proyecto es un ejemplo perfecto de cómo tomar una señal analógica bruta y convertirla en un valor claro y legible para humanos. Las habilidades que has aprendido aquí se pueden aplicar directamente a cualquier otro sensor analógico que puedas usar en el futuro.

El video también cubre otros temas relacionados, como mostrar texto, desplazamiento y crear caracteres personalizados en la LCD.

Proyectos relacionados de este video

Capítulos

  • [00:00] Introducción al LCD1602 y descripción general del proyecto
  • [01:30] Explicación del hardware LCD1602 y módulo I2C
  • [04:06] Configuración de la dirección I2C con puentes
  • [05:28] Diagrama de conexiones para el LCD1602
  • [07:31] Explicación del código para mostrar texto básico
  • [11:10] Demostración del ejemplo de cursor parpadeante
  • [13:46] Creación y uso de caracteres personalizados
  • [18:51] Uso del ejemplo de pantalla serial
  • [23:16] Desplazamiento de texto en la LCD
  • [26:13] Mostrando temperatura y humedad del DHT11
  • [33:00] Leyendo y mostrando voltaje de un potenciómetro
  • [35:56] Mostrando distancia de un sensor ultrasónico

Imágenes

potentiometer
potentiometer
LCD1602_pot_wiring
LCD1602_pot_wiring
LCD_sunFounder
LCD_sunFounder
912-Lesson 20/31: Displaying voltage on LCD1602
Idioma: C++
/*
Lesson 20/31: Displaying voltage on LCD1602
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 or 20 chars and 2 or 4 lines display
LiquidCrystal_I2C lcd(0x27, 16, 2);

int count =700;
void setup()
{
  // Robojax code for LCD with I2C
	// initialize the LCD, 
	lcd.begin();
 
	// Turn on the blacklight and print a message.
	lcd.backlight();
  // Robojax code for LCD with I2C


}

void loop()
{
  int potValue = analogRead(A0);
  float voltage = potValue * (5.0 / 1023.0);
  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("LCD1602 Tutorial");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Voltage:");

  lcd.setCursor (9,1); // set to line 2 char 9
  lcd.print(voltage); 

  lcd.setCursor (13,1); // set to line 2 char 14
  lcd.print("V"); 

  //lcd.setCursor (3,3); // set to line 4 character 4
  //lcd.print("Text in line 4"); 
        
  delay(1000);
  count++;
 //end of loopcode Robojax code for LCD with I2C
}

Archivos📁

Bibliotecas de Arduino (zip)

Manual del Usuario