Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO

Componentes y Suministros

Arduino UNO×1
Pantalla LCD Alfanumérica 16×2 (HD44780)×1
Potenciómetro 10 kΩ (contraste)×1
Resistencia 220 Ω (retroiluminación)×1
Protoboard y cables×1
Pulsador (para el juego)×1

Aplicaciones y Servicios Online

Sobre el Proyecto

Tutorial progresivo: desde el cableado básico del LCD hasta animaciones con caracteres personalizados y un juego tipo arcade simple. Aplicable a cualquier LCD compatible HD44780 (16×2, 20×4, etc.).

1. Cableado del LCD

Pin LCDFunciónConexión
1VSS (GND)Riel negativo protoboard (GND Arduino)
2VDD (+5 V)Riel positivo protoboard (5 V Arduino)
3VO (Contraste)Cursor potenciómetro (extremos a +5 V y GND)
4RSPin digital 12 Arduino
5R/WGND (solo escritura)
6E (Enable)Pin digital 11 Arduino
11–14D4–D7 (Datos)Pines digitales 4, 5, 6, 7 Arduino
15A (Ánodo LED)+5 V vía resistencia 220 Ω
16K (Cátodo LED)GND

Prueba: Alimenta; si la fila inferior se ilumina, el LCD funciona. Ajusta el contraste con el potenciómetro.

2. Primer Sketch – Mensaje Estático

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // RS, E, D4, D5, D6, D7
void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  lcd.print("Working");
}
void loop() {}

Si ves "Working", el cableado es correcto.

3. Explicación de Funciones Clave

4. Texto Desplazado (Scrolling)

void loop() {
  char msg[] = "Texto desplazado! ";
  for (int pos = 15; pos >= -14; pos--) {
    lcd.clear();
    lcd.setCursor(pos, 1);
    if (pos < 0) lcd.print(msg - pos); // puntero avanza
    else lcd.print(msg);
    delay(250);
  }
}

Usa punteros para mostrar ventana deslizante del mensaje.

5. Caracteres Personalizados (Custom Characters)

Define un array de 8 bytes (5×8 píxeles). Ejemplo dinosaurio:

byte dino[8] = {
  B01110, B01110, B01100, B01111,
  B11101, B01010, B01010, B01010
};
void setup() {
  lcd.createChar(0, dino);
  lcd.begin(16,2);
  lcd.setCursor(0,1);
  lcd.write(byte(0));
}

Genera tus propios caracteres en LCD Character Creator.

6. Animación: Flecha Disparada

Tres caracteres personalizados (punta, cuerpo, cola) se escriben en secuencia moviendo la columna.

byte arrowHead[8] = {B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000};
byte arrowBody[8] = {B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000};
byte arrowTail[8] = {B00011, B00111, B01111, B11111, B11111, B00111, B00011, B00000};

void setup() {
  lcd.createChar(0, arrowHead);
  lcd.createChar(1, arrowBody);
  lcd.createChar(2, arrowTail);
  lcd.begin(16,2);
}
void loop() {
  for (int n=15; n>=-1; n--) {
    lcd.clear();
    lcd.setCursor(n,1);
    lcd.write(byte(0)); lcd.write(byte(1)); lcd.write(byte(2));
    delay(50);
  }
}

7. Juego Simple: Esquiva las Flechas

Objetivo: El "héroe" (carácter personalizado) está en fila 1. Flechas cruzan la fila 1 de derecha a izquierda. Pulsador en pin 2 (interrupción 0) mueve al héroe a fila 0 para esquivar. Puntuación en esquina superior derecha.

Conceptos clave:

Código completo del juego incluido en la sección Código.

Código

Sketch Animación (Flecha)

#include <LiquidCrystal.h>
const int rs=12, en=11, d4=4, d5=5, d6=6, d7=7;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
// ... definiciones de arrowHead, arrowBody, arrowTail, man ...
void setup() {
  lcd.createChar(0,arrowHead); lcd.createChar(1,arrowBody);
  lcd.createChar(2,arrowTail); lcd.createChar(3,man);
  lcd.begin(16,2);
}
void loop() {
  for(int n=15;n>=-1;n--){
    lcd.clear(); delay(10);
    lcd.setCursor(0,0); lcd.print("by Debanshu Das");
    lcd.setCursor(n,1);
    lcd.write(byte(0)); lcd.write(byte(1)); lcd.write(byte(2));
    delay(65);
  }
}

Sketch Juego Completo

#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,4,5,6,7);
int level=1, score=0;
// ... definiciones de caracteres ...
void setup() {
  lcd.createChar(0,arrowHead); lcd.createChar(1,arrowBody);
  lcd.createChar(2,arrowTail); lcd.createChar(3,man);
  lcd.begin(16,2);
  attachInterrupt(0,buttonin,CHANGE);
  randomSeed(analogRead(A0));
}
void loop() {
  int n=15, rnd=random(15,25);
  while(n!=-1){
    lcd.clear(); delay(10); drawman();
    lcd.setCursor(n,1);
    if(n==1 && level==1){ stopgame(); continue; }
    lcd.write(byte(0)); lcd.write(byte(1)); lcd.write(byte(2));
    lcd.setCursor(10,0); lcd.print(score);
    delay(100-rnd); n--; score++; if(level==0) score--;
  }
}
void drawman(){ lcd.setCursor(1,level); lcd.write(byte(3)); }
void buttonin(){ level = digitalRead(2)==LOW ? 0 : 1; }
void stopgame(){
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Game over");
  lcd.setCursor(10,0); lcd.print(score);
  level=1; score=0; n=15; delay(3000);
}

Esquemático

Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO

Proceso de manufactura

  1. Construye una Consola de Juegos Portátil con el Clon Arduboy
  2. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  3. Registrador de Temperatura y Humedad con Arduino, DHT11 y Ethernet Shield
  4. Control Arduino UNO desde Python 3 – Envío de Comandos y Demo LED
  5. Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64
  6. Construye una Radio FM Compacta con Arduino Nano y RDA5807M
  7. Construye una Estación Meteorológica Arduino Fiable con Sensores DHT
  8. Construye un Juego Arcade Clásico con Arduino LCD, Zumbador y Joystick
  9. MKR1000 con DHT22: Monitorización de Temperatura y Humedad en Tiempo Real a Azure
  10. Construye un Portátil Raspberry Pi 3 y Arduino: Guía Paso a Paso
  11. Sensores para Arduino: Tipos, Aplicaciones y Proyectos Reales