Files

psu_case_4.scad
/* [Rendering options] */ // Show placeholder PCB in OpenSCAD preview show_pcb = false; // Lid mounting method lid_model = "cap"; // [cap, inner-fit] // Conditional rendering render = "case"; // [all, case, lid] /* [Dimensions] */ // Height of the PCB mounting stand-offs between the bottom of the case and the PCB standoff_height = 5; // PCB thickness pcb_thickness = 1.6; // Bottom layer thickness floor_height = 1.2; // Case wall thickness wall_thickness = 1.2; // Space between the top of the PCB and the top of the case headroom = 10.08; /* [M3 screws] */ // Outer diameter for the insert insert_M3_diameter = 3.77; // Depth of the insert insert_M3_depth = 4.5; /* [Hidden] */ $fa=$preview ? 10 : 4; $fs=0.2; inner_height = floor_height + standoff_height + pcb_thickness + headroom; module wall (thickness, height) { linear_extrude(height, convexity=10) { difference() { offset(r=thickness) children(); children(); } } } module bottom(thickness, height) { linear_extrude(height, convexity=3) { offset(r=thickness) children(); } } module lid(thickness, height, edge) { linear_extrude(height, convexity=10) { offset(r=thickness) children(); } translate([0,0,-edge]) difference() { linear_extrude(edge, convexity=10) { offset(r=-0.2) children(); } translate([0,0, -0.5]) linear_extrude(edge+1, convexity=10) { offset(r=-1.2) children(); } } } module box(wall_thick, bottom_layers, height) { if (render == "all" || render == "case") { translate([0,0, bottom_layers]) wall(wall_thick, height) children(); bottom(wall_thick, bottom_layers) children(); } if (render == "all" || render == "lid") { translate([0, 0, height+bottom_layers+0.1]) lid(wall_thick, bottom_layers, lid_model == "inner-fit" ? headroom-2.5: bottom_layers) children(); } } module mount(drill, space, height) { translate([0,0,height/2]) difference() { cylinder(h=height, r=(space/2), center=true); cylinder(h=(height*2), r=(drill/2), center=true); translate([0, 0, height/2+0.01]) children(); } } module connector(min_x, min_y, max_x, max_y, height) { size_x = max_x - min_x; size_y = max_y - min_y; translate([(min_x + max_x)/2, (min_y + max_y)/2, height/2]) cube([size_x, size_y, height], center=true); } module Cutout_Pinheader_substract(width, height) { translate([0, 0, height/2+0.1]) cube([10, width+0.2, height+0.2], center=true); } module CaseCorner(size, hole_diameter, head_diameter, head_height) { translate([0, 0, -floor_height]) difference() { union() { cylinder(inner_height, size/2, size/2); translate([-size, 0, inner_height/2]) cube([size*2, size, inner_height], center=true); } cylinder(inner_height+1, hole_diameter/2, hole_diameter/2); translate([0, 0, floor_height]) CaseCorner_substract(size, hole_diameter, head_diameter, head_height); translate([0, 0, inner_height+0.01]) children(); } } module CaseCorner_substract(size, hole_diameter, head_diameter, head_height) { translate([0, 0, 0.11]) { cylinder(inner_height+floor_height, hole_diameter/2, hole_diameter/2); translate([0, 0, inner_height+floor_height-head_height]) cylinder(head_height, hole_diameter/2, head_diameter/2); } } module LidClip_substract() { size = 11; hang = 0.6; if(render == "case") { translate([0, 0, lid_model == "inner-fit" ? -headroom+4.5 : 0]) translate([0, size/2, inner_height-1]) rotate([90, 0, 0]) cylinder(size, hang, hang); } } module LidClip_lid() { size = 10; r = 0.4; w = 0.99; translate([-0.2, 0, 0]) { if(render == "lid") { translate([0, 0, lid_model == "inner-fit" ? -headroom+4.5 : 0]) translate([0, -size/2, inner_height-1]) { translate([-w,0, -r]) cube([w, size-(r*2), r*2]); translate([0, 0, 0]) rotate([90, 0, 0]) sphere(r); translate([-w, 0, 0]) rotate([0, 90, 0]) cylinder(w, r, r); translate([0, size-r*2, 0]) rotate([90, 0, 0]) sphere(r); translate([-w, size-r*2, 0]) rotate([0, 90, 0]) cylinder(w, r, r); rotate([-90, 0, 0]) cylinder(size-(r*2), r, r); } } } } module Cutout_TypeC_substract() { width = 10; length = 10; height = 3.5; translate([-length/2, 0, height/2 + 1.1]) rotate([0,90,0]) union() { translate([0, -(width/2 - height/2), 0]) cylinder(length, height/2, height/2); translate([0, (width/2 - height/2), 0]) cylinder(length, height/2, height/2); translate([0, 0, length/2]) cube([height, width-height, length], center=true); } } module pcb() { thickness = 1.6; color("#009900") difference() { linear_extrude(thickness) { polygon(points = [[50,50], [150,50], [150,112], [50,112]]); } translate([55, 55, -1]) cylinder(thickness+2, 1.6000000000000014, 1.6000000000000014); translate([145, 55, -1]) cylinder(thickness+2, 1.6000000000000014, 1.6000000000000014); translate([145, 107, -1]) cylinder(thickness+2, 1.5999999999999943, 1.5999999999999943); translate([55, 107, -1]) cylinder(thickness+2, 1.5999999999999943, 1.5999999999999943); } } module case_outline() { polygon(points = [[48,40.5], [152,40.5], [152,122], [48,122]]); } module Insert_M3() { translate([0, 0, -insert_M3_depth]) cylinder(insert_M3_depth, insert_M3_diameter/2, insert_M3_diameter/2); translate([0, 0, -0.3]) cylinder(0.3, insert_M3_diameter/2, insert_M3_diameter/2+0.3); } rotate([render == "lid" ? 180 : 0, 0, 0]) scale([1, -1, 1]) translate([-100.0, -81.25, 0]) { pcb_top = floor_height + standoff_height + pcb_thickness; difference() { box(wall_thickness, floor_height, inner_height) { case_outline(); } // Substract: Unknown translate([52.5, 45, floor_height]) rotate([0, 0, 45]) CaseCorner_substract(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65); // Substract: Unknown translate([100, 122, floor_height]) rotate([0, 0, 90]) LidClip_substract(); // Substract: Unknown translate([52.5, 117.5, floor_height]) rotate([0, 0, -45]) CaseCorner_substract(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65); // Substract: Unknown translate([148.32, 80.97, pcb_top]) Cutout_TypeC_substract(); // Substract: Unknown translate([147.5, 45, floor_height]) rotate([0, 0, 135]) CaseCorner_substract(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65); // Substract: Unknown translate([51.5, 74.65, pcb_top]) Cutout_Pinheader_substract(width=25.4, height=10); // Substract: Unknown translate([100, 40.5, floor_height]) rotate([0, 0, -90]) LidClip_substract(); // Substract: Unknown translate([147.5, 117.5, floor_height]) rotate([0, 0, -135]) CaseCorner_substract(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65); // Substract: Unknown translate([51.5, 87.35, pcb_top]) Cutout_Pinheader_substract(width=25.4, height=10); // Substract: Unknown translate([87.5, 42.5, pcb_top]) rotate([0, 0, -90]) Cutout_Pinheader_substract(width=20, height=12); } if (show_pcb && $preview) { translate([0, 0, floor_height + standoff_height]) pcb(); } if (render == "all" || render == "case") { // REF** [('M3', 3)] translate([55, 55, floor_height]) mount(3.2, 6.9, standoff_height) Insert_M3(); // REF** [('M3', 3)] translate([145, 55, floor_height]) mount(3.2, 6.9, standoff_height) Insert_M3(); // REF** [('M3', 3)] translate([145, 107, floor_height]) mount(3.2, 6.9, standoff_height) Insert_M3(); // REF** [('M3', 3)] translate([55, 107, floor_height]) mount(3.2, 6.9, standoff_height) Insert_M3(); intersection() { translate([0, 0, floor_height]) linear_extrude(inner_height) case_outline(); union() { // Unknown translate([52.5, 45, floor_height]) rotate([0, 0, 45]) CaseCorner(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65) Insert_M3(); // Unknown translate([52.5, 117.5, floor_height]) rotate([0, 0, -45]) CaseCorner(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65) Insert_M3(); // Unknown translate([147.5, 45, floor_height]) rotate([0, 0, 135]) CaseCorner(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65) Insert_M3(); // Unknown translate([147.5, 117.5, floor_height]) rotate([0, 0, -135]) CaseCorner(size=5.6, hole_diameter=3, head_diameter=5.6, head_height=1.65) Insert_M3(); } } } // Unknown translate([100, 122, floor_height]) rotate([0, 0, 90]) LidClip_lid(); // Unknown translate([100, 40.5, floor_height]) rotate([0, 0, -90]) LidClip_lid(); }

Annotations

photon_psu.kicad_sch
7f31b0a9
0/3 comments
Report a bug