Innholdsfortegnelse:

Arduino: Pinball Machine: 8 Steps (med bilder)
Arduino: Pinball Machine: 8 Steps (med bilder)

Video: Arduino: Pinball Machine: 8 Steps (med bilder)

Video: Arduino: Pinball Machine: 8 Steps (med bilder)
Video: Unbelievable Pinball Machine to Coffee Table Transformation | Insane Build 2024, November
Anonim
Image
Image

Siden jeg alltid har elsket både flipperspill og elektronikk, bestemte jeg meg for å bygge min egen flipperspillmaskin. Jeg valgte Arduino for programmering og elektronikk, fordi det er en lett tilgjengelig plattform som er både kompakt og enkel å bruke.

I denne guiden vil jeg forklare utviklingsprosessen min, så kanskje en av dere entusiaster kan skape noe likt.

Trinn 1: Bygg saken

Å bygge saken
Å bygge saken

La oss begynne med saken om flipperspill. Jeg har laget en ganske enkel konstruksjon. Jeg saget av en bunnplate og brukte 4 bittesmå tresøyler i hjørnene for å koble veggdelene. Størrelsen på saken din er ditt eget valg, jeg valgte å gjøre den litt mindre enn en original flipperspill da jeg ikke hadde tenkt å legge til noen super spektakulære statister for å fylle opp plassen. Jeg brukte både skruer og lim for å gjøre saken så stødig som mulig. På baksiden boret jeg to hull i gulvstykket for de to beina som vil gi flipperspillet den ikoniske vippen. Igjen er høyden på beina helt opp til deg. Jo høyere du lager beina, desto raskere vil ballen trille (nedover).

Trinn 2: Konstruere Flipper Mechanic

Konstruere Flipper Mechanic
Konstruere Flipper Mechanic

Siden jeg ønsket å begrense kostnaden for dette prosjektet, bestemte jeg meg for å lage fullt mekaniske tøfler i stedet for elektroniske. Hvis du er interessert i elektroniske svømmeføtter, kan du bruke en konstruksjon som er litt den samme, men med en såkalt 'solenoid' koblet til den (solenoider med nok strøm til å kontrollere svømmeføtter var for dyre for meg).

Jeg begynte med å bore to hull i bunnen for svingpunktet til begge svømmene. Jeg boret hullene (etter min mening) litt for nær hverandre, og dette førte til at spillet ble litt for enkelt til slutt. Så vær forsiktig så du ikke plasserer svømmeføtter for nær hverandre, med mindre du ønsker en enkel spillestil.

Jeg boret også to hull i begge sideveggene parallelt med flipperhullene. Disse hullene skal brukes til de to flipperknappene.

Jeg brukte fjærer for å trekke svømmeføttene tilbake til den opprinnelige posisjonen, og laget en svingende konstruksjon mellom svømmeføttene og knappene for å få dem til å rotere når knappene trykkes. For å stoppe fjærene fra å trekke svømmene for langt tilbake, plasserte jeg to skruer for å holde svømmeføttene i sin opprinnelige posisjon.

Trinn 3: Plassering av veggene

Plassering av veggene
Plassering av veggene

Jeg plasserte et par vegger for å omdirigere flipperspillet mot svømmeføttene. De er veldig enkle å lage. Bare bor 3 hull i bunnen av saken, og skyv inn tre trepinner. Fest et gummibånd rundt pinnene, og du er ferdig.

Trinn 4: Legge til score -blokker

Legger til Score Blocks
Legger til Score Blocks
Legger til poengblokker
Legger til poengblokker

Scoreblokkene er en av de mest avgjørende delene i flipperspillmaskinen, så sørg for at du gjør denne delen riktig. Jeg lagde tre score -blokker for flipperspillmaskinen min, men igjen er alt opp til deg.

Jeg saget av et lite stykke kosteskaft og pakket kobbertråd rundt det. Arduinoen vil drive denne kobbertråden konstant med 5V. Jeg loddet fire pennfjærer til siden for bedre kontakt med ballen.

Måten poengblokkene fungerer på, er at ballen fullfører en krets som fører til en inngangspinne på Arduino. Så det jeg gjorde var å tape aluminiumsfolie på bunnen av saken (IKKE RØRE KOPPEREN) og koble folien til en pinne på Arduino. Når ballen treffer både kobber og aluminium, er kretsen fullført og Arduino vil motta et signal.

Jeg koblet alle skårblokkene sammen ved hjelp av aluminiumsfolie, men husk at den klebrig siden IKKE leder strøm.

Trinn 5: Legge til spillet over kontakt

Legge til spillet over kontakt
Legge til spillet over kontakt

På bunnen av flipperspillet, mellom flippene, la jeg til et spill over kontakt. Når ballen treffer denne kontakten, mister spilleren en ball. Konstruksjonen jeg laget er veldig mye den samme som score -blokkene. Bare her brukte jeg to skruer, og igjen et stykke aluminiumsfolie på bunnen.

Trinn 6: Boring av kabelhullene

Boring av kabelhullene
Boring av kabelhullene
Boring av kabelhullene
Boring av kabelhullene
Boring av kabelhullene
Boring av kabelhullene

Før vi begynner å koble alt opp til Arduino, må vi først bore et par hull for kablene. Jeg boret et hull gjennom begge biter av aluminiumsfolie, så ett hull i aluminiumsfolien nær skårblokkene, og ett hull i aluminiumsfolien i nærheten av spillet over kontakt.

I tillegg til dette, boret jeg også et hull nederst til venstre, mellom veggene, for kabelen som fører til den ekstra ballporten Servo.

Det bør også være et hull for kabelen som er koblet til LCD -skjermen nederst.

Trinn 7: Koble alt opp

Kabling av alt
Kabling av alt
Kabling av alt
Kabling av alt

Jeg laget denne skjematikken for å få en bedre oversikt over hvor alle kablene skal gå. Kryssene er punktene der kabler kobles til. Jeg prøvde å lodde så mye som mulig for å gjøre alt litt mer stabilt og pålitelig. Kablingene vil ta litt tid, men etter at dette er gjort er du nesten der!

Trinn 8: Last opp koden

Last opp følgende kode til Arduino for å få flipperspillet til å leve!

// Inkluder biblioteket for lcd

#include #include

// Initialiser lcd -datapinnene

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

// Lag en servo

ServoballGateServo;

// Lag variabler for pinnene vi bruker

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

// Initialiser spillvariabler for flipperspillmaskinen

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

// kjør denne koden en gang i den første rammen

void setup () {// Angi pinMode for pinnene vi bruker pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Initialiser LCD -skjermen ved å angi bredden og høyden

lcd.begin (16, 2);

// Fest kulportens servo til den passende pinnen

ballGateServo.attach (ballGateServoPin);

// Tilbakestill gate -servoen til startposisjonen

ballGateServo.write (0); }

// Kjør denne koden hver eneste ramme

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

// Legg til poengsummen hvis innspill mottas

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

// Trekk fra ballene hvis spilloverføringsgropen utløses

if (gameoverState og! gameoverTriggered) {baller -= 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Start gameover -timeren så snart ballen ikke berører gameover -kontakten

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

// Blink gameover -teksten til LCD -skjermen og tilbakestill poengsummen og ballene

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

if (score> highscore og! highscoreReached) {

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

// Oppdater høyeste poengsum hvis gjeldende poengsum er høyere

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

// Sett markøren til linje 0

lcd.setCursor (0, 0); // Skriv ut gjeldende (høy) score til lcd if (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } annet {lcd.print ("Score:" + String (score) + ""); }

// Sett markøren til linje 1

lcd.setCursor (0, 1);

// Skriv ut gjeldende mengde baller til LCD -skjermen

lcd.print ("Balls:" + String (balls)); }

Anbefalt: