120 lines
3.7 KiB
OpenSCAD
120 lines
3.7 KiB
OpenSCAD
keyboard_switch_width = 19.0500;
|
|
keyboard_switch_length = 19.0500;
|
|
keyboard_switch_leg_length = 3.30;
|
|
keyboard_switch_height = 11.10;
|
|
keyboard_switch_sizes = [
|
|
[0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
|
|
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],
|
|
[1.25, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.25],
|
|
[1.75, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.75],
|
|
[1.0, 1.25, 1.25, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
|
|
];
|
|
|
|
keyboard_pcb_width = 13.5 * keyboard_switch_width;
|
|
keyboard_pcb_length = 5.0 * keyboard_switch_length;
|
|
keyboard_pcb_height = 1.600;
|
|
|
|
keyboard_pcb_screw_holes = [
|
|
[ 4.7625, 85.7250],
|
|
[ 66.6750, 85.7250],
|
|
[161.9250, 85.7250],
|
|
[238.1250, 85.7250],
|
|
[ 61.9125, 47.6250],
|
|
[138.1125, 47.6250],
|
|
[214.3125, 47.6250],
|
|
[ 20.2406, 9.5250],
|
|
[123.8250, 9.5250],
|
|
[238.1250, 9.5250]
|
|
];
|
|
|
|
module keyboard_deck(wall_width) {
|
|
key_switch_footprint = [15.25, 15.25];
|
|
|
|
eps = 0.01;
|
|
|
|
function add(v) = [for(p=v) 1]*v;
|
|
function slice(v, x, y) = [for (i=[x:y]) v[i]];
|
|
function addrange(v, x, y) = add(slice(v, x, y));
|
|
|
|
module screw_holes() {
|
|
pcb_screw_diameter = 2.5;
|
|
|
|
for (screw_hole = keyboard_pcb_screw_holes) {
|
|
translate([screw_hole[0], screw_hole[1], -eps])
|
|
cylinder(h=wall_width+2*eps, d=pcb_screw_diameter);
|
|
}
|
|
}
|
|
|
|
module key_switch_plate(key_switch_size) {
|
|
plate_width = keyboard_switch_width * key_switch_size;
|
|
plate_length = keyboard_switch_length;
|
|
|
|
if (key_switch_size <= 0.5) {
|
|
cube([keyboard_switch_width * key_switch_size,
|
|
keyboard_switch_length,
|
|
wall_width], false);
|
|
} else {
|
|
hole_width = key_switch_footprint[0];
|
|
hole_length = key_switch_footprint[1];
|
|
|
|
hole_x = plate_width / 2 - hole_width / 2;
|
|
hole_y = plate_length / 2 - hole_length / 2;
|
|
|
|
difference() {
|
|
cube([plate_width + eps, plate_length + eps, wall_width], false);
|
|
|
|
translate([hole_x, hole_y, -eps])
|
|
cube([hole_width, hole_length, wall_width + 2*eps], false);
|
|
}
|
|
}
|
|
}
|
|
|
|
module walls() {
|
|
wall_height = keyboard_switch_height - wall_width;
|
|
|
|
/* Upper */
|
|
translate([-wall_width, keyboard_pcb_length, 0])
|
|
cube([keyboard_pcb_width + 2 * wall_width, wall_width, wall_height], false);
|
|
|
|
/* Right */
|
|
translate([keyboard_pcb_width, -wall_width, 0])
|
|
cube([wall_width, keyboard_pcb_length + 2 * wall_width, wall_height], false);
|
|
|
|
/* Lower */
|
|
translate([-wall_width, -wall_width, 0])
|
|
cube([keyboard_pcb_width + 2 * wall_width, wall_width, wall_height], false);
|
|
|
|
/* Left */
|
|
translate([-wall_width, -wall_width, 0])
|
|
cube([wall_width, keyboard_pcb_length + 2 * wall_width, keyboard_switch_height - wall_width], false);
|
|
}
|
|
|
|
module body() {
|
|
rows = len(keyboard_switch_sizes);
|
|
|
|
for (i = [0: rows-1]) {
|
|
y = keyboard_switch_length * (rows - 1 - i);
|
|
|
|
key_switch_row = keyboard_switch_sizes[i];
|
|
cols = len(key_switch_row);
|
|
|
|
for (j = [0: cols-1]) {
|
|
x = keyboard_switch_width * ((j == 0)?
|
|
0:
|
|
addrange(key_switch_row, 0, j-1));
|
|
|
|
key_switch_size = key_switch_row[j];
|
|
|
|
translate([x, y, 0])
|
|
key_switch_plate(key_switch_size);
|
|
}
|
|
}
|
|
}
|
|
|
|
difference() {
|
|
body();
|
|
screw_holes();
|
|
}
|
|
|
|
walls();
|
|
}
|