Capacitación Arduino · Pantalla
LCD azul de 16 × 2 caracteres con módulo I2C soldado (PCF8574, dirección 0x27): solo 4 cables. Simulada en Tinkercad y en OpenCircuits.
El componente
Cómo funciona
Para simular
El módulo soldado es un PCF8574 en la dirección 0x27 y se programa con la biblioteca LiquidCrystal_I2C.
| Propiedad | Tinkercad trae | Pon esto (como el kit) |
|---|---|---|
| Tipo (propiedades de la LCD) | MCP23008 | PCF8574 |
| Dirección | 32 (0x20) | 39 (0x27) |
| Bloque «configurar tipo de LCD» | MCP23008 · 32 | PCF8574 · 39 |
| Contraste | — | Solo en el real: tornillo azul |
Si la propiedad y el bloque no coinciden, la pantalla queda en blanco.
Paso 1 · Componentes
Buscar: Arduino
Buscar: Placa de pruebas
Buscar: LCD. Tipo PCF8574, dirección 39.
Hace de sensor de nivel en A0.
Paso 2 · Circuito
Paso 2 · Conexiones
| Alimentación | ||
| Arduino 5V | Riel + inferior | |
| Arduino GND | Riel − inferior | |
| Potenciómetro (sensor de nivel) | ||
| — | Potenciómetro (fila e) | Columnas 14, 15, 16 |
| Columna 14 | Riel − | |
| Columna 16 | Riel + | |
| Columna 15 (cursor) | Arduino A0 | |
| Pantalla LCD I2C (fuera de la protoboard) | ||
| LCD GND | Riel − inferior | |
| LCD VCC | Riel + inferior | |
| LCD SDA | Arduino A4 | |
| LCD SCL | Arduino A5 | |
Paso 3 · Código en bloques
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++
// 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(); }
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
| Pantalla en blanco | El tipo y la dirección deben ser PCF8574 · 39 en la LCD y en el bloque. |
| Quedan números viejos | Imprime espacios después del valor (" % "). |
| No cambia nunca | La lectura de A0 debe estar en «siempre», no en «al iniciar». |
| Letras raras | Revisa SDA en A4 y SCL en A5 (no al revés). |
Paso 5 · Kit real
| LCD | Arduino |
|---|---|
| GND | GND |
| VCC | 5V |
| SDA | A4 |
| SCL | A5 |
En el Arduino IDE instala la biblioteca LiquidCrystal I2C (de Frank de Brabander): Programa → Incluir biblioteca → Administrar bibliotecas.
lcd_1(39, 16, 2) por lcd_1(63, 16, 2) (39 = 0x27, 63 = 0x3F).En el kit, el potenciómetro B10K hace lo mismo que en la simulación: muestra 0 a 100 %.
Alternativa · OpenCircuits
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».
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) }
LiquidCrystal_I2C.Para seguir
Si el nivel baja de 20 %, la primera fila dice «¡NIVEL BAJO!» en vez de «Nivel del tanque».
Dibuja una barra en la fila 1: un carácter # por cada 10 %.
Muestra en la fila 0 la humedad del suelo y en la fila 1 la luz (LDR).
Muestra los segundos desde que se encendió el Arduino. Pista: millis() / 1000.