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 een Ninja Dollar LCD Spel met Arduino UNO

Onderdelen en Benodigdheden

Onderdeel Aantal Opmerkingen
Arduino UNO 1
Adafruit Standaard LCD - 16x2 Wit op Blauw 1
Breadboard (generiek) 2 Ik gebruikte er twee voor meer ruimte, je kunt er ook één gebruiken.
Enkelvoudige draaipotentiometer - 10k ohm 1
LED (generiek) 2
Weerstand 1k ohm 4
SparkFun Drukknop 12mm 2
RobotGeek Buzzer 1
Draadjes (generiek) 1

Benodigde Tools en Machines

Solderbout (generiek) Voor het solderen van het LCD

Over dit Project

Dit is een eenvoudig LCD-spel. Mijn inspiratie was het Dinosaurus-spel van Google Chrome, maar ik heb een paar extra's toegevoegd. De dollar-krijger beweegt constant en kan springen om obstakels te ontwijken en "ster"-punten te verzamelen. Als hij over een obstakel springt, krijgt hij één punt; vangt hij de ster, dan krijgt hij vijf punten. Hij kan ook schieten en obstakels voor hem wegnemen. Er zijn LED's die aangeven of hij springt of schiet. Bij 10, 20 of 30 punten gaat hij sneller bewegen. Bij 50 punten win je. Raak je een obstakel, dan verlies je. Deze grenzen kun je in de code eenvoudig aanpassen. Ik heb ook een passieve buzzer toegevoegd die geluid maakt bij springen/schieten en een speciale melodie bij winnen/verliezen. Dit is mijn eerste project hier en ik hoop dat jullie het leuk vinden. Geef me jullie reacties en reviews!

De Video

[Video niet beschikbaar in deze tekstversie]

Aansluitingen

De LCD-module (Liquid Crystal Display) heeft een 16-pins mannelijke header aan de onderkant. Stop deze in het breadboard zoals in de afbeelding getoond. Alle elektronische signalen die de LCD voeden en besturen lopen door deze header.

De pinnen zijn (van links naar rechts):

  • GND - voeding massa
  • VCC - positieve voeding
  • V0 - contrast instelling
  • RS - register selectie
  • R/W - lezen/schrijven selectie
  • E - enable signaal
  • D0-D3 - databits 0-3 (niet gebruikt hier)
  • D4 - databit 4
  • D5 - databit 5
  • D6 - databit 6
  • D7 - databit 7
  • A - achtergrondverlichting LED positief
  • K - achtergrondverlichting LED negatief

Gebruik een draadje om de 5V van de Arduino met de rode rij bovenop het breadboard te verbinden.

Gebruik een draadje om de GND van de Arduino met de blauwe rij bovenop het breadboard te verbinden.

  • VSS pin naar massa
  • VDD pin naar 5V
  • V0 pin naar potentiometer uitgang
  • RS pin naar Arduino pin 12
  • RW pin naar massa
  • E pin naar Arduino pin 11
  • D4 naar Arduino pin 5
  • D5 naar Arduino pin 4
  • D6 naar Arduino pin 3
  • D7 naar Arduino pin 2
  • A pin naar 5V
  • K pin naar GND

Sluit de overige potentiometerpinnen aan op 5V en GND.

Als je een 3-pins piezo buzzer hebt: verbind de S-pin met Arduino pin 7, de '-' pin met GND en de overige pin met 5V. Bij een 2-pins piezo buzzer: één pin naar GND, de andere naar Arduino pin 7.

Sluit de drukknoppen aan volgens het schema. De eerste knop (springen) zit op Arduino pin 1, de tweede (schieten) op pin 6. De LEDs worden alleen door de knoppen bestuurd, niet door de Arduino. De anode zit op de knoppin die naar de Arduino gaat, de kathode naar massa.

Code

dollar_warrior (Arduino)

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int buttonPin1 = 1;
const int buttonPin2 = 6;
const int buzzer = 7;
unsigned long pts = 0;
bool buttonState1 = 0;
bool buttonState2 = 0;
int randomNums[6];
int randomNum = 0;
int randomNums1[3];
int randomNum1 = 0;
unsigned int myDelay = 500;
bool temp = 0;
int tempI[16];
bool temp1 = 0;
int tempI1[3];
int button2IsPressed = 0;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buzzer, OUTPUT);
  lcd.setCursor(4, 0);
  lcd.print("HET SPEL");
  lcd.setCursor(2, 1);
  lcd.print("START OVER");
  lcd.print("5");
  delay(1000);
  lcd.setCursor(12, 1); lcd.print("4"); delay(1000);
  lcd.setCursor(12, 1); lcd.print("3"); delay(1000);
  lcd.setCursor(12, 1); lcd.print("2"); delay(1000);
  lcd.setCursor(12, 1); lcd.print("1"); delay(1000);
  lcd.clear();
}

void loop() {
here:
  randomNum = random(5);
  for (int i = 0; i < randomNum; ++i) randomNums[i] = random(16);
  randomNum1 = random(3);
  for (int i = 0; i < randomNum1; ++i) randomNums1[i] = random(16);
  
  temp = 0;
  for (int j = 0; j < 3; ++j) tempI1[j] = 0;
  button2IsPressed = 0;
  
  for (int i = 0; i < 16; ++i) {
    // Punten tonen
    if (pts > 9 && pts < 20) { lcd.setCursor(14, 0); myDelay = 400; }
    else if (pts > 19 && pts < 30) { lcd.setCursor(14, 0); myDelay = 300; }
    else if (pts > 29 && pts < 50) { myDelay = 200; lcd.setCursor(14, 0); }
    else if (pts >= 50) {
      pts = 0; myDelay = 500; lcd.clear();
      lcd.setCursor(5, 0); lcd.print("OVERWINNING");
      tone(buzzer, 262); delay(200);
      tone(buzzer, 330); delay(200);
      tone(buzzer, 392); delay(100);
      tone(buzzer, 330); delay(100);
      tone(buzzer, 392); delay(100);
      tone(buzzer, 523); delay(200);
      noTone(buzzer); delay(3000); lcd.clear(); goto here;
    } else lcd.setCursor(15, 0);
    lcd.print(pts);
    
    buttonState1 = digitalRead(buttonPin1);
    buttonState2 = digitalRead(buttonPin2);
    
    // Obstakels plaatsen
    if (!temp) {
      for (int j = 0; j < randomNum; ++j) {
        lcd.setCursor(randomNums[j], 1); lcd.print("#");
      }
    } else {
      for (int j = 0; j < randomNum; ++j) {
        if (tempI[0] > randomNums[j]) {
          lcd.setCursor(randomNums[j], 1); lcd.print("#");
        }
      }
    }
    
    // Sterren (punten) plaatsen
    if (!temp1) {
      for (int j = 0; j < randomNum1; ++j) {
        lcd.setCursor(randomNums1[j], 0); lcd.print("*");
      }
    } else {
      for (int j = 0; j < randomNum1; ++j) {
        if (randomNums1[j] != tempI1[j]) {
          lcd.setCursor(randomNums1[j], 0); lcd.print("*");
        }
      }
    }
    
    // Springen
    if (buttonState1 == HIGH) {
      lcd.setCursor(i, 0);
      tone(buzzer, 131); delay(200); noTone(buzzer);
    } else {
      lcd.setCursor(i, 1);
    }
    lcd.print("$");
    
    // Schieten
    if (buttonState2 == HIGH) {
      tone(buzzer, 175); delay(100); noTone(buzzer);
      temp = 1;
      if (buttonState1 == LOW) tempI[button2IsPressed] = i;
      ++button2IsPressed;
      for (int k = i + 1; k < 16; ++k) {
        if (buttonState1 == LOW) lcd.setCursor(k, 1);
        else lcd.setCursor(k, 0);
        lcd.print("~"); delay(5);
        if (buttonState1 == LOW) lcd.setCursor(k - 1, 1);
        else lcd.setCursor(k - 1, 0);
        lcd.print(" "); delay(5);
      }
    }
    
    delay(myDelay);
    lcd.clear();
    
    // Ster vangen?
    for (int j = 0; j < randomNum1; ++j) {
      if (i == randomNums1[j] && buttonState1 == HIGH) {
        temp1 = 1; tempI1[j] = i; pts += 5;
      }
    }
    
    // Obstakel botsing?
    for (int j = 0; j < randomNum; ++j) {
      if (i == randomNums[j] && buttonState1 == LOW && temp == 0) {
        pts = 0; myDelay = 500; lcd.clear();
        lcd.setCursor(6, 0); lcd.print("GAME");
        lcd.setCursor(6, 1); lcd.print("OVER");
        tone(buzzer, 349); delay(200);
        tone(buzzer, 277); delay(200);
        tone(buzzer, 220); delay(100);
        tone(buzzer, 277); delay(100);
        tone(buzzer, 220); delay(200);
        noTone(buzzer); delay(3000); lcd.clear(); goto here;
      } else if (i == randomNums[j] && buttonState1 == HIGH) {
        ++pts; // obstakel overstegen = punt
      }
    }
  }
}

Schema's

Fritzing bestand

Bouw een Ninja Dollar LCD Spel met Arduino UNO

Productieproces

  1. Schaken: van oorspronkelijke oorsprong tot moderne productie – een expert overzicht
  2. Pinball: Geschiedenis, Ontwerp en Productie van een Klassiek Arcade Spel
  3. De Evolutie en Vakmanschap van Amerikaans Football: Van Oude Spelen tot Moderne NFL Standaarden
  4. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  5. Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
  6. 3D RGB Arduclock – Bluetooth LED Tijdstuk met Real-Time Clock
  7. Riviergezondheidsmonitor: Arduino-gebaseerd Waterkwaliteitssysteem
  8. Interactieve Joystick Game met Arduino en LED Feedback
  9. Find Me: Slimme Item Locator met Arduino en Bluetooth
  10. Zelfbouw Arduino Nano Oscilloscoop (10 Hz – 50 kHz) met 128×64 LCD
  11. Arduino-aangedreven mini-rover: Bouw je eigen autonome robot