Inhoudsopgave:

Arduino: flipperkast - Ajarnpa
Arduino: flipperkast - Ajarnpa

Video: Arduino: flipperkast - Ajarnpa

Video: Arduino: flipperkast - Ajarnpa
Video: PnP Pinball #09 test wiring all solenoids to PCB | Building a DIY pinball whitewood arduino 2024, Juni-
Anonim
Image
Image

Omdat ik altijd van zowel flipperkasten als elektronica heb gehouden, besloot ik mijn eigen flipperkast te bouwen. Ik koos Arduino voor de programmering en elektronica, omdat het een zeer toegankelijk platform is dat zowel compact als gebruiksvriendelijk is.

In deze gids zal ik mijn ontwikkelproces uitleggen, zodat misschien een van jullie enthousiastelingen iets soortgelijks kan maken.

Stap 1: De zaak bouwen

De zaak bouwen
De zaak bouwen

Laten we beginnen met het geval van de flipperkast. Ik heb een vrij eenvoudige constructie gemaakt. Ik zaagde een bodemplaat af en gebruikte 4 kleine houten pilaren in de hoeken om de muurstukken met elkaar te verbinden. De grootte van je koffer is je eigen keuze, ik heb ervoor gekozen om het een beetje kleiner te maken dan een originele flipperkast omdat ik niet van plan was om super spectaculaire extra's toe te voegen om de ruimte op te vullen. Ik heb zowel schroeven als lijm gebruikt om de behuizing zo stabiel mogelijk te maken. Aan de achterkant heb ik twee gaten in het vloerstuk geboord voor de twee poten die de flipperkast de iconische kanteling zullen geven. Nogmaals, de hoogte van de benen is helemaal aan jou. Hoe hoger je de benen maakt, hoe sneller de bal (naar beneden) zal rollen.

Stap 2: De Flipper Mechanic construeren

De Flipper Mechanic bouwen
De Flipper Mechanic bouwen

Omdat ik de kosten van dit project wilde beperken, besloot ik om volledig mechanische flippers te maken in plaats van elektronische. Als je geïnteresseerd bent in elektronische flippers, kun je een constructie gebruiken die enigszins hetzelfde is, maar dan met een zogenaamde 'solenoïde' eraan (solenoïdes met voldoende vermogen om de flippers aan te sturen waren te duur voor mij).

Ik begon met het boren van twee gaten in de bodem voor het draaipunt van beide flippers. Ik heb de gaten (naar mijn mening) iets te dicht op elkaar geboord, waardoor het spel uiteindelijk iets te gemakkelijk werd. Zorg er dus voor dat je de flippers niet te dicht bij elkaar plaatst, tenzij je een makkelijke speelstijl wilt.

Ik heb ook twee gaten geboord in beide zijwanden evenwijdig aan de flippergaten. Deze gaten worden gebruikt voor de twee flipperknoppen.

Ik gebruikte veren om de flippers terug in de oorspronkelijke positie te trekken, en maakte een scharnierende constructie tussen de flippers en de knoppen om ze te laten draaien wanneer de knoppen worden ingedrukt. Om te voorkomen dat de veren de flippers te ver terugtrekken, heb ik twee schroeven geplaatst om de flippers in hun oorspronkelijke positie te houden.

Stap 3: De muren plaatsen

De muren plaatsen
De muren plaatsen

Ik heb een paar muren geplaatst om de flipperkast naar de flippers te leiden. Ze zijn heel eenvoudig te maken. Boor eenvoudig 3 gaten in de bodem van de koffer en duw er drie houten pinnen in. Wikkel een elastiekje om de pinnen en je bent klaar.

Stap 4: De scoreblokken toevoegen

De scoreblokken toevoegen
De scoreblokken toevoegen
De scoreblokken toevoegen
De scoreblokken toevoegen

De scoreblokken zijn een van de meest cruciale onderdelen van de flipperkast, dus zorg ervoor dat je dit onderdeel goed doet. Ik heb drie scoreblokken gemaakt voor mijn flipperkast, maar nogmaals, dit is allemaal aan jou.

Ik zaagde een klein stukje van een bezemsteel af en wikkelde er koperdraad omheen. De arduino zal deze koperdraad constant van stroom voorzien met 5V. Ik heb vier penveren aan de zijkant gesoldeerd voor een beter contact met de bal.

De manier waarop de scoreblokken werken, is dat de bal een circuit voltooit dat leidt naar een invoerpin op de Arduino. Dus wat ik deed, was aluminiumfolie op de bodem van de behuizing plakken (DE KOPER NIET AANRAKEN) en de folie op een pin op de Arduino aansluiten. Telkens wanneer de bal zowel het koper als het aluminium raakt, is het circuit voltooid en ontvangt de Arduino een signaal.

Ik heb alle scoreblokken met elkaar verbonden met behulp van de aluminiumfolie, maar houd er rekening mee dat de plakkerige kant GEEN elektriciteit geleidt.

Stap 5: Het Game Over-contact toevoegen

Het Game Over-contact toevoegen
Het Game Over-contact toevoegen

Onderaan de flipperkast, tussen de flippers, heb ik een game over contact toegevoegd. Telkens wanneer de bal dit contact raakt, verliest de speler een bal. De constructie die ik heb gemaakt is vrijwel hetzelfde als de scoreblokken. Alleen hier heb ik twee schroeven gebruikt, en weer een stukje aluminiumfolie aan de onderkant.

Stap 6: De kabelgaten boren

De kabelgaten boren
De kabelgaten boren
De kabelgaten boren
De kabelgaten boren
De kabelgaten boren
De kabelgaten boren

Voordat we alles gaan aansluiten op de Arduino, moeten we eerst een paar gaten voor de kabels boren. Ik boorde een gat door beide stukken aluminiumfolie, dus een gat in de aluminiumfolie in de buurt van de scoreblokken en een gat in de aluminiumfolie bij het spel over contact.

Daarnaast heb ik linksonder, tussen de muren, een gat geboord voor de kabel naar de extra kogelpoort Servo.

Er moet ook een gat zijn voor de kabel die aan de onderkant is aangesloten op het LCD-scherm.

Stap 7: Alles aansluiten

Alles aansluiten
Alles aansluiten
Alles aansluiten
Alles aansluiten

Ik heb dit schema gemaakt om een beter overzicht te hebben van waar alle kabels moeten komen. De kruisjes zijn de punten waar kabels op aansluiten. Ik heb geprobeerd zoveel mogelijk te solderen om alles een beetje stabieler en betrouwbaarder te maken. De bedrading zal even duren, maar daarna ben je er bijna!

Stap 8: De code uploaden

Upload de volgende code naar je Arduino om je flipperkast tot leven te laten komen!

// Voeg de bibliotheek voor de lcd toe

#include #include

// Initialiseer de lcd-gegevenspinnen

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

// Maak een servo

ServobalGateServo;

// Maak variabelen voor de pinnen die we gebruiken

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

// Initialiseer gameplay-variabelen voor de flipperkast

int-score = 0; int hoge score = 500; bool highscoreReached = false; int ballen = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// voer deze code één keer uit bij het eerste frame

void setup () {// Stel de pinMode in voor de pinnen die we gebruiken pinMode (gameoverPin, INPUT); pinMode(scorePin, INPUT);

// Initialiseer het lcd-scherm door de breedte en hoogte op te geven

lcd.begin (16, 2);

// Bevestig de balpoortservo aan de juiste pin

ballGateServo.attach (ballGateServoPin);

// Reset de poortservo naar de startpositie

ballGateServo.write(0); }

// Voer deze code elk frame uit

void loop () {// Leg de pin-ingangen vast int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Toevoegen aan de score als invoer is ontvangen

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

// Trek af van de ballen als de gameover pit wordt geactiveerd

if (gameoverState en !gameoverTriggered) { balls -= 1; gameoverTriggered = waar; gameoverTimer = gameoverTimerDuur; }

// Start de gameover-timer zodra de bal het gameover-contact niet raakt

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

// Knipper de gameover-tekst naar het lcd-scherm en reset de score en ballen

if (ballen <= 0) { lcd.setCursor (0, 0); voor (int i = 5; i>= 1; i--) { lcd.clear(); vertraging (250); lcd.print("SPEL OVER"); lcd.setCursor(0, 1); lcd.print("Probeer het opnieuw?"); vertraging (250); } lcd.clear(); score = 0; ballGateServo.write(0); highscoreReached = false; ballen = 3; }

if (score > highscore en !highscoreReached) {

lcd.setCursor(0, 0); voor (int i = 5; i > = 1; i--) { lcd.clear(); vertraging (250); lcd.print("NIEUWE HIGHSCORE"); lcd.setCursor(0, 1); lcd.print("Plotselinge dood!"); vertraging (250); } lcd.clear(); ballen = 1; ballGateServo.write(120); hoge score = score; highscoreReached = waar; }

// Werk de highscore bij als de huidige score hoger is

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

// Zet de cursor op regel 0

lcd.setCursor(0, 0); // Print de huidige (hoge) score naar het lcd if (score <= 0) { lcd.print("Highscore: " + String (highscore) + " "); } else { lcd.print("Score: " + String(score) + " "); }

// Zet de cursor op regel 1

lcd.setCursor(0, 1);

// Print het huidige aantal ballen naar het lcd

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

Aanbevolen: