Project Code, CAD Files, and Build Guide
Harmonicade - A modular 5.5 (x2) octave, multi-channel MIDI keyboard using arcade push-buttons in the Wicki-Hayden button layout.
- November 2019
- December 2019
Goals of this project:
- Create an instrument with two button decks using a single brain, but still allow for the portability that having separate devices allows.
- Design a platform with interchangeable parts that can be modified or augmented without reprinting an entire case.
- Build in a way that allows construction without access to (or the desire to use) a large volume 3D printer for parts. To that end:
- The case walls, decks and panels are fastened together with wood screws rather than being printed in place.
- Case walls share the same width/height dimensions and could easily be swapped with 1/2" x 3" (13mm x 64mm) hobby board.
- Button decks and bottom panels could be constructed using flat 1/8" (3mm) wood project panels/acrylic sheets and a laser cutter/CNC machine (or some careful drill work with a step bit).
What was learned from this project:
- I felt confident enough in the design to solder directly to the button lugs this time, and this may be my preferred method going forward vs. spade quick-connectors. It's cheaper, the connection is more reliable, it takes about the same amount of time to assemble the wiring matrix regardless, and ironically I think it's actually easier on the buttons...
- Magnets are not an ideal solution for holding case parts together. The pull is both too weak to hold together for transportation , and too strong to allow for easy separation. Future redesigns will likely use a locking pin driven through from the case top or bottom.
- Using DB25 connectors as an intermediary between the button decks and the micro-controller works amazingly well, and again may be my preferred method going forward, even when not passing signal through a case wall. Not needing to worry about damaging the micro-controller when re-soldering to different pins is a very real relief.
Ideas for this had been brewing since the end of summer 2019. After months of testing, I am confident enough that Wicki-Hayden is my preferred note layout, but I was dissatisfied with the clumsy control button layout (and general poor quality) of the Melodicade Prototype #3, and decided to try designing something that could be assembled and reconfigured from smaller separate pieces, rather than printed in place and disposed of afterwards.
My original intention was to build this using wood and laser cut acrylic, but the idea of printing smaller parts flat had me curious to know if the annoyances of warping and 36 hour long print failures could be resolved doing things this way. Printing many smaller pieces is definitely easier, however the warping issues persist, and I somewhat regret not constructing this from something more durable than PLA.
I'm also not entirely happy with the control module layout, and may change or replace it in the future (at the very least to add a couple of LED indicators), but I'm happy enough with things for now to spend at least a few months playing!
Shopping list used for this build:
Note: In total, parts cost approximately $650 USD for this project (mostly from Sanwa buttons) without modifications, as built in 2019.
- 1 x Teensy 3.6 or other Arduino compatible micro-controller with sufficient I/O pins
- Control panel:
- 3 x Sanwa OBSF-24 White
- 2 x Sanwa OBSF-24 Red
- 1 x Sanwa OBSF-24 Black
- Note buttons:
- 56 x Sanwa OBSF-24 Green
- 56 x Sanwa OBSF-24 Blue
- 96 x Sanwa OBSF-24 White
- 4 x 10K Ohm Potentiometers with Knobs
Panel Mount Jacks:
- 2 x 1/4" Female TS Mono Panel Mount Jack
- 1 x Micro USB 5-pin Male to USB Type B 2.0 Female Extension Panel Mount Jack
- 1 x 5-pin DIN Female Connector Panel Mount Jack
- 1 x Spool 22 AWG Gauge Solid Hook-Up Wire - Black
- 1 x Spool 22 AWG Gauge Solid Hook-Up Wire - Red
- 231 x 1N4148 Switching Diodes
- 1 x Kit Heat Shrink Tubing
- 2 x 220 Ohm Resistors
- 1 x Spool PLA Filament 1.75mm - Black
- 1 x Spool PLA Filament 1.75mm - White
- 1 x Spool PLA Filament 1.75mm - Gray
- 1 x Spool PLA Filament 1.75mm - Blue
- 118 x Wood Screws (M4 x 25mm)
- 8 x Neodymium Disc Magnets with Double-Sided Adhesive
- 10 x Black Rubber Feet
- 2 x DB25 Solder Connector - Male
- 2 x DB25 Solder Connector - Female
Deck Wiring Instructions:
Note: Both decks are wired exactly the same way, and are completely interchangeable. This is accounted for in the DB25 connector pin-out on the control module.
- Cut black wire into 93 x approximately 3cm long links, and strip 5mm of shielding from both ends.
- Bend the ends into J-shaped hooks using a needle-nosed pliers, and link the top-most lug of each button in a row together in a chain.
- Solder the wires to the button lugs.
- Solder a 10-20cm long wire link from the end of each row (top to bottom) to pins 12 through 2 on the DB25 male connector.
Note: Button columns are in an alternating zig-zag arrangement with the exception of the final column closest to the DB25 connector.
- Solder a 1N4148 diode to the bottom-most lug of each button in a column, with the stripe facing away from the button. If angled left/right in a manner consistent with the zig-zag layout, you should have a neat straight row to connect through.
- (Optional) If your diode legs are long enough, you may be able to solder them directly to each other, saving the need to cut and strip links of red column wire.
- Bend the diode wire opposite the button into a small hoop to allow it to hold your wire for soldering later.
- Cut red wire into 90 x 3cm long links, and 4 x 6cm long links, and strip 5mm of shielding from both ends.
- Bend the ends into J-shaped hooks using a needle-nosed pliers, and link each column of diodes together in a chain.
- Solder the wires to the diodes.
- Solder a 10-20cm long wire link from the end of each column (left to right) to pins 24-15 on the DB25 male connector.
Control Module Wiring Instructions:
Control module wiring is a bit more complicated due to row wires needing to pass through many of the inputs on the control module, from the left-side DB25 female connector, to the right-side DB25 female connector.
Technically the Teensy 3.6 has enough pins to allow these to be wired directly (bypassing the scanning matrix entirely), but that means soldering to pads on the underside instead of the pins, and this seemed both safer, and more efficient.
1/4" TS Jacks:
- Row 0: Wire pin 12 from the left-side DB25 female connector to a lug on the expression pedal 1/4" TS jack, and then on to pin 2 of the right-side DB25 female connector.
- Row 1: Wire pin 11 from the left-side DB25 female connector to a lug on the loop pedal 1/4" TS jack, and then on to pin 3 of the right-side DB25 female connector.
- Row 2: Wire pin 10 from the left-side DB25 female connector to a lug on the control up button, and then on to pin 4 of the right-side DB25 female connector.
- Row 3: Wire pin 9 from the left-side DB25 female connector to a lug on the control middle button, and then on to pin 5 of the right-side DB25 female connector.
- Row 4: Wire pin 8 from the left-side DB25 female connector to a lug on the control down button , and then on to pin 6 of the right-side DB25 female connector.
- Row 5: Wire pin 7 from the left-side DB25 female connector to a lug on the meta A button, and then on to pin 7 of the right-side DB25 female connector.
- Row 6: Wire pin 6 from the left-side DB25 female connector to a lug on the meta B button, and then on to pin 8 of the right-side DB25 female connector.
- Row 7: Wire pin 5 from the left-side DB25 female connector to a lug on the looper button, and then on to pin 9 of the right-side DB25 female connector.
Remaining Row Wires:
- Row 8: Wire pin 4 from the left-side DB25 female connector straight through to pin 10 of the right-side DB25 female connector.
- Row 9: Wire pin 3 from the left-side DB25 female connector straight through to pin 11 of the right-side DB25 female connector.
- Row 10: Wire pin 2 from the left-side DB25 female connector straight through to pin 12 of the right-side DB25 female connector.
- There's only one: column 10. Solder a 1N4148 diode to the remaining lug of both 1/4" TS jacks, and each of the 6 control buttons (remembering to keep the stripe facing away from the input source), and connect all of them together into a single column.
Wiring everything to the Teensy:
DIN MIDI Connector:
- Connect DIN pin 5 to Teensy pin 1 through a 220 ohm resistor.
- Connect DIN pin 2 to GND.
- Connect DIN pin 4 to +5V (labeled VUSB) on the Teensy through a 220 ohm resistor.
- Wire the leftmost lugs of each pot together, and connect them all to the +3.3V pin on the Teensy
- Wire the rightmost lugs of each pot together, and connect them all to a GND pin on the Teensy.
- Wire the center lug of each pot to the appropriate pins as defined below:
Name: Teensy Pin:
Pot Upper Left: A14
Pot Upper Right: A15
Pot Lower Left: A16
Pot Lower Right: A17
Note: Remember that the right deck is wired exactly the same as the left deck, so the deck column orientation flips when rotated 180 degrees (indicated by parenthesis).
Name: DB25 Female (left) DB25 Female (right) Teensy Pin:
Col 0 24 N/A 2
Col 1 23 N/A 3
Col 2 22 N/A 4
Col 3 21 N/A 5
Col 4 20 N/A 6
Col 5 19 N/A 7
Col 6 18 N/A 8
Col 7 17 N/A 9
Col 8 16 N/A 10
Col 9 15 N/A 11
Col 10 N/A N/A 38 *control module column
Col 11 (9) N/A 15 12
Col 12 (8) N/A 16 24
Col 13 (7) N/A 17 25
Col 14 (6) N/A 18 26
Col 15 (5) N/A 19 27
Col 16 (4) N/A 20 28
Col 17 (3) N/A 21 29
Col 18 (2) N/A 22 30
Col 19 (1) N/A 23 31
Col 20 (0) N/A 24 32
You can choose to either patch into the row pins by doubling up on one of the DB25 connectors, or by tripling up on the input source lugs (and then splicing into the remaining 3 rows). I would suggest the former, (even though I stupidly chose the latter)...
Name: DB25 Female (left) or DB25 Female (right) Teensy Pin:
Row 0 12 2 39
Row 1 11 3 14
Row 2 10 4 15
Row 3 9 5 16
Row 4 8 6 17
Row 5 7 7 18
Row 6 6 8 19
Row 7 5 9 20
Row 8 4 10 21
Row 9 3 11 22
Row 10 2 12 23
Once everything is wired:
- Hot glue the magnets and their decorative covers into place inside of the deck and control module walls (making sure to keep correct polarity).
- Hot glue the DB25 connectors into their housings in the deck and control module walls.
- Hot glue the deck guide posts into place.
- If the deck top is sagging, install the optional support beams and support posts. If the long support beams are too snug, the narrow support beams should be sufficient to keep everything in place.
- Zip the screws in, and you're done.