Final Project

Pinball Battle

This is a physical gaming device for two, it combines the flavor of both pinball and foosball, player battle form both ends of the table and an electronic score calculating system can show the real time score.

Computer Aided Design

I start from 3D sketch with Sketchup. And get a roughly scale from it. Then I use illustrator to design most of the panels.

Computer controlled Cutting

The Idea of this project is to build a fast made, easy assembled pinball table. So most of the panels are snap fit, nuts and bolts fastened.

The major material is 10mm MDF because I want this pinball table have kind of stability and also can have solid sound when the metal ball hit the wall.
Cutting Files

3D Printing

Each end has a little 3D printed stopper, for preventing the ball from falling into the holes directly.

3D Files

CNC and Casting

In my original plan, both side will have a resin casting Fab Lab logo, but due to the extreme humid weather, the resin never really dry completely, will finish that part later.

CNC Files

Mechanical design

The flipper unit has a set of laser cutting gear that allow the flippers only rotate within certain degree.

Cutting Files

Electronic Production

This project use two Arduino compatible DIY PCB boards. One for receiving sensor value from two CNY70 optical reflection sensors and then calculate the score and change the data format into string.

Board Trace Interior
The other one receive data and the display onto LCD unit.

Board Trace Interior
Between the boards, it connects through serial port.

Embeded Programming

So when the ball falls into the hole at the bottom, sensor will sense it, and then add one point to opponent

Board with CNY70 sensors

char str[6] = {0};
int sensorPin1 = A0;
int sensorPin2 = A1;
int sensorValue1 = 0;
int sensorValue2 = 0;
unsigned int player1 = 0;
unsigned int player2 = 0;

void setup() {
  str[0] = '0';
  str[1] = '0';
  str[2] = ':';
  str[3] = '0';
  str[4] = '0';

void loop() {
  sensorValue1 = analogRead(sensorPin1); 
  sensorValue2 = analogRead(sensorPin2); 
  if (sensorValue1 == 0){
    player1 = player1 + 1;  
  if (sensorValue2 == 0){
    player2 = player2 + 1;

Board with LCD

char str[6] = {0};
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);

void loop() {

  if (Serial.available()) {
      Serial.readBytes(str, 5);

Bill of Material

10mm MDF
3D Printing filament
chemical wood (or machinable wax)
LCD 1602
CNY70 optical sensors
4.7K ohm resistor
100 ohm resistor
10K ohm resistor
22p capacitor
104p capacitor
10K potentiometer
16MHz crystal
micro buttom

Total material cost < 50 USD

How will it be evaluated?

The pinball machine could work smoothly with the correct score count and make an enjoyable gaming experience.

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at