summary refs log tree commit diff
path: root/Custom keyboard
diff options
context:
space:
mode:
Diffstat (limited to 'Custom keyboard')
-rw-r--r--Custom keyboard/3d_printed_keycap.jpgbin0 -> 47124 bytes
-rw-r--r--Custom keyboard/3d_printed_switch_plate_test.jpgbin0 -> 46464 bytes
-rw-r--r--Custom keyboard/Thumbnail.jpgbin0 -> 6743 bytes
-rw-r--r--Custom keyboard/colemak_keyboard_layout.jpgbin0 -> 89008 bytes
-rw-r--r--Custom keyboard/connector.jpgbin0 -> 1938450 bytes
-rw-r--r--Custom keyboard/index.md266
-rw-r--r--Custom keyboard/keycap_modification.jpgbin0 -> 62646 bytes
-rw-r--r--Custom keyboard/keycap_modification_printed.jpgbin0 -> 74445 bytes
-rw-r--r--Custom keyboard/left_side_bottom.jpgbin0 -> 2493430 bytes
-rw-r--r--Custom keyboard/left_side_connector_hotfix.jpgbin0 -> 2312155 bytes
-rw-r--r--Custom keyboard/left_side_key_caps.jpgbin0 -> 1322395 bytes
-rw-r--r--Custom keyboard/left_side_screws.jpgbin0 -> 2764598 bytes
-rw-r--r--Custom keyboard/left_side_testing.jpgbin0 -> 1259746 bytes
-rw-r--r--Custom keyboard/left_side_wip.jpgbin0 -> 818950 bytes
-rw-r--r--Custom keyboard/left_side_wiring_final.jpgbin0 -> 3457472 bytes
-rw-r--r--Custom keyboard/main.jpgbin0 -> 482578 bytes
-rw-r--r--Custom keyboard/matrix_wiring.pngbin0 -> 97246 bytes
-rw-r--r--Custom keyboard/progress_both_sides_missing_some_keycaps.jpgbin0 -> 670352 bytes
-rw-r--r--Custom keyboard/right_side_micro_controller_connector_wiring.jpgbin0 -> 2485997 bytes
-rw-r--r--Custom keyboard/right_side_micro_controller_wiring.jpgbin0 -> 2557594 bytes
-rw-r--r--Custom keyboard/right_side_wiring.jpgbin0 -> 3085575 bytes
-rw-r--r--Custom keyboard/top_down.jpgbin0 -> 658245 bytes
22 files changed, 266 insertions, 0 deletions
diff --git a/Custom keyboard/3d_printed_keycap.jpg b/Custom keyboard/3d_printed_keycap.jpg
new file mode 100644
index 0000000..ccc60b1
--- /dev/null
+++ b/Custom keyboard/3d_printed_keycap.jpg
Binary files differdiff --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
--- /dev/null
+++ b/Custom keyboard/3d_printed_switch_plate_test.jpg
Binary files differdiff --git a/Custom keyboard/Thumbnail.jpg b/Custom keyboard/Thumbnail.jpg
new file mode 100644
index 0000000..e3f3f25
--- /dev/null
+++ b/Custom keyboard/Thumbnail.jpg
Binary files differdiff --git a/Custom keyboard/colemak_keyboard_layout.jpg b/Custom keyboard/colemak_keyboard_layout.jpg
new file mode 100644
index 0000000..e593bcc
--- /dev/null
+++ b/Custom keyboard/colemak_keyboard_layout.jpg
Binary files differdiff --git a/Custom keyboard/connector.jpg b/Custom keyboard/connector.jpg
new file mode 100644
index 0000000..c787972
--- /dev/null
+++ b/Custom keyboard/connector.jpg
Binary files differdiff --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
--- /dev/null
+++ b/Custom keyboard/keycap_modification.jpg
Binary files differdiff --git a/Custom keyboard/keycap_modification_printed.jpg b/Custom keyboard/keycap_modification_printed.jpg
new file mode 100644
index 0000000..35114bc
--- /dev/null
+++ b/Custom keyboard/keycap_modification_printed.jpg
Binary files differdiff --git a/Custom keyboard/left_side_bottom.jpg b/Custom keyboard/left_side_bottom.jpg
new file mode 100644
index 0000000..c0366ff
--- /dev/null
+++ b/Custom keyboard/left_side_bottom.jpg
Binary files differdiff --git a/Custom keyboard/left_side_connector_hotfix.jpg b/Custom keyboard/left_side_connector_hotfix.jpg
new file mode 100644
index 0000000..b757fd7
--- /dev/null
+++ b/Custom keyboard/left_side_connector_hotfix.jpg
Binary files differdiff --git a/Custom keyboard/left_side_key_caps.jpg b/Custom keyboard/left_side_key_caps.jpg
new file mode 100644
index 0000000..b28ad91
--- /dev/null
+++ b/Custom keyboard/left_side_key_caps.jpg
Binary files differdiff --git a/Custom keyboard/left_side_screws.jpg b/Custom keyboard/left_side_screws.jpg
new file mode 100644
index 0000000..1d7b7ed
--- /dev/null
+++ b/Custom keyboard/left_side_screws.jpg
Binary files differdiff --git a/Custom keyboard/left_side_testing.jpg b/Custom keyboard/left_side_testing.jpg
new file mode 100644
index 0000000..f150f5d
--- /dev/null
+++ b/Custom keyboard/left_side_testing.jpg
Binary files differdiff --git a/Custom keyboard/left_side_wip.jpg b/Custom keyboard/left_side_wip.jpg
new file mode 100644
index 0000000..e477320
--- /dev/null
+++ b/Custom keyboard/left_side_wip.jpg
Binary files differdiff --git a/Custom keyboard/left_side_wiring_final.jpg b/Custom keyboard/left_side_wiring_final.jpg
new file mode 100644
index 0000000..c9f04dc
--- /dev/null
+++ b/Custom keyboard/left_side_wiring_final.jpg
Binary files differdiff --git a/Custom keyboard/main.jpg b/Custom keyboard/main.jpg
new file mode 100644
index 0000000..caf69b3
--- /dev/null
+++ b/Custom keyboard/main.jpg
Binary files differdiff --git a/Custom keyboard/matrix_wiring.png b/Custom keyboard/matrix_wiring.png
new file mode 100644
index 0000000..bea8e7f
--- /dev/null
+++ b/Custom keyboard/matrix_wiring.png
Binary files differdiff --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
--- /dev/null
+++ b/Custom keyboard/progress_both_sides_missing_some_keycaps.jpg
Binary files differdiff --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
--- /dev/null
+++ b/Custom keyboard/right_side_micro_controller_connector_wiring.jpg
Binary files differdiff --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
--- /dev/null
+++ b/Custom keyboard/right_side_micro_controller_wiring.jpg
Binary files differdiff --git a/Custom keyboard/right_side_wiring.jpg b/Custom keyboard/right_side_wiring.jpg
new file mode 100644
index 0000000..1ee7dad
--- /dev/null
+++ b/Custom keyboard/right_side_wiring.jpg
Binary files differdiff --git a/Custom keyboard/top_down.jpg b/Custom keyboard/top_down.jpg
new file mode 100644
index 0000000..e3fa43d
--- /dev/null
+++ b/Custom keyboard/top_down.jpg
Binary files differ