Melodicade MX

Project Code, CAD Files, and Build Guide

Melodicade MX - A portable 6+ octave MIDI keyboard using mechanical key-switches arranged in the Wicki-Hayden button layout.

Video demonstration:

Design started:

Build published:

Goals of this project:


Overall, I'm happy with the way this project has turned out.  Assembly is a bit more complicated than with simple arcade buttons, but the cost savings, and especially the per-key velocity detection, more than make up for it.  With the extra row of buttons, the instrument is also brought up to nearly the range of a full 88-key piano, which is pretty fun considering that it easily fits in my backpack.

I think this is past the point where a sensible person would have designed and sent away for a PCB, but I rather like the idea of keeping things unrefined enough that a dummy like myself can assemble by hand with the help of a 3D printer and some off-the-shelf parts.  I'm continuing to work on the software side with the on-board synth, and making tweaks to the menu system, but barring a massive redesign, hardware wise I'm comfortable with where this is right now.

The range comparison vs. an 88-key piano keyboard:

Development history:

(Click images to embiggen)

Prototype #1 - January 2021

Proof of concept that an instrument matching the playability of the Melodicade could be created using 3D printed keycaps, and mechanical key switches at about half the total cost of the original.

Prototype #2 - March 2021

Tweaked the internal design to streamline assembly, modified the keycaps to allow for easier playing, and added an additional row of buttons to exceed the range of the original.

Prototype #3 - May 2021

After playing around with various options, settled on a stacked switch configuration for velocity detection, and added an additional TRS jack to Prototypes 1-3 for a work-in-progress internal PCM synth via Teensy's Audio library.  Spent the next few months refining the keycaps once more, working on the synth component, and just playing.

Prototype #4 - November 2021

Changed the internal design to streamline switch assembly, and to replace the digital MIDI CC buttons with an analog stick for finer control.  Also changed platform from the Teensy 3.6 to the Teensy 4.1 for increased speed and better audio out (at the unfortunate cost of two through-hole I/O pins, requiring use of the SMD pads on the bottom).

Melodicade MX - February 2022

Tweaked the internal design yet again to streamline assembly. After being unhappy with the imprecise analog stick for MIDI CC, returned to the two-position digital buttons for more accurate bends, and to reduce complexity, allowing all wiring to fit neatly in the through-hole pins of the Teensy 4.1 PCB once more.

Liability Disclaimer:

All information in this guide is provided "as is", with no guarantee of completeness, accuracy, timeliness or of the results obtained from the use of this information, and without warranty of any kind, express or implied, including, but not limited to warranties of performance, merchantability and fitness for a particular purpose.

By following this guide, you agree to be responsible for any decision made or action taken in reliance on the information given, or for any consequential, special or similar damages, even if advised of the possibility of such damages.

STL Files:

Note: This will require a 3D printer with a 300mm2 or larger build plate, such as the Creality CR-10.

Shopping list used for this build:

Note:  The total BOM was around $350 USD for this project (without modifications), as built in early 2022.  Actual cost is more like $180 if intending to use all of the remaining parts that can only be purchased in larger spools, kits or multi-packs.  Expect to spend around 175 hours on (mostly unattended) printing, and 20 hours of labor for parts cleanup and assembly.



Faster Delivery:


Lower Price:


OLED Display:

Rotary encoder:


Panel mount jacks:





Printing Instructions:

Note: Printing instructions are written for a Creality CR-10 with Cura 4.12 slicer software, however any slicing software in combination with an FDM printer with a 300mm² plate should suffice.

Printer settings:

Use a 0.4mm nozzle with all settings defaulted to Cura's Standard Quality - 0.2mm with the following universal changes (except where otherwise noted below):

Plastics (in order of printing):

(Optional control key colors; substitute black/white/gray otherwise)

Tools Required:

Row/Column Layout and Numbering:

Note: View is from the underside of the Keybed.


// Device pinout:

// Name                     Teensy 4.1 Pin


// (tact-switch columns)

// Col 0                    0

// Col 1                    2

// Col 2                    3

// Col 3                    4

// Col 4                    5

// Col 5                    6

// Col 6                    7

// Col 7                    8

// Col 8                    9

// Col 9                    10

// (key-switch columns)     

// Col 0                    11

// Col 1                    24

// Col 2                    25

// Col 3                    26

// Col 4                    27

// Col 5                    28

// Col 6                    29

// Col 7                    30

// Col 8                    31

// Col 9                    32

// (shared rows)            

// Row 0                    16

// Row 1                    15

// Row 2                    14

// Row 3                    41

// Row 4                    40

// Row 5                    39

// Row 6                    38

// Row 7                    37

// Row 8                    36

// Row 9                    35

// Row 10                   34

// Row 11                   33

// --                       

// Rotary encoder SW        17

// Rotary encoder DT        23(A9)

// Rotary encoder CLK       22(A8)

// --                       

// OLED I2C Clock           19(SCL)

// OLED I2C Data            18(SDA)

// --                       

// Pot (top)                21(A7)

// Pot (bottom)             20(A6)

// --

// 1/4" TS Jack (tip)       13

// 3.5mm TRRS (tip+ring)    12(MQSL)

// --

// DIN MIDI TX              1

Assembly Instructions:

(Click images to embiggen)

Step 1:

Print the Keybed so that assembly can start while other parts are printing.  This is the longest single print job, and will take approximately 44 hours to complete.

The baked-in brim is recommended to prevent lifting.  Cura's brim setting will interfere with the features on the underside, and is not suitable for this.

Step 2:

Once the Keybed print is finished and cleaned up, use a drill with a 4.5mm drill bit to cleanly round out all 120 key center-holes (detaching the small cylindrical supports in the process).

Clear out any remaining stray plastic in the key-switch and tact-switch recesses with a dental pick, needle nose pliers and/or flush cutter.

Step 3:

Bend/clip the four tact-switch legs using the photo as reference.

Step 4:

Using a small hammer and something that can serve as a ~5mm flat punch tool, carefully tap each of the 120 tact-switches into place using the printed Keybed Support Stand to support the other side of the board while striking.

The fit needs to be tight enough that the switches won't pop out from the force of the mechanical key-switch plunger pressing down from above.

Step 5:

Optional, but recommended:

Find a second pair of hands, and using a multimeter in continuity mode, test each of the tact-switches to make sure that they close properly, and were not damaged on insertion.

Once soldered in place, removal will be difficult, so take the time to test now.

Step 6:

With the help of the printed Diode Bending Forms, bend and insert all 240 diodes into their recesses.  Remember that the cathode (stripe side) is opposite the button legs.

Screw the left and right walls to the keybed temporarily to act as a stand, making diode insertion much easier.

Step 7:

Using a flush cutter, carefully trim the plunger cap from the bottom of each of the 120 key-switches.  Wear eye protection!

Be careful not to press the key down while cutting, or you might cut the plunger stem as well.

Ensure that the plunger stem can protrude smoothly and fully from the hole in the bottom once the cap has been removed.

Step 8:

Insert the key-switches into their housings.  You should feel the subtle click of the tact-switch activating when the key-switch is nearly bottomed out.  If not, check to make sure the tact-switch is fully inserted and that there isn't any stray plastic lodged in the recesses.

Once installed, run a thin bead of hot glue along opposite sides of the key-switches where they meet the housing to hold them in place securely.  The key-switches will now hold the diodes in place so that the board can be flipped over for soldering, and the left and right walls can be removed again.

Step 9:

Solder each key-switch row leg to their respective tact-switch row leg.  The iron will melt the surrounding plastic a little, but use a hot iron with plenty of flux, work carefully and quickly, and it will not be a problem.  The keybed will tolerate a fair amount of abuse; I've successfully de-soldered and replaced flakey key-switches after having completely finished assembly before.  This is not ideal however, so work carefully.

Note that it's easiest to run through steps 9-12 for each row in sequence so that fewer diode legs are in your way while working.

Step 10:

Solder each tact-switch column leg to their respective diode anodes, and trim the excess anode leg.

Step 11:

Solder each key-switch column leg to their respective diode anodes, and trim the excess anode leg.

Step 12:

Solder the uninsulated row wire to the tact-switch row legs using the recessed channels as a guide.  Row wire should rest on top of the tact-switch leg for a solid connection, as the longer uninsulated wire will need to absorb more heat from the iron.

Blue tape is useful for holding the wire in place while soldering.

Step 13:

Using a multimeter in diode test mode, clip onto each row wire sequentially, and with the other probe, test each key-switch and tact-switch diode cathode leg to ensure that they read with the switches closed.  Repeat the process until all 240 diodes have been tested.  If any fail to read, check your solder joints, and re-solder if necessary.

When finished, stand the Keybed on its side to avoid contaminating the buttons, and clean the excess flux from the row wiring with an old toothbrush and some isopropyl alcohol.

Step 14:

Cover the exposed row wiring with an electrical insulator to prevent the column wires from making contact.

I've used hot glue in the past, which looks gross, but is extremely easy to work with.  I've also used a 3D pen to entomb the row wiring in plastic (not recommended, as repairs are a nightmare).  I tried Kapton tape this time, which I think looks neat, but was more fidgety than I expected due to the tape sticking to everything but the keybed.  If all else fails use insulated column wire, but it's a pain to strip, and melting insulation is nasty.

Step 15:

With the help of the Column Wire Bending Form, bend 18 uninsulated column wires into zig-zags and solder to the tact-switch and key-switch diode cathode legs.  The legs can be folded over to hold the column wire in place while soldering, and then trimmed when finished.

Due to the asymmetrical layout, the wires for column 0 (containing the control panel buttons) will need to be bent by hand.  Try not to cross over anything conductive.  Or screw up like I did, and just use hot glue to hold the wires apart.

Step 16:

Measure, cut and strip lengths of multicolor insulated wire that will be used to connect each of the 12 row, 10 tact-switch column, and 10 key-switch column wires to the microcontroller I/O.

Solder to the rows at their ends, and to the columns in convenient locations, and use the Wire Cable Combs to neatly hold the other ends in the correct order for later soldering to the microcontroller per the pinout above.

Step 17:

Screw the four walls together in a square, carefully center them over the bottom-plate, and hold everything in place securely with blue tape.

Using the screw holes in the walls as a template, drill 12 holes through the bottom-plate using a 3mm drill bit.  Be sure to mark which side is front and back, as the holes won't necessarily line up if you change orientation.

Repeat this process for the 8 holes in the top-plate.

Step 18:

Use a 3.5mm, followed by a 4mm drill bit to widen out the holes in the top and bottom plates so that they comfortably accommodate the M4x25mm wood screws.  Between each step, line the plate holes up with the wall holes to make sure they're completely centered.  If not, use a round needle file to expand the holes out and over until they are.

The reason for all of this hassle vs. just printing the holes in place is that even a tiny amount of warping across any of the larger connected parts will cause the case to bend noticeably when fully assembled.  If done correctly, this should mitigate the problem.

Step 19:

Insert screws along one edge of the bottom-plate, and place it just over the edge of your workbench.  With a slot-tip soldering iron, heat while twisting each screw back and forth until it melts into the plastic, forming a countersink.  Wait for it to cool, and remove the screws before repeating the process around each side.  On low heat (and with some luck) you can create a smooth lip around the countersink holes which looks very nice.

Otherwise, just remove the excess melt with a flush cutter.  Make sure that the inside surface (wall side) is completely flat in either case.  Repeat the process with the top-plate.

Step 20:

Screw the four walls together, and then to the keybed.  The front and rear walls should hinge at their lower screws.  Ensure that they can be pushed flush against the keybed wall, and if not, sand away more plastic from their inside walls.  Open a gap between the front wall and the keybed, and apply a bead of CA glue along the front of the keybed wall.  Apply pressure to the keybed to ensure that it sits perfectly flush with the top of the front wall, then press and hold the wall against the keybed while the glue cures.

Repeat this process for the rear wall.

Step 21:

Apply pressure to the keybed to ensure that it sits perfectly flush with the top of the right wall, and on the underside where they touch, run a thick bead of hot glue along the length to securely attach the left wall to the keybed, and hold in place while the glue cools.

Repeat this process for the left wall.

Step 22:

Solder lengths of insulated wire to the rotary encoder CLK (white in the photo), DT (yellow), SW (green), +3.3V (red) and GND (black) pins.

And the potentiometer +3.3V (red), GND (black), and data (center) pins.

Attach the rotary encoder and potentiometers to the top-plate with the nuts and washers.

Step 23:

Solder lengths of insulated wire to the OLED display GND (black), +3.3V (red), SCL (yellow), and SDA (blue) pins.

Carefully line up and glue the OLED in place using hot glue through the PCB corner holes.  Trim away any squeeze-out with a flush cutters to prevent it from getting pinched between the top-plate and the keybed/walls.

Once assembled and tested later, glue around and under the perimeter of the PCB as well to ensure that it stays in place.

Step 24:

Screw the top-plate onto the four walls.

Gently lift the middle of the narrow strip of plastic running along the front wall, and apply a very thin bead of CA glue under the strip along the front wall.  Hold the parts together while the glue cures.

Repeat this process for the rear side.

Step 25:

Solder lengths of insulated wire to the 1/4" TS jack tip (+3.3V - red), and sleeve (data - yellow) legs.

Solder lengths of insulated wire to the 3.5mm TRRS jack tip+ring legs (MQSL - blue) and sleeve (GND - black) legs.  Leave the remaining ring connector (mic) disconnected.  The pinout of this specific connector is:  1 - GND, 2 - TIP/LEFT, 3 - RING/RIGHT, 4 - MIC

Attach the jacks to the rear wall with the nuts and washers.

Step 26:

Solder 220 Ohm resistors in line with pins 4 (+3.3V) and 5 (serial data) on the 5-pin DIN MIDI connector.  Then solder lengths of insulated wire to the resistors for +3.3V (red), and serial data (green), and to the GND (black) pins.

Attach the to the rear wall with M3x20mm bolts.  Cover the 3 DIN legs (and resistors) with heat shrink when finished to prevent them from making electrical contact with each other.

Step 27:

Use two wire nuts to connect all +3.3V (red) wires together, and then all GND (black) wires together, leaving a spare lead loose from each to connect to the +3.3V and GND pins on the microcontroller.

Step 28:

Feed all of the remaining wires into the appropriate holes of the Wire Cable Comb in preparation for final soldering.  Use the pinout as reference.

Take a moment to ensure that every single wire in the cable comb is running to and from the correct location.

Step 29:

Trim the ends of the wires running through the cable comb so that they are all flush with each other.  The case wall makes a convenient a straight-edge.

Strip the ends with your wire stripper, and carefully insert each wire into the appropriate through-hole in the microcontroller PCB using a needle-nose pliers.  Bend the ends over to hold them in place while you work.  Double-check your work before soldering.

Step 30:

Solder all wires into their designated through-holes, and neatly trim the excess wire.

With enough coaxing, the solid core wire should be stiff enough to hold the microcontroller in place in the area underneath the pitch bend and modulation buttons.

Step 31:

Connect the USB-B panel mount to the rear wall using M3x20mm bolts, and plug it into the Teensy.

Step 32:

Enable the hardwareTest() function in the program loop of the Arduino sketch, and upload the sketch to the Teensy.  Use the serial monitor readout to test all of the key-switches, tact-switches, rotary encoder, pots, and foot pedal before continuing.

If anything fails to read, double-check with a multimeter, and re-solder if necessary.

Step 33:

Insert the Keybed Center Stand into its hole in the keybed.  Place the instrument on a flat surface, and push the stand down from the top until it won't go down any further.

Once positioned, hot glue it in place from the top, and then the bottom to hold it in place securely.  You can use CA glue as well, but hot glue is strong enough, and is also removable again in case it needs to be repositioned.

Step 34:

Screw the bottom-plate to the four walls.

If you find that the case is warped once the screws are tightened, double-check to make sure that the plate screw holes are completely centered on the wall holes.  If they aren't too out of spec, you can carefully ream the holes and countersink walls with a round needle file and razor knife to bring them back into position.

Once satisfied, apply adhesive rubber feet to all four corners.

Step 35:

Clean up the 3D printed keycaps and attach them to the key-switches.

With tolerances this tight, even different filaments can cause the keycap to grip the cross stem too loosely, or too tightly.

If the keys are too loose, a tiny dot of CA glue in the cross hole will hold them securely while still being removable if needed.  If they're too tight, using a spare key-switch as a reamer tool works well, and avoids putting undue stress on the instrument switches.

Enjoy your new musical instrument!