Pinball Game

by romainidk in Workshop > Woodworking

7 Views, 0 Favorites, 0 Comments

Pinball Game

IMG_6919.jpeg

Ever wanted to build your own arcade-quality pinball machine from scratch? In this project, I’ll show you how I designed, built, wired, and tuned my very own custom pinball machine—complete with bumpers, flippers, LEDs, sound, and a fully playable layout.

This build combines woodworking, electronics, creativity, and a little bit of chaos. Whether you're into classic arcade machines or you just love making things that light up and launch steel balls across a playfield, this project is packed with ideas you can scale up or customize to fit your style.

I’ll walk you through everything I did—from planning the playfield and assembling the cabinet, to installing the mechanics and programming the lighting/score system. By the end, you’ll have everything you need to create a machine that’s not only fun to play, but one-of-a-kind.

Let’s get building—and let’s make some pinball magic.

Supplies

12548.png

Materials

Wood & Structural Materials

  1. 1 sheet of wood (~50 x 24 inches) – main playfield
  2. Additional scrap wood – cabinet sides, legs, braces
  3. Clear plastic sheet – ramps, ball guides, and protective covers
  4. Cardboard – for prototyping layout pieces before committing to wood/prints
  5. 2x4 Wood - for connecting side pieces
  6. Paper - for the vinyl

3D Printing

  1. 3D printer
  2. 2 rolls of filament (PLA or PETG) – bumpers, posts, flipper parts, decorations

Electronics

  1. Arduino (Uno/Mega/etc.)
  2. Digital screen – scoreboard or animations
  3. Wires – for switches, lights, and flippers
  4. Optional: LEDs, solenoids, pushbuttons, power supply

Tools

  1. Power drill
  2. Drill bits + nail bits
  3. Nails (various sizes)
  4. Screwdriver set
  5. Hot glue gun + glue sticks
  6. Saw (hand saw or jigsaw)
  7. Sandpaper or sander
  8. Measuring tape + ruler
  9. Marker or pencil (for layout marking)
  10. Utility knife (for cardboard and plastic trimming

The Code

arduino_uno_rev003.png

First of all, let's get the electronics working. In this code the motion sensor will work along side the timer to provide ample playing experience.


Paste this code into the Arduino's software:

#include <LiquidCrystal.h>

#include <Servo.h>


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int startButton = 7;

int flipperButton = 13;

int retryButton = 6;


int trigPin = 8;

int echoPin = 9;


Servo leftFlipper;

Servo rightFlipper;


bool gameRunning = false;

bool gameOver = false;

int timerValue = 90;


void setup() {

lcd.begin(16, 2);


pinMode(startButton, INPUT_PULLUP);

pinMode(flipperButton, INPUT_PULLUP);

pinMode(retryButton, INPUT_PULLUP);


pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);


leftFlipper.attach(10);

rightFlipper.attach(A0);


leftFlipper.write(0);

rightFlipper.write(180);


showWelcomeScreen();

}


void showWelcomeScreen() {

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(" Welcome to ");

delay(500);

lcd.setCursor(0, 1);

lcd.print(" PINBALL! ");

delay(2000);


lcd.clear();

lcd.print("Press Start...");

}


void showCountdown() {

for (int i = 3; i >= 1; i--) {

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(" Get Ready... ");

lcd.setCursor(7, 1);

lcd.print(i);

delay(1000);

}

}


void showGameOverScreen() {

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(" GAME OVER ");

lcd.setCursor(0, 1);

lcd.print("Press Retry...");

}


bool ballDetected() {

digitalWrite(trigPin, LOW);

delayMicroseconds(4);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);


long duration = pulseIn(echoPin, HIGH);

long distance = duration * 0.034 / 2;


if (distance < 10) return true;

return false;

}


void loop() {

if (!gameRunning && !gameOver) {

if (digitalRead(startButton) == LOW) {

delay(300);

showCountdown();

gameRunning = true;

timerValue = 90;

lcd.clear();

}

}


if (gameRunning) {

lcd.setCursor(0, 0);

lcd.print("Time: ");

lcd.print(timerValue);

lcd.print("s ");


if (ballDetected()) {

gameRunning = false;

gameOver = true;

showGameOverScreen();

return;

}


if (digitalRead(flipperButton) == LOW) {

leftFlipper.write(45);

rightFlipper.write(135);

delay(150);

leftFlipper.write(0);

rightFlipper.write(180);

}


delay(1000);

timerValue--;


if (timerValue <= 0) {

gameRunning = false;

gameOver = true;

showGameOverScreen();

}

}


if (gameOver) {

if (digitalRead(retryButton) == LOW) {

delay(300);

gameOver = false;

showWelcomeScreen();

}

}

}

3D Prints

Flipper Drawing.jpeg
Puller Drawing.jpeg
Funnel.jpeg

Now we make the 3D prints - the flippers, mushrooms, puller, and ball holder - and just follow these dimensions.

Wood Cutting

Base Drawling (3).jpeg
Side 1 Drawing (1).jpeg
Side 2 Drawing (1).jpeg
Side 3 Drawing (1).jpeg

Cut the wood in to the pieces shown and cut the 2x4 into smaller pieces to connect all the sides together. Cut the short side once, long side 3 times, base once, and the squares 3 times. Cut one of the long sides with a small square to allow the ball to pass through and cut the other long side in two to mesh with the puller side of the base.

Put It All Together

IMG_6919.jpeg

Connect the sides to the base and each other by using the 2x4. Connect the short side to the top of the base vertically and the long side to the left side of the base, the ball side to the inner corner of the base, and the corner side to the end of the base. Put the puller together through the puller hole and spring and glue it together. Put the square at each end of the bottom of the base vertically and put the flippers adjacent to them. Put the mushrooms around randomly. Put the ball holder through the puller. Prop the back of the top of the base with 2x4. Put the motion sensor at the bottom and connect it to the Arduino and start the game.