Capacitación Arduino · Pantalla

Pantalla LCD 1602
Muestra tus datos
en 2 líneas

LCD azul de 16 × 2 caracteres con módulo I2C soldado (PCF8574, dirección 0x27): solo 4 cables. Simulada en Tinkercad y en OpenCircuits.

Comunicación I2C Mostrar datos Bloques + C++

El componente

LCD 16 × 2 con módulo I2C

Pantalla 16 × 2 Luz de fondo azul 16 caracteres · 2 filas letras blancas GND → GND VCC → 5V SDA → A4 SCL → A5
Detrás va soldado el módulo I2C (chip PCF8574): convierte los 16 pines de la pantalla en solo 4 cables. Tiene un tornillo azul para el contraste.
Cada aparato I2C tiene una dirección. La de este módulo es 0x27 (a veces 0x3F). El Arduino la usa para hablarle solo a la pantalla.

Cómo funciona

Dos cables, una dirección y un cursor

Arduino SDA (A4) datos SCL (A5) ritmo I2C0x27 setCursor(0, 1) columna 0, fila 1
  1. El Arduino habla por I2C: SDA lleva los datos y SCL marca el ritmo.
  2. Llama a la pantalla por su dirección 0x27.
  3. Pone el cursor en una columna (0 a 15) y una fila (0 o 1).
  4. Escribe con print. Lo que sobra de un texto anterior se borra escribiendo espacios.

Para simular

Tinkercad la tiene… pero revisa el tipo y la dirección

En el kit real

El módulo soldado es un PCF8574 en la dirección 0x27 y se programa con la biblioteca LiquidCrystal_I2C.

En Tinkercad: «LCD 16 x 2 (I2C)»

PropiedadTinkercad traePon esto (como el kit)
Tipo (propiedades de la LCD)MCP23008PCF8574
Dirección32 (0x20)39 (0x27)
Bloque «configurar tipo de LCD»MCP23008 · 32PCF8574 · 39
Contraste—Solo en el real: tornillo azul

Si la propiedad y el bloque no coinciden, la pantalla queda en blanco.

Para tener algo que mostrar, un potenciómetro en A0 hace de sensor de nivel: la pantalla escribe «Nivel del tanque» y el porcentaje.

Paso 1 · Componentes

Búscalos en el panel de componentes de Tinkercad

Arduino Uno R3 ×1

Buscar: Arduino

Placa de pruebas pequeña ×1

Buscar: Placa de pruebas

LCD 16 x 2 (I2C) ×1

Buscar: LCD. Tipo PCF8574, dirección 39.

Potenciómetro ×1

Hace de sensor de nivel en A0.

Para cambiar el tipo y la dirección de la pantalla, haz clic en ella y edítalos en el cuadro de propiedades.

Paso 2 · Circuito

Así se ve en Tinkercad

A0 0 nivel 0 Gira la perilla: la pantalla de la protoboard muestra el nuevo nivel.

Paso 2 · Conexiones

Conexión por conexión

Alimentación
Arduino 5VRiel + inferior
Arduino GNDRiel − inferior
Potenciómetro (sensor de nivel)
—Potenciómetro (fila e)Columnas 14, 15, 16
Columna 14Riel −
Columna 16Riel +
Columna 15 (cursor)Arduino A0
Pantalla LCD I2C (fuera de la protoboard)
LCD GNDRiel − inferior
LCD VCCRiel + inferior
LCD SDAArduino A4
LCD SCLArduino A5
En el Arduino UNO, SDA es A4 y SCL es A5: no se pueden cambiar. Todo va en los rieles de abajo.

Paso 3 · Código en bloques

Arrastra estos bloques · la configuración en «al iniciar»

Antes: Variables → Crear variable: nivel. «configurar tipo de LCD» y la luz van en «al iniciar» (una vez); leer y escribir, en «siempre». Control Entrada Matemáticas Variables Salida (LCD)

Paso 3 · Código C++

El mismo programa en texto

// C++ code
//
#include <LiquidCrystal_I2C.h>

int nivel = 0;

LiquidCrystal_I2C lcd_1(39, 16, 2);

void setup()
{
  lcd_1.init();
  pinMode(A0, INPUT);

  lcd_1.backlight();
}
En Tinkercad: Código → Bloques → Texto. Acepta el aviso, borra lo que haya y pega.
void loop()
{
  nivel = map(analogRead(A0), 0, 1023, 0, 100);
  lcd_1.setCursor(0, 0);
  lcd_1.print("Nivel del tanque");
  lcd_1.setCursor(0, 1);
  lcd_1.print(nivel);
  lcd_1.print(" %   ");
  delay(200); // Wait for 200 millisecond(s)
}

Paso 4 · Simular

¡A probar!

  1. Pulsa Iniciar simulación: la pantalla se enciende y escribe «Nivel del tanque».
  2. Haz clic en el potenciómetro y gíralo: la segunda fila cambia entre 0 % y 100 %.
  3. Baja de 100 % a 9 %: los espacios después del «%» borran los números que sobraban.

Si algo no funciona

Pantalla en blancoEl tipo y la dirección deben ser PCF8574 · 39 en la LCD y en el bloque.
Quedan números viejosImprime espacios después del valor (" % ").
No cambia nuncaLa lectura de A0 debe estar en «siempre», no en «al iniciar».
Letras rarasRevisa SDA en A4 y SCL en A5 (no al revés).

Paso 5 · Kit real

Del simulador a la pantalla real

Mismas conexiones, mismo código

LCDArduino
GNDGND
VCC5V
SDAA4
SCLA5

En el Arduino IDE instala la biblioteca LiquidCrystal I2C (de Frank de Brabander): Programa → Incluir biblioteca → Administrar bibliotecas.

Si no se ve nada

  1. Gira el tornillo azul de atrás (contraste) hasta ver las letras.
  2. Si solo se ven cuadros, tu módulo puede estar en 0x3F: en el código cambia lcd_1(39, 16, 2) por lcd_1(63, 16, 2) (39 = 0x27, 63 = 0x3F).
  3. Revisa que el puente de la luz de fondo (jumper) esté puesto.

En el kit, el potenciómetro B10K hace lo mismo que en la simulación: muestra 0 a 100 %.

Alternativa · OpenCircuits

En OpenCircuits la LCD I2C tiene bloques propios

A0 0 Iniciar.bat → SensoresPantalla LCD I2C · Nivel

Los bloques nuevos

La categoría LCD I2C de OpenCircuits ya viene configurada para la pantalla del kit (0x27): no hace falta «configurar tipo de LCD» ni «al iniciar».

LCD I2Clínea 1: escribir · línea 2: etiqueta, valor y unidad
Matemáticasasignar A0 al rango entre 0 y 100
Controlsiempre, esperar

El bloque de la línea 2 borra solo lo que sobra: no hay que agregar espacios.

// C++ code
//
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  lcd.init();
  lcd.backlight();
  pinMode(A0, INPUT);
}
void loop()
{
  lcd.setCursor(0, 0);
  lcd.print("Nivel del tanque");
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print("Nivel: ");
  lcd.print(map(analogRead(A0), 0, 1023, 0, 100));
  lcd.print(" %");
  lcd.print("        ");
  delay(200); // Wait for 200 millisecond(s)
}
Este texto lo escribe OpenCircuits a partir de los bloques. Funciona igual en el kit real con la biblioteca LiquidCrystal_I2C.

Para seguir

Retos

1 · Alerta

Si el nivel baja de 20 %, la primera fila dice «¡NIVEL BAJO!» en vez de «Nivel del tanque».

2 · Barra de nivel

Dibuja una barra en la fila 1: un carácter # por cada 10 %.

3 · Dos sensores

Muestra en la fila 0 la humedad del suelo y en la fila 1 la luz (LDR).

4 · Reloj

Muestra los segundos desde que se encendió el Arduino. Pista: millis() / 1000.

← → para avanzar · + − acercar el circuito · F pantalla completa