1 // x,y is [0,0] at near left PCB screw
2 // z=0 is the bottom of the PCB
5 front_panel_thickness = 1.35;
7 // Measured between PCB screws
9 pcb_length = 58.4; // y
11 // From screws to PCB edges
18 // Interior dimensions relative to z=0
23 screw_inside_diam = 2.5;
24 screw_outside_diam = 3.2;
26 screw_head_height = 1.4;
27 screw_length = 14; // really 12, but make the hole deeper
37 // Holes in front panel
38 ref_x = pcb_width + 3.8;
45 usb_left = ref_x - 26;
46 usb_right = ref_x - 17;
52 lid_left = pcb_left - lid_smaller;
53 lid_right = pcb_right - lid_smaller;
54 lid_front = pcb_front - lid_smaller;
55 lid_back = pcb_back - lid_smaller;
64 cylinder(h = front_panel_thickness + 2*over, d = led_diameter);
67 module screw_holder() {
68 translate([-holder_size/2, -holder_size/2, -box_depth - over])
69 cube([holder_size, holder_size, box_depth + over]);
73 translate([0, 0, -box_depth - wall_thickness - over])
75 cylinder(h = box_depth + wall_thickness + 2*over, d = screw_outside_diam);
76 cylinder(h = screw_head_height, d1 = screw_head_diam, d2 = screw_outside_diam);
80 module bottom_base() {
84 translate([-wall_thickness - pcb_left, -front_panel_thickness - pcb_front, -wall_thickness - box_depth])
85 cube([wall_thickness + pcb_left + pcb_width + pcb_right + wall_thickness,
86 front_panel_thickness + pcb_front + pcb_length + pcb_back + wall_thickness,
87 wall_thickness + box_depth + box_height]);
90 translate([-pcb_left, -pcb_front, -box_depth])
91 cube([pcb_left + pcb_width + pcb_right, pcb_front + pcb_length + pcb_back, box_depth + box_height + over]);
94 translate([usb_left, -front_panel_thickness - pcb_front - over, usb_bottom])
95 cube([usb_right - usb_left, front_panel_thickness + 2*over, usb_top - usb_bottom]);
98 translate([led1_x, -pcb_front - front_panel_thickness - over, led_z])
100 translate([led2_x, -pcb_front - front_panel_thickness - over, led_z])
102 translate([led3_x, -pcb_front - front_panel_thickness - over, led_z])
104 translate([led4_x, -pcb_front - front_panel_thickness - over, led_z])
108 translate([cable_x, pcb_length + pcb_back - over, cable_z])
110 cylinder(h = wall_thickness + 2*over, d = cable_diameter);
122 translate([pcb_width, 0, 0]) screw_holder();
123 translate([0, pcb_length, 0]) screw_holder();
124 translate([pcb_width, pcb_length, 0]) screw_holder();
129 translate([pcb_width, 0, 0]) screw_hole();
130 translate([0, pcb_length, 0]) screw_hole();
131 translate([pcb_width, pcb_length, 0]) screw_hole();
135 module lid_text(overshoot = 0) {
136 translate([pcb_width / 2, 10, -text_depth/2])
139 linear_extrude(text_depth + overshoot, center = true)
140 text("USB – BSB", font = "Liberation Serif", halign="center");
143 module lid_screw_hole() {
144 translate([0, 0, -box_height + pcb_thickness])
146 translate([-holder_size/2, -holder_size/2, 0])
147 cube([holder_size, holder_size, box_height - pcb_thickness - lid_thickness + over]);
148 translate([0, 0, -over])
149 cylinder(h = screw_length - pcb_thickness - box_depth - wall_thickness + over, d = screw_inside_diam);
156 translate([-lid_left, -lid_front, -lid_thickness])
157 cube([lid_left + pcb_width + lid_right, lid_front + pcb_length + lid_back, lid_thickness]);
159 translate([pcb_width, 0, 0]) lid_screw_hole();
160 translate([0, pcb_length, 0]) lid_screw_hole();
161 translate([pcb_width, pcb_length, 0]) lid_screw_hole();
170 translate([-pcb_left, -pcb_front, 0])
171 cube([pcb_left + pcb_width + pcb_right, pcb_front + pcb_length + pcb_back, pcb_thickness]);
175 // color([1, 0, 1]) pcb();
176 color([1, 0, 0]) translate([0, 0, box_height]) lid();
177 // color([0, 0, 1]) translate([0, 0, box_height]) lid_text(0);