2018-05-21 work in progress


Dance Dance Revolution is an amazing video game where you listen to sweet music and jump around intensely. It’s super fun and also an optimal way to do aerobic exercise – DDR is essentially high intensity interval training.

Usually you play DDR at arcades on dedicated machines, but it’s easy to play at home too! You need a computer running the free software StepMania and a USB dance pad. A basic dance pad taped to the ground works okay for a while, but if you keep at it you’ll outlevel it soon..

The best dance pads are made of metal and cost 300 to 1300 USD (yikes). But with a little bit of effort and courage you can make your very own legit dance pad for way cheaper (~125 USD).

How it works

Dance pads are pretty simple. There are 4 sensors – up, down, left, right – and they’re connected to a little computer which sends corresponding keyboard events over USB. A sturdy frame holds everything together.

The Ika dance pad we’re building has strain gauge load cells as sensors, and plywood as the frame. The frame is 2 pieces: base plate and button frame. Inbetween them are the 4 arrow buttons also made from plywood.

Proof of concept single pad: ( TODO: Picture )


Frame / non-electronic parts

  • Base plate – Plywood, ACX, 4’ x 4’ x 0.5”. (something nice which can handle sweat and intense jumping)
  • Buttons – Plywood, ACX, 4’ x 2’ x 0.5”.
  • Button frame – Plywood, ACX, 4’ x 4’ x 0.75”. (Note this is 0.75” thick)
  • Bolts – M5 1.5 x 25 mm, head <= 5 mm; 16 pieces. (TODO: Check sizing)
  • Threaded inserts – Hex flanged; size to bolts; 16 pieces. Get extra because they might strip.

Electronic parts

  • Sensors – Strain gauge load cells, 50kg; 16 pieces. AliExpress link. Get a few extra. also ePacket shipping is nice.
  • Sensor amplifiers – HX711; 4 pieces. Amazon link; cheaper from AliExpress. Consider a spare for debugging.
  • Microcontroller – Maple mini. (or anything with 4 analog input pins and 4 PWM out pins). Consider a spare.
  • Connectors for crimping sensor wires – 3 pin; 4+ pieces.
  • Connector pins for crimping sensor wires – hole; 16+ pieces.
  • Connectors for amplifiers and microcontroller – hole, right angle. (Helps with vertical clearance under buttons.)
  • Jumper wires to wire everything – pin to pin; 100 pieces.
  • Electrical tape - it’s handy.

Cost estimate

  • Plywood: $65
  • Bolts: $10
  • Bolt holes: $10
  • Load cells: $20
  • Amplifiers: $5
  • Microcontroller: $5
  • Connectors: $10

Total: $125



  • Computer – To run apps: Inkscape for making SVG images of plywood cuts; and Arduino for programming the microcontroller.
  • CNC router – Shaper Origin. to cut the woods.
  • Power drill and drill bits
  • Impact driver – Helps to drive bolts in.
  • Hex wrenches – For bolts and bolt holes.
  • Clamps – Hold plywood in place and absorb tool vibrations.
  • Sandpaper – make plywood nice and soft.
  • Wire stripper – For load cell connectors.
  • Wire crimper – For load cell connectors.
  • Soldering iron and solder
  • Breadboard – For debugging.


Examine these to get a sense of how each piece will be cut.

  • Button frame
  • Button
  • Base plate
  • Everything in one file

Button frame (back)

First I cut the button frame from the half sheet of thick (0.75”) plywood. Note we’re cutting with the back side face upwards. This is important because we first want to cut button slots from the bottom.

1. Border

Cut the outer border of the button frame. NOTE make sure you cut along the outside of the border, so your cutting device doesn’t eat into the actual dance pad. You want to leave the border nice and thick for strength.

Cut the two carrying handle holes.

2. Electronics place

The top right has a large pocket for electronics like the microcontroller and signal amplifiers. Cut this at depth 0.4” into the bottom of the button frame.

There’s a long rectangle extending from the electronics pocket up and out. This is the USB cable slot. Cut it at depth 0.2”.

3. Button slots

Each button has 4 corners, each of which is cut at depth 0.4” and offset -0.04” inside (slightly further into the frame than on the SVG) into the bottom of the button frame. See above Proof of Concept pic for reference.

Cut the 16 button corners at this partial depth.

Then cut the 4 button inner octagons at full depth (0.75”) and also with offset -0.05” inside. These pop out. You don’t need them but you can save them for future projects.

4. Threaded insert holes

In the SVG each hole has 3 circles. From small to large: Bolt (-> Base plate), Threaded insert (-> Button frame) and Bolt head recess (-> Base plate bottom). For the button frame plywood we’ll cut only the middle circle (threaded insert).

Cut the 16 threaded inesrt holes at full depth.

Base plate (front)

The base plate holds the electronics. It’s cut from the half sheet of medium thick (0.5”) plywood.

We’ll cut most of the features, then flip it over to cut the recessed bolt holes.

1. Border

Cut the outer border, making sure to cut along the outside of the border to preserve the area of the dance pad for strength.

Cut the two carrying handle holes.

2. Electronics spaces

Cut the top right electronics pocket at shallow depth 0.125”. Cut the top right long USB hole to the same shallow depth 0.125”.

The buttons have channels for sensor wires leading them out and toward the electronics spaces. Cut the button sensor wire channels at the shallow depth 0.125”. (TODO: If sensor amplifiers need to live in these channels, you might need to cut out a slightly bigger/deeper space for them.)

3. Load cell slots

There are 16 slots for load cells. For each one you need to make 2 cuts:

The main body of the shape at depth TODO and The bigger circleat depth TODO. (The little circle you can ignore. it fits a bump on the load cells)

Base plate (back)

Flip the base plate over to cut the bolt holes.

1. Bolt holes

First cut the outer circles as deep as needed to fit the bolt heads. Then cut the inner circles fully for the bolts.


Use the quarter sheet of 0.5” thick plywood.

1. Cut

Each button has 4 corners, each of which is cut at depth 0.235”. (Note there’s no inner offset here.) Cut the 16 button corners at this partial depth.

Then cut the 4 button squares out at full depth (0.5”).

2. Fit

Test these by fitting them into the button frame. You are aiming for a snug but slightly wiggly fit. You might need to trim the buttons.

There might be an optimal way to fit your 4 buttons into the 4 slots. After you determine that, label the backs so you remember it.


Fit everything together. The trickiest parts are button fit and bolts.

For bolts, work on a single one first. On the button frame insert the threaded insert with flange facing down. Then turn it over, put the base plate on and screw the bolt in from the bottom using the impact driver. Adjust holes as needed.

Once done, screw in all the threaded inserts then check you’re able to start screwing bolts into every hole. (In my case, I had to widen most bolt and bolt head holes).


I found this part the most difficult, as there are many many wires to connect precisely. Make sure to secure all connectors.

1. Connectify load cells

Load cells have 3 wires and they’re usually bare. Crimp the wires and add to 3-pin connectors to make them easier to work with.

2. Connectify electronics

Solder connectors onto microcontroller and amplifiers.

3. Adjust signal amplifiers to 80 Hz

The HX711 reports signals at 10 Hz stock but can be adjusted to 80 Hz with some semi tricky soldering:

bend pin 15 away from the pcb [8] and then link to pin 16

This step is optional; however I recommend you do this, as the DDR Marvelous judgment window is 10-15 ms and you want to hit Marvelous :)

4. Test electronics

Prepare your computer with the Arduino software and needed libraries:

  • https://github.com/bogde/HX711

Download the (TODO) [HX711 test program for Arduino] then flash it to your microcontroller. We’ll use this to test everything.

Prepare this 2 load cell test circuit on a breadboard. Connect the load cells to the amplifier, and amplifier power, ground, output and clock pins to the microcontroller.

Connect the microcontroller to your computer and view the serial output. It should show sensor values, and when you press on the load cells the values should changeuntil you let go.

Test all the amplifiers.

Test all the load cells.

5. Wire stuff

The circuit you’ll use is 4 load cells connected to an amplifier. Each amplifier has power, ground, output and clock pins connected to the microcontroller just like in the test circuit.

So you’ll need 4 sets of the 4 load cells -> amplifier; and 4 sets of amplifier -> microcontroller.

You should be able to fit wires and amplifiers under the buttons and in the base plate channels, but be extra sure that the button won’t crush them by periodically placing the button on top and examining from the side.

First wire up the 4 sets of 4 load cells -> amplifiers. Secure the 4 connected load cells then hook the amplifier to your microcontroller and test it. Each 4 load cells should change the output.

Then wire the amplifiers to the microcontroller. Upload the (TODO) [DDR dance pad program] to your microcontroller and test it. If you press the pad buttons there should be corresponding keypresses sent to the computer.


Assemble the pad. Download Stepmania, connect the pad and try to play a song. You might need to adjust audio offset (I have it set to -0.036 s).


The issues I’ve had thus far are all electronic. General debug process:

  • A pad fails
  • Connect to dev computer and view serial debug output
  • Open it up
  • Inspect/resecure connections and test again
  • Use 2 cell test circuit on load cells and amplifier

Below are specific issues I encountered.

Pad works sometimes. If you hit it hard it starts working for a little bit.

Problem: Load cell has poorly crimped connector.

Solution: Detach connector and redo it.

Pad doesn’t work at all. Serial debug shows unchanging 0.00 signal.

Problem: Load cell broken

Solution: Swap out the load cell.

Pad gets stuck. Serial debug shows signal sticking to high values.

Problem: On two load cells, the connection between white/green wires is loose.

Solution: Resecure connection.