

Pinball machines are an embodiment of physics-based game design that fascinates me. From our daily lives we all share an instinctual understanding of how things roll and bounce, so the game is approachable for everyone from children to adults.
There’s a visceral satisfaction to timing the swing of a flipper to launch a gleaming orb into a flashing maze of bumpers and targets, just like the empowering feeling of hitting a baseball right on the sweet spot of a bat. If it isn’t evident, I’ve really wanted to make one for a while 😅 I’m eager to challenge myself in applying electronics to make it come to life.
This project is currently in progress! I make updates here to mark significant milestones.
Table of Contents
Project Scope
My goal for this project is to limit the complexity by focusing on a few elements/gimmicks. I’m also scaling the machine down from full to tabletop size to simplify fabrication, accelerate testing and iteration, and better match the power of my solenoids.
Some core decisions that inform everything else:
- Size of pinball to use
- Overall size and tilt angle of machine
- Play field layout
A pinball machine contains MANY interconnected parts and systems, so I will try to divide the project into smaller more manageable pieces. I’ve sorted most aspects into primarily mechanical or electrical.
Mechanical systems
- Steel pinball
- Plunger
- Flippers
- Slingshots
- Bumpers
- Targets
- Rails

Electrical systems
- Microcontroller (Arduino)
- Game state control and scoring logic
- Sensors (collision detection with elements)
- Power supply
- Score display
- Sounds
- Lights

↑ Back to Contents ↑
Core Decisions
Pinball Selection

To keep gameplay feel similar between full size machines and my scale project, I need to keep acceleration of the ball equal. If the ratios of force and mass from one system to the other are both equal, then by F = ma the ratio of accelerations will be equal to 1.
The solenoids of full-size machines deliver forces between 20N — 50N to a ball of mass 80g. The solenoids I bought deliver a 6N force, so that gives a force ratio of 20/6 to 50/6 (3.3 — 8.3). Using the average of that range, 35/6 (5.83), I solve for the mass and get 13.71g. Then I bring up a reference table for steel bearings, find products of similar masses, and make a decision.
I take the three closest options and rule out 9/16″ for being too light (~12g). The stock size 19/32″ has the closest mass to 13.71g but is an awkward size to design around, and so I end up settling on 5/8″ (15.875mm) diameter.


Lastly, I take the mass of my selection and recalculate the mass ratio, then take FRatio / mRatio to find aRatio. Rearranging the result shows that acceleration in the scale project will be about 84% of a full size machine, which is close enough for my needs.
Overall Size and Tilt
I don’t want the pinball reaching the top of the machine unless the player executes a well-timed shot, so I ran some rough calculations to estimate size of the playfield based on input energy of the solenoid. These are subject to change as I test, but serve as a frame of reference.

Playfield Layout

The final layout of gimmicks and interactive elements will be determined through iteration, but some sense of which shots are feasible will save time and effort. Using geometry I got a sense of the pinball’s speed through a few angle ranges.
↑ Back to Contents ↑
Proofs of Concept
Before implementing each mechanism into a real pinball table, I want to have an isolated version to test changes to component designs and code. As part of breaking the huge task into manageable pieces, I aim to begin by creating scale models to prove the concepts work.
While my firsthand knowledge to predict pinball logistical challenges is limited, I do try to outline how I will assess performance before I begin designing. This gives me some criteria to consider throughout design to hopefully save effort.
The following images are annotated screenshots from service videos posted to the Jersey Jack Pinball YouTube channel.
1. Flipper Scale Model
- Is the motion of the flipper smooth and fluid?
- Is flipper action rapid? What is the time in milliseconds?
- Does the flipper strike forcefully enough/impart enough energy to the ball?
- Is the sweep of motion large enough (aligned with guide rails to steep enough to retain ball)?

2. Slingshot Scale Model
- How sensitive is the sensor? Can it be adjusted?
- Is kicker action rapid? What is the response time in milliseconds?
- Does the kicker strike forcefully enough/impart enough energy to the ball?

3. Pop Bumper Scale Model
- Is the sensor triggering at the appropriate sensitivity?
- Is thrust ring action rapid? What is the response time in milliseconds?
- Does the ball get launched at a modest speed?

↑ Back to Contents ↑
Tracking Progress
To keep up momentum and always have a clear idea what to work on next, I’ve created an improved version of the project tracker from my Helldivers cosplay project with new features:
- Dynamic, color-coded Gantt chart that reflects the data entered into all task lists
- Linked start/end dates that update to maintain relationships with one another
- Macros to filter content as needed and avoid bloat without removing old content entirely

Here’s the chart as of April 24th (colored column), about 1.5 months since I began the project.

↑ Back to Contents ↑
Electronics CAD
CAD for electronics parts isn’t always available online, but my past experience has taught me that putting off including them in assemblies is a loan that must be paid with interest in the form of reprints and modeling fixes later. It’s not critical to have perfect models for every part, but the most used components in this project should be accurate.
Since the solenoid is used wherever the electronics initiate motion, I started by replicating my model in Fusion. In prototyping the slingshot and pop bumper mechanisms I learned leaf switches are often used as triggers, and decided to go with limit switches instead. I pulled the CAD files from online sources but added joints to represent actual motion of the lever to support design.




↑ Back to Contents ↑
Design Documentation
This section is a rather esoteric discussion, so skip ahead if you are interested only in pinball 😉
For the flipper and slingshot proofs of concept I adopted a simple naming scheme (V1, V2., etc.) on the basis that there would be minimal revisions. I quickly became confused as the assemblies grew in size and complexity, and certain parts underwent more changes than others.
- Every part-label pairing should be UNIQUE. If multiple part revisions share the same label, or one revision has multiple conflicting labels, there is no consistent way to tell revisions apart.
- Every Build should be MEANINGFUL and test something significant. If the naming scheme requires I make redundant builds in order to keep part names consistent, it is not worth using.
- If Build V2 DOES use all the parts labeled V2 then several parts must be newly assigned the V2 moniker while remaining literally identical to their predecessors, violating the principle that each part-label pair should be unique.
- If a part gets several revisions between a pair of consecutive builds, then the numbers no longer match; if all part changes are bundled into a single start/finish dichotomy then the intermediate iterative versions over which lessons were learned are lost.
- If Build V2 DOESN’T use all the parts labeled V2, then a reference is necessary to establish what is included. This is fine, but then the part names lose some of their meaning that makes them useful.
I’ve come to the conclusion my oversight was trying to share a single label across both parts and builds. After some consideration I’ll be trying a new system going forward, where each unique part design gets assigned a letter codes with a two digit numeric string at the end. For example, LNK-2.1 may be the identifier for a link part.
- Similar to software releases, I will update the second number for minor changes that maintain backwards compatibility, and the first number for major changes that lose compatibility.
- For each Build of an assembly I will record the combination of parts used with their identifiers.
I’ve created a tracker for my slingshot prototypes to see how this new system would work in context and feel it clears up much of my confusion.


Part versions are color-coded based on changes from previous build.


↑ Back to Contents ↑
Scale Models
Flipper

Overview
Flippers are the primary way the player engages with a pinball machine. My research into mechanisms showed most pinball machines use a linkage driven by a solenoid to make the flippers move quickly and forcefully. The linear motion of the solenoid is transmitted through a link to the main body of the mechanism, which is rigidly connected to the flipper through a pin about which both rotate.


↑ Back to Contents ↑
Design
This design looks to be well approximated by a crank-slider model, with the slider as input and crank as output. Ι simplified the geometry accordingly and defined the design parameters:
- D: Stroke distance
- X0 and Y0: Solenoid starting position
- L: Connecting link length
- R: Main body disc radius
- θ: Link joint angle with +X
My goal is to analytically define how the link joint angle (equal to the flipper sweep angle due to rigid connections) related to all these position and length quantities. With some help from my old textbooks, homework, and GPTs, I reached an equation.




So now I have a mathematical expression to represent flipper motion, but it doesn’t feel very intuitive. I want a way to visualize the outcome of a choice of inputs, so I spent a few days learning and relearning some Python to create an interactive tool. Now I can see how the mechanism will likely behave before spending the time to build it!

↑ Back to Contents ↑
Modeling
In Fusion, I’ve created a parametric design to control the mechanism from a dialog box. With careful use of geometric constraints and construction geometry the result can handle modest changes in input values.

Mechanism evolution.


↑ Back to Contents ↑
Prototype
Parts
Now that the mechanism has been realized in CAD software, the next step is to build the prototype and test it out. Any prototype that teaches lessons about the design is valuable, and with 3D printing I can get that information quite quickly.
The first “V1” version of parts clued me in to tolerance issues with the stock dowel pins I am using for link joints and the flipper rotation axis. Designing a quick fit checking reference let me test different clearances and verify the fit I want. I also learned that the thickness around the clamp of the main body was too large.

The second “V2” version of parts are functional and interface well with the stock pins, fasteners, and nuts laid out in the CAD design. The next step is to connect the solenoid to a testing circuit and check the mechanism performance against the specifications described in the Proofs of Concept section.


↑ Back to Contents ↑
Powering Up
The parts are at a mature enough state that I can begin testing with actual circuits and power. This is the part of the project where I have the most to learn!
I plan to use an Arduino microcontroller as the brain of my pinball machine. Arduino boards generally operate using a 5V power supply as input through the USB data cable, or 7-12V regulated down to 5V from a barrel jack connector. The output options from the board are 5V and 3.3V, and the safe amount of current draw for each pin is limited to around 20mA.
However, solenoids draw significantly larger amounts of current and require voltages greater than the board can provide. Directly connecting these demanding components would also likely damage the board. I learned from course material that transistors can act as electronically-controlled switches, letting the Arduino connect circuits with its digital pins while remaining insulated from the large currents. The solenoid’s power needs are satisfied by a dedicated power supply.

From my understanding, the Collector and Emitter of the TIP120 Bipolar Junction Transistor (BJT) are electrically connected when the current flowing into the Base terminal exceeds a certain threshold. This connection completes a path for electricity to flow from power supply +V at top to common ground at bottom. The orientation of the 1N4004 diode blocks current flow, forcing current to travel through the solenoid instead.
The ARDUINO_DIGITAL_OUT port sets the voltage along the Base branch, which in combination with the resistor in series determines how much current flows into the Base terminal (V = IR → I = V / R). When the voltage at ARDUINO_DIGITAL_OUT drops, the current flow into the Base drops proportionally and severs the Collector/Emitter connection. Built up charge at the Collector terminal is safely passed backwards through the 1N4004 “flyback” diode which acts as a lower resistance path than the more important solenoid, until equilibrium across the Collector branch of the circuit is reached.

Electrical diagrams lay out the essential components and connections, but building the circuit in real life requires translating these relationships into parts on hand. I find it helpful to use TinkerCAD’s circuit tool for a physical layout reference, though the component choices are limited (there was no solenoid component so I used a DC motor as a placeholder). I’d like to add fuses for safety once I am controlling several solenoids at once.
To start I have omitted any input from the user and wrote a <10 line Arduino program that toggles the output to the TIP120 from HIGH to LOW every second. It has been encouraging to see it behaving as I expected in Fusion! Next will come triggering the solenoid via a button and making sure it can be held in the active position without thermal damage.

↑ Back to Contents ↑
Slingshot

Overview
Slingshots are features placed above the flippers that introduce horizontal motion to the pinball game. The two main parts are an elastic band to act as the “sling” and a crank mechanism called a kicker to provide the “shot” energy.
The elastic band is stretched over posts, and triggers are placed such that deflection of the band inwards completes a circuit through each trigger. When the electrical signal is received, a solenoid pulls one end of a bell crank, which rotates the whole crank about its pin to send the kicker mounted on the opposite end into the band (where the ball likely is).


↑ Back to Contents ↑
Design
The crank-slider modeling work I did for the flipper continued to be relevant for my design of the slingshot, with the orientation of some parts changing but the overall magnitudes and relations staying the same.


By reorienting the reference frame I was viewing the slingshot from, I was able to reuse the flipper visualizer with minimal changes.

I used the tool to visualize the arc over which the kicker head traveled. This enables me to place the elastic band to handle the two possible scenarios:
- If the ball impacts the band gently, not enough to activate both triggers, I want the slingshot to behave like a simple rubber band. This means I need to place the kicker head far enough away that it doesn’t make contact and deaden the ball’s bounce against the band.
- If the ball impacts the band strongly, activating both triggers, I want the slingshot to react before the ball has a chance to leave. This means I need to place the kicker head close enough that the distance is covered swiftly and hits the incoming ball.
I am starting by placing the band at the midpoint of the kicker head’s travel path, and will adjust during testing.
↑ Back to Contents ↑
Choosing a switch
My research shows the trigger components used in pinball machines are called leaf switches, and seem to be fairly niche. Rather than building one I’m using limit switches instead. Limit switches are much better documented and common, which should make their implementation less frustrating and the knowledge I gain more widely applicable.


The challenge with using limit switches is ensuring responsiveness. Reliable triggering requires activation force and deflection distance to be calibrated within ranges imparted by the pinball. Longer levers attached to the switch reduce the force to actuate, but also increase the deflection distance required. Fortunately, well-documented products quantify these properties in their datasheet, equipping me to make design decisions before purchasing.

Rather than rely on a perfect explicitly position I made adjustable mounting brackets for the limit switches. One slot controls position of bracket to band, while another controls switch height above playfield.

↑ Back to Contents ↑
Modeling
I created another parametric design with more confidence thanks to the experience gained from the flipper.
Mechanism evolution.
I explored and applied different types of joints to accurately model interactions between parts, such as sliders and rotations with limit values.



↑ Back to Contents ↑
Prototype
Parts
The first “V1” version of parts showed me tolerance issues between kicker head and crank, as well as a need for more support of the solenoid.






↑ Back to Contents ↑
Improving Mounting
As shown in the side view picture, the solenoid’s weight is making the L-shaped mounting bracket sag slightly. The crank geometry requires the solenoid be offset from where I’ve fastened the mount, so shifting the load beneath to avoid the sagging is not an option. I am instead adding another bracket on the solenoid’s side for more support.


To keep fasteners out of the path of the pinball, I settled on a twist-lock connection. These are commonly used in things like camera lenses and separable filament spools for 3D printers. Their main advantage in my use case was keeping the entire interface to the underside of the playfield.
I looked at some existing designs to understand the working principles, then created my own.







With the twist lock concept proven, I implemented it into the support bracket and playfield.





This approach worked so well that I replaced my post screw joints with a custom through-post version of the twist locks! This reduces the number of hardware and time to assemble.



↑ Back to Contents ↑
Powering Up
I reused the same 1 sec toggle code from my flipper prototype to test basic slingshot functionality. With everything working as expected, the next step is to implement the limit switches and make the slingshot respond to a ball striking the band.

↑ Back to Contents ↑
Pop Bumper

Overview
Pop bumpers are a compact way to introduce energy and an element of randomness to the game. When a pinball approaches a pop bumper from any side, it is shot out forcefully in a somewhat unpredictable direction. This is accomplished by an angled ring dropping down to squeeze the pinball against the playfield.
The trigger mechanism of a pop bumper consists of a trigger skirt and spoon. When not activated the skirt is balanced, supported by a narrow column resting in the center of a spoon. Incoming pinballs contact the disc portion of the skirt above the playfield, displacing the column and through it the spoon handle as well. This handle triggers a switch, causing a solenoid to retract and pull down the ring. The pinball is ejected, the skirt rebalances, and the solenoid resets in preparation for the next trigger.


↑ Back to Contents ↑









