// x,y is [0,0] at near left PCB screw // z=0 is the bottom of the PCB wall_thickness = 1.8; front_panel_thickness = 1.35; // Measured between PCB screws pcb_width = 66; // x pcb_length = 58.4; // y // From screws to PCB edges pcb_left = 5; pcb_right = 5; pcb_front = 5.2; pcb_back = 10; pcb_thickness = 1.5; // Interior dimensions relative to z=0 box_height = 26; box_depth = 4; // Screw dimensions screw_inside_diam = 2.5; screw_outside_diam = 3.2; screw_head_diam = 6; screw_head_height = 1.4; screw_length = 14; // really 12, but make the hole deeper // Screw holders holder_size = 3*2.5; // Cable hole cable_x = 9; cable_z = 6.5; cable_diameter = 8; // Holes in front panel ref_x = pcb_width + 3.8; led1_x = ref_x - 63; led2_x = ref_x - 45; led3_x = ref_x - 40; led4_x = ref_x - 35; led_z = 6.2; led_diameter = 3.1; usb_left = ref_x - 26; usb_right = ref_x - 17; usb_bottom = 13.5; usb_top = 17.5; // Lid lid_smaller = 0.2; lid_left = pcb_left - lid_smaller; lid_right = pcb_right - lid_smaller; lid_front = pcb_front - lid_smaller; lid_back = pcb_back - lid_smaller; lid_thickness = 1.8; text_depth = 0.8; over = 0.1; $fn = 50; module led_hole() { rotate([-90, 0, 0]) cylinder(h = front_panel_thickness + 2*over, d = led_diameter); } module screw_holder() { translate([-holder_size/2, -holder_size/2, -box_depth - over]) cube([holder_size, holder_size, box_depth + over]); } module screw_hole() { translate([0, 0, -box_depth - wall_thickness - over]) union() { cylinder(h = box_depth + wall_thickness + 2*over, d = screw_outside_diam); cylinder(h = screw_head_height, d1 = screw_head_diam, d2 = screw_outside_diam); } } module bottom_base() { union() { difference() { // Exterior translate([-wall_thickness - pcb_left, -front_panel_thickness - pcb_front, -wall_thickness - box_depth]) cube([wall_thickness + pcb_left + pcb_width + pcb_right + wall_thickness, front_panel_thickness + pcb_front + pcb_length + pcb_back + wall_thickness, wall_thickness + box_depth + box_height]); // Interior translate([-pcb_left, -pcb_front, -box_depth]) cube([pcb_left + pcb_width + pcb_right, pcb_front + pcb_length + pcb_back, box_depth + box_height + over]); // USB connector hole translate([usb_left, -front_panel_thickness - pcb_front - over, usb_bottom]) cube([usb_right - usb_left, front_panel_thickness + 2*over, usb_top - usb_bottom]); // LED holes translate([led1_x, -pcb_front - front_panel_thickness - over, led_z]) led_hole(); translate([led2_x, -pcb_front - front_panel_thickness - over, led_z]) led_hole(); translate([led3_x, -pcb_front - front_panel_thickness - over, led_z]) led_hole(); translate([led4_x, -pcb_front - front_panel_thickness - over, led_z]) led_hole(); // BSB cable hole translate([cable_x, pcb_length + pcb_back - over, cable_z]) rotate([-90, 0, 0]) cylinder(h = wall_thickness + 2*over, d = cable_diameter); } } } module bottom() { difference() { union() { bottom_base(); // Screw holder screw_holder(); translate([pcb_width, 0, 0]) screw_holder(); translate([0, pcb_length, 0]) screw_holder(); translate([pcb_width, pcb_length, 0]) screw_holder(); } // Screw holes screw_hole(); translate([pcb_width, 0, 0]) screw_hole(); translate([0, pcb_length, 0]) screw_hole(); translate([pcb_width, pcb_length, 0]) screw_hole(); } } module lid_text(overshoot = 0) { translate([pcb_width / 2, 10, -text_depth/2]) rotate(0) scale([0.8, 0.8, 1]) linear_extrude(text_depth + overshoot, center = true) text("USB – BSB", font = "Liberation Serif", halign="center"); } module lid_screw_hole() { translate([0, 0, -box_height + pcb_thickness]) difference() { translate([-holder_size/2, -holder_size/2, 0]) cube([holder_size, holder_size, box_height - pcb_thickness - lid_thickness + over]); translate([0, 0, -over]) cylinder(h = screw_length - pcb_thickness - box_depth - wall_thickness + over, d = screw_inside_diam); } } module lid() { difference() { union() { translate([-lid_left, -lid_front, -lid_thickness]) cube([lid_left + pcb_width + lid_right, lid_front + pcb_length + lid_back, lid_thickness]); lid_screw_hole(); translate([pcb_width, 0, 0]) lid_screw_hole(); translate([0, pcb_length, 0]) lid_screw_hole(); translate([pcb_width, pcb_length, 0]) lid_screw_hole(); } // Text lid_text(over); } } module pcb() { translate([-pcb_left, -pcb_front, 0]) cube([pcb_left + pcb_width + pcb_right, pcb_front + pcb_length + pcb_back, pcb_thickness]); } // bottom(); // color([1, 0, 1]) pcb(); color([1, 0, 0]) translate([0, 0, box_height]) lid(); // color([0, 0, 1]) translate([0, 0, box_height]) lid_text(0);