Evolution of an ideaBack in 2010 I decided I wanted to make my own custom keyboard that suited my own needs. I discussed it at length on geekhack and came up with the following design:
2010 design
August Dvorak's numeric layout which, with standard computer shifted keys, results in the brackets being assigned to the index fingers, no duplicate shift or control keys, no Home, End, Page Up, Page Down keys, additional asterisk key to eliminate the necessity of hitting shift-8 for this useful character and no printable character key further than one column from the home keys.
At the time, however, I had insufficient skills and resources to do anything about the design and nothing came of it.
Over the course of the next six years, I rethought aspects of the idea and reorganised the keys to better suit how I use the keyboard, including reinstating the Home, End, Page Up and Page Down keys and moving some of the keys around to make certain useful combinations (Ctrl-Alt-Del, Win-L etc) easier while moving the CapsLock – which I seldom use – further away.
2016 redesign
This design was based on the idea of having separate keyboards for left and right hands.
Looking at the design of other ergonomic keyboards such as the Truly Ergonomic Model 227, Kinesis Advantage and
Kurplop's “Alumaplop” and further rethinking of key positions resulted in further changes, including inverting the thumb arrays to put the commonly-used keys at the bottom (thanks
Kurplop) and offsetting the columns to suit finger length.
Experimentation, using surplus keycaps glued to strips of plastic cut from an old DVD case, enabled me to establish the amount of offset and the angle and positioning of the thumb arrays.
Experiment to determine vertical offset and angle of thumb array
I finally settled on a 35° angle for the thumb array rather than 40°, resulting in the following layout for the two separate keyboards:
Proposed separate left and right board design
Further rethinking led me to decide that a single keyboard would be better and further experimentation with the dummy keycaps and DVD cases was performed to determine separation and relative angle of the arrays. “Tenting” of the board was not considered as I have never experienced problems with pronation of the wrists.
Once I had experimentally determined the best angle and spacing, I created a rough 3D model of the design:
Single keyboard design – arrow keys positioned to be accessed by the left hand with “minimal movement”.
Having gone as far as I could with old keycaps glued to DVD cases, I started work on a physical prototype using microswitches mounted on 1mm ABS sheet.
4 August 2016: Initial prototype – note the high-tech joiners made of black duct tape holding the two halves together.
Now that I had a prototype that I could actually “type” on and try the layout, I quickly determined that the placement of the arrow keys was less-than-ideal and that I really wanted the frequently-used square bracket, tilde and backslash/pipe keys to be more easily accessed.
As I told my kids, this is precisely why we build cheap, easy-to-modify prototypes.
I also quickly determined that the microswitches were noisy and very hard to activate and therefore not suitable for typing, causing me to abandon my initial plan to wire up this prototype and use it as a temporary or spare keyboard.
A quick redesign later, I modified the prototype to place the arrow keys at the bottom of the board – very much like in my original 2010 design – and moved the ESC, square brackets, backslash, tilde, Home, End, Page Up and Page Down keys to different locations – with the result that the keyboard wound up narrower and (thankfully, for the sake of my OCD) symmetrical, with less waste space.
Modified prototype
After testing the modified prototype and ensuring that new layout was suitable – despite the fact that I now had keys more than one column away from the home column (albeit closer to the home keys than some keys on the home columns themselves) – I settled on this final design:
Final layout
Square braces, tilde and backslash within easy reach of the index fingers (like the curved brackets), arrow keys easy to reach with thumbs or by repositioning either hand and a nice big clear patch in the centre to accommodate the controller circuit board.
Now that I had my final design, it was time to turn to the practical considerations of making the real McCoy.
For the case, I looked at the possibility of getting it 3D printed but found that it would be cheaper to get one of the sheet metal suppliers to cut pieces to my own specifications.
The standard means of making a case seemed to be to get layers made in the appropriate shapes so I used Inkscape to create DXF files which One Stop Cutting Shop up in Auckland quickly turned into shaped pieces of aluminium and freighted them to me for an extremely reasonable price.
18 August 2016: Case components
To my great delight – and surprise, due to my lack of faith in my ability to put together a DXF file – the holes were the perfect size to hold the switches securely.
The next step was to drill holes in the various layers so that they could be joined together into a case, to which end I built a simple drilling jig to hold the pieces, borrowed my sister's clamps and drill press (yeah, OK, my sister has a better-equipped workshop than I do) and drilled the holes.
Temporarily assembled case
I then drilled the holes to mount the controller PCB and accommodate the LEDs.
I had planned to have the case anodised but the three anodising companies in New Zealand proved to be less than useful – one has a straight NZ$85 set-up fee regardless of the size of the job and the other two clearly didn't want my custom as they couldn't be bothered responding to my emails.
So, instead of getting an anodised finish, I went to Elite Powder Coating in Palmerston North, who did an excellent job of applying a matt-black orange-peel finish to the top panel. I had to scrape the inside of all 83 holes as the powder coating had made them marginally too small for the switches, but that wasn't too much of a problem and I was well pleased with the finished product.
Top panel drilled and powder coated
Back in 2010, I had no way of knowing which mechanical key switches would suit me and no way of finding out. The only mechanical switches to which I had access were some Alps clones in an old Ortek keyboard, which were less than ideal. Or, put another way:
bloody noisy and awful to type on.
In 2016, however, I learned of key switch sample kits. On investigation, I determined that the cost of getting one of these sample kits freighted from the USA to New Zealand would be prohibitively expensive so, instead, I ordered four different Cherry MX switches, four key caps and four silicone rubber O-rings from Shenzhen YMD Tech Co. Ltd. via Aliexpress – at a comparable price to that of a commercial kit and freight free.
The only thing my “sample kit” lacked was the mounting board – so I cut some 14mm x 14mm holes in an empty DVD case and mounted the switches in that.
Cherry MX “Sample Kit” – Blue, Red, Black, Brown with keycaps and O-rings
With my home-made sample kit, I was able to determine which Cherry switches I liked and ordered a further 83 Cherry MX switches from Shenzhen YMD Tech Co. Ltd.
2 September 2016: A bunch of Cherries. I should have put them in a bowl for this photo...
Switches mounted
Mostly brown tactile “typing” switches except for the red linear “gaming” switches for the arrow keys and the clicky blue tactile switches for space and enter (to provide an audible cue in keeping with the “clack” of the stabiliser bars in most space and enter keys).
Also visible in the above picture are the heads of the two machine screws – scavenged from an old defunct laptop – that secure the PCB mount/spacer to the underside of the top panel and two machine screws that hold the pillars – also scavenged from the defunct laptop – to secure the outer corners of the keyboard when assembled.
The PCB spacer is made from five layers of 1mm ABS sheet left over from making the prototype.
Due to my unusual layout, a standard set of keycaps has insufficient 1u keycaps of the sizes I wanted – another reason why scavenging key switches and their caps from the Ortek keyboard would be less than optimal – but WASD keyboards kindly offered to do some substitutions on one of their sets for me and was able to provide me with keycaps in all the profiles and colours I required.
1 October 2016: Custom set of keycaps, keycap puller and complementary WASD sticker.
Six unneeded >1u keys were sacrificed to provide the four additional red 1u plain R2 keys and two additional red 1u “line” R2 keys that my project required.
Keys completed – Paige at WASD Keyboards Support described the result as “...looks almost like a conjoined Ergodox.”
The only thing that says “I know how to TYPE!” more clearly than having blank keycaps is having blank keycaps and a non-standard layout.
And nothing
refutes the above claim like having the backspace key where it can be easily reached
Because the keycap posts are centred and symmetrical, the keycaps can be mounted on the switches in any orientation. The red R2 keys in the thumb arrays are rotated 180° relative to the outer edge of the board so that they slope downwards towards the thumbs. This also improved the separation between them and the red R4 keys beyond them so that I only hit two at once if I want to (e.g. Shift-Del). Raised lines on the space and enter keycaps provide tactile feedback.
As I have a tendency to strike keys quite hard, all of the keycaps except one are fitted with rubber O-rings to reduce noise and impact. The O-ring was omitted from the CapsLock key to provide distinct tactile and audible cues when the CapsLock is pressed or, more accurately, “hit”.
With the keycaps in place, I was finally able to experiment to determine the optimal angle at which to mount the board. I tried various angles – backwards as well as forwards as I've seen some keyboard designs that slope away from the user – with the thought that I could use different thicknesses of rubber “foot” to set the angle if required. After lengthy experimentation, I determined that it felt most comfortable to type on if left flat. I then ordered some flat low-profile self-adhesive rubber anti-skid pads.
To join all the layers of the case into a cohesive structure, I purchased 3.5mm diameter 10mm long M2-threaded pillars and 5mm long flat-headed M2 machine screws. This method of assembly provides a tidy and professional-looking finish with small low-profile screw heads on both the top and bottom of the keyboard.
Case fastening solution
As the base is aluminium and I have no desire to have the switches or wires accidentally short out on it, I covered the inner surface of the base plate with two layers of self-adhesive plastic shelf liner.
Base and sides with faux-wood electrical insulation – looks pretty, too bad no one will see it...
The Wiring:After reading numerous posts on geekhack, I determined that the best, most cost-effective source of wire was Cat 5E cable. I bought 2.5 metres and spent an evening extracting the wires and untwisting the pairs to provide myself with around 20 metres of single-core insulated wire of roughly 28-30 gauge.
Each of the twisted pairs of wire had one with solid-coloured insulation and one with white-striped insulation in the same colour. This provides a means of making row and column wiring distinct (solids for one, stripes for the other) as well as different colours to make it easier to identify the wires coming from the PCB.
The controller board at the figurative and literal heart of the keyboard was taken from a cheap (NZ$12) Genius KB-110 rubber-dome-and-membrane USB keyboard. I used my multimeter to trace the circuits on the two plastic membranes and compiled a key matrix.
Key Matrix showing what switches need to be wired to which contacts on the controller PCB. All nicely colour-coded so I can identify the section of the board and whether or not the switch is one of the direct connections to the PCB.
I only bothered to record the keys I require for my layout.
I tested this matrix by plugging in the naked circuit board and temporarily shorting relevant pairs of contacts with a length of wire to ensure I got the characters and functions I required.
I decided against using a teensy controller for two reasons: the fact that a teensy controller is three times the price of the cheap keyboard I cannibalised – not including freight – and the fact that I had no faith in my ability to figure out a workable row/column matrix for my keyboard layout.
OK, it won't be NKRO, but it will have the appropriate programming to ensure that it will register all the key combinations I require and won't “ghost” if I hit the wrong combination of keys.
I printed and cut out 83 small self-adhesive labels and stuck them to the underside of the switches so that I could easily identify the appropriate keys from the back without any risk of miscounting and soldering the wrong switch into the circuit.
Because of the differences between the standard QWERTY computer layout, for which the original circuits were designed, and my bizarro modified Dvorak with thumb clusters that clump keys that are usually far apart, my circuit paths ended up looking quite strange with wires traipsing across the switch arrays in seemingly random fashion. Despite this, I managed to organise things so that the majority of the circuits started on the same side of the board – the side closest to the PCB's contact strip – and passed above or below the PCB mounting block to reach the switches on the far side.
Using Inkscape, I drew up wiring diagrams, one layer for each row and column and saved them as images that I could view later. These images, flipped horizontally then printed out, served as maps of the back of the switches showing where the wires were to run.
I also was able to come up with a “Bridge” layer for all the connections that were close enough to run uninsulated wire between the contacts without shorting against another contact or wire.
Circuit example – “R6” – showing green “bridge” connections, blue insulated wire connections and red marker on F8 to designate that this will be the anchoring point for the wire from the PCB.
Some circuits, such as C12 and C17, are naturally a lot less complicated.
All circuits – what is required to hook up the switches so they give the key values I desire.
Prognosis: it ain't gonna look pretty.
I stripped some of the wire and laid out the bridge connectors, wrapping them around the contact posts and crimping them in place with my pliers so they would not shift. The single-core wire was a joy to work with – much better than fine twisted strands. The wire gauge was light enough that I could wrap it around the switch contacts without bending them out of place.
Once all the bridges were in place, I soldered each of the contacts. My soldering was not brilliant, or particularly tidy, but it served to create a good conductive join – as a quick test with the multimeter confirmed.
Wire “bridges” between close or adjoining switches on the same circuit. Also, my inexpensive PCB mount/spacer made from surplus ABS sheet and fastened with scavenged machine screws.
After the bridges were all soldered, then began the long and often frustrating task of running insulated wire between the appropriate contacts.
By 3 November 2016, when the self-adhesive rubber feet arrived for the case, I had only managed to get as far as soldering the first four row “layers” – R0 to R3 – then there was a period of about nine months in which I did absolutely nothing on the project.
On 1 August 2017 I “got on with it” and did R4 to R7 in one day, during which time I exhausted my vocabularies of obscene words in four different languages.
1 August 2017: “Row” wires – those to be connected to the “R” contacts on the PCB. Admittedly does not look very “row”-like. All tested with the multimeter to ensure a good electrical connection. In the process of wiring it up, I found more locations where I could use an uninsulated short-range “bridge” without interfering with any of the other wires or contacts, which made the job easier than trying to make insulated wires of the right (short) length.
The following two days I worked on the column layers.
3 August 2017: Now with “column” wires added. I was right – not remotely pretty-looking. Discovered that I had missed making one of the uninsulated “bridges” but that was easily fixed.
A Costly MistakeThe PCB has pads of conductive carbon or some-such to make contact with the circuits printed onto the plastic membrane so, in order to enable wires to be soldered to the board, I needed to sand the board slightly with fine emery paper to expose the copper contacts underneath the pads.
Having done so, I then attempted to tin the contacts with solder, whereupon I managed to damage some of the contact strips irreparably – seems I had the temperature too low (400° C) and therefore was holding the iron on the contact too long, which caused the plastic PCB substrate to melt and the contacts broke away.
Later experimentation showed I should have had the temperature higher (>450° C) and only a brief contact. I also found that soldering the wires to the contact strips was not particularly firm and the wires would tear off, taking the contact strips with them.
As “The Warehouse” – our equivalent of Walmart – had changed the brand and model of their cheap keyboards and I specifically required a Genius KB-110 in order to avoid having to redo the retracing of circuits and resoldering of all the switches, I was obliged to order another Genius KB-110 online at the cost of NZ$19.54 (roughly US$14.50) including freight. More than half again more expensive than the one it was replacing.
I gave a lot of thought to the fact that there are 25 contact strips and breaking just one would render the entire board useless – and I had already snapped off two wires (and contact strips) out of five in the course of experimenting.
I considered conductive glue but that had issues with strength and drying times. In the end, I decided that the best thing would be to drill holes in the PCB and anchor the wires against the contact strips using self-tapping screws – with a bit of conductive glue to ensure a good contact between the wire and the strip.
So I ordered, for the princely sum of US$5.86 with free postage, 1000 M1 x 3mm self-tapping screws. As Bruce Wayne said in
Batman Begins “Well, at least we'll have spares.”
I also ordered a 0.2ml syringe of conductive glue for US$0.85.
In order to carry out my amended plan, I also required a suitable drill bit and a smaller, more precise and manageable drill (the Bosch is a bit bulky and unwieldy for drilling holes in small objects) – which was a perfect excuse to get some more of the tools I wanted – for the better part of NZ$65.
Suddenly a teensy controller, despite its cost and the logistics of working out the keyboard matrix, looks like the better option. Thankfully, having to wait for the screws and conductive glue to arrive from China gave me time to spread the cost of the tools over a couple of weeks.
2 September 2017: I removed the circuit board from the new “donor keyboard”, carefully scraped the contacts to remove the layer of carbon that forms the interface with the plastic membrane and exposed the copper track underneath. Drilled holes in all but one of the contact tracks (that column not required) and tapped them with a self-tapping screw.
I put a dab of “cold solder” or conductive glue on the track by each hole and screwed the wires onto the board then tested that I had a conductive join.
PCB with wires. Screwed down, “soldered” with conductive glue – not leaving anything to chance.
Then I soldered the other ends of the wires to the relevant switches, connecting my “matrix” to the circuit board.
Once it was all wired together, I tried testing it and discovered that
it didn't work.
If the caps lock key on the laptop keyboard was pressed, the caps lock light on the Ergoboard would light up, as would the Numlock light when the laptop's Numlock key was pressed, which suggested that it was at least being detected by the computer. However pressing the caps lock key on the Ergoboard – or any other key for that matter – had no effect at all.
I first checked to make sure there were no short circuits between rows or columns, then checked to be sure that no shorts existed between rows
and columns – though that should have presented as one or more stuck keys rather than total failure.
H, ], \ and 0 are all anchor points for both Column and Row wires from the circuit board – effectively directly wired to the board without any other solder joints in between and the least amount of intervening wire. If the problem were merely resistance levels, then these keys, at least, should work.
I tested the connectivity of H when pressed at the switch and at the circuit board between R3 and C5 and confirmed that pressing H creates a circuit between R3 and C5, which means that pressing H should cause the circuit board to send the relevant control code – yet it does not.
I then thought it might be an issue of too much resistance in the circuit so I tested the resistance of the wires from H to the exposed contact strips on the circuit board (not merely the heads of the anchoring screws) at R3 and C5 and found it to not be significantly higher than direct shorting the probe wires – around 0.01Ω difference. With the H switch pressed and measuring resistance from C5 to R3 contact strips, the resistance (including that of the probes) was less than 0.1Ω.
With the keyboard plugged in, I tried using a wire to direct short between C1 and the row contacts – the same test as I did with the previous circuit board to check my matrix – no result.
3 September 2017: it occurred to me, from my experiments with the previous board (the one I wrecked), that there is a track that runs all the way around the perimeter of the board beneath the contact strips. I had been careful not to expose that track when scraping the contact strips bare, but had I been careful enough? I carefully exposed another part of the track and tested to see if any of the wires had shorted against it. Sure enough, C1 was directly shorted against some part of that track but none of the others were.
I removed the wire from C1 and saw where the track had been exposed beneath it. A bit of insulation tape on the affected area did the trick, as when I reinstalled the C1 wire and tested it, there was no longer any short.
A quick test of the keyboard revealed that most of the keys were now working as desired.
However, some of the keys – notably the space and left arrow keys – did not work properly.
Thankfully, I still had the remains of the “donor keyboard” with its printed-circuit membranes to provide clues as to where I went wrong. Aided and abetted by my most honourable Number Two Son, who called out the keys from a list and noted down the rows and columns as I traced the circuits with the multimeter, I recompiled the key matrix.
Where I went wrong was in assuming that two keyboards of the same brand and model number with identical-looking circuit boards would actually have the same key matrices. For reasons unknown to mere mortals such as I, the manufacturers had elected to alter the grid so that Space and Alt were moved from Row 1 to Row 3 and the left arrow was moved from Column 9 to Column 8. Certainly a change from what was mapped and
tested using the previous controller, but thankfully those were the only changes.
My concerns about those changes proved largely groundless as amending the wiring was quite a simple task: remove one wire to isolate Space and Alt from the rest of Row 1, detach two wires from the left arrow key and rejoin them to bypass it, then solder two short lengths of wire to join the left arrow and the Space/Alt pair to the correct groups.
PCB mounted and wired in and wiring corrected. Not exactly pretty-looking.
I managed to test the keyboard enough to satisfy myself that it was worth progressing to final assembly – 85.5% of the keys could be easily tested with nothing more than the OS and a simple text editor (61.4% of the keys on the board are “printable characters”, many others have a clearly visible effect).
Final assembly, in the wee hours of the morning of 4 September 2017, was a matter of adding the side layers to the back of the top panel. The hole for the USB cable had been drilled between layers so that half of the hole is on one layer and the other half on another to sandwich the cable between the two. With the sides in place, the base could be screwed down onto the posts.
Finished:Keyboard with the Cherry logo – kindly supplied by Cherry GmbH in Germany – and my own logo that I designed in Inkscape and printed onto a self-adhesive metal-foil-backed acetate sheet with my printer.
A year and a month after the construction of the prototype, around 7 years after my initial idea to make a custom keyboard, and finally it's finished.
Underside of the keyboard showing the rubber anti-skid “feet”, the “Manufacturer's Label” I designed and printed and the WASD Keyboards sticker that came with the keycap set.
Looks almost “professional” – certainly doesn't look like my usual projects.
Final testing of the rest of the keys – most of the Function Keys and Break – was done using a key testing website and confirmed that all 83 keys were functioning as desired.
Completed keyboard at work with my Trackman Wheel and separate (and extremely cheap) numeric keypad.
“This is must be the geek's desk... the two screens are a dead giveaway.”
Costs:All up, the components cost around NZ$360 – or approximately US$268 – including freight/postage.
In addition to this, I spent NZ$23.37, approximately US$16, on test components (Cherry MX sample kit etc) and NZ$29.60/US$23.46 on the prototype, for a total R&D cost of roughly NZ$53/US$39.50.
I also spent over NZ$165 on tools – which I had always wanted anyway and I'm already getting further use out of them.
Ignoring the tools, the total cost of the project was about NZ$413 or around US$307.50.
When compared with the best commercially-available ergonomic keyboards I could find – the Truly Ergonomic Model 227 at US$295-320 including postage to NZ and the Kinesis Advantage 2 Dvorak at US$369 excluding whatever it costs to freight one to NZ – the cost is quite reasonable. At least comparable with the Truly Ergonomic and significantly cheaper than the Kinesis Advantage 2.
Considering that neither of those commercially-available boards are exactly how I want them to be, while my own board is built to my exact specifications, it's an even better deal. And I was able to “justify” expanding my tool kit.
Admittedly, the project has been a lot of work – not just the soldering and assembling but all the experimentation and finding the best way to proceed, locating sources of materials, buying tools, hastily fixing bungles etc – but there was also the side effect of learning new skills and improving old ones (for example, my Google-fu with regard to locating specific items...)
The FutureAs I've only made one keyboard, I have to transport it back and forth between home and work in order to use the same keyboard at both locations. This is not ideal, even though I've got a rather nice little cushioned netbook case in which to carry it safely. I already tired of transporting my Logitech Trackman Wheel back and forth to work and bought a second one so I could have one at work and one at home, it's only a matter of time before I tire of having to remember to grab my keyboard before heading out the door.
So the plan is to eventually build a second keyboard so I can leave one at work.
Because the minimum purchase quantities of some of the components exceeded the number required for a single keyboard – it will be a while before I need to buy 3mm self-tapping M1 machine screws again, if ever – and I've already done all the research and development and purchased all the tools I need for the project, all I would need to arrange to make a second keyboard is:
Aluminium panels – this time I would get them to drill the holes as well
Powder coating of the top panel
Yet another sodding Genius KB-110 to provide the controller PCB (though I could redo the wiring to suit another make/model – chances are I'd have to trace the circuits again anyway...)
Cherry switches of the appropriate types
Keycaps as before
Silicone rubber O-rings – there's not quite enough left in the bag for another keyboard
Some more Cat 5E cable.
The second keyboard should also take less time to make – unless I take another extended “holiday” during the “wiring up” stage – but I suspect it might be a while before I feel inclined or motivated to start on it.
Would I build one for someone else? No one would want to pay what I would want to get for doing all that bloody soldering!
HEARTFELT THANKSThis project would have been a lot harder and less pleasant without the excellent customer service of:
Vincent at Shenzhen YMD Tech Co. Ltd. who provided the Cherry MX switches swiftly and at an excellent price
Kris at One Stop Cutting Shop who tirelessly put up with my incessant technical questions and last-minute changes to the custom aluminium case components
Paige at WASD Keyboards who organised the custom set of keycaps and was extremely diligent in ensuring that the key substitutions were done properly
Wayne at Elite Powder Coaters, Palmerston North, who did an excellent, and surprisingly fast, job of the powder coating of the top panel
Annelore at Cherry GmbH who kindly supplied Cherry logos free of charge
Pete at Doolz IT who quickly supplied me with a replacement keyboard of the right make and model
The staff at Jaycar Electronics, Palmerston North, where I purchased wire and tools.
Special Thanks to the geekhack.org community itself for inspiration, excellent ideas and advice.