Inhaltsverzeichnis:

Arduino: Flipperautomat - Gunook
Arduino: Flipperautomat - Gunook

Video: Arduino: Flipperautomat - Gunook

Video: Arduino: Flipperautomat - Gunook
Video: Pinball Diy with Arduino 2024, November
Anonim
Image
Image

Da ich sowohl Flipperautomaten als auch Elektronik immer geliebt habe, beschloss ich, meinen eigenen Flipperautomaten zu bauen. Ich habe mich für Arduino für die Programmierung und Elektronik entschieden, weil es eine leicht zugängliche Plattform ist, die sowohl kompakt als auch einfach zu bedienen ist.

In diesem Leitfaden werde ich meinen Entwicklungsprozess erklären, damit vielleicht einer von euch Enthusiasten etwas Ähnliches erstellen könnte.

Schritt 1: Aufbau des Gehäuses

Aufbau des Gehäuses
Aufbau des Gehäuses

Beginnen wir mit dem Fall des Flipperautomaten. Ich habe eine ziemlich einfache Konstruktion gemacht. Ich sägte eine Bodenplatte ab und benutzte 4 kleine Holzsäulen in den Ecken, um die Wandstücke zu verbinden. Die Größe Ihres Gehäuses ist Ihre eigene Wahl, ich habe mich entschieden, es etwas kleiner als einen Original-Flipper zu machen, da ich nicht vorhatte, irgendwelche super spektakulären Extras hinzuzufügen, um den Platz zu füllen. Ich benutzte beide Schrauben und Kleber, um das Gehäuse so stabil wie möglich zu machen. Auf der Rückseite habe ich zwei Löcher in das Bodenstück für die beiden Beine gebohrt, die dem Flipper die ikonische Neigung verleihen. Auch hier liegt die Höhe der Beine ganz bei Ihnen. Je größer Sie die Beine machen, desto schneller rollt der Ball (nach unten).

Schritt 2: Konstruieren der Flippermechanik

Aufbau der Flippermechanik
Aufbau der Flippermechanik

Da ich die Kosten für dieses Projekt begrenzen wollte, entschied ich mich, statt elektronischer Flossen vollmechanische Flossen herzustellen. Wenn Sie sich für elektronische Flossen interessieren, können Sie eine ähnliche Konstruktion verwenden, jedoch mit einem daran angeschlossenen sogenannten 'Solenoid' (Solenoide mit genügend Leistung zur Steuerung der Flossen waren mir zu teuer).

Ich begann mit dem Bohren von zwei Löchern in den Boden für den Drehpunkt beider Flossen. Ich habe die Löcher (meiner Meinung nach) etwas zu nah beieinander gebohrt, wodurch das Spiel am Ende etwas zu leicht wurde. Achten Sie also darauf, die Flossen nicht zu nahe beieinander zu platzieren, es sei denn, Sie möchten einen einfachen Spielstil.

Ich habe auch zwei Löcher in die beiden Seitenwände parallel zu den Flipperlöchern gebohrt. Diese Löcher sind für die beiden Flipperknöpfe zu verwenden.

Ich habe Federn verwendet, um die Flossen in die ursprüngliche Position zurückzuziehen, und eine schwenkbare Konstruktion zwischen den Flossen und den Knöpfen gemacht, damit sie sich drehen, wenn die Knöpfe gedrückt werden. Um zu verhindern, dass die Federn die Flossen zu weit zurückziehen, habe ich zwei Schrauben angebracht, um die Flossen in ihrer ursprünglichen Position zu halten.

Schritt 3: Platzieren der Wände

Platzieren der Wände
Platzieren der Wände

Ich habe ein paar Wände platziert, um den Flipper in Richtung der Flossen umzuleiten. Sie sind sehr einfach herzustellen. Bohren Sie einfach 3 Löcher in den Boden des Gehäuses und drücken Sie drei Holzstifte hinein. Wickeln Sie ein Gummiband um die Stifte und fertig.

Schritt 4: Hinzufügen der Score-Blöcke

Hinzufügen der Score-Blöcke
Hinzufügen der Score-Blöcke
Hinzufügen der Score-Blöcke
Hinzufügen der Score-Blöcke

Die Punkteblöcke sind einer der wichtigsten Teile des Flipperautomaten, also stellen Sie sicher, dass Sie diesen Teil richtig machen. Ich habe drei Punkteblöcke für meinen Flipper gemacht, aber auch das liegt ganz bei Ihnen.

Ich sägte ein kleines Stück von einem Besenstiel ab und wickelte Kupferdraht darum. Das Arduino versorgt diesen Kupferdraht ständig mit 5V. Für einen besseren Kontakt mit der Kugel habe ich vier Stiftfedern seitlich angelötet.

Die Art und Weise, wie die Punkteblöcke funktionieren, besteht darin, dass der Ball einen Stromkreis vervollständigt, der zu einem Eingangspin auf dem Arduino führt. Also, was ich tat, war, Aluminiumfolie auf die Unterseite des Gehäuses zu kleben (NICHT DAS KUPFER ZU BERÜHREN) und die Folie mit einem Stift auf dem Arduino zu verdrahten. Immer wenn der Ball sowohl das Kupfer als auch das Aluminium trifft, ist der Stromkreis geschlossen und der Arduino erhält ein Signal.

Ich habe alle Kerbblöcke mit der Aluminiumfolie verbunden, aber bedenke, dass die klebrige Seite KEINEN Strom leitet.

Schritt 5: Hinzufügen des Game-Over-Kontakts

Hinzufügen des Game-Over-Kontakts
Hinzufügen des Game-Over-Kontakts

Am unteren Rand des Flipperautomaten, zwischen den Flippern, habe ich ein Spiel über Kontakt hinzugefügt. Immer wenn der Ball diesen Kontakt trifft, verliert der Spieler einen Ball. Die Konstruktion, die ich gemacht habe, ist sehr ähnlich wie bei den Kerbblöcken. Nur hier habe ich zwei Schrauben verwendet, und wieder ein Stück Alufolie auf der Unterseite.

Schritt 6: Bohren der Kabellöcher

Bohren der Kabellöcher
Bohren der Kabellöcher
Bohren der Kabellöcher
Bohren der Kabellöcher
Bohren der Kabellöcher
Bohren der Kabellöcher

Bevor wir alles mit dem Arduino verkabeln, müssen wir zuerst ein paar Löcher für die Kabel bohren. Ich bohrte ein Loch durch beide Stücke Alufolie, also ein Loch in die Alufolie in der Nähe der Punkteblöcke und ein Loch in die Alufolie in der Nähe des Spielüberkontakts.

Außerdem habe ich unten links, zwischen den Wänden, ein Loch gebohrt, für das Kabel, das zum zusätzlichen Kugeltor-Servo führt.

Unten sollte auch ein Loch für das Kabel sein, das mit dem LCD verbunden ist.

Schritt 7: Alles verkabeln

Alles verkabeln
Alles verkabeln
Alles verkabeln
Alles verkabeln

Ich habe diesen Schaltplan erstellt, um einen besseren Überblick darüber zu haben, wohin alle Kabel gehen sollten. Die Kreuze sind die Verbindungspunkte der Kabel. Ich habe versucht, so viel wie möglich zu löten, um alles etwas stabiler und zuverlässiger zu machen. Die Verkabelung wird einige Zeit in Anspruch nehmen, aber danach sind Sie fast am Ziel!

Schritt 8: Hochladen des Codes

Laden Sie den folgenden Code auf Ihren Arduino hoch, um Ihren Flipper zum Leben zu erwecken!

// Binden Sie die Bibliothek für das lcd ein

#einschließen #einschließen

// Initialisieren Sie die LCD-Datenpins

Flüssigkristall-LCD (7, 8, 9, 10, 11, 12);

// Erstellen Sie ein Servo

ServoballGateServo;

// Erstellen Sie Variablen für die Pins, die wir verwenden

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

// Gameplay-Variablen für den Flipper initialisieren

int-Punktzahl = 0; int-Highscore = 500; bool HighscoreReached = false; int-Kugeln = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// diesen Code einmal beim ersten Frame ausführen

Void setup () {// Setzen Sie den PinMode für die Pins, die wir verwenden pinMode (gameoverPin, INPUT); pinMode (ScorePin, INPUT);

// Initialisiere das LCD durch Angabe der Breite und Höhe

lcd.begin(16, 2);

// Befestigen Sie das Ballgate-Servo an dem entsprechenden Stift

ballGateServo.attach(ballGateServoPin);

// Setzen Sie das Torservo in die Ausgangsposition zurück

ballGateServo.write(0); }

// Führe diesen Code in jedem einzelnen Frame aus

Void loop () {// Erfassen Sie die Pin-Eingänge Int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead(scorePin);

// Zur Punktzahl hinzufügen, wenn Eingaben empfangen werden

if (scoreState) { Ton (SpeakerPin, 1000); Punktzahl += 10; aufrechtzuerhalten. Sonst { kein Ton (4); }

// Subtrahiere von den Bällen, wenn die Gameover-Grube ausgelöst wird

if (gameoverState und !gameoverTriggered) { Kugeln -= 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDauer; }

// Starte den Gameover-Timer, sobald der Ball den Gameover-Kontakt nicht berührt

if (!gameoverState) { if (gameoverTimer >= 1) { gameoverTimer -= 1; aufrechtzuerhalten. Else { gameoverTriggered = false; } }

// Blinken Sie den Gameover-Text auf das LCD und setzen Sie den Punktestand und die Bälle zurück

wenn (Kugeln <= 0) {lcd.setCursor (0, 0); für (int i = 5; i> = 1; i--) {lcd.clear(); Verzögerung (250); lcd.print("GAME OVER"); lcd.setCursor(0, 1); lcd.print("Erneut versuchen?"); Verzögerung (250); } lcd.clear(); Punktzahl = 0; ballGateServo.write(0); HighscoreReached = false; Kugeln = 3; }

if (Score > Highscore und !HighscoreReached) {

lcd.setCursor(0, 0); für (int i = 5; i > = 1; i--) {lcd.clear(); Verzögerung (250); lcd.print("NEUER HIGHSCORE"); lcd.setCursor(0, 1); lcd.print("Plötzlicher Tod!"); Verzögerung (250); } lcd.clear(); Kugeln = 1; ballGateServo.write(120); Highscore = Punktzahl; HighscoreReached = true; }

// Aktualisiere den Highscore, wenn der aktuelle Score höher ist

if (Score > Highscore) { Highscore = Punktzahl; }

// Setzen Sie den Cursor auf Zeile 0

lcd.setCursor(0, 0); // Den aktuellen (Highscore) auf dem LCD ausgeben if (score <= 0) { lcd.print("Highscore: " + String(highscore) + " "); } else { lcd.print("Ergebnis: " + String (Ergebnis) + ""); }

// Setzen Sie den Cursor auf Zeile 1

lcd.setCursor(0, 1);

// Die aktuelle Anzahl an Kugeln auf dem LCD ausgeben

lcd.print("Bälle: " + String(Bälle)); }

Empfohlen: