--- description: Process of how to create a custom designed hardwired keyboard created: 2024-03-01 --- [TOC] TODO ROUGH PRICE ## Plan Start out by getting a rough plan of what you want to make, so you can order parts, as takes a while, if you wish to do it cheaply. First of all you need to decide how big your keyboard needs to be, do you wish to make an 100%, macropad, ultra-compact, split, do you want dedicated buttons for all 24 function keys? none of the above? You can play around with [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/) to find a layout you like, see different layout under "Preset" Massive repo of inspiration: [keebfolio.netlify.app](https://keebfolio.netlify.app/) ### Switches #### Design (Will affect keyboard design) - Cherry MX design (classic, old, bulky, readily available, cloned into oblivion) - Low profile? - Kalih Choc (Expensive, different keycaps) - Others - [gateron.co - Gateron Low Profile 2.0 Mechanical Switch](https://www.gateron.co/products/gateron-low-profile-mechanical-switch-set) - [keychron.com - Keychron Low Profile Mechanical Switch](https://www.keychron.com/products/keychron-low-profile-mechanical-switch) Unsure, order a Switch tester or ask a friend to try their switches, to see what you like #### Type Generally there 3 types, originally made by cherry, I'd recommend none of them - Clicky - Typically blue (obnoxious) - Linear - Typically red (Did I press that button?) - Tactile - Typically brown (Mushy) But do limit your scope enough, so you don't lose interest before completing the core project. Be ready to test ideas feasibility and scrap them if infeasible. ### Switch matrix So what parts do you need? You need to decide which method you wish to use, to wire up your switches - Matrix with diodes (recommended method) - Requires 1 diodes per switch, diodes are cheap - Cable routing is more manageable - Straight (1 wire per switch to microcontroller) - Requires enough pins An I/O expander can be used to add additional pins to a microcontroller, it's also useful for split keyboards, as it can require only 4 pins (I²C + power and ground) from the microcontroller ## Order parts (Consumables) ### Checklist #### Keyboard specific - Switches - Microcontroller, look at [QMK Compatible microcontrollers](https://docs.qmk.fm/#/compatible_microcontrollers), i recommend a RP2040 based microcontroller - Keycaps? Do you want to order these or [3D print them](#3d-printed-keycaps) - Diodes [aliexpress.com - 1N4148](https://www.aliexpress.com/item/1005005435418695.html) - Split keyboard parts - I/O expander route - I/O expander MCP23017 - Connector [aliexpress.com - TRRS headphone jack](https://www.aliexpress.com/item/1005003146932723.html) - Cable [aliexpress.com - TRRS headphone cable](https://www.aliexpress.com/item/1005001781279058.html) #### General maker - 3D printed filament - Solder tin - Extra features? Get wild, add an old [ThinkPad trackpoint](https://docs.qmk.fm/#/feature_ps2_mouse), a [rollerball mouse](https://shop.pimoroni.com/products/trackball-breakout?variant=27672765038675), rotary encoder, maybe LEDs. - Heat shrink tube - Magnet wire (can come in handy) ### Tools - non consumables - 3D printer - Soldering iron - Continuity tester (for debugging connections) - ## Waiting for parts ### Layout design finalisation Staggered? Ortholinear? Something else entirely? [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/) [keyboard-layout-editor.com - My layout](http://www.keyboard-layout-editor.com/##@_backcolor=%23000000%3B&@_c=%230096a7&t=%23ffffff%0A%0A%0A%23ff8616%3B&=Esc%0A%0A%0AFnLock&_c=%236d6d6d%3B&=F1%0A%0A%0A%3Ci%20class%2F='fa%20fa-volume-off'%3E%3C%2F%2Fi%3E&=F2%0A%0A%0A%3Ci%20class%2F='fa%20fa-volume-down'%3E%3C%2F%2Fi%3E&=F3%0A%0A%0A%3Ci%20class%2F='fa%20fa-volume-up'%3E%3C%2F%2Fi%3E&=F4%0A%0A%0A%3Ci%20class%2F='fa%20fa-microphone-slash'%3E%3C%2F%2Fi%3E&=F5%0A%0A%0A%3Ci%20class%2F='fa%20fa-sun-o'%3E%3C%2F%2Fi%3E-&_x:3%3B&=F6%0A%0A%0A%3Ci%20class%2F='fa%20fa-sun-o'%3E%3C%2F%2Fi%3E+&=F7%0A%0A%0A%3Ci%20class%2F='fa%20fa-caret-left'%3E%3C%2F%2Fi%3E%3Ci%20class%2F='fa%20fa-caret-left'%3E%3C%2F%2Fi%3E&=F8%0A%0A%0A%3Ci%20class%2F='fa%20fa-play'%3E%3C%2F%2Fi%3E%3Ci%20class%2F='fa%20fa-pause'%3E%3C%2F%2Fi%3E&=F9%0A%0A%0A%3Ci%20class%2F='fa%20fa-caret-right'%3E%3C%2F%2Fi%3E%3Ci%20class%2F='fa%20fa-caret-right'%3E%3C%2F%2Fi%3E&_t=%23ffffff%3B&=F10&=F11&=F12&=Delete%3B&@_c=%23262626%3B&=%60%0A~&=1%0A!&=2%0A%2F@&=3%0A%23&=4%0A$&=5%0A%25&_x:3%3B&=6%0A%5E&_t=%23ffffff%0A%0A%0A%23ff8616%3B&=7%0A%2F&%0A%0A7&=8%0A*%0A%0A8&=9%0A%28%0A%0A9&=0%0A%29%0A%0A+&_t=%23ffffff%3B&=-%0A%2F_&=%2F=%0A+&_c=%236d6d6d%3B&=BckSp%3B&@=Tab&_c=%23262626%3B&=Q&=W&=E&=R&=T&_x:3%3B&=Y&_t=%23ffffff%0A%0A%0A%23ff8616%3B&=U%0A%0A%0A4&=I%0A%0A%0A5&=O%0A%0A%0A6&=P%0A%0A%0A%C3%97&_t=%23ffffff%3B&=%7B%0A%5B&=%7D%0A%5D&=%7C%0A%5C%3B&@_c=%236d6d6d&t=%23ffffff%0A%0A%0A%23ff8616%3B&=Comp%0A%0A%0ACapsL&_c=%23262626&t=%23ffffff%3B&=A&=S&=D&_n:true%3B&=F&=G&_x:3%3B&=H&_t=%23ffffff%0A%0A%0A%23ff8616&n:true%3B&=J%0A%0A%0A1&=K%0A%0A%0A2&=L%0A%0A%0A3&=%2F:%0A%2F%3B%0A%0A-&_t=%23ffffff%3B&=%22%0A'&_c=%230096a7&w:2%3B&=Enter%3B&@_c=%236d6d6d%3B&=Shift&_c=%23262626%3B&=Z&=X&=C&=V&=B&_x:3%3B&=N&_t=%23ffffff%0A%0A%0A%23ff8616%3B&=M%0A%0A%0A0&=%3C%0A,%0A%0A,&=%3E%0A.%0A%0A.&=%3F%0A%2F%2F%0A%0A%2F%2F&_c=%236d6d6d&t=%23ffffff%3B&=PgUp&_c=%23c1c1c1&t=%23000000%3B&=%E2%86%91&_c=%236d6d6d&t=%23ffffff%3B&=PgDn%3B&@=Ctrl&=Super&=Alt&_t=%23ff8616%3B&=Fn&_c=%23262626&t=%23ffffff&a:7&w:2%3B&=&_x:2&c=%23c1c1c1&t=%23000000&a:4%3B&=mous1&=mous2&=mous3&_c=%236d6d6d&t=%23ffffff%0A%0A%0A%23ff8616%3B&=Menu%0A%0A%0AInsert&=Home%0A%0A%0APrtSc&_t=%23ffffff%3B&=End&_c=%23c1c1c1&t=%23000000%3B&=%E2%86%90&_n:true%3B&=%E2%86%93&=%E2%86%92) ## Other great guides ## Switch plate generation ### Testing fit ### 3D printing #### 3D printed keycaps ### Wiring test 3x3 The best way to eliminate unknowns and avoid wasting work, is by wiring up a small part, and testing this ### Firmware setup ### No unknowns, home run, final stretch, grind ### Extra firmware features Inspire, show opportunities grep QMK repo ### Show off ### Get ideas for your next version