Taula de continguts:

Arduino: Pinball Machine: 8 passos (amb imatges)
Arduino: Pinball Machine: 8 passos (amb imatges)

Vídeo: Arduino: Pinball Machine: 8 passos (amb imatges)

Vídeo: Arduino: Pinball Machine: 8 passos (amb imatges)
Vídeo: CS50 2014 - Week 7 2024, Juny
Anonim
Image
Image

Com que sempre m’han encantat les màquines de pinball i l’electrònica, vaig decidir construir la meva pròpia màquina de pinball. Vaig triar Arduino per a la programació i l'electrònica, perquè és una plataforma molt accessible, compacta i fàcil d'utilitzar.

En aquesta guia explicaré el meu procés de desenvolupament, de manera que potser un de vosaltres entusiastes pugui crear alguna cosa igual.

Pas 1: construir el cas

Construint el cas
Construint el cas

Comencem pel cas de la pinball. Vaig fer una construcció bastant senzilla. Vaig serrar una placa inferior i vaig utilitzar 4 diminuts pilars de fusta a les cantonades per connectar les peces de la paret. La mida de la teva funda és la teva pròpia elecció, he decidit fer-la una mica més petita que una màquina de pinball original, ja que no pensava afegir extres súper espectaculars per omplir l'espai. Vaig utilitzar cargols i cola per fer que la caixa fos el més estable possible. A la part posterior vaig perforar dos forats a la peça del terra per a les dues potes que donarien a la màquina de pinball la inclinació icònica. De nou, l'altura de les cames depèn de vosaltres. Com més altes feu les cames, més ràpidament rodarà la pilota (cap avall).

Pas 2: construcció del mecànic Flipper

Construcció del mecànic Flipper
Construcció del mecànic Flipper

Com que volia limitar el cost d’aquest projecte, vaig decidir fabricar aletes totalment mecàniques en lloc d’unes electròniques. Si us interessen les aletes electròniques, podeu fer servir una construcció que sigui una mica la mateixa, però amb un anomenat "solenoide" connectat (els solenoides amb prou potència per controlar les aletes eren massa cars per a mi).

Vaig començar perforant dos forats a la part inferior per obtenir el punt de pivot de les dues aletes. Vaig perforar els forats (al meu parer) una mica massa a prop l'un de l'altre, i això va provocar que el joc fos una mica massa fàcil al final. Així que tingueu cura de no col·locar les aletes massa a prop, tret que vulgueu un estil de joc fàcil.

També he perforat dos forats a les dues parets laterals paral·leles als forats de les aletes. Aquests forats s’utilitzaran per als dos botons d’aleta.

Vaig fer servir molles per tornar les aletes a la posició original i vaig fer una construcció pivotant entre les aletes i els botons per fer-les girar quan es pressionen els botons. Per evitar que les molles tiressin massa enrere les aletes, vaig col·locar dos cargols per mantenir les aletes en la seva posició original.

Pas 3: col·locació de les parets

Col·locació de les parets
Col·locació de les parets

Vaig col·locar un parell de parets per redirigir el pinball cap a les aletes. Són molt senzills de fer. Simplement foradeu 3 forats a la part inferior de la caixa i introduïu-hi tres passadors de fusta. Emboliqueu una goma al voltant dels passadors i heu acabat.

Pas 4: afegir els blocs de puntuació

Addició dels blocs de puntuació
Addició dels blocs de puntuació
Addició dels blocs de puntuació
Addició dels blocs de puntuació

Els blocs de puntuació són una de les parts més crucials de la màquina de pinball, així que assegureu-vos de fer aquesta part bé. Vaig fer tres blocs de puntuació per a la meva màquina de pinball, però de nou tot això depèn de vosaltres.

Vaig tallar un tros petit d’un pal d’escombra i vaig embolicar-hi filferro de coure. L’arduino alimentarà aquest fil de coure constantment amb 5V. Vaig soldar quatre molles de llapis al costat per millorar el contacte amb la pilota.

La manera com funcionen els blocs de puntuació és que la pilota completa un circuit que condueix a un pin d'entrada a l'Arduino. Llavors, el que vaig fer va ser cinta de paper d'alumini a la part inferior de la caixa (NO TOCAR EL COURE) i connectar el paper d'alumini fins a un passador de l'Arduino. Sempre que la pilota colpeja tant el coure com l'alumini, el circuit es completa i l'Arduino rebrà un senyal.

Vaig connectar tots els blocs de puntuació junts mitjançant el paper d'alumini, però tingueu en compte que el costat enganxós NO condueix electricitat.

Pas 5: afegir el contacte Over Game

Addició del contacte Game Over
Addició del contacte Game Over

A la part inferior de la màquina de pinball, entre les aletes, hi vaig afegir un joc sobre el contacte. Sempre que la pilota toca aquest contacte, el jugador perdrà una pilota. La construcció que vaig fer és molt semblant als blocs de puntuació. Només aquí vaig fer servir dos cargols i, de nou, un tros de paper d'alumini a la part inferior.

Pas 6: perforació dels forats del cable

Perforació dels forats del cable
Perforació dels forats del cable
Perforació dels forats del cable
Perforació dels forats del cable
Perforació dels forats del cable
Perforació dels forats del cable

Abans de començar a connectar-ho tot a l’Arduino, primer hem de practicar un parell de forats per als cables. He forat un forat a través de les dues peces de paper d'alumini, de manera que un forat al paper d'alumini a prop dels blocs de puntuació i un forat al paper d'alumini a prop del joc per contacte.

A més d'això, també he perforat un forat a la part inferior esquerra, entre les parets, per al cable que conduïa a la porta de bola addicional Servo.

També hi hauria d’haver un forat per al cable connectat a la pantalla LCD a la part inferior.

Pas 7: cablejar-ho tot

Cablejant-ho tot
Cablejant-ho tot
Cablejant-ho tot
Cablejant-ho tot

He fet aquest esquema per tenir una millor visió general d’on haurien d’anar tots els cables. Les creus són els punts on es connecten els cables. Vaig intentar soldar el màxim possible perquè tot fos una mica més estable i fiable. El cablejat trigarà una estona, però després d’haver-ho acabat ja esteu a punt.

Pas 8: càrrega del codi

Pengeu el següent codi al vostre Arduino per fer que la vostra màquina de pinball estigui activa.

// Incloeu la biblioteca del lcd

#include #include

// Inicialitzeu els pins de dades lcd

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

// Crea un servo

Servo ballGateServo;

// Creeu variables per als pins que estem utilitzant

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

// Inicialitzeu les variables de joc de la màquina de pinball

puntuació int = 0; int highscore = 500; bool highscoreReached = false; boles int = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// executeu aquest codi una vegada al primer marc

void setup () {// Estableix el pinMode per als pins que fem servir pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicialitzeu el lcd donant l'amplada i l'alçada

lcd.begin (16, 2);

// Connecteu el servo de la porta de la bola al passador adequat

ballGateServo.attach (ballGateServoPin);

// Restableix el servo de la porta a la posició inicial

ballGateServo.write (0); }

// Executeu aquest codi cada marc

void loop () {// Captura les entrades de pin int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Afegeix a la partitura si es rep l'entrada

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

// Resteu de les boles si es desencadena el pou de joc

if (gameoverState i! gameoverTriggered) {boles - = 1; gameoverTriggered = cert; gameoverTimer = gameoverTimerDuration; }

// Inicieu el temporitzador de la partida tan aviat com la pilota no toqui el contacte de la partida

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

// Parpelleja el text del joc a la pantalla LCD i restableix la puntuació i les boles

if (boles <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); retard (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Voleu tornar a provar?"); retard (250); } lcd.clear (); puntuació = 0; ballGateServo.write (0); highscoreReached = false; pilotes = 3; }

if (puntuació> puntuació més alta i! puntuació màxima assolida) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); retard (250); lcd.print ("NEW HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Mort sobtada!"); retard (250); } lcd.clear (); pilotes = 1; ballGateServo.write (120); puntuació màxima = puntuació; highscoreReached = true; }

// Actualitzeu la puntuació màxima si la puntuació actual és més alta

if (puntuació> puntuació màxima) {puntuació màxima = puntuació; }

// Estableix el cursor a la línia 0

lcd.setCursor (0, 0); // Imprimiu la puntuació actual (alta) al lcd si (puntuació <= 0) {lcd.print ("Puntuació màxima:" + Cadena (puntuació màxima) + ""); } else {lcd.print ("Puntuació:" + Cadena (puntuació) + ""); }

// Estableix el cursor a la línia 1

lcd.setCursor (0, 1);

// Imprimiu la quantitat actual de boles al lcd

lcd.print ("Boles:" + Corda (boles)); }

Recomanat: