My last try designing a unibody keyboard based on the Ferris layout were not that good. It was called unibodysweep. Now I’ll be using ergogen to generate my keyboard.
I got inspired by this: GitHub - Riccardo-merli94/Unicorny: Unibody ergonomic keyboard inspired by ferris-sweep.
This keyboard has the same layout as the GitHub - smores56/osprette: 34-key keyboard.
My Ergogen Code
This is the code I tailored in order to generate my keyboard.
units:
kx: cx
ky: cy
px: kx + 2
py: ky + 2
points:
zones:
matrix:
anchor:
shift: [100, -100]
key:
padding: 1ky
spread: 1kx
columns:
pinky:
key:
column_net: P19
ring:
key:
stagger: 0.66ky
column_net: P20
middle:
key:
stagger: 0.25ky
column_net: P21
index:
key:
stagger: -0.25ky
column_net: P0
inner:
key:
stagger: -0.15ky
column_net: P1
rows:
bottom:
padding: ky
row_net: P14
mirror.row_net: P8
home:
padding: ky
row_net: P15
mirror.row_net: P7
top:
padding: ky
row_net: P18
mirror.row_net: P6
thumb:
anchor:
ref: matrix_index_bottom
shift: [0.66U, -1.25U]
rotate: -10
columns:
tucky:
key:
name: thumb_tucky
column_net: P0
reachy:
key:
spread: U
splay: -15
origin: [-0.5U, -0.5U]
name: thumb_reachy
column_net: P1
rows:
fan:
row_net: P16
rotate: -30
mirror: &mirror
ref: matrix_inner_top
distance: 2kx
outlines:
raw:
- what: rectangle
where: true
size: [px+2, py+2]
keys:
- what: rectangle
where: true
size: [kx-0.5,ky-0.5]
circle_left_main:
- what: circle
operation: stack
where:
- ref: matrix_middle_bottom
shift: [ -1.1px,-6.53py]
radius: 5.15py
circle_left_sub:
- what: circle
operation: stack
where:
- ref: matrix_middle_bottom
shift: [ 8,-7py]
radius: 5.15py
circle_left:
- name: circle_left_main
- operation:
name: circle_left_sub
circle_right_main:
- what: circle
operation: stack
where:
- ref: mirror_matrix_middle_bottom
shift: [ -1.1px,-6.53py]
radius: 5.15py
circle_right_sub:
- what: circle
operation: stack
where:
- ref: mirror_matrix_middle_bottom
shift: [ 8,-7py]
radius: 5.15py
circle_right:
- name: circle_right_main
- operation:
name: circle_right_sub
circle_complete:
- name: circle_left
- operation:
name: circle_right
curve_left:
- what: polygon
operation: stack
points:
- ref: matrix_pinky_bottom
shift: [-0.4px,0.5py]
- ref: thumb_tucky
shift: [-0.4px,0.8py]
- ref: thumb_tucky
shift: [-0.4px,-0.55py]
- ref: matrix_pinky_bottom
shift: [-0.4px,-0.4py]
curve_right:
- what: polygon
operation: stack
points:
- ref: mirror_matrix_pinky_bottom
shift: [-0.4px,0.5py]
- ref: mirror_thumb_tucky
shift: [-0.4px,0.8py]
- ref: mirror_thumb_tucky
shift: [-0.4px,-0.55py]
- ref: mirror_matrix_pinky_bottom
shift: [-0.4px,-0.4py]
curve:
- name: curve_left
- operation:
name: curve_right
board:
- what: polygon
operation: stack
points:
- ref: matrix_middle_top
shift: [-1.8px,-0.6py]
- ref: mirror_matrix_middle_top
shift: [-1.8px,-0.6py]
- ref: mirror_thumb_reachy
shift: [-0.04px,-0.5py]
- ref: thumb_reachy
shift: [-0.04px,-0.5py]
edges:
- what: polygon
operation: stack
points:
- ref: matrix_pinky_top
shift: [-0.4px,0.6py]
- ref: matrix_inner_top
shift: [0.6px,0.6py]
- ref: mirror_matrix_inner_top
shift: [0.6px,0.6py]
- ref: mirror_matrix_inner_top
shift: [-0.4px,0.6py]
- ref: mirror_thumb_reachy
shift: [-0.04px,-0.5py]
- ref: thumb_reachy
shift: [-0.04px,-0.5py]
step1:
- name: raw
- operation:
name: curve
cut_circle:
- name: step1
- operation: subtract
name: circle_complete
step2:
- name: cut_circle
- operation:
name: board
fillet: 1
combo:
- name: step2
- operation: subtract
name: keys
pcbs:
oled_unisweep:
outlines:
main:
outline: step2
footprints:
choc_hotswap:
what: choc
where: true
params:
keycaps: true
reverse: false
hotswap: false
from: "{{column_net}}"
to: "{{colrow}}"
diode:
what: diode
where: true
params:
from: "{{colrow}}"
to: "{{row_net}}"
adjust:
shift: [0, -5]
slider_back:
what: slider
where:
ref.aggregate.parts: [thumb_reachy, mirror_thumb_reachy]
shift: [0,8.5]
rotate: 180
params:
side: B
from: RAW
to: B+
pad_vcc:
what: pad
where:
ref.aggregate.parts: [thumb_reachy, mirror_thumb_reachy]
shift: [-2.5,52]
rotate: 0
params:
width: 2
height: 2
net: B+
text: B+
front: true
pad_gnd:
what: pad
where:
ref.aggregate.parts: [thumb_reachy, mirror_thumb_reachy]
shift: [2.5,52]
rotate: 0
params:
width: 2
height: 2
net: GND
text: GND
front: true
align: right
oled:
what: oled
params:
side: "F"
SDA: P2
SCL: P3
where:
ref.aggregate.parts: [matrix_inner_bottom, mirror_matrix_inner_bottom]
shift: [-6,-13]
rotate: 90
promicro:
what: promicro
params:
orientation: "down"
where:
ref.aggregate.parts: [matrix_inner_home, mirror_matrix_inner_home]
shift: [0,-10]
rotate: 90