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

Construye un juego LCD "Ninja Dollar" con Arduino UNO

Componentes y suministros

ComponenteCantidadNotas
Arduino UNO1
LCD estándar Adafruit 16x2 Blanco sobre Azul1
Protoboard (genérica)2Usé dos por espacio, una basta
Potenciómetro monoturno 10k ohm1
LED (genérico)2
Resistencia 1k ohm4
Pulsador 12mm SparkFun2
Zumbador RobotGeek1
Cables jumper (genéricos)1

Herramientas necesarias

Sobre este proyecto

Juego LCD simple inspirado en el juego del dinosaurio de Chrome, con más cambios. El guerrero dólar se mueve constantemente, salta obstáculos y recoge "estrellas" (puntos). Salta obstáculo = 1 punto; atrapa estrella = 5 puntos. Puede disparar y eliminar obstáculos. LEDs indican salto/disparo. Cada 10, 20, 30 puntos aumenta la velocidad. A 50 puntos ganas. Chocas = pierdes. Límites modificables en código. Incluye zumbador pasivo con sonidos para salto, disparo, victoria y derrota. Mi primer proyecto aquí, ¡espero que guste!

El video

(Ver video en proyecto original)

Conexiones

El módulo LCD tiene header macho de 16 pines en la parte inferior. Conéctalo a la protoboard como en la imagen. Pines (izquierda a derecha):

Conecta 5V Arduino a fila roja superior protoboard; GND a fila azul.

Pines restantes potenciómetro a 5V y GND.

Zumbador piezo: si 3 pines, S → pin 7, - → GND, otro → 5V. Si 2 pines, uno a GND y otro a pin 7.

Pulsadores: primero (salto) → pin 1; segundo (disparo) → pin 6. LEDs controlados solo por botones: ánodo al pin del botón conectado a Arduino, cátodo a GND.

Código

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("THE GAME");
  lcd.setCursor(2, 1);
  lcd.print("STARTS IN ");
  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) {
    // Mostrar puntuación
    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("VICTORY");
      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);

    // Obstáculos
    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("#");
        }
      }
    }

    // Puntos (estrellas)
    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("*");
        }
      }
    }

    // Salto
    if (buttonState1 == HIGH) {
      lcd.setCursor(i, 0);
      tone(buzzer, 131); delay(200); noTone(buzzer);
    } else lcd.setCursor(i, 1);
    lcd.print("$");

    // Disparo
    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();

    // Colisión con estrellas
    for (int j = 0; j < randomNum1; ++j) {
      if (i == randomNums1[j] && buttonState1 == HIGH) {
        temp1 = 1; tempI1[j] = i; pts += 5;
      }
    }

    // Colisión con obstáculos
    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;
    }
  }
}

Esquemáticos

game_aUIjA6VZxX.fzz
Construye un juego LCD  Ninja Dollar  con Arduino UNO

Proceso de manufactura

  1. Ajedrez: de sus orígenes antiguos a la fabricación moderna — una visión experta
  2. Pinball: Historia, Diseño y Fabricación de un Juego Arcade Clásico
  3. La Evolución y Artesanía del Fútbol Americano: De Juegos Ancestrales a Estándares NFL Modernos
  4. Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
  5. Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
  6. Reloj 3D RGB Arduclock – Bluetooth, LED NeoPixel y RTC
  7. Monitor de Salud Fluvial: Sistema de Calidad de Agua con Arduino
  8. Juego interactivo con joystick analógico y LEDs en Arduino
  9. Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
  10. Osciloscopio DIY con Arduino Nano (10 Hz–50 kHz) y LCD 128×64
  11. Pequeño Rover con Arduino: Construye tu Robot Autónomo Evita Obstáculos