Skip to content

Commit 94d69ac

Browse files
committed
Add v3
1 parent 18d31a2 commit 94d69ac

31 files changed

Lines changed: 183932 additions & 221 deletions

.markdownlint.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"MD055": false
3+
}

README.md

Lines changed: 77 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22

33
A 62-key split columnar ergonomic keyboard
44

5+
* [QMK firmware](https://github.com/andornaut/qmk_firmware/tree/splinter/keyboards/splinter)
56
* [andornaut@github /til](https://github.com/andornaut/til/)
67
* [3D Printing](https://github.com/andornaut/til/blob/master/docs/3d-printing.md)
78
* [Electronics](https://github.com/andornaut/til/blob/master/docs/electronics.md)
89
* [Keyboards](https://github.com/andornaut/til/blob/master/docs/keyboards.md)
9-
* [Splinter qmk_firmware](https://github.com/andornaut/qmk_firmware/tree/splinter/keyboards/splinter)
1010

1111
## Versions
1212

13-
Version | Description | Layout
14-
--- | --- | ---
15-
[v1](./v1) | 61-keys. Asymetrical enclosures. Traditional layout. | [![v1](./v1/v1-300width.jpg)](./v1/v1.jpg)
16-
[v2](./v2) | 62-keys. Symmetrical enclosures. Non-traditional placement of backspace and backslash keys. | [![v2](./v2/v2-300width.jpg)](./v2/v2.jpg)
13+
Version | Description | Firmware | Layout
14+
--- | --- | --- | ---
15+
[v3](./v3) | 62-keys. Symmetrical enclosures. Non-traditional placement of backspace and backslash keys. | [tags/splinter-v3.0](https://github.com/andornaut/qmk_firmware/tree/splinter-3.0/keyboards/splinter) | [![v3](./v3/v3-300width.jpg)](./v3/v3.jpg)
16+
[v2](./v2) | 62-keys. Symmetrical enclosures. Non-traditional placement of backspace and backslash keys. | [tags/splinter-v2.0](https://github.com/andornaut/qmk_firmware/tree/splinter-2.0/keyboards/splinter) | [![v2](./v2/v2-300width.jpg)](./v2/v2.jpg)
17+
[v1](./v1) | 61-keys. Asymetrical enclosures. Traditional layout. | [tags/splinter-v1.0](https://github.com/andornaut/qmk_firmware/tree/splinter-1.0/keyboards/splinter) | [![v1](./v1/v1-300width.jpg)](./v1/v1.jpg)
1718

1819
## Installation
1920

@@ -51,18 +52,59 @@ Alternatively, you can install OrcaSlicer and Kicad using [these Ansible tasks](
5152

5253
## Developing
5354

54-
1. Set the `VERSION` environment variable in [`.env`](./.env) to one of "v1" or "v2"
55+
### Step 1. Configure the environment
56+
57+
Set the `VERSION` environment variable in [`.env`](./.env) to one of v1, v2, or v3
58+
59+
### Step 2. [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/)
60+
61+
![Keyboard Layout preview](./v3/keyboard-layout-editor/keyboard-layout-editor.png)
62+
5563
1. Prototype a keyboard layout using [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/)
56-
1. Convert the prototype to a production-ready design using [Ergogen](https://github.com/ergogen/ergogen)
64+
1. Export the layout configuration to [`keyboard-layout-editor/keyboard-layout-editor.json`](./v3/keyboard-layout-editor/keyboard-layout-editor.json), so that you can import it and iterate on it in the future
65+
1. Use the prototype as inspiration for creating a production-ready design using Ergogen
66+
67+
### Step 3. [Ergogen](https://github.com/ergogen/ergogen)
68+
69+
* [Online version of Ergogen that includes ceoloide's footprints](https://ergogen.ceoloide.com/)
70+
71+
![Ergogen preview](./v3/ergogen/ergogen.png)
72+
73+
1. Convert the prototype to a production-ready design using [Ergogen](https://github.com/ergogen/ergogen), and then save it to [`ergogen/config.yaml`](./v3/ergogen/config.yaml)
74+
* If prototyping using this [online Ergogen editor](https://ergogen.ceoloide.com/), then click the gear icon, then add the [sod-123w footprint](./ergogen/footprints/sod-123w.js)
75+
1. Run `npm run build` to generate and save outlines and pcbs to `../dist/v3/ergogen/` then `npm run copy-pcbs-to-kicad`
76+
* Alternatively, run `npm run watch` or `npm run watch-and-copy-pcbs-to-kicad`
77+
78+
### Steps 4. [KiCad](https://www.kicad.org/)
79+
80+
![KiCad preview](./v3/kicad/kicad.png)
81+
5782
1. Design the PCBs using [KiCad](https://www.kicad.org/)
58-
* Print the PCBs using [JLCPCB](https://jlcpcb.com/), [OSH Park](https://oshpark.com/), or [PCBWay](https://www.pcbway.com/)
59-
1. Model a case using [OnShape](https://cad.onshape.com)
60-
1. Print the case using [OrcaSlicer](https://github.com/SoftFever/OrcaSlicer)
61-
1. Install the [custom QMK firmware](https://github.com/andornaut/qmk_firmware/tree/splinter/keyboards/splinter)
83+
1. Run `npm run copy-pcbs-to-kicad` to copy the `../dist/v3/ergogen/pcbs/*.kicad_pcb` files generated by Ergogen to [`kicad/`](./v3/kicad/)
84+
1. Run `xdg-open ./v3/kicad/left.kicad_pcb`
85+
1. Route the PCBs in [`kicad/`](./v3/kicad/), and then save them to [`kicad/routed/`](./v3/kicad/routed/)
86+
* Once you're happy with the routing, run `npm run copy-pcbs-to-routed` to copy the PCBs to [`kicad/routed/`](./v3/kicad/routed/)
87+
* If you've generated new PCB files using Ergogen, then you can run `npm run copy-traces-from-routed` to copy traces from the PCBs in [`kicad/routed/`](./v3/kicad/routed/) back to those of the same name in [`kicad/`](./v3/kicad/). Select File > Revert > Yes to refresh the PCB in Kicad.
88+
1. Run `npm run copy-pcbs-to-routed && npm run fab-jlcpcb` to generate and save gerber and drill files to `../dist/v3/kicad/jlcpcb/*.zip`
89+
1. Print the PCBs using [JLCPCB](https://jlcpcb.com/) (or [OSH Park](https://oshpark.com/) or [PCBWay](https://www.pcbway.com/))
90+
* Submit the `../dist/v3/kicad/jlcpcb/*.zip` files to [JLCPCB](https://jlcpcb.com/)
6291

63-
### Fix error when running `npm run build`
92+
#### Customize net classes
6493

65-
The `pcbnew` Python library, which is packaged with Kicad, may fail if it cannot find libTKBO, eg.:
94+
1. Navigate to File > Board Setup... > Design Rules > Net Classes
95+
1. Update the "Default" netclass
96+
1. Click the "+" button to add a "VCC" net class
97+
1. Configure a pattern to match nets with the text "VCC" to the VCC net class
98+
99+
Configuration | Description
100+
--- | ---
101+
Default | Clearance: 0.20mm, Track width: 0.20mm
102+
VCC | Clearance: 0.25mm, Track width: 0.25mm
103+
104+
#### Fix error when running `npm run build`
105+
106+
The `pcbnew` Python library, which is packaged with Kicad,
107+
may fail if it cannot find libTKBO, eg.:
66108

67109
```bash
68110
$ python3
@@ -81,3 +123,25 @@ Workaround this issue by installing the missing library:
81123
```bash
82124
sudo apt install libocct-modeling-algorithms-7.6t64
83125
```
126+
127+
### Step 5. [OnShape](https://cad.onshape.com)
128+
129+
![OnShape preview](./v3/onshape/onshape.png)
130+
131+
1. Model the case using [OnShape](https://cad.onshape.com)
132+
1. Create a new document
133+
1. Start a new sketch
134+
1. Select "Insert a DXF or DWG file" > "Import ..." (at the bottom of the dialog) > Select `../dist/v3/ergogen/outlines/full.dxf`
135+
1. Design a keyboard case
136+
1. Export `*.step` files to [`onshape/`](./v3/onshape/)
137+
138+
### Step 6. [OrcaSlicer](https://github.com/SoftFever/OrcaSlicer)
139+
140+
1. Print the case using [OrcaSlicer](https://github.com/SoftFever/OrcaSlicer)
141+
1. Open or create an OrcaSlicer project file
142+
1. Import `*.step` files from [`onshape/`](./v3/onshape/)
143+
1. Print the keyboard case
144+
145+
### Step 7. [QMK Firmware](https://qmk.fm/)
146+
147+
1. Install the [custom QMK firmware](https://github.com/andornaut/qmk_firmware/tree/splinter/keyboards/splinter)

notes.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
"nodemon": "^3.1.10"
88
},
99
"scripts": {
10-
"build": "dotenv -- sh -c 'npx ergogen ./${VERSION}/ergogen/ --output dist/${VERSION}/ergogen/ && npm run update-pcbs'",
10+
"build": "dotenv -- sh -c 'set -vxe;npx ergogen ./${VERSION}/ergogen/ --output dist/${VERSION}/ergogen/ && npm run update-pcbs'",
1111
"clean": "rm -rf dist",
12-
"copy-pcbs-to-kicad": "dotenv -- sh -c 'cp dist/${VERSION}/ergogen/pcbs/[!_]*.kicad_pcb ./${VERSION}/kicad/'",
13-
"copy-to-routed": "dotenv -- sh -c 'set -vxe;cp ./${VERSION}/kicad/[!_]*.kicad_pcb ./${VERSION}/kicad/routed/'",
14-
"copy-traces": "dotenv -- sh -c 'set -vxe;for f in ./${VERSION}/kicad/routed/[!_]*.kicad_pcb; do echo \"${f}\" && python3 ./${VERSION}/ergogen/kb_ergogen_helper/ergogen_helper.py --no-backup copy-traces \"${f}\" ./${VERSION}/kicad/$(basename \"${f}\"); done'",
15-
"fab-jlcpcb": "dotenv -- sh -c 'for f in ./${VERSION}/kicad/routed/[!_]*.kicad_pcb; do echo \"${f}\" && kikit fab jlcpcb --nametemplate 'splinter_{boardTitle}_{date}' \"${f}\" dist/${VERSION}/kicad/jlcpcb/; done'",
16-
"update-pcbs": "dotenv -- sh -c 'for f in dist/${VERSION}/ergogen/pcbs/[!_]*.kicad_pcb; do echo ${f} && python3 ./${VERSION}/ergogen/kb_ergogen_helper/ergogen_helper.py --no-backup update-pcb ${f}; done'",
17-
"watch": "dotenv -- nodemon --ext .js,.yaml --watch ./${VERSION}/ergogen/config.yaml --exec 'npm run build'",
18-
"watch-and-copy-pcbs-to-kicad": "dotenv -- nodemon --ext .js,.yaml --watch ./${VERSION}/ergogen/config.yaml --exec 'npm run build && npm run copy-pcbs-to-kicad'"
12+
"copy-pcbs-to-kicad": "dotenv -- sh -c 'set -vxe;cp dist/${VERSION}/ergogen/pcbs/[!_]*.kicad_pcb ./${VERSION}/kicad/'",
13+
"copy-pcbs-to-routed": "dotenv -- sh -c 'set -vxe;cp ./${VERSION}/kicad/[!_]*.kicad_pcb ./${VERSION}/kicad/routed/'",
14+
"copy-traces-from-routed": "dotenv -- sh -c 'set -vxe;for f in ./${VERSION}/kicad/routed/[!_]*.kicad_pcb; do echo \"${f}\" && python3 ./${VERSION}/ergogen/kb_ergogen_helper/ergogen_helper.py --no-backup copy-traces \"${f}\" ./${VERSION}/kicad/$(basename \"${f}\"); done'",
15+
"fab-jlcpcb": "dotenv -- sh -c 'set -vxe;for f in ./${VERSION}/kicad/routed/[!_]*.kicad_pcb; do echo \"${f}\" && kikit fab jlcpcb --nametemplate 'splinter_{boardTitle}_{date}' \"${f}\" dist/${VERSION}/kicad/jlcpcb/; done'",
16+
"update-pcbs": "dotenv -- sh -c 'set -vxe;for f in dist/${VERSION}/ergogen/pcbs/[!_]*.kicad_pcb; do echo ${f} && python3 ./${VERSION}/ergogen/kb_ergogen_helper/ergogen_helper.py --no-backup update-pcb ${f}; done'",
17+
"watch": "dotenv -- sh -c 'set -vxe;nodemon --ext .js,.yaml --watch ./${VERSION}/ergogen/config.yaml --exec \"npm run build\"'",
18+
"watch-and-copy-pcbs-to-kicad": "dotenv -- sh -c 'set -vxe;nodemon --ext .js,.yaml --watch ./${VERSION}/ergogen/config.yaml --exec \"npm run build && npm run copy-pcbs-to-kicad\"'"
1919
}
2020
}

v1/README.md

Lines changed: 34 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,21 @@
11
# Version 1 of the Splinter keyboard
22

3-
A 61-key split columnar ergonomic keyboard - Production ready. Asymetrical. Traditional key layout.
3+
* [QMK firmware](https://github.com/andornaut/qmk_firmware/tree/splinter-1.0/keyboards/splinter)
4+
5+
A 61-key split columnar ergonomic keyboard - Production ready.
6+
Asymetrical. Traditional key layout.
47

58
![v1](./v1.jpg)
69

710
## Hardware
811

9-
### atmega32u4
10-
11-
* [Pro Micro pinout](https://golem.hu/article/pro-micro-pinout/)
12-
13-
Left Arduino | Left AVR | Right Arduino | Right AVR
14-
--- |--- | --- |---
15-
1 (TX0) | D3 | RAW |
16-
0 (RX1) | D2 | GND |
17-
GND | | RST |
18-
GND | | VCC |
19-
2 (SDA) | D1 | A3 (21) | F4
20-
3 (SCL) | D0 | A2 (20) | F5
21-
4 (A6) | D4 | A1 (19) | F6
22-
5 | C6 | A0 (18) | F7
23-
6 (A7) | D7 | 15 | B1
24-
7 | E6 | 14 | B3
25-
8 (A8) | B4 | 16 | B2
26-
9 (A9) | B5 | 10 (A10) | B6
27-
28-
### TRRS serial pinout
12+
### Bill of materials (BOM)
2913

30-
* [qmk_firmware/docs/feature_split_keyboard](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_split_keyboard.md#serial-wiring)
31-
* [qmk_firmware/docs/serial_driver](https://github.com/qmk/qmk_firmware/blob/master/docs/serial_driver.md)
32-
33-
Left | Right
34-
--- | ---
35-
-- | 0 (RX1, D2)
36-
-- | GND
37-
-- | VCC
38-
-- | --
39-
40-
### Parts
41-
42-
Category | Quantity | Part
14+
Description | Quantity | Part
4315
--- | --- | ---
4416
Diodes | 61 | [Nexperia BAS16H,115](https://www.lcsc.com/product-detail/Switching-Diode_Nexperia-BAS16H-115_C130413.html)
4517
Hot swap sockets | 61 | [Kailh CPG151101S11-16](https://www.lcsc.com/product-detail/Mechanical-Keyboard-Shaft_span-style-background-color-ff0-Kailh-span-CPG151101S11-16_C5156480.html)
46-
Keycap sets || [GMK Sixes keycaps](https://www.deskhero.ca/products/gmk-sixes) and [Ortho Kit](https://www.deskhero.ca/products/gmk-sixes?variant=39360309329986)
18+
Keycap set | 1 | [GMK Sixes keycaps](https://www.deskhero.ca/products/gmk-sixes) and [Ortho Kit](https://www.deskhero.ca/products/gmk-sixes?variant=39360309329986)
4719
Key switches | 61 | [Cherry MX Ergo Clear](https://shockport.ca/collections/switches-1/products/cherry-mx-ergo-clear) ([developer information](https://www.cherrymx.de/en/dev.html))
4820
Microcontrollers | 2 | [SparkFun Qwiic Pro Micro - USB-C (ATmega32U4)](https://www.sparkfun.com/products/15795) ([GitHub](https://github.com/sparkfun/Pro_Micro?tab=readme-ov-file))
4921
Reset buttons | 2 | [E-Switch TL3342F450QG](https://www.lcsc.com/product-detail/Tactile-Switches_E-Switch-TL3342F450QG_C2886897.html) (Not needed if using the SparkFun microcontroller)
@@ -55,6 +27,25 @@ Threaded inserts | 4 | [M3x3mm (short) threaded inserts](https://cnckitchen.stor
5527
TRRS cables | 1 | [Monoprice Onyx TRRS Cable](https://www.monoprice.com/product?p_id=18632)
5628
TRRS jacks | 2 | [HCTL HC-PJ-320A-4P-D](https://www.lcsc.com/product-detail/Audio-Connector-Headphone_HCTL-HC-PJ-320A-4P-D_C5372851.html)
5729

30+
### atmega32u4
31+
32+
* [Pro Micro pinout](https://golem.hu/article/pro-micro-pinout/)
33+
34+
Left Arduino | Left AVR | Right Arduino | Right AVR
35+
--- |--- | --- |---
36+
1 (TX0) | D3 | RAW ||
37+
0 (RX1) | D2 | GND ||
38+
GND | | RST ||
39+
GND | | VCC ||
40+
2 (SDA) | D1 | A3 (21) | F4
41+
3 (SCL) | D0 | A2 (20) | F5
42+
4 (A6) | D4 | A1 (19) | F6
43+
5 | C6 | A0 (18) | F7
44+
6 (A7) | D7 | 15 | B1
45+
7 | E6 | 14 | B3
46+
8 (A8) | B4 | 16 | B2
47+
9 (A9) | B5 | 10 (A10) | B6
48+
5849
### Part dimensions
5950

6051
Part | Dimensions
@@ -65,58 +56,14 @@ Keycap size with padding | 19mm²
6556
Switch (MX) cutout size | 14mm²
6657
Switch (MX) outer size | 15.6mm²
6758

68-
## Developing
69-
70-
* [Overall process](../README.md#developing)
71-
72-
### [Keyboard Layout](http://www.keyboard-layout-editor.com/)
73-
74-
* [Project folder](./keyboard-layout-editor)
75-
* [Configuration file](./keyboard-layout-editor/keyboard-layout.json)
76-
77-
![Keyboard Layout preview](./keyboard-layout-editor/keyboard-layout-editor.png)
78-
79-
1. Prototype a keyboard layout using [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/)
80-
1. Export the layout configuration to [`./keyboard-layout-editor/keyboard-layout.json`](./keyboard-layout-editor/keyboard-layout.json), so that you can import it and iterate on it in the future
81-
1. Use the prototype as inspiration for creating a production-ready design using Ergogen
82-
83-
### [Ergogen](https://github.com/ergogen/ergogen)
84-
85-
* [Project folder](./ergogen)
86-
* [Configuration file](./ergogen/config.yaml)
87-
88-
![Ergogen preview](./ergogen/ergogen.png)
89-
90-
1. Convert the prototype to Ergogen's DSL, and then save it to [`./ergogen/config.yaml`](./ergogen/config.yaml)
91-
* If prototyping using this [online version of Ergogen](https://ergogen.cache.works/), then download the "raw.txt" file
92-
1. Run `npm run build` to generate and save outlines and pcbs to `../dist/v1/ergogen/`
93-
* Alternatively, run `npm run watch` or `npm run watch-and-copy-pcbs-to-kicad`
94-
95-
### [KiCad](https://www.kicad.org/)
96-
97-
* [Project folder](./kicad)
98-
99-
![KiCad preview](./kicad/kicad.png)
100-
101-
1. Run `npm run copy-pcbs-to-kicad` to copy the `../dist/v1/ergogen/pcbs/*.kicad_pcb` files generated by Ergogen to [`./kicad/`](./kicad/)
102-
1. Run `xdg-open ./v2/kicad/left.kicad_pcb`
103-
1. Route the PCBs in [`./kicad/`](./kicad/), and then save them to [`./kicad/routed/`](./kicad/routed/)
104-
* If you've generated new PCB files using Ergogen, then you can run `npm run copy-traces` to copy traces from the PCBs in [`./kicad/routed/`](./kicad/routed/) back to those of the same name in [`./kicad/`](./kicad/)
105-
1. Run `npm run fab-jlcpcb` to generate and save gerber and drill files to `../dist/v1/kicad/jlcpcb/*.zip`
106-
1. Submit the `../dist/v1/kicad/jlcpcb/*.zip` files to [JLCPCB](https://jlcpcb.com/)
107-
10859
#### PCB dimensions
10960

110-
Position each PCB at (105,105). The left half starts at this position, but the right half must be moved before running `npm run copy-traces`. 100mm to provide a buffer around the edges of the document, and 5 mm to account for the case walls.
111-
112-
##### Configuration
113-
114-
Configuration | Description
115-
--- | ---
116-
Default netclass | Clearance: 0.25mm, Track width: 0.25mm
117-
VCC netclass | Clearance: 0.25mm, Track width: 0.25mm
61+
Position each PCB at (105,105). The left half starts at this position,
62+
but the right half must be moved before running `npm run copy-traces-from-routed`.
63+
100mm to provide a buffer around the edges of the document, and 5 mm to account
64+
for the case walls.
11865

119-
##### Left half
66+
#### Left half
12067

12168
Overall (h,w): 122.1 mm, 155.5 mm
12269

@@ -129,7 +76,7 @@ Corner | (253.4,224.1) (260.5,208.8)
12976
Bottom | (105,205.5) (253.4,224.1)
13077
PCB edge to center of M3 hole | 23mm (28mm to outer wall)
13178

132-
##### Right half
79+
#### Right half
13380

13481
Overall (h,w): 122.1 mm, 193.6 mm
13582

@@ -143,24 +90,12 @@ Buttom | (112,224.1) (263,205.2)
14390
Left corner | (105, 208.8) (112,224.1)
14491
PCB outside edge to center of M3 hole | 18mm (23mm to outer wall)
14592

146-
### [OnShape](https://cad.onshape.com)
147-
148-
* [Project folder](./onshape)
149-
150-
![OnShape preview](./onshape/onshape.png)
93+
#### Enclosure
15194

152-
1. Create a new document
153-
1. Start a new sketch
154-
1. Select "Import DXF or DWG files" > "Import ..." (at the bottom of the dialog) > Select `../dist/v2/ergogen/outlines/full.dxf`
155-
1. Design a keyboard case
156-
1. Export `*.step` files to [`./onshape/`](./onshape/)
157-
158-
#### Dimensions
95+
Overall dimensions (h,w): 129.51474 mm, 165.5 mm
15996

16097
##### Left half
16198

162-
Overall dimensions (h,w): 129.51474 mm, 165.5 mm
163-
16499
Edge | Length
165100
--- | ---
166101
Left | 110 mm
@@ -181,13 +116,3 @@ Right | 110 mm
181116
Right corner | 55.85994 mm
182117
Buttom | 157.61289 mm
183118
Left corner | 21.53214 mm
184-
185-
### [OrcaSlicer](https://github.com/SoftFever/OrcaSlicer)
186-
187-
1. Open or create an OrcaSlicer project file
188-
1. Import `*.step` files from [`./onshape/`](./onshape/)
189-
1. Print the keyboard case
190-
191-
### [QMK Firmware](https://qmk.fm/)
192-
193-
Install [the "splinter" fork of qmk_firmware](https://github.com/andornaut/qmk_firmware/tree/splinter/keyboards/splinter).

0 commit comments

Comments
 (0)