From 1ede08d1790d1046c06343f273711fe68ab62f83 Mon Sep 17 00:00:00 2001 From: user Date: Mon, 11 Mar 2024 11:31:58 +0100 Subject: initial commit with 18 articles --- Custom keyboard/3d_printed_keycap.jpg | Bin 0 -> 47124 bytes Custom keyboard/3d_printed_switch_plate_test.jpg | Bin 0 -> 46464 bytes Custom keyboard/Thumbnail.jpg | Bin 0 -> 6743 bytes Custom keyboard/colemak_keyboard_layout.jpg | Bin 0 -> 89008 bytes Custom keyboard/connector.jpg | Bin 0 -> 1938450 bytes Custom keyboard/index.md | 266 +++++++++++++++++++++ Custom keyboard/keycap_modification.jpg | Bin 0 -> 62646 bytes Custom keyboard/keycap_modification_printed.jpg | Bin 0 -> 74445 bytes Custom keyboard/left_side_bottom.jpg | Bin 0 -> 2493430 bytes Custom keyboard/left_side_connector_hotfix.jpg | Bin 0 -> 2312155 bytes Custom keyboard/left_side_key_caps.jpg | Bin 0 -> 1322395 bytes Custom keyboard/left_side_screws.jpg | Bin 0 -> 2764598 bytes Custom keyboard/left_side_testing.jpg | Bin 0 -> 1259746 bytes Custom keyboard/left_side_wip.jpg | Bin 0 -> 818950 bytes Custom keyboard/left_side_wiring_final.jpg | Bin 0 -> 3457472 bytes Custom keyboard/main.jpg | Bin 0 -> 482578 bytes Custom keyboard/matrix_wiring.png | Bin 0 -> 97246 bytes .../progress_both_sides_missing_some_keycaps.jpg | Bin 0 -> 670352 bytes ...ight_side_micro_controller_connector_wiring.jpg | Bin 0 -> 2485997 bytes .../right_side_micro_controller_wiring.jpg | Bin 0 -> 2557594 bytes Custom keyboard/right_side_wiring.jpg | Bin 0 -> 3085575 bytes Custom keyboard/top_down.jpg | Bin 0 -> 658245 bytes 22 files changed, 266 insertions(+) create mode 100644 Custom keyboard/3d_printed_keycap.jpg create mode 100644 Custom keyboard/3d_printed_switch_plate_test.jpg create mode 100644 Custom keyboard/Thumbnail.jpg create mode 100644 Custom keyboard/colemak_keyboard_layout.jpg create mode 100644 Custom keyboard/connector.jpg create mode 100644 Custom keyboard/index.md create mode 100644 Custom keyboard/keycap_modification.jpg create mode 100644 Custom keyboard/keycap_modification_printed.jpg create mode 100644 Custom keyboard/left_side_bottom.jpg create mode 100644 Custom keyboard/left_side_connector_hotfix.jpg create mode 100644 Custom keyboard/left_side_key_caps.jpg create mode 100644 Custom keyboard/left_side_screws.jpg create mode 100644 Custom keyboard/left_side_testing.jpg create mode 100644 Custom keyboard/left_side_wip.jpg create mode 100644 Custom keyboard/left_side_wiring_final.jpg create mode 100644 Custom keyboard/main.jpg create mode 100644 Custom keyboard/matrix_wiring.png create mode 100644 Custom keyboard/progress_both_sides_missing_some_keycaps.jpg create mode 100644 Custom keyboard/right_side_micro_controller_connector_wiring.jpg create mode 100644 Custom keyboard/right_side_micro_controller_wiring.jpg create mode 100644 Custom keyboard/right_side_wiring.jpg create mode 100644 Custom keyboard/top_down.jpg (limited to 'Custom keyboard') diff --git a/Custom keyboard/3d_printed_keycap.jpg b/Custom keyboard/3d_printed_keycap.jpg new file mode 100644 index 0000000..ccc60b1 Binary files /dev/null and b/Custom keyboard/3d_printed_keycap.jpg differ diff --git a/Custom keyboard/3d_printed_switch_plate_test.jpg b/Custom keyboard/3d_printed_switch_plate_test.jpg new file mode 100644 index 0000000..e081ea1 Binary files /dev/null and b/Custom keyboard/3d_printed_switch_plate_test.jpg differ diff --git a/Custom keyboard/Thumbnail.jpg b/Custom keyboard/Thumbnail.jpg new file mode 100644 index 0000000..e3f3f25 Binary files /dev/null and b/Custom keyboard/Thumbnail.jpg differ diff --git a/Custom keyboard/colemak_keyboard_layout.jpg b/Custom keyboard/colemak_keyboard_layout.jpg new file mode 100644 index 0000000..e593bcc Binary files /dev/null and b/Custom keyboard/colemak_keyboard_layout.jpg differ diff --git a/Custom keyboard/connector.jpg b/Custom keyboard/connector.jpg new file mode 100644 index 0000000..c787972 Binary files /dev/null and b/Custom keyboard/connector.jpg differ diff --git a/Custom keyboard/index.md b/Custom keyboard/index.md new file mode 100644 index 0000000..2a3c85d --- /dev/null +++ b/Custom keyboard/index.md @@ -0,0 +1,266 @@ +--- +description: "Custom split ortholinear 83 key mechanical keyboard with rollerball mouse" +created: 2023-10-23 +--- + +![Layout](main.jpg) + +## Links +- [git.node5.net - Firmware](https://git.node5.net/firmware/qmk/tree/keyboards/handwired/node5_1) +### Videos +- [youtube.com - Good how to video](https://www.youtube.com/watch?v=iv__343ZwE0) +- [youtube.com - Zack Freedman (Voidstar Lab) How to Build MECHANICAL KEYBOARDS](https://www.youtube.com/watch?v=yYcNi9hKxDk) +### Parts +- [shop.pimoroni.com - Trackball Breakout by Pimoroni](https://shop.pimoroni.com/products/trackball-breakout) +- [aliexpress.com - 1N4148 diodes](https://www.aliexpress.com/item/1005005435418695.html) +### Others cool builds +- [keebfolio.netlify.app - Index of handwired keyboards](https://keebfolio.netlify.app/en/staggered/) +- [lukemillermakes.com - A 3D printed gaming keyboard](https://www.lukemillermakes.com/2018/12/a-3d-printed-gaming-keyboard-part-1/) +- [github.com - Hand wired 54key full split mechanical keyboard](https://github.com/alonswartz/blackhawk) +### Tools +- [form--keebfolio.netlify.app - Collection of great tools](https://form--keebfolio.netlify.app/tools/) +- [waveshare.com - RP2040-Zero pinout](https://www.waveshare.com/img/devkit/RP2040-Zero/RP2040-Zero-details-7.jpg) +- [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) +### Guides +- [crackedthecode.co - Someone elses cool blog on how to wire a keyboard matrix](https://www.crackedthecode.co/a-complete-guide-to-building-a-hand-wired-keyboard/) + +--- + +# Design / concept validation phase + +The idea some time ago when i was playing around with ideas for my cyber deck, +to design a keyboard. +I ended up splitting the keyboard idea out and focusing on that. + +I played around with the layout for some time using +[keyboard-layout-editor.com](http://keyboard-layout-editor.com/) +Finally landing on a layout i liked, with some concepts i wanted to try out. + +![Colemak keyboard layout](colemak_keyboard_layout.jpg) + +## Verifying design concepts +If there's any unknowns in your project, you should try them out early in the +process, this can save you a lot of time and hazzle. + +### Generation + tollerance fit check +![3D printed switch plate fit test](/assets//custom-keyboard/3d_printed_switch_plate_test.jpg) +![3D printed key cap fit test](/assets//custom-keyboard/3d_printed_keycap.jpg) + +### Connecting the 2 sides +There's multiple ways of connecting the 2 sides of the keyboard namely: +I²C (4 wire, typically a 3.5mm audio cable) via seperate micro controller or +I/O expander or have a cable with many conductors. +Contrary to [this video](https://www.youtube.com/watch?v=Fg0V5M0llaE&t=342s) by +[Zack Freedman (Voidstar Lab)](https://www.youtube.com/@ZackFreedman) +i like rainbow cables. + +![Connector](connector.jpg) + +Didn't want to wait for a shipment from China, so i made a connector for my +rainbow cable, the case design, didn't quite fit the +connector, i fixed it in post. + +### Switch plate +The switch plate was generated using +[kbplate.ai03.com](https://kbplate.ai03.com/) + +### Left side initial + +Designed and printed the left side of the keyboard. +![Left side wip](left_side_wip.jpg) + +This is the point where i should have chosen to throw out the first prototype, +since the connector didn't fit. And it was going to be nightmare to have wires +between the two halves. This will come back to haunt me later. + +### Keycaps +Found [this](https://www.thingiverse.com/thing:2879386) design i liked, +but i encoundered a problem with it, it snagged when pressing down. So i +[modified the design in FreeCAD as an STL](https://www.youtube.com/watch?v=HbtKFmz5p00) +, as importing it as openSCAD and then modifying gave me issues. +It now has a slope along the long side of the key switch rectangle. + +![Keycap modification](keycap_modification.jpg) +![Keycap modification printed](keycap_modification_printed.jpg) + +The 2 unit wide keys can be made in +[PrusaSlicer](https://www.prusa3d.com/page/prusaslicer_424/) by cutting it into +parts and scaling only the desired part in the desired dimension. +The homing indicator, can also simply be made in PrusaSlicer. + +When printing, place the keycaps sideways on the build plate, as to use the +dimension with the best resulution in FDM printing (Set layer height to the +smallest possible). And make sure the top parts of the keycaps are facing away +from each other, if printing multiple, to avoid stringing, bumps and other +artifacts. + +The keycaps still require quite a lot of cleanup, as there's some drop in the +stem connector, and some cutting and filing is needed on the side of the stem +where the support was. + +### Wiring +![Matrix wiring](matrix_wiring.png) + +This overview was made with [VIA](https://www.caniusevia.com/) + +The column wires can be managed by routing them under the diodes from the rows. + +![Left side testing](left_side_testing.jpg) + +I'd recomend staring with wiring a 3x3 matrix and connecting that on a +breadboard to your microcontroller, and try +[building the firmware](#firmware-build). To verify the method and avoiding +possibly having to resolder big parts. + +![RP2040 Zero pinout](https://www.waveshare.com/img/devkit/RP2040-Zero/RP2040-Zero-details-7.jpg) + +--- + +# Build phase +There are now no known unknowns in the project, now comes the grind. + +### Left side done +![Left side connector hotfix](left_side_connector_hotfix.jpg) +![Left side wiring final](left_side_wiring_final.jpg) +![Left side bottom](left_side_bottom.jpg) +![Left side screws](left_side_screws.jpg) + +Since i decided to use the first prototype, i had to retrofit the connector +outside the housing, meaning i had to design a new piece that a connector i +found, could be press fit into. + +### Left side done right side WIP +![Progress both side missing some keycaps](progress_both_sides_missing_some_keycaps.jpg) + +## Right side +![right side micro controller connector wiring](right_side_micro_controller_connector_wiring.jpg) +![right side micro controller wiring](right_side_micro_controller_wiring.jpg) +![right side wiring](right_side_wiring.jpg) +![top down](top_down.jpg) + + +When soldering the connector, i soldered wires to the connector first, then i +glued in indo place, so the wires could be routed and cut to distance. +All 20 trough-hole GPIO pins on the micro controller chip breakout are needed +for the 6 rows and 14 columns, but 2 GPIO are needed for I²C for the trackball. +So i needed to access the SMD pads on the back of the RP2040, which was some +small soldering, i used a flat cable to achive this. + +Another problem is that the prototyping PCB the microcontroller is mounted into +isn't used for wire management, but meerly to attatch it with screwable mounting +holes to the case. This means i have to have lot's of small wires in a tight +space this is where [Magnet wire](https://en.wikipedia.org/wiki/Magnet_wire) +comes into play. + +## Firmware build +[Setting Up Your QMK Environment](https://docs.qmk.fm/#/newbs) + +When creating a handwired keyboard, the convention is to place it +in `handwired/name` + +You might have to flip `diode_direction` in `info.json` if no keys work. +The options are `ROW2COL` and `COL2ROW` + + +### Customizing firmware +It's possible to [Customize Your Keyboard’s Behavior](https://docs.qmk.fm/#/custom_quantum_functions) +by writing a bit of C code. + +I've coded the following: + + - Change pointing device CPI. by clicking it + - Indicate pointing device mode with its RGB LED + - Normal + - Precise + - Scroll + - Volume + - Switch layout (Colemak, qwerty) + - Turn LEDs off when suspending / shutting down computer + - Middle mouse button only send button press on button up, if the user didn't scroll + +The way i figured out how to do something specific, +was a combination of reading the documentation, and greping through how other +keyboards in the `keyboards` directory does things. + +TODO Host, post and add link to GIT repo + +## Next challenge learning colemak + +It's a steep learning curve, but the finger movement, or lack there of for +typing English seems more sound. Set aside a weekend for learning where the +keys are, and be prepared to be frustrated at typing at 5 wpm, and slowly +working up from there. +It's a bit unfortunate that I'm changing multiple variables at the same time, +Namely learning touch typing, at the same time as i switch to colemak +and an ortholinear layout. Therefore i will not know which impact each has on +percieved finger health and typing speed. + +Also small rant about the legacy typewriter layout that sadly is the norm now +adays. How are you supposed to twist and contort your middle finger to reach +from D on the home row to C below when your hands are so close together that +they aren't straight. It feels more natural for my pointing finger to reach the +C button, because it aligns with the direction my hands are pointing. + +## Retrospective / Ideas for a version 2 + +### Work methodologies +Before starting a handwired keyboard project know that: + + - It's very labor intensive + - Hand wiring will take a long time especially if you make a split keeb, and choose to not use I²C between the halves. + - When prototyping something it's an itterative process, + which 3D printing plays very well into, as you can rapidly prototype, test ideas, and modify your design. + + +### Scrolling / volume rollers +Scrolling and adjusting volume with the trackball works great. +It would be awesome to explore this concept more, +by having a dedicated rotary encoder for it, perhaps two, +for quick onehanded volume adjustment, without holding the modifier (FN), +which is on the other side of the keyboard. + +### Device specific LED indicators +The LED in the pimoroni trackball works great to indicate which mode it's in. +So having dedicated LEDs for each device, +to indicate which mode it's in is a great to have. + +### LED indicators +They work great as a layer indicator. +Another idea is to add a photo resistor to dimm them in low ambient. + +### Pimoroni trackball +It's a really nifty little device, glad i tried it out, +but it's not precise enough for my taste. +It might be the QMK implementation (which already existed, which is nice), +It might be a hardware thing. Not sure, haven't read raw device output, +i assume default QMK settings are sane. +But next time around i want to try a different pointing device, +perhaps a ThinkPad trackpoint. + +### Connector / cable / wiring management +It worked fine for the time, since i had plenty of time to work on it now, +and didn't have to wait for components. +The process of hand wiring is labor intensive and tedious work. +Managing the wiring in a PCB and using chips in each half, +with standard cables would be preferable. +Then it's also possible to use longer cables to position the keyboard on either +side of a laptop, when using it on the go. +Taking up less space in one dimmension, but more in another, +by not having to move the laptop as far back, giving you flexibility. + +### Touch typing colorway +The keycaps can be colored to indicate which finger should be used. +This could also be done in software, if one chooses to add per key LEDs. + +### Standoffs on switch plate +Designing the standoffs into the switch plate might be desirable, since it +can make the cable wiring a bit easier, + +### Macro recording indicator +QMK Has the ability to record +[Dynamic macros](https://docs.qmk.fm/#/feature_dynamic_macros) +It would be cool to indicate the recording of such, by blinking the main +indicator LED red, this requires the ability to get +[milis()](https://www.arduino.cc/reference/en/language/functions/time/millis/) +or similar. + diff --git a/Custom keyboard/keycap_modification.jpg b/Custom keyboard/keycap_modification.jpg new file mode 100644 index 0000000..be2659f Binary files /dev/null and b/Custom keyboard/keycap_modification.jpg differ diff --git a/Custom keyboard/keycap_modification_printed.jpg b/Custom keyboard/keycap_modification_printed.jpg new file mode 100644 index 0000000..35114bc Binary files /dev/null and b/Custom keyboard/keycap_modification_printed.jpg differ diff --git a/Custom keyboard/left_side_bottom.jpg b/Custom keyboard/left_side_bottom.jpg new file mode 100644 index 0000000..c0366ff Binary files /dev/null and b/Custom keyboard/left_side_bottom.jpg differ diff --git a/Custom keyboard/left_side_connector_hotfix.jpg b/Custom keyboard/left_side_connector_hotfix.jpg new file mode 100644 index 0000000..b757fd7 Binary files /dev/null and b/Custom keyboard/left_side_connector_hotfix.jpg differ diff --git a/Custom keyboard/left_side_key_caps.jpg b/Custom keyboard/left_side_key_caps.jpg new file mode 100644 index 0000000..b28ad91 Binary files /dev/null and b/Custom keyboard/left_side_key_caps.jpg differ diff --git a/Custom keyboard/left_side_screws.jpg b/Custom keyboard/left_side_screws.jpg new file mode 100644 index 0000000..1d7b7ed Binary files /dev/null and b/Custom keyboard/left_side_screws.jpg differ diff --git a/Custom keyboard/left_side_testing.jpg b/Custom keyboard/left_side_testing.jpg new file mode 100644 index 0000000..f150f5d Binary files /dev/null and b/Custom keyboard/left_side_testing.jpg differ diff --git a/Custom keyboard/left_side_wip.jpg b/Custom keyboard/left_side_wip.jpg new file mode 100644 index 0000000..e477320 Binary files /dev/null and b/Custom keyboard/left_side_wip.jpg differ diff --git a/Custom keyboard/left_side_wiring_final.jpg b/Custom keyboard/left_side_wiring_final.jpg new file mode 100644 index 0000000..c9f04dc Binary files /dev/null and b/Custom keyboard/left_side_wiring_final.jpg differ diff --git a/Custom keyboard/main.jpg b/Custom keyboard/main.jpg new file mode 100644 index 0000000..caf69b3 Binary files /dev/null and b/Custom keyboard/main.jpg differ diff --git a/Custom keyboard/matrix_wiring.png b/Custom keyboard/matrix_wiring.png new file mode 100644 index 0000000..bea8e7f Binary files /dev/null and b/Custom keyboard/matrix_wiring.png differ diff --git a/Custom keyboard/progress_both_sides_missing_some_keycaps.jpg b/Custom keyboard/progress_both_sides_missing_some_keycaps.jpg new file mode 100644 index 0000000..2c7c09f Binary files /dev/null and b/Custom keyboard/progress_both_sides_missing_some_keycaps.jpg differ diff --git a/Custom keyboard/right_side_micro_controller_connector_wiring.jpg b/Custom keyboard/right_side_micro_controller_connector_wiring.jpg new file mode 100644 index 0000000..2c3a390 Binary files /dev/null and b/Custom keyboard/right_side_micro_controller_connector_wiring.jpg differ diff --git a/Custom keyboard/right_side_micro_controller_wiring.jpg b/Custom keyboard/right_side_micro_controller_wiring.jpg new file mode 100644 index 0000000..c89905f Binary files /dev/null and b/Custom keyboard/right_side_micro_controller_wiring.jpg differ diff --git a/Custom keyboard/right_side_wiring.jpg b/Custom keyboard/right_side_wiring.jpg new file mode 100644 index 0000000..1ee7dad Binary files /dev/null and b/Custom keyboard/right_side_wiring.jpg differ diff --git a/Custom keyboard/top_down.jpg b/Custom keyboard/top_down.jpg new file mode 100644 index 0000000..e3fa43d Binary files /dev/null and b/Custom keyboard/top_down.jpg differ -- cgit 1.4.1