new stuff

This commit is contained in:
Ricardo (XenGi) Band 2023-06-06 01:03:09 +02:00
commit 462d2bfb6c
No known key found for this signature in database
8 changed files with 215 additions and 130 deletions

View file

@ -13,4 +13,3 @@ indent_size = 2
[Makefile] [Makefile]
indent_style = tab indent_style = tab

View file

@ -4,17 +4,16 @@
main: ## generate main case main: ## generate main case
# TODO: split into printable pieces # 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 openscad -o main.3mf main.scad
keys_en-us-intl: ## generate key caps with english us interational layout keyset_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 --export-format binstl -o keyset_en-us-intl.stl keyset_en-us-intl.scad
openscad -o keys_en-us-intl.3mf keys_en-us-intl.scad openscad -o keyset_en-us-intl.3mf keyset_en-us-intl.scad
keys_de: ## generate key caps with german layout keyset_de: ## generate key caps with german layout
openscad --export-format binstl -o keys_de.stl keys_de.scad #openscad --export-format binstl -o keyset_de.stl keyset_de.scad
openscad -o keys_de.3mf keys_de.scad openscad -o keyset_de.3mf keyset_de.scad
help: ## display this help help: ## display this help
@grep -Fh "##" $(MAKEFILE_LIST) | grep -Fv fgrep | sed -e 's/\\$$//' | sed -e 's/##//' @grep -Fh "##" $(MAKEFILE_LIST) | grep -Fv fgrep | sed -e 's/\\$$//' | sed -e 's/##//'

View file

@ -3,33 +3,33 @@
use <lib/mat.scad>; use <lib/mat.scad>;
use <lib/key.scad>; use <lib/key.scad>;
mat(); mat(rows=13, columns=5);
key(x=0, y=0, label="Esc"); key(x=0, y=0, label="Strg", size=2.5);
key(x=1, y=0, label="1 !"); key(x=1, y=0, label="Fn");
key(x=2, y=0, label="2 \""); key(x=2, y=0, label="⬆", size=5); // Shift
key(x=3, y=0, label="3 §"); key(x=3, y=0, label="Alt", size=3);
key(x=4, y=0, label="4 $"); key(x=4, y=0, w=3, label="—————"); // Space
key(x=5, y=0, label="5 %"); key(x=7, y=0, label="ß?");
key(x=6, y=0, label="6 &"); key(x=8, y=0, label="´`");
key(x=7, y=0, label="7 /"); key(x=9, y=0, label="◀");
key(x=8, y=0, label="8 ("); key(x=10, y=0, label="▼");
key(x=9, y=0, label="9 )"); key(x=11, y=0, label="▶");
key(x=10, y=0, label="0 ="); key(x=12, y=0, label="Strg", size=2.5);
key(x=11, y=0, w=2, label="Bksp");
key(x=0, y=1, label="Q"); key(x=0, y=1, label="Y");
key(x=1, y=1, label="W"); key(x=1, y=1, label="X");
key(x=2, y=1, label="E"); key(x=2, y=1, label="C");
key(x=3, y=1, label="R"); key(x=3, y=1, label="V");
key(x=4, y=1, label="T"); key(x=4, y=1, label="B");
key(x=5, y=1, label="Z"); key(x=5, y=1, label="N");
key(x=6, y=1, label="U"); key(x=6, y=1, label="M");
key(x=7, y=1, label="I"); key(x=7, y=1, label=",;");
key(x=8, y=1, label="O"); key(x=8, y=1, label=".:");
key(x=9, y=1, label="P"); key(x=9, y=1, label="-_");
key(x=10, y=1, label="Ü"); key(x=10, y=1, label="▲");
key(x=11, 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=0, y=2, label="A");
key(x=1, y=2, label="S"); 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=8, y=2, label="L");
key(x=9, y=2, label="Ö"); key(x=9, y=2, label="Ö");
key(x=10, 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=0, y=3, label="Q");
key(x=1, y=3, label="X"); key(x=1, y=3, label="W");
key(x=2, y=3, label="C"); key(x=2, y=3, label="E");
key(x=3, y=3, label="V"); key(x=3, y=3, label="R");
key(x=4, y=3, label="B"); key(x=4, y=3, label="T");
key(x=5, y=3, label="N"); key(x=5, y=3, label="Z");
key(x=6, y=3, label="M"); key(x=6, y=3, label="U");
key(x=7, y=3, label=", ;"); key(x=7, y=3, label="I");
key(x=8, y=3, label=". :"); key(x=8, y=3, label="O");
key(x=9, y=3, label="- _"); key(x=9, y=3, label="P");
key(x=10, y=3, label="Up"); key(x=10, y=3, label="Ü");
key(x=11, y=3, label="< >"); 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=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

View file

@ -1,36 +1,38 @@
// en-us-intl layout // en-us-intl layout
$fn = 64;
use <lib/mat.scad>; use <lib/mat.scad>;
use <lib/key.scad>; use <lib/key.scad>;
mat(); //difference() {
// union() {
mat(rows=13, columns=5);
key(x=0, y=0, label="Esc"); key(x=0, y=0, label="Ctrl", size=2.5);
key(x=1, y=0, label="1 !"); key(x=1, y=0, label="Fn");
key(x=2, y=0, label="2 @"); key(x=2, y=0, label="⬆", size=5); // Shift
key(x=3, y=0, label="3 #"); key(x=3, y=0, label="Alt", size=3);
key(x=4, y=0, label="4 $"); key(x=4, y=0, w=3, label="—————"); // Space
key(x=5, y=0, label="5 %"); key(x=7, y=0, label="-_");
key(x=6, y=0, label="6 ^"); key(x=8, y=0, label="= +", spacing=0.6);
key(x=7, y=0, label="7 &"); key(x=9, y=0, label="◀");
key(x=8, y=0, label="8 *"); key(x=10, y=0, label="▼");
key(x=9, y=0, label="9 ("); key(x=11, y=0, label="▶");
key(x=10, y=0, label="0 )"); key(x=12, y=0, label="Ctrl", size=2.5);
key(x=11, y=0, w=2, label="Bksp");
key(x=0, y=1, label="Q"); key(x=0, y=1, label="Z");
key(x=1, y=1, label="W"); key(x=1, y=1, label="X");
key(x=2, y=1, label="E"); key(x=2, y=1, label="C");
key(x=3, y=1, label="R"); key(x=3, y=1, label="V");
key(x=4, y=1, label="T"); key(x=4, y=1, label="B");
key(x=5, y=1, label="Y"); key(x=5, y=1, label="N");
key(x=6, y=1, label="U"); key(x=6, y=1, label="M");
key(x=7, y=1, label="I"); key(x=7, y=1, label=",<");
key(x=8, y=1, label="O"); key(x=8, y=1, label=".>");
key(x=9, y=1, label="P"); key(x=9, y=1, label="/?");
key(x=10, y=1, label="[ {"); key(x=10, y=1, label="▲");
key(x=11, y=1, label="] }"); key(x=11, y=1, w=2, label="⬆", size=5); // Shift
key(x=12, y=1, label="\\ |");
key(x=0, y=2, label="A"); key(x=0, y=2, label="A");
key(x=1, y=2, label="S"); 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=6, y=2, label="J");
key(x=7, y=2, label="K"); key(x=7, y=2, label="K");
key(x=8, y=2, label="L"); key(x=8, y=2, label="L");
key(x=9, y=2, label="; :"); key(x=9, y=2, label=";:");
key(x=10, y=2, label="' \""); key(x=10, y=2, label="'\"");
key(x=11, y=2, w=2, label="Ret"); key(x=11, y=2, w=2, label="↵", size=5); // Return
key(x=0, y=3, label="Z"); key(x=0, y=3, label="Q");
key(x=1, y=3, label="X"); key(x=1, y=3, label="W");
key(x=2, y=3, label="C"); key(x=2, y=3, label="E");
key(x=3, y=3, label="V"); key(x=3, y=3, label="R");
key(x=4, y=3, label="B"); key(x=4, y=3, label="T");
key(x=5, y=3, label="N"); key(x=5, y=3, label="Y");
key(x=6, y=3, label="M"); key(x=6, y=3, label="U");
key(x=7, y=3, label=", <"); key(x=7, y=3, label="I");
key(x=8, y=3, label=". >"); key(x=8, y=3, label="O");
key(x=9, y=3, label="/ ?"); key(x=9, y=3, label="P");
key(x=10, y=3, label="Up"); key(x=10, y=3, label="[{");
key(x=11, y=3, w=2, label="Shift"); key(x=11, y=3, label="]}");
key(x=12, y=3, label="\\|");
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=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 <lib/key_specs.scad>;
//
// 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);
// }
// }
//}

View file

@ -1,24 +1,27 @@
// Generate a key cap at a specific position in the matrix // Generate a key cap at a specific position in the matrix
module key(x, y, w=1, h=1, label="") { module key(x, y, w=1, h=1, label="", spacing=1, size=3.5) {
spacing_h = 1; include <key_specs.scad>;
spacing_v = 1; $fn = 64;
key_thickness = 1;
key_radius = 1; color("DarkSlateGray") translate([x*key_width + x*padding + margin, y*key_height + y*padding + margin, mat_thickness]) difference() {
key_width = 1;
key_height = 1;
mat_thickness = 1;
color("DarkSlateGray");
translate([x*spacing_h, y*spacing_v, mat_thickness]) difference() {
union() { union() {
hull() { hull() {
translate([key_radius, 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-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-key_radius, 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-key_radius, key_height-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);
} }
} }

8
lib/key_specs.scad Normal file
View file

@ -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;

8
lib/mat.scad Normal file
View file

@ -0,0 +1,8 @@
// genrate key mat that sits under the key caps
module mat(rows=13, columns=5) {
include <key_specs.scad>;
$fn = 64;
color("DarkSlateGray") cube([rows*key_width + (rows-1)*padding + 2*margin, columns*key_height + (columns-1)*padding + 2*margin, mat_thickness]);
}

30
pins.scad Normal file
View file

@ -0,0 +1,30 @@
include <lib/key_specs.scad>;
$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);
}