Indholdsfortegnelse:

Arduino: Pinball Machine: 8 trin (med billeder)
Arduino: Pinball Machine: 8 trin (med billeder)

Video: Arduino: Pinball Machine: 8 trin (med billeder)

Video: Arduino: Pinball Machine: 8 trin (med billeder)
Video: Mini Virtual Pinball Table Build: Episode 9 2024, Juni
Anonim
Image
Image

Da jeg altid har elsket både flipperspillemaskiner og elektronik, besluttede jeg at bygge min egen flipperspillemaskine. Jeg valgte Arduino til programmering og elektronik, fordi det er en meget tilgængelig platform, der er både kompakt og let at bruge.

I denne guide vil jeg forklare min udviklingsproces, så måske en af jer entusiaster kunne skabe noget ens.

Trin 1: Opbygning af sagen

Bygger sagen
Bygger sagen

Lad os starte med kassen med flipperspillet. Jeg lavede en ganske enkel konstruktion. Jeg savede en bundplade af og brugte 4 små træpiller i hjørnerne til at forbinde vægstykkerne. Størrelsen på din sag er dit eget valg, jeg valgte at gøre den en smule mindre end en original flipperspiller, da jeg ikke havde planer om at tilføje nogen super spektakulære statister til at fylde rummet op. Jeg brugte både skruer og lim til at gøre sagen så stabil som muligt. På bagsiden borede jeg to huller i gulvstykket til de to ben, der vil give flipperspillet den ikoniske tilt. Igen er højden på benene helt op til dig. Jo højere du laver benene, jo hurtigere ruller bolden (nedad).

Trin 2: Konstruktion af Flipper Mechanic

Konstruktion af Flipper Mechanic
Konstruktion af Flipper Mechanic

Da jeg ville begrænse omkostningerne ved dette projekt, besluttede jeg mig for at lave fuldt mekaniske svømmefødder i stedet for elektroniske. Hvis du er interesseret i elektroniske svømmefødder, kan du bruge en konstruktion, der er nogenlunde den samme, men med en såkaldt 'solenoid' forbundet til den (solenoider med nok strøm til at styre flipperne var for dyre for mig).

Jeg startede med at bore to huller i bunden til begge svinges drejepunkt. Jeg borede hullerne (efter min mening) lidt for tæt på hinanden, og det fik spillet til at blive lidt for let til sidst. Så pas på ikke at placere flipperne for tæt på hinanden, medmindre du ønsker en let spillestil.

Jeg borede også to huller i begge sidevægge parallelt med flipperhullerne. Disse huller skal bruges til de to flipper knapper.

Jeg brugte fjedre til at trække svømmefødderne tilbage til den oprindelige position og lavede en drejelig konstruktion mellem flipperne og knapperne for at få dem til at rotere, når der trykkes på knapperne. For at forhindre fjedrene i at trække svømmefødderne for langt tilbage, placerede jeg to skruer for at holde flipperne i deres oprindelige position.

Trin 3: Placering af væggene

Placering af væggene
Placering af væggene

Jeg placerede et par vægge for at omdirigere pinballen mod flipperne. De er meget enkle at lave. Bare bor 3 huller i bunden af kassen, og skub tre trænåle ind. Sæt et gummibånd omkring stifterne, og du er færdig.

Trin 4: Tilføjelse af scoreblokke

Tilføjelse af Score Blocks
Tilføjelse af Score Blocks
Tilføjelse af Score Blocks
Tilføjelse af Score Blocks

Scoreblokkene er en af de mest afgørende dele af flipperspillemaskinen, så sørg for at gøre denne del rigtigt. Jeg lavede tre scoreblokke til min flipperspiller, men igen er det helt op til dig.

Jeg savede et lille stykke kosteskaft af og viklede kobbertråd rundt om det. Arduinoen vil konstant drive denne kobbertråd med 5V. Jeg lodde fire penfjedre til siden for bedre kontakt med bolden.

Den måde, hvorpå score -blokke fungerer, er, at bolden fuldender et kredsløb, der fører til en input -pin på Arduino. Så det jeg gjorde var at tape aluminiumsfolie i bunden af kabinettet (IKKE RØRE KOPPEREN) og trække folien op til en nål på Arduino. Når bolden rammer både kobber og aluminium, er kredsløbet færdigt, og Arduino modtager et signal.

Jeg tilsluttede alle scoreblokke ved hjælp af aluminiumsfolie, men husk på, at den klæbrige side IKKE leder elektricitet.

Trin 5: Tilføjelse af spillet over kontakt

Tilføjelse af spillet over kontakt
Tilføjelse af spillet over kontakt

I bunden af flipperspillet, mellem flipperne, tilføjede jeg et spil over kontakt. Når bolden rammer denne kontakt, mister spilleren en bold. Konstruktionen, jeg lavede, er meget den samme som scoreblokke. Kun her brugte jeg to skruer, og igen et stykke aluminiumsfolie i bunden.

Trin 6: Borning af kabelhullerne

Borning af kabelhullerne
Borning af kabelhullerne
Borning af kabelhullerne
Borning af kabelhullerne
Borning af kabelhullerne
Borning af kabelhullerne

Inden vi begynder at koble alt op til Arduino, skal vi først bore et par huller til kablerne. Jeg borede et hul gennem begge stykker aluminiumsfolie, så et hul i aluminiumsfolien tæt på scoreblokke og et hul i aluminiumsfolien nær spillet over kontakt.

Udover dette borede jeg også et hul nederst til venstre, mellem væggene, til kablet, der fører til den ekstra kugleport Servo.

Der bør også være et hul til kablet tilsluttet LCD'et i bunden.

Trin 7: Tilslut alt sammen

Tilslutning af alt
Tilslutning af alt
Tilslutning af alt
Tilslutning af alt

Jeg lavede denne skematiske for at få et bedre overblik over, hvor alle kabler skal gå. Korsene er de punkter, hvor kabler forbinder. Jeg forsøgte at lodde så meget som muligt for at gøre alt lidt mere stabilt og pålideligt. Ledningerne vil tage noget tid, men når dette er gjort, er du næsten der!

Trin 8: Upload af koden

Upload følgende kode til din Arduino for at få din flipperspiller til at leve!

// Inkluder biblioteket til lcd'en

#include #include

// Initialiser lcd -datapinnene

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

// Opret en servo

ServoboldGateServo;

// Opret variabler til de ben, vi bruger

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

// Initialiser gameplay -variabler for flipperspillet

int score = 0; int highscore = 500; bool highscoreReached = false; int bolde = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// kør denne kode én gang i den første ramme

void setup () {// Indstil pinMode for de ben, vi bruger pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Initialiser lcd'en ved at angive bredden og højden

lcd.begin (16, 2);

// Fastgør kugleportens servo til den passende pin

ballGateServo.attach (ballGateServoPin);

// Nulstil gate -servoen til startpositionen

ballGateServo.write (0); }

// Kør denne kode hver enkelt ramme

void loop () {// Capture the pin input in gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Tilføj til partituret, hvis input modtages

if (scoreState) {tone (speakerPin, 1000); score += 10; } ellers {noTone (4); }

// Træk fra boldene, hvis gameover -pit udløses

hvis (gameoverState og! gameoverTriggered) {bolde -= 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Start gameover -timeren, så snart bolden ikke rører gameover -kontakten

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

// Blink gameover -teksten til lcd'en og nulstil score og bolde

hvis (bolde <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); forsinkelse (250); lcd.print ("SPIL OVER"); lcd.setCursor (0, 1); lcd.print ("Prøv igen?"); forsinkelse (250); } lcd.clear (); score = 0; ballGateServo.write (0); highscoreReached = false; bolde = 3; }

hvis (score> highscore og! highscoreReached) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); forsinkelse (250); lcd.print ("NY HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Pludselig død!"); forsinkelse (250); } lcd.clear (); bolde = 1; ballGateServo.write (120); highscore = score; highscoreReached = true; }

// Opdater highscore, hvis den aktuelle score er højere

hvis (score> highscore) {highscore = score; }

// Indstil markøren til linje 0

lcd.setCursor (0, 0); // Udskriv den aktuelle (høje) score til lcd hvis (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } ellers {lcd.print ("Score:" + String (score) + ""); }

// Indstil markøren til linje 1

lcd.setCursor (0, 1);

// Udskriv den aktuelle mængde bolde til lcd'en

lcd.print ("bolde:" + streng (bolde)); }

Anbefalede: