custom-keyboard/3dprint_case/fond_clavier.scad

149 lines
No EOL
4.2 KiB
OpenSCAD

include <rounded_square.scad>
include <MCAD/nuts_and_bolts.scad>
l = 384;
w = 135.5;
h = 7;
wal = 1.5;
flo = 1.5; // 1mm
c = 2; // corners diameter
h_po = 4.5; // hole for screws
h_di = 5;
h_de = 6.5;
u_height = 6;
u_s_width = 13.2;
u_s_depth = 12;
u_s_pins = 10;
u_s_depression = 0.3;
u_p_width = 13;
u_wall = 2;
u_pl_w = 1; // small platic stuff on the usb socket
u_pl_d = 3; // small platic stuff on the usb socket
nbHolesW = 2;
nbHolesL = 6;
part="foot"; // all / left / right
$fn=30;
module hole(px, py, de, di, p) {
translate([px, py, flo])
difference() {
cylinder(h = h, r = de/2 + 1);
cylinder(h = h+0.1, r = di/2);
}
}
module hole_sub(px, py, de, di, p) {
translate([px, py, -0.05])
union() {
// Max plastic height = 8mm - 1.5mm (metal) - 2mm (nut) => 4.5mm
tolerance = 0.2;
radius = METRIC_NUT_AC_WIDTHS[3] / 2 + tolerance;
cylinder(r = radius, h = (h + flo) - 4.5 , $fn = 6, center=[0,0]);
nutHole(size = 3, tolerance = 0.1);
cylinder(h = h + flo + 0.1, r = di/2);
}
}
module ellipsoid(diameter, width, height) {
translate([0, 0, -height/4])
scale([1, width/diameter, 1]) linear_extrude(height = height) circle(d = diameter);
}
module usb_support(x, y, z) {
translate([x, y, z]) difference() {
translate([- u_wall + (u_p_width - u_s_width)/2, - u_s_depth - u_wall, 0])
cube(size = [u_s_width + u_wall * 2, u_s_depth + u_wall, h]);
translate([(u_p_width - u_s_width)/2, -u_s_depth, h-u_height - u_s_depression])
cube(size = [u_s_width, u_s_depth, u_height + u_s_depression + 0.05]);
translate([(u_p_width - u_s_width)/2-u_pl_w, -u_s_depth, h-u_height - u_s_depression])
cube(size = [u_s_width + 2*u_pl_w, u_pl_d, u_height + u_s_depression + 0.05]);
translate([u_p_width/2 - u_s_pins/2, -(u_s_depth + u_wall)-0.05, h-u_height/2])
cube(size = [u_s_pins, u_s_depth + u_wall + 0.05, u_height/2 + 0.05]);
}
}
module usb_sub(x, y, z) {
translate([x, y, z])
translate([0, 0.05, 0]) cube(size = [u_p_width, 12, u_height + 0.05]);
}
module floor_sub() {
// Floor holes
for (j = [0: nbHolesW - 1]) for (i = [0:nbHolesL - 1]) {
orientation = ((i + j) % 2) * 2 - 1;
translate([ l / (2 * nbHolesL) + i * (l / 6), w / (2 * nbHolesW) + j * (w / 2), 0])
rotate([0, 0, orientation * 40]) ellipsoid(35, 55, flo * 2);
}
}
module case() {
difference() {
linear_extrude(height = h + flo)
rounded_square([l, w], corners = [5, 5, 5, 5]);
translate([wal, wal, flo])
cube(size = [l-2*wal, w-2*wal, h+0.1]);
}
}
module keyboard() {
difference() {
union() {
case();
usb_support(50, w - wal, flo);
hole( h_po, h_po, h_de, h_di, h_po);
hole( l/2 , h_po, h_de, h_di, h_po);
hole( l - h_po, h_po, h_de, h_di, h_po);
hole( h_po, w - h_po, h_de, h_di, h_po);
hole( l/2 , w - h_po, h_de, h_di, h_po);
hole( l - h_po, w - h_po, h_de, h_di, h_po);
}
usb_sub(50, w - 12, flo + h - u_height);
floor_sub();
hole_sub( h_po, h_po, h_de, h_di, h_po);
hole_sub( l/2 , h_po, h_de, h_di, h_po);
hole_sub( l - h_po, h_po, h_de, h_di, h_po);
hole_sub( h_po, w - h_po, h_de, h_di, h_po);
hole_sub( l/2 , w - h_po, h_de, h_di, h_po);
hole_sub( l - h_po, w - h_po, h_de, h_di, h_po);
}
}
module foot() {
difference() {
cube(size = [40, 10, h+0.1]);
hole_sub(20, 5, h_de, h_di, h_po);
}
}
if (part == "all") {
keyboard();
translate([1/2 * l - 20, w - 10, -h]) foot();
}
if (part == "foot") {
foot();
}
if (part == "right" || part == "both") difference() {
keyboard();
translate([0, 0, 0]) cube(size = [l/2 - h_po, w, h+flo]);
translate([0, 0, 0]) cube(size = [l/2 + h_po, w, h+flo - 3]);
}
if (part == "left" || part == "both") difference() {
keyboard();
translate([l/2 + h_po, 0, 0]) cube(size = [l/2 - h_po, w, h+flo]);
translate([l/2 - h_po, 0, h+flo - 3]) cube(size = [l/2 + h_po, w, h+flo - 3]);
}