wall_thickness = 1.5; pcb_length = 53.5; pcb_width = 18.5; pcb_thickness = 1; pcb_depth = 3; pcb_rail_width = 1; box_height = 12; box_depth = pcb_thickness + pcb_depth; usb_width = 10.5; usb_height = 11; rs485_width = 16.5; rs485_height = 8; lock_thickness = 1; lock_height = 4; over = 0.1; clearance = 0.3; module bottom() { difference() { // Exterior translate([-wall_thickness, -wall_thickness, -box_depth-wall_thickness]) cube([2*wall_thickness + pcb_length, 2*wall_thickness + pcb_width, wall_thickness + box_depth + box_height]); // Interior cube([pcb_length, pcb_width, box_height+1]); // USB connector hole translate([pcb_length-over, (pcb_width-usb_width)/2, 0]) cube([wall_thickness+2, usb_width, box_height+over]); // RS485 connector hole translate([-wall_thickness-over, (pcb_width-rs485_width)/2, 0]) cube([wall_thickness+2*over, rs485_width, box_height+over]); // PCB translate([0, 0, -pcb_thickness]) cube([pcb_length, pcb_width, pcb_thickness+over]); // Sub-PCB holes translate([0, pcb_rail_width, -pcb_thickness-pcb_depth]) cube([10, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]); translate([24, pcb_rail_width, -pcb_thickness-pcb_depth]) cube([9, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]); translate([pcb_length - 9, pcb_rail_width, -pcb_thickness-pcb_depth]) cube([8, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]); } // Locks /* translate([0, -wall_thickness-lock_thickness, box_height - lock_height]) cube([pcb_length, lock_thickness + wall_thickness/2, lock_height]); translate([0, pcb_width + wall_thickness/2, box_height - lock_height]) cube([pcb_length, lock_thickness + wall_thickness/2, lock_height]); */ } module top() { difference() { union() { // Lid translate([-wall_thickness, -wall_thickness, 0]) cube([pcb_length + 2*wall_thickness, pcb_width + 2*wall_thickness, wall_thickness]); // USB connector roof translate([pcb_length, (pcb_width - usb_width)/2 + clearance, usb_height - box_height + clearance]) cube([wall_thickness, usb_width - 2*clearance, box_height - usb_height - clearance + over]); // RS485 connector roof translate([-wall_thickness, (pcb_width - rs485_width)/2 + clearance, rs485_height - box_height + clearance]) cube([wall_thickness, rs485_width - 2*clearance, box_height - rs485_height - clearance + over]); } // LED holes translate([32, 1, -over]) cube([4, 2, wall_thickness + 2*over]); translate([32, pcb_width - 3, -over]) cube([4, 2, wall_thickness + 2*over]); // USB label translate([pcb_length-3, pcb_width/2, wall_thickness/2]) rotate(90) scale([0.4, 0.4, 1]) linear_extrude(wall_thickness/2 + over) text("USB", font = "Liberation Serif", halign="center"); // RS485 label translate([3, pcb_width/2, wall_thickness/2]) rotate(-90) scale([0.4, 0.4, 1]) linear_extrude(wall_thickness/2 + over) text("RS 485", font = "Liberation Serif", halign="center"); } } color([0.7, 0, 0]) bottom(); color([0, 1, 0]) translate([0, 0, box_height]) top();