Tempest is one of my favorite arcade games but I have a problem with Tempest. If you've ever played the original Tempest arcade machine, you'll remember the weighted spinner. That spinner allowed for incredible speed and agility, limited only by the player's skills.
I don't have the cash for an original Tempest machine nor the available space. Arcade 1 Up machines are nice but why buy one when I can play Tempest on Retropie? All I need is a spinner.
Unfortunately, weighted spinner controllers are rare or expensive these days. Not a joystick nor buttons compare to spinner control. There are spinners available, such as from Arcade 1 Up.
Some folks have used such spinners, interfaced to an Arduino or Raspberry Pi, which requires a bit of electronics skill. I tried it years ago but the spin was stiff and not free like an original Tempest spinner. This is why some simply resort to using a computer mouse as a compromise.
What if you could disassemble a cheap optical computer mouse and turn it into weighted arcade spinner control? I did just that. A cheap optical mouse and a 3d printed enclosure are all that you will need to create your own weighted spinner!
I used a wired mouse for simplicity but you can use a wireless mouse if you wish as long as you don't mind finding a place for the mouse batteries.
For this mouse conversion to work, we need the mouse to sense left and right direction for and infinite distance. Normally when using a mouse, the mouse reaches the end of the mouse pad or desk surface and that is the end of movement in that direction. For our mouse to work as a spinner, this limitation must be eliminated.
Instead of using the mouse on a flat surface, we're going to use it on an infinite surface, well infinite in one axis: we'll use a cylinder. We can roll a cylinder under the mouse sensor for any distance desired simply by rotating the drum surface any number of times desired!
My prototype of this idea was a drum attached to a knob for control with a mouse placed over the drum. I spun the knob, and drum, left and the mouse moved left. I spun right and the mouse moved right. It was time to try it out with Retropie running Tempest.
The spinner worked perfectly in Tempest. I could spin in circles as many times as I wanted and as fast as desired. However, it looked clunky having a mouse sticking out near my spinner knob.
Since I used a wired mouse, which was simple compared to a wireless mouse, the PCB was etched only on one side. I could cut the mouse PCB down to fit inside a spinner enclosure and just move the wire and switch connections by tracing the PCB traces. The LED sensor lens would be needed too, so I used double-sided tape to secure it to the PCB.
After documenting all of the connections to the mouse IC, I cut the mouse PCB to about half it's original height and moved the connections for the mouse buttons and the mouse thumb wheel.
Note that the mouse thumb wheel needs to be connected properly to the IC or the mouse will not function at all. I simply connected the thumb wheel, being careful to maintain original polarity, and just let the thumb wheel dangle. Someday I'll hit glue it down.
I ran out of black PLA 3d printing filament; so I 3d printed the new, smaller enclosure, using white PLA. I also 3d printed the new drum using white PLA. The spinner no longer worked!
I tested the cut up and rewired mouse with a mouse pad and it worked fine. Must be the drum. I painted the drum black and now my spinner works great! Don't 3d print the drum using white filament.
I wanted buttons on my spinner control since it would be awkward to spin with one hand while trying to push a fire button on a game controller with the other hand. I wire the left and right mouse buttons to a PiGRRL button board that I had bought from Adafruit a long time ago. The buttons did not work. The mouse stopped working at all!
I soon figured out that the mouse buttons did not share a ground connection. They were not grounded. However, the PiGRRL board grounded all buttons to a ground plane. I cut a rectangle around the grounded pins of each pushbutton to break them loose from connecting to the PCB ground plane. After doing this, I move the button wires to the newly isolated button connections.
I put the spinner enclosure together with the newly painted drum and isolated buttons together and plugged it into my Raspberry Pi and started up Tempest. For the first time in years, I played Tempest with a spinner control and loved it! My score was nowhere near what my high score was in Tempest as a youth, but now that I have a spinner controller, that may soon change.
I've uploaded the 3d printable files for this project to Printables and created an easy to follow Instructable for this project if you'd like to create your own.