git.s-ol.nu janko-keystep-rgb / master keycap.scad
master

Tree @master (Download .tar.gz)

keycap.scad @masterraw · history · blame

range = [ 0 : 11 ];

base_pos = [-66.68750, -28.00167 - 3.5, 6];
key_names = ["C", "Cs", "D", "Ds", "E", "F", "Fs", "G", "Gs", "A", "As", "B"];

* translate([0, 0, 10])
import("source/Keycap.stl", convexity=3);

for (i = range)
  key(i);

step_x = 24.245 / 2;
step_y = 42.00223 / 2;
function mountpos(i, row) =
    base_pos +
    [
        step_x * i,
        step_y * (row + i % 2),
        0
    ];

module ledspace(upper, depth) {
    rotate([0,0,45]) {
        // cut a 2mm hole for the LED to rest in
        cube([3.75, 3.55, 4], center=true);

        difference() {
            // 3.3x3.x3mm shaft for cables
            cube([3.3, 3.3, upper ? 42 : 32], center=true);

            // little bridge to hold LED
            translate([0, 0, -2.01 - 1.5/2])
                cube([1.5, 4, 1.5], center=true);
        }
    };

    translate([0, upper ? -2 : 2, -13.5 + depth * 2])
        cube([3.1, 5, 3], center=true);
}

module key(i) {
    difference() {
        import(str("source/Key ", key_names[i], ".stl"), convexity=3);

        translate(mountpos(i, 0))
          ledspace(false, i % 2);
        translate(mountpos(i, 2))
          ledspace(true, 2 + i % 2);
    }
}