Tabla de contenido:

Arduino: Pinball Machine: 8 pasos (con imágenes)
Arduino: Pinball Machine: 8 pasos (con imágenes)

Video: Arduino: Pinball Machine: 8 pasos (con imágenes)

Video: Arduino: Pinball Machine: 8 pasos (con imágenes)
Video: Construcción de Ascensor Casero 2024, Junio
Anonim
Image
Image

Como siempre me han gustado las máquinas de pinball y la electrónica, decidí construir mi propia máquina de pinball. Elegí Arduino para la programación y la electrónica, porque es una plataforma muy accesible, compacta y fácil de usar.

En esta guía explicaré mi proceso de desarrollo, por lo que quizás uno de ustedes, entusiasta, pueda crear algo similar.

Paso 1: construcción del caso

Construyendo el caso
Construyendo el caso

Comencemos con el caso de la máquina de pinball. Hice una construcción bastante simple. Corté una placa inferior y usé 4 pilares de madera diminutos en las esquinas para conectar las piezas de la pared. El tamaño de su estuche es su propia elección, elegí hacerlo un poco más pequeño que una máquina de pinball original, ya que no estaba planeando agregar extras súper espectaculares para llenar el espacio. Usé tornillos y pegamento para que la carcasa fuera lo más estable posible. En la parte posterior, hice dos agujeros en la pieza del piso para las dos patas que le darán a la máquina de pinball la inclinación icónica. Una vez más, la altura de las piernas depende de ti. Cuanto más altas sean las piernas, más rápido rodará la pelota (hacia abajo).

Paso 2: construcción del mecanismo de flipper

Construyendo el Mecánico Flipper
Construyendo el Mecánico Flipper

Como quería limitar el costo de este proyecto, decidí fabricar aletas totalmente mecánicas en lugar de electrónicas. Si está interesado en las aletas electrónicas, puede usar una construcción que sea algo similar, pero con un llamado 'solenoide' conectado (los solenoides con suficiente potencia para controlar las aletas eran demasiado costosos para mí).

Comencé perforando dos agujeros en la parte inferior para el punto de pivote de ambas aletas. Perforé los agujeros (en mi opinión) demasiado cerca el uno del otro, y esto hizo que el juego fuera demasiado fácil al final. Así que ten cuidado de no colocar las aletas demasiado cerca unas de otras, a menos que quieras un estilo de juego sencillo.

También perforé dos agujeros en ambas paredes laterales paralelos a los agujeros de la aleta. Estos orificios se utilizarán para los dos botones de las aletas.

Usé resortes para tirar de las aletas a la posición original e hice una construcción pivotante entre las aletas y los botones para hacerlos girar cuando se presionan los botones. Para evitar que los resortes tiren de las aletas demasiado hacia atrás, coloqué dos tornillos para mantener las aletas en su posición original.

Paso 3: Colocación de las paredes

Colocando las paredes
Colocando las paredes

Coloqué un par de paredes para redirigir el pinball hacia las aletas. Son muy simples de hacer. Simplemente taladre 3 agujeros en la parte inferior de la caja y presione tres pasadores de madera. Envuelva una banda elástica alrededor de los alfileres y listo.

Paso 4: Agregar los bloques de puntuación

Adición de bloques de puntuación
Adición de bloques de puntuación
Adición de bloques de puntuación
Adición de bloques de puntuación

Los bloques de puntuación son una de las partes más importantes de la máquina de pinball, así que asegúrese de hacer esta parte correctamente. Hice tres bloques de puntuación para mi máquina de pinball, pero de nuevo, todo depende de ti.

Corté un pequeño trozo de palo de escoba y lo envolví con alambre de cobre. El arduino alimentará este cable de cobre constantemente con 5V. Soldé cuatro resortes de bolígrafo a un lado para un mejor contacto con la bola.

La forma en que funcionan los bloques de puntuación es que la bola completa un circuito que conduce a un pin de entrada en el Arduino. Entonces, lo que hice fue pegar papel de aluminio en la parte inferior de la caja (SIN TOCAR EL COBRE) y conectar el papel de aluminio a un pin en el Arduino. Siempre que la bola golpea tanto el cobre como el aluminio, el circuito está completo y el Arduino recibirá una señal.

Conecté todos los bloques de puntuación con papel de aluminio, pero tenga en cuenta que el lado adhesivo NO conduce la electricidad.

Paso 5: Agregar el contacto de Game Over

Agregar el contacto de Game Over
Agregar el contacto de Game Over

En la parte inferior de la máquina de pinball, entre las aletas, agregué un juego sobre el contacto. Siempre que la pelota golpee este contacto, el jugador perderá una pelota. La construcción que hice es muy parecida a la de los bloques de puntuación. Solo aquí usé dos tornillos, y nuevamente un trozo de papel de aluminio en la parte inferior.

Paso 6: Perforación de los orificios para cables

Perforación de los orificios para cables
Perforación de los orificios para cables
Perforación de los orificios para cables
Perforación de los orificios para cables
Perforación de los orificios para cables
Perforación de los orificios para cables

Antes de comenzar a conectar todo al Arduino, primero debemos perforar un par de orificios para los cables. Hice un agujero a través de ambas piezas de papel de aluminio, de modo que un agujero en el papel de aluminio cerca de los bloques de puntuación y un agujero en el papel de aluminio cerca del juego sobre el contacto.

Además de esto, también perforé un agujero en la parte inferior izquierda, entre las paredes, para el cable que conduce al Servo de la puerta de bola adicional.

También debe haber un orificio para el cable conectado a la pantalla LCD en la parte inferior.

Paso 7: Cableado de todo

Conectando todo
Conectando todo
Conectando todo
Conectando todo

Hice este esquema para tener una mejor visión general de dónde deberían ir todos los cables. Las cruces son los puntos donde se conectan los cables. Intenté soldar todo lo posible para que todo fuera un poco más estable y confiable. El cableado llevará algún tiempo, pero una vez hecho esto, ¡ya casi está!

Paso 8: carga del código

¡Sube el siguiente código a tu Arduino para que tu máquina de pinball cobre vida!

// Incluir la biblioteca para el lcd

#incluir #incluir

// Inicializar los pines de datos lcd

LiquidCrystal lcd (7, 8, 9, 10, 11, 12);

// Crea un servo

Servo ballGateServo;

// Crea variables para los pines que estamos usando

int gameoverPin = 6; int scorePin = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Inicializar variables de juego para la máquina de pinball

puntuación int = 0; int highscore = 500; bool highscoreReached = falso; int bolas = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = falso;

// ejecuta este código una vez en el primer fotograma

void setup () {// Establece el pinMode para los pines que estamos usando pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicializa el lcd dando el ancho y el alto

lcd. comienzo (16, 2);

// Conecte el servo de la puerta de la bola al pin apropiado

ballGateServo.attach (ballGateServoPin);

// Restablecer el servo de la puerta a la posición inicial

ballGateServo.write (0); }

// Ejecuta este código en cada fotograma

void loop () {// Captura las entradas de los pines int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Agregar a la puntuación si se recibe una entrada

if (scoreState) {tono (speakerPin, 1000); puntuación + = 10; } else {noTone (4); }

// Restar de las bolas si se activa el hoyo de fin de juego

if (gameoverState y! gameoverTriggered) {bolas - = 1; gameoverTriggered = verdadero; gameoverTimer = gameoverTimerDuration; }

// Iniciar el temporizador de fin de juego tan pronto como la pelota no toque el contacto de fin de juego

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer - = 1; } else {gameoverTriggered = false; }}

// Haga parpadear el texto del final del juego en la pantalla LCD y restablezca la puntuación y las bolas

if (bolas <= 0) {lcd.setCursor (0, 0); para (int i = 5; i> = 1; i--) {lcd.clear (); retraso (250); lcd.print ("JUEGO TERMINADO"); lcd.setCursor (0, 1); lcd.print ("¿Intentar de nuevo?"); retraso (250); } lcd.clear (); puntuación = 0; ballGateServo.write (0); highscoreReached = falso; bolas = 3; }

if (score> highscore y! highscoreReached) {

lcd.setCursor (0, 0); para (int i = 5; i> = 1; i--) {lcd.clear (); retraso (250); lcd.print ("NUEVA PUNTUACIÓN MÁXIMA"); lcd.setCursor (0, 1); lcd.print ("¡Muerte repentina!"); retraso (250); } lcd.clear (); bolas = 1; ballGateServo.write (120); highscore = puntuación; highscoreReached = true; }

// Actualiza la puntuación más alta si la puntuación actual es más alta

if (puntuación> puntuación más alta) {puntuación más alta = puntuación; }

// Coloca el cursor en la línea 0

lcd.setCursor (0, 0); // Imprime la puntuación actual (alta) en la pantalla lcd if (puntuación <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Puntuación:" + Cadena (puntuación) + ""); }

// Coloca el cursor en la línea 1

lcd.setCursor (0, 1);

// Imprime la cantidad actual de bolas en la pantalla lcd

lcd.print ("Bolas:" + Cuerda (bolas)); }

Recomendado: