Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw Boeiende LCD Animaties & Games met Arduino UNO

Onderdelen en Benodigdheden

Onderdeel Aantal
Arduino UNO 1
Alfanumeriek LCD 16x2 1

Apps en Online Services

  • Arduino IDE

Over dit Project

Deze tutorial richt zich op de basisprincipes van animatie met Arduino en een 16x2 LCD. De technieken zijn toepasbaar op LCD's van andere afmetingen.

LCD Aansluitschema

Bouw Boeiende LCD Animaties & Games met Arduino UNO

Pinout (4-bit modus)

LCD Pin Functie Arduino / Breadboard
1: VSS Ground Negatieve rail (Arduino GND)
2: VDD Voeding +5V Positieve rail (Arduino 5V)
3: VO Contrast Wiper potentiometer (uitersten aan +/- rails)
4: RS Register Select Arduino Pin 12
5: R/W Read/Write Ground (alleen schrijven)
6: E Enable Arduino Pin 11
11: D4 Data 4 Arduino Pin 4
12: D5 Data 5 Arduino Pin 5
13: D6 Data 6 Arduino Pin 6
14: D7 Data 7 Arduino Pin 7
15: A Backlight Anode Positieve rail via 220Ω weerstand
16: K Backlight Cathode Negatieve rail

Test: Na aansluiten voeding (zonder datapins) – onderste rij moet oplichten. Zo niet: controleer soldeerwerk, bedrading, of LCD defect.

Eerste Testcode

#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() {}

Werkt niet? Controleer contrast (potentiometer), soldeerwerk datapins (geen kortsluitingen), en pin-nummers in code.

Code Uitleg

  • LiquidCrystal lcd(12,11,4,5,6,7); – Maakt LCD-object aan met interface-pinnen.
  • lcd.begin(16,2); – Definieert schermformaat (kolommen, rijen).
  • lcd.setCursor(0,1); – Zet cursor op kolom 0, rij 1 (tellen begint op 0).
  • lcd.print("Tekst"); – Print tekst vanaf cursorpositie.

Scrollende Tekst

Simuleert een lopende tekstband van rechts naar links:

void setup() { lcd.begin(16,2); }
void loop() {
  int n = 15;
  char message[] = "scrolling text!";
  char* ptr = message;
  while(n != -14) {
    lcd.clear();
    lcd.setCursor(n, 1);
    if(n < 0) ptr++;
    lcd.print(ptr);
    n--;
    delay(250);
  }
}

Pointer-arithmetiek zorgt dat tekst die links verdwijnt niet meer getoond wordt. Pas delay() aan voor snelheid.

Aangepaste Karakters (Custom Characters)

LCD's kunnen 8 zelfgedefinieerde 5x8 pixel karakters opslaan:

byte dino[] = {
  B01110, B01110, B01100, B01111,
  B11101, B01010, B01010, B01010
};

void setup() {
  lcd.createChar(0, dino); // Karakter 0 = dino
  lcd.begin(16,2);
  lcd.setCursor(0,1);
  lcd.write(byte(0)); // Toon karakater 0
}

Karakters ontwerpen: LCD Character Creator

Animatie: Vliegende Pijlen

Drie custom karakters (punt, staart, staart) gecombineerd voor een bewegende pijl:

byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { 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() {
  int n = 15;
  while(n != -1) {
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write(byte(0)); lcd.write(byte(1)); lcd.write(byte(2));
    lcd.setCursor(n,1);
    lcd.write(byte(0)); lcd.write(byte(1)); lcd.write(byte(2));
    n--; delay(50);
  }
}

LCD Game: Ontwijk de Pijlen

Doel: Een held (karakter op rij 1) ontwijkt pijlen die van rechts naar links vliegen. Druk op knop (pin 2, interrupt) om naar rij 0 te springen. Score = aantal frames uitgeleefd.

Complete Game Code

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);

int level = 1; // 0 = bovenste rij, 1 = onderste rij
int score = 0;

byte arrowhead[] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[] = { B00011, B00111, B01111, B11111, B11111, B00111, B00011, B00000 };
byte man[] = { B01110, B01110, B00100, B01110, B10101, B00100, B01010, B10001 };

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); // Pin 2 = Interrupt 0
  randomSeed(analogRead(A0)); // Echte randomness via ruis op A0
}

void loop() {
  int n = 15;
  int 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() {
  if(digitalRead(2) == LOW) level = 0; else level = 1;
}

void stopgame() {
  lcd.clear();
  lcd.setCursor(0,0); lcd.print("Game over");
  lcd.setCursor(10,0); lcd.print(score);
  level = 1; score = 0; delay(3000);
}

Belangrijke Concepten

  • Interrupts: attachInterrupt(0, buttonin, CHANGE) – reageert direct op knopdruk, ongeacht waar de code is.
  • Echte Randomness: randomSeed(analogRead(A0)) gebruikt kwantumruis op een onverbonden analoog pin.
  • Game Loop: Combines animatie, collision detection, scoring en input handling.

Code Bestanden

  • Animatie code: Basis animatie framework
  • Game code: Complete speelbare game

Schema

Bouw Boeiende LCD Animaties & Games met Arduino UNO

Productieproces

  1. Bouw een Handheld Gaming Console met de Arduboy Clone
  2. Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
  3. Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
  4. Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
  5. Bouw Real-Time Cellulaire Automaten op Arduino met 128x64 OLED Display
  6. Bouw een compacte FM-radio met Arduino Nano en RDA5807M
  7. Bouw een betrouwbare Arduino-weerstation met DHT-sensoren
  8. Bouw een Klassieke Arduino LCD Arcade Game met Buzzer en Joystick
  9. MKR1000 met DHT22: Realtime temperatuur‑ en vochtigheidsmonitoring naar Azure
  10. Bouw een Raspberry Pi 3 & Arduino Laptop: Stap-voor-Stap Handleiding
  11. Arduino Sensoren: Typen, Toepassingen en Real-World Projecten