diff --git a/.editorconfig b/.editorconfig index b27720e..bf021ca 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,4 +13,3 @@ indent_size = 2 [Makefile] indent_style = tab - diff --git a/Makefile b/Makefile index 8be84f2..79a2578 100644 --- a/Makefile +++ b/Makefile @@ -4,17 +4,16 @@ main: ## generate main case # TODO: split into printable pieces - openscad --export-format binstl -o main.stl main.scad + #openscad --export-format binstl -o main.stl main.scad openscad -o main.3mf main.scad -keys_en-us-intl: ## generate key caps with english us interational layout - openscad --export-format binstl -o keys_en-us-intl.stl keys_en-us-intl.scad - openscad -o keys_en-us-intl.3mf keys_en-us-intl.scad +keyset_en-us-intl: ## generate key caps with english us interational layout + #openscad --export-format binstl -o keyset_en-us-intl.stl keyset_en-us-intl.scad + openscad -o keyset_en-us-intl.3mf keyset_en-us-intl.scad -keys_de: ## generate key caps with german layout - openscad --export-format binstl -o keys_de.stl keys_de.scad - openscad -o keys_de.3mf keys_de.scad +keyset_de: ## generate key caps with german layout + #openscad --export-format binstl -o keyset_de.stl keyset_de.scad + openscad -o keyset_de.3mf keyset_de.scad help: ## display this help @grep -Fh "##" $(MAKEFILE_LIST) | grep -Fv fgrep | sed -e 's/\\$$//' | sed -e 's/##//' - diff --git a/keyset_de.scad b/keyset_de.scad index 6db249b..b6d63da 100644 --- a/keyset_de.scad +++ b/keyset_de.scad @@ -3,33 +3,33 @@ use ; use ; -mat(); +mat(rows=13, columns=5); -key(x=0, y=0, label="Esc"); -key(x=1, y=0, label="1 !"); -key(x=2, y=0, label="2 \""); -key(x=3, y=0, label="3 §"); -key(x=4, y=0, label="4 $"); -key(x=5, y=0, label="5 %"); -key(x=6, y=0, label="6 &"); -key(x=7, y=0, label="7 /"); -key(x=8, y=0, label="8 ("); -key(x=9, y=0, label="9 )"); -key(x=10, y=0, label="0 ="); -key(x=11, y=0, w=2, label="Bksp"); +key(x=0, y=0, label="Strg", size=2.5); +key(x=1, y=0, label="Fn"); +key(x=2, y=0, label="⬆", size=5); // Shift +key(x=3, y=0, label="Alt", size=3); +key(x=4, y=0, w=3, label="—————"); // Space +key(x=7, y=0, label="ß?"); +key(x=8, y=0, label="´`"); +key(x=9, y=0, label="◀"); +key(x=10, y=0, label="▼"); +key(x=11, y=0, label="▶"); +key(x=12, y=0, label="Strg", size=2.5); -key(x=0, y=1, label="Q"); -key(x=1, y=1, label="W"); -key(x=2, y=1, label="E"); -key(x=3, y=1, label="R"); -key(x=4, y=1, label="T"); -key(x=5, y=1, label="Z"); -key(x=6, y=1, label="U"); -key(x=7, y=1, label="I"); -key(x=8, y=1, label="O"); -key(x=9, y=1, label="P"); -key(x=10, y=1, label="Ü"); -key(x=11, y=1, label="+ *"); +key(x=0, y=1, label="Y"); +key(x=1, y=1, label="X"); +key(x=2, y=1, label="C"); +key(x=3, y=1, label="V"); +key(x=4, y=1, label="B"); +key(x=5, y=1, label="N"); +key(x=6, y=1, label="M"); +key(x=7, y=1, label=",;"); +key(x=8, y=1, label=".:"); +key(x=9, y=1, label="-_"); +key(x=10, y=1, label="▲"); +key(x=11, y=1, label="< >", spacing=0.6); +key(x=12, y=1, label="⬆", size=5); // Shift key(x=0, y=2, label="A"); key(x=1, y=2, label="S"); @@ -42,31 +42,31 @@ key(x=7, y=2, label="K"); key(x=8, y=2, label="L"); key(x=9, y=2, label="Ö"); key(x=10, y=2, label="Ä"); -key(x=11, y=2, h=2, label="Ret"); +key(x=11, y=2, label="#'"); +key(x=12, y=2, h=2, label="↵", size=5); // Return -key(x=0, y=3, label="Y"); -key(x=1, y=3, label="X"); -key(x=2, y=3, label="C"); -key(x=3, y=3, label="V"); -key(x=4, y=3, label="B"); -key(x=5, y=3, label="N"); -key(x=6, y=3, label="M"); -key(x=7, y=3, label=", ;"); -key(x=8, y=3, label=". :"); -key(x=9, y=3, label="- _"); -key(x=10, y=3, label="Up"); -key(x=11, y=3, label="< >"); -key(x=12, y=3, label="Shift"); - -key(x=0, y=4, label="Ctrl"); -key(x=1, y=4, label="Fn"); -key(x=2, y=4, label="Shift"); -key(x=3, y=4, label="Alt"); -key(x=4, y=4, w=3, label="---"); // Space -key(x=7, y=4, label="ß ?"); -key(x=8, y=4, label="´ `"); -key(x=9, y=4, label="Left"); -key(x=10, y=4, label="Down"); -key(x=11, y=4, label="Right"); -key(x=12, y=4, label="Ctrl"); +key(x=0, y=3, label="Q"); +key(x=1, y=3, label="W"); +key(x=2, y=3, label="E"); +key(x=3, y=3, label="R"); +key(x=4, y=3, label="T"); +key(x=5, y=3, label="Z"); +key(x=6, y=3, label="U"); +key(x=7, y=3, label="I"); +key(x=8, y=3, label="O"); +key(x=9, y=3, label="P"); +key(x=10, y=3, label="Ü"); +key(x=11, y=3, label="+*"); +key(x=0, y=4, label="Esc", size=3); +key(x=1, y=4, label="1!"); +key(x=2, y=4, label="2\""); +key(x=3, y=4, label="3§"); +key(x=4, y=4, label="4$"); +key(x=5, y=4, label="5%"); +key(x=6, y=4, label="6&"); +key(x=7, y=4, label="7/"); +key(x=8, y=4, label="8("); +key(x=9, y=4, label="9)"); +key(x=10, y=4, label="0="); +key(x=11, y=4, w=2, label="⌫", size=5); // backspace diff --git a/keyset_en-us-intl.scad b/keyset_en-us-intl.scad index b53258d..c6f61b5 100644 --- a/keyset_en-us-intl.scad +++ b/keyset_en-us-intl.scad @@ -1,36 +1,38 @@ // en-us-intl layout +$fn = 64; + use ; use ; -mat(); +//difference() { +// union() { +mat(rows=13, columns=5); -key(x=0, y=0, label="Esc"); -key(x=1, y=0, label="1 !"); -key(x=2, y=0, label="2 @"); -key(x=3, y=0, label="3 #"); -key(x=4, y=0, label="4 $"); -key(x=5, y=0, label="5 %"); -key(x=6, y=0, label="6 ^"); -key(x=7, y=0, label="7 &"); -key(x=8, y=0, label="8 *"); -key(x=9, y=0, label="9 ("); -key(x=10, y=0, label="0 )"); -key(x=11, y=0, w=2, label="Bksp"); +key(x=0, y=0, label="Ctrl", size=2.5); +key(x=1, y=0, label="Fn"); +key(x=2, y=0, label="⬆", size=5); // Shift +key(x=3, y=0, label="Alt", size=3); +key(x=4, y=0, w=3, label="—————"); // Space +key(x=7, y=0, label="-_"); +key(x=8, y=0, label="= +", spacing=0.6); +key(x=9, y=0, label="◀"); +key(x=10, y=0, label="▼"); +key(x=11, y=0, label="▶"); +key(x=12, y=0, label="Ctrl", size=2.5); -key(x=0, y=1, label="Q"); -key(x=1, y=1, label="W"); -key(x=2, y=1, label="E"); -key(x=3, y=1, label="R"); -key(x=4, y=1, label="T"); -key(x=5, y=1, label="Y"); -key(x=6, y=1, label="U"); -key(x=7, y=1, label="I"); -key(x=8, y=1, label="O"); -key(x=9, y=1, label="P"); -key(x=10, y=1, label="[ {"); -key(x=11, y=1, label="] }"); -key(x=12, y=1, label="\\ |"); +key(x=0, y=1, label="Z"); +key(x=1, y=1, label="X"); +key(x=2, y=1, label="C"); +key(x=3, y=1, label="V"); +key(x=4, y=1, label="B"); +key(x=5, y=1, label="N"); +key(x=6, y=1, label="M"); +key(x=7, y=1, label=",<"); +key(x=8, y=1, label=".>"); +key(x=9, y=1, label="/?"); +key(x=10, y=1, label="▲"); +key(x=11, y=1, w=2, label="⬆", size=5); // Shift key(x=0, y=2, label="A"); key(x=1, y=2, label="S"); @@ -41,32 +43,68 @@ key(x=5, y=2, label="H"); key(x=6, y=2, label="J"); key(x=7, y=2, label="K"); key(x=8, y=2, label="L"); -key(x=9, y=2, label="; :"); -key(x=10, y=2, label="' \""); -key(x=11, y=2, w=2, label="Ret"); +key(x=9, y=2, label=";:"); +key(x=10, y=2, label="'\""); +key(x=11, y=2, w=2, label="↵", size=5); // Return -key(x=0, y=3, label="Z"); -key(x=1, y=3, label="X"); -key(x=2, y=3, label="C"); -key(x=3, y=3, label="V"); -key(x=4, y=3, label="B"); -key(x=5, y=3, label="N"); -key(x=6, y=3, label="M"); -key(x=7, y=3, label=", <"); -key(x=8, y=3, label=". >"); -key(x=9, y=3, label="/ ?"); -key(x=10, y=3, label="Up"); -key(x=11, y=3, w=2, label="Shift"); - -key(x=0, y=4, label="Ctrl"); -key(x=1, y=4, label="Fn"); -key(x=2, y=4, label="Shift"); -key(x=3, y=4, label="Alt"); -key(x=4, y=4, w=3, label="---"); // Space -key(x=7, y=4, label="- _"); -key(x=8, y=4, label="= +"); -key(x=9, y=4, label="Left"); -key(x=10, y=4, label="Down"); -key(x=11, y=4, label="Right"); -key(x=12, y=4, label="Ctrl"); +key(x=0, y=3, label="Q"); +key(x=1, y=3, label="W"); +key(x=2, y=3, label="E"); +key(x=3, y=3, label="R"); +key(x=4, y=3, label="T"); +key(x=5, y=3, label="Y"); +key(x=6, y=3, label="U"); +key(x=7, y=3, label="I"); +key(x=8, y=3, label="O"); +key(x=9, y=3, label="P"); +key(x=10, y=3, label="[{"); +key(x=11, y=3, label="]}"); +key(x=12, y=3, label="\\|"); +key(x=0, y=4, label="Esc", size=3); +key(x=1, y=4, label="1!"); +key(x=2, y=4, label="2@"); +key(x=3, y=4, label="3#"); +key(x=4, y=4, label="4$"); +key(x=5, y=4, label="5%"); +key(x=6, y=4, label="6^"); +key(x=7, y=4, label="7&"); +key(x=8, y=4, label="8*"); +key(x=9, y=4, label="9("); +key(x=10, y=4, label="0)"); +key(x=11, y=4, w=2, label="⌫", size=5); // backspace +// } +// +// include ; +// +// for(x = [0 : 1 : 12]) { +// for(y = [0 : 1 : 4]) { +// translate([margin + x*key_width+key_width/2 + x*padding, margin + y*key_height+key_height/2 + y*padding, 0]) cylinder(h=1.8, r=1); +// } +// } +// // space bar +// translate([margin + key_width/2 + 4*(key_width+padding), margin + key_height/2, 0]) { +// hull() { +// cylinder(h=1.8, r=1); +// translate([2*(key_width+padding),0,0]) cylinder(h=1.8, r=1); +// } +// } +// translate([margin + key_width/2 + 11*(key_width+padding), margin + key_height/2 + 1*(key_height+padding), 0]) { +// hull() { +// cylinder(h=1.8, r=1); +// translate([key_width+padding,0,0]) cylinder(h=1.8, r=1); +// } +// } +// translate([margin + key_width/2 + 11*(key_width+padding), margin + key_height/2 + 2*(key_height+padding), 0]) { +// hull() { +// cylinder(h=1.8, r=1); +// translate([key_width+padding,0,0]) cylinder(h=1.8, r=1); +// } +// } +// translate([margin + key_width/2 + 11*(key_width+padding), margin + key_height/2 + 4*(key_height+padding), 0]) { +// hull() { +// cylinder(h=1.8, r=1); +// translate([key_width+padding,0,0]) cylinder(h=1.8, r=1); +// } +// } +//} \ No newline at end of file diff --git a/lib/key.scad b/lib/key.scad index f99d1b3..86bd00d 100644 --- a/lib/key.scad +++ b/lib/key.scad @@ -1,24 +1,27 @@ // Generate a key cap at a specific position in the matrix -module key(x, y, w=1, h=1, label="") { - spacing_h = 1; - spacing_v = 1; - key_thickness = 1; - key_radius = 1; - key_width = 1; - key_height = 1; - mat_thickness = 1; - - color("DarkSlateGray"); - translate([x*spacing_h, y*spacing_v, mat_thickness]) difference() { +module key(x, y, w=1, h=1, label="", spacing=1, size=3.5) { + include ; + $fn = 64; + + color("DarkSlateGray") translate([x*key_width + x*padding + margin, y*key_height + y*padding + margin, mat_thickness]) difference() { union() { hull() { - translate([key_radius, key_radius, 0]) cylinder(h=key_thickness, r=key_radius); - translate([key_radius, key_height-key_radius, 0]) cylinder(h=key_thickness, r=key_radius); - translate([key_width-key_radius, key_radius, 0]) cylinder(h=key_thickness, r=key_radius); - translate([key_width-key_radius, key_height-key_radius, 0]) cylinder(h=key_thickness, r=key_radius); + translate([key_radius, key_radius, 0]) cylinder(h=key_thickness, r=key_radius); + translate([key_radius, key_height*h + padding*(h-1) - key_radius, 0]) cylinder(h=key_thickness, r=key_radius); + translate([key_width*w + padding*(w-1) - key_radius, key_radius, 0]) cylinder(h=key_thickness, r=key_radius); + translate([key_width*w + padding*(w-1) - key_radius, key_height*h + padding*(h-1) - key_radius, 0]) cylinder(h=key_thickness, r=key_radius); } } - // TODO: subtract label from key cap + // indent instead of dome + translate([0,0,key_thickness]) hull() { + translate([1.1, 1.1, 0]) scale([1,1,0.3]) sphere(r=1); + translate([key_width*w + padding*(w-1) - 1.1, 1.1, 0]) scale([1,1,0.3]) sphere(r=1); + translate([1.1, key_height*h + padding*(h-1) - 1.1, 0]) scale([1,1,0.3]) sphere(r=1); + translate([key_width*w + padding*(w-1) - 1.1, key_height*h + padding*(h-1) - 1.1, 0]) scale([1,1,0.3]) sphere(r=1); + } + // depth of 0.3mm+ + // Noto Sans Mono:style=Medium + // subtract label from key cap + translate([(key_width*w + padding*(w-1))/2 -(0.5/spacing-0.5), (key_height*h + padding*(h-1))/2, key_thickness-0.5]) linear_extrude(height=1) text(label, size=size, font="DejaVu Sans Mono:style=Bold", halign="center", valign="center", spacing=spacing, $fn=64); } } - diff --git a/lib/key_specs.scad b/lib/key_specs.scad new file mode 100644 index 0000000..6b915bc --- /dev/null +++ b/lib/key_specs.scad @@ -0,0 +1,8 @@ +// key specifications +margin = 1; +padding = 1; +key_thickness = 2; // + label +key_radius = 1; +key_width = 9; +key_height = 6; +mat_thickness = 0.5; diff --git a/lib/mat.scad b/lib/mat.scad new file mode 100644 index 0000000..8e9a1aa --- /dev/null +++ b/lib/mat.scad @@ -0,0 +1,8 @@ +// genrate key mat that sits under the key caps + +module mat(rows=13, columns=5) { + include ; + $fn = 64; + + color("DarkSlateGray") cube([rows*key_width + (rows-1)*padding + 2*margin, columns*key_height + (columns-1)*padding + 2*margin, mat_thickness]); +} diff --git a/pins.scad b/pins.scad new file mode 100644 index 0000000..94c8f71 --- /dev/null +++ b/pins.scad @@ -0,0 +1,30 @@ +include ; + +$fn = 64; + +for(x = [0 : 1 : 12]) { + for(y = [0 : 1 : 4]) { + translate([margin + x*key_width+key_width/2 + x*padding, margin + y*key_height+key_height/2 + y*padding, 0]) cylinder(h=1.8, r=1); + } +} + +for(i = [0:2]) { + translate([margin + key_width/2,45+i*5,0]) { + hull() { + cylinder(h=1.5, r=1); + translate([key_width+padding,0,0]) cylinder(h=1.5, r=1); + } + cylinder(h=1.8, r=1); + translate([key_width+padding,0,0]) cylinder(h=1.8, r=1); + } +} + +translate([margin + key_width/2,40,0]) { + hull() { + cylinder(h=1.5, r=1); + translate([2*(key_width+padding),0,0]) cylinder(h=1.5, r=1); + } + cylinder(h=1.8, r=1); + translate([key_width+padding,0,0]) cylinder(h=1.8, r=1); + translate([2*(key_width+padding),0,0]) cylinder(h=1.8, r=1); +}