Concertina v0.6.0 build guide

This article describes how to produce a working physical copy of the first version of the Concertina, a computer keyboard.

This guide remains valid, but the v0.6.0 design is no longer the most recent hardware. For a later version, see Concertina v0.7.0 build guide.


Prerequisite skills

This guide is finished, but not comprehensive. It is written on the assumption that you already know the following, and have all the necessary tools:

The most difficult part of the soldering is for full-speed USB 2. This is slightly sensitive to an impedance mismatch, but without knowing anything about you, I’m sure you’ll do fine.

Overview of work

  1. Source off-the-shelf parts.
  2. Print the other parts. Covered in this article.
  3. Drill and tap screw holes.
  4. Clean up your prints.
  5. Check the fit.
  6. Do whatever painting and varnishing you want.
  7. Assemble and test the keyboard. Assembly is covered in this article.
  8. Finalize key placement, firmware etc.

Bill of materials

Expect to use up the following:

Sourcing the models

A complete Concertina includes printed parts from multiple sources. The following applications produce the printable models you need:

All are free as in freedom and free as in free beer. DMOTE project documentation on GitHub describes how to generate STL files for the case. Here, it’s assumed you have already run make concertina_64key to produce a full set of STL for the keyboard case of the bundled design, without any customization. There are correspondingly simple commands for the other applications, documented in each project.

Printing the case: Orientation and slicer settings

All the parts for a Concertina case, which excludes keycaps and assortment drawers. Models from the DMOTE application, v0.6.0, most of them freshly printed: Unpainted and not yet cleaned.

All the parts of a case, printed

Of the files produced by the DMOTE application, the following should not* be printed.

Where nothing else is indicated, print one physical instance of each file named below.

The following advice assumes a PLA-like material and adequate cooling on an FDM printer. I recommend gyroid infill of 15% for a production print, except where otherwise noted.

Main body


STL from DMOTE v0.6.0, image from Ultimaker Cura 4.7.0.

Orientation of a main-body part on the build plate

The main body, mirrored for each side, is designed to print standing on a flange, as shown here. Aim for the low end of your filament’s temperature range. This way, no support should be required.

Thumb cluster


STL from DMOTE v0.6.0, image from Ultimaker Cura 4.7.0.

The thumb cluster is designed to sit flat on the reverse side of the flange. Support is required.

In assembly, three screws will connect the main body to the thumb cluster at the flange. If you’re using as little material as possible, target the two screw holes at the taller side of the thumb cluster in your slicer and make sure their interior wall thickness is at least 1.5 mm, or else tapping the holes and firmly mounting the screws will be difficult.

Bottom plate

An FDM printer is not the optimal tool for this part. Consider CNC milling or laser cutting in a stiff and dense material. Regardless of technique, if you can fit a combined bottom plate (both STL files combined as one body; see DMOTE application documentation) in your build volume, that is generally preferable to printing the two halves separately.


STL from DMOTE v0.6.0, image from Ultimaker Cura 4.7.0.

If you do print it, the conical screw holes should widen from the printer’s base plate. For best results, consider gradual grid infill (rather than gyroid) and apply ironing for a smooth top surface.

Central housing


STL from DMOTE v0.6.0, image from Ultimaker Cura 4.7.0.

As the name implies, there is only one central housing. It is designed to stand on its short end in printing. Support is not required.

This part prints with threaded screw holes and magnet bosses. I recommend a quick test print of one of the areas examined in detail here, so you can check the fit.



STL from DMOTE v0.6.0, image from Ultimaker Cura 4.7.0.

Right-hand bookend pictured

The right-hand bookend accommodates the USB port and MCU. The left-hand bookend does not. Both are designed to print with the same footprint as the rear housing.

There’s a sensitive area on the upper lip of the USB port where I’ve had filament landing less than perfectly. If you have PVA filament, you might want to use it there. Carefully screened tree-style support beneath the upper lip is also effective. Otherwise I say don’t bother with support.

To save on filament, you can get away with zero top layers. None of them would be visible from the outside, they don’t do much for stability, and you may get a marginally better fit against the main body without them.


All the parts for a Concertina case, plus assortment drawers. Models from the DMOTE application v0.6.0 and `dmote-drawer` v0.1.0. All parts are cleaned up, grey exteriors have been painted, and switches mounted. For instructions on mixing the paint, see Concertina #1 colour scheme.

The case, and drawers and switches, cleaned up

Here’s a rough order of operations for assembly:

  1. Mount the magnets in the central housing.
  2. Put screws in the drawers themselves and test the fit.
  3. Mount all the switches. Image here.
  4. Optional: Line the interior for sound.
  5. Mount the external USB connector.
  6. Do all the wiring, putting the key clusters together and prepping the MCU.
  7. Flash firmware for testing purposes.
  8. Test matrix hardware.
  9. Mount the MCU, not necessarily on its shelf.
  10. Optional: Attach weights to the bottom plate in the lowest compartment of the central housing, for stability.
  11. Close up the case.
  12. Mount all the caps.


You can just stick the magnets in their pockets, but if you want to make the magnets easy to retrieve later without destroying the housing, drill small perpendicular holes first, so you can reach the bottom of each pocket with a small tool behind the magnet.

Lining the walls

Like the instrument it’s named for, the body of a Concertina forms an acoustic resonance chamber, albeit a poor one. To keep it mute, you can line the interior.

A composite image of the central housing sub-assembly from both ends, with sheets of 2 mm cork glued to the insides to dampen sound.

If your bottom plate does not provide a lot of friction, go ahead and line the outside of that too. Soft (unlaminated) cork is good for both purposes.

External USB

Slip the USB B port into the hole in the rear wall of the case.

A composite image of a USB B port mounted in the rear wall of the right-hand-side bookend, from two angles.

Consider using a little dab of PVA-based glue or paste for a tight fit. Bend the grounding nub around the interior of the port to secure it. Solder your pigtail cable onto the interior pins and its shielding to the nub.


For a detailed discussion of this topic from a design perspective, see my 3D keyboard wiring article. It uses the Concertina as an example.

This image is the union of this and this.

Wiring diagram, left-hand side interior

I recommend starting with the columns, stripping each wire by first measuring it in place, before you heat your iron.

The first stage of wiring up the right-hand key clusters.

Columns by cluster, right-hand side

Complete the columns by joining the clusters. Don’t make it tight. Put an extra 3 cm of wire into these linkages so that you can separate the clusters to complete the rows, and for subsequent maintenance work.

The second stage of wiring up the right-hand key clusters, joining the two clusters where the columns cross them.

Columns united

Lastly, add diodes and wire up the rows.

The fourth stage of wiring up the right-hand key clusters, adding diodes and connecting the rows.

Wiring complete

When this is done, put in the screws connecting the thumb and main clusters on each side, and then bundle up the wires.

The last stage of wiring up the left-hand key clusters. The larger bundle of wires has an appropriate length of about 30 cm away from the subassembly body. The smaller bundle is usable, but longer than the optimum.

Left-hand side with routable bundles

On the right-hand side, you need about 6 cm of wire between the keys and the MCU. On the left-hand side, you need a lot more, reaching at least 30 cm away from the key-cluster subassembly, so that you can route it all through the loft of the central housing to reach the MCU in the right-hand bookend.

Preparing the MCU

Here’s how to attach optional pin headers to a Pro Micro.

An example of how to prep an MCU board, in this case a Pro Micro, with a few headers and a tiny reset button on stalks.

This configuration is slightly exaggerated and will prevent the use of the MCU shelf built into the bookend, but with solid-core wire, you don’t need the shelf. Notice how the two 8-pin headers unite to collect all the columns of keys. The 4-pin header is for the rows of the left-hand side, and the four empty through-holes on the near side of that header are for the rows of the right-hand side of the keyboard. See the detailed pinout below.

The tiny reset button is wired between the MCU’s RST and GND. It’s optional because you can always short those pins manually. I recommend you do this before attaching the MCU to the key clusters, and put a reset button in your QMK keymap.

MCU pinout

The following table describes Pro Micro I/O pin designations and the use of each pin in the Concertina’s firmware. Wire colours are those of the reference photos above.

QMK Silk Concertina wire
Left-hand side of PCBA ⮯
D3 TX0 Not used
D2 RX1 Not used
D1 2 Black Row closest to user, left-hand key clusters
D0 3 Red Middle rows
D4 4 Black
C6 5 Red Row furthest from user, left-hand key clusters
D7 6 Black Row closest to user, right-hand key clusters
E6 7 Red Middle rows
B4 8 Black
B5 9 Red Row furthest from user, right-hand key clusters
Right-hand side of PCBA ⮯
F4 A3 White Outermost index-finger and thumb columns (both halves)
F5 A2 Green Middle columns
F6 A1 Orange
F7 A0 Purple
B1 15 Yellow
B3 14 Brown
B2 16 Grey
B6 10 Blue Outermost pinky-finger columns (both halves)


The Concertina is primarily a hardware design. You can run whatever firmware you want on it. Fully featured example firmware that matches the “official” keycaps is available as part of the QMK project. This comes with a web-based tool for easy reconfiguration: QMK Configurator.

A cropped screenshot from QMK Configurator (API v0.1), showing the base layer (layer 0) of the default keymap for the Concertina (v0.6.0 & v0.7.0) in simulated “GMK Plum” colours.

As noted there, the example assumes a Colemak keyboard layout on the OS side (hence all the CM_* tags), but all the basic stuff should work on a computer expecting QWERTY.

As of version 0.1 of Configurator, the web interface displays parentheses on tapping Ctrl and Alt keys, whereas in the underlying C code, tapping them produces brackets and braces, not parentheses.

Closing the case

If the firmware test went well and nothing is on fire, drive in all the screws you want.

Head-on view of an assembled Concertina case, plus assortment drawers, missing only keycaps. Models from the DMOTE application v0.6.0 and `dmote-drawer` v0.1.0.

From here on out it’s smooth sailing. Put on the caps, fill the drawers, plug in and enjoy your new keyboard.

This Concertina with its assortment drawers extended.