Inspired by a video of the original pong games which use knobs to control the paddles, I thought of what other actions involve a spinning motion, and settled on spinning in an office chair. The idea is to reduce the players' abilities to control their paddle by making them use a control system that makes them progressively dizzier as the game is played. I created a 3D printed part to hold a rotary encoder against the rotating shaft beneath a spinning stool, and coded the game in P5.JS.
3D-printed part
Around 50 ft of wire
Laser-cut wheels and 35mm O-ring
Rotary encoder module
The 3D printed piece hods the rotary encoder in top, and has a groove cut out for a pipe clamp to be attached around it and the stationary part of the chair.
The initial prototype was taped to the chair to test how the wheel rotated against the chair.
The final controller has a wheel that presses against the spinning part of the chair.
To lay out all the wire, I used basic chairs to stand in for the spinning stools. Each wire had to be around 5 feet, and each side had four wires: 2 for data, 1 for ground, and 1 for power.
The pong game was coded in P5.JS, with the Open Processing web editor. It uses the p5.serial, p5play, and p5.sound libraries. The arduino communicates through serial data about the roations of the encoders, and moves the paddles (simple white rectangles) up and down accordingly. The game includes sound when the ball hits things, and is replayable.
The chairs I used were spinning metal stools with two aspects that made them perfect for this project. They have no wheels, so the players won't roll over the wires, and a long rotating shaft that meets up with the stationary support. This makes it easy to attach the controller.
I used a pipe strap to attach the controller to the stool, but encountered an issue because of the way I had designed the 3D printed part of the controller. Tightening the controller against the stool bent the encoder back because of a gap between the plastic part and the metal. To fix this, I added padding in the gap. This allowed the wheel to turn securely against the stool while also not putting too much pressure on the encoder.
I hooked up a short-wire test to the stool so that I could make sure they worked well with the game.
After testing the game in class, I decided to make some major changes to my game. First, even though the stools had no wheels, they still slid around on the tile floor while players were spinning. This eventually led to the wires being caught around the stool and pulled out of the controller. The stools also ended up being too close to each other, due to shorter than needed wire lengths, and the same sliding issue. Lastly, in order to "juice" the game, I wanted to change the actual format of the screen interface to make it more interesting and more connected to the motion of the controllers.
The first improvement I made was to add bases to the stools. I found scrap MDF, which is heavy and sturdy, and drilled holes partway through the material. The stools fit into the holes. Red and blue paint identifies which paddle the player is controlling on the screen. I added rubber strips to the bottom of each base to keep them from sliding on the floor, and a hole in the center of each base for wires to go through and beneath the base.
I then extended the wires, added shrink tubing to the soldered connections, and secured all connecteds and loose wires with tape.
To make my game more interesting, I made it circular to math the circular motion of the controllers. As players spin on their chairs, the circular paddles move around the large circle. A ball bounces around the screen. If the ball hits a paddle, it turns the same color, and if it leaves the circle before the other player hits it, then the first player scores a point. If the ball is white (inside the circle before anyone has hit it) or black (outside the circle) then no points can be scored if the ball crosses over the circle.