pcb_w = 80.1; pcb_h = 105.0; pcb_t = 1.85; e = 0.001; clear = 10; wall_t = 1.5; box_t = 26; hole_diameter = 2.5; hole_in=72.9; hole_ctoc = hole_in + hole_diameter; hole_out = 77.9; hole_x_edge = 0.7; hole_y_edge = 1.2; midpair_y_dist = 73.15; botpair_y_dist = 21.8; bat_h = 26.5; batr_h = 24.5; bat_w = 51.8; bat_t = 17.1; batc_h = 36; batc_w = 68; standoff= 12; pin_t = 4.5; pin_dia = 2.0; pin_t2 = 6; pin_dia2 = 4.5; screen_t = 5.1; function allclear() = clear + wall_t; function toppair_y() = (pcb_h/2)-hole_y_edge-(hole_diameter/2); function toppair_x() = (pcb_w/2)-hole_x_edge-(hole_diameter/2); function wall_x() = (pcb_w/2)+allclear()/2-wall_t/2; function wall_y() = (pcb_h/2)+allclear()/2-wall_t/2; function midpair_x() = toppair_x(); function midpair_y() = toppair_y() - midpair_y_dist - hole_diameter; function botpair_x() = toppair_x(); function botpair_y() = midpair_y() - botpair_y_dist - hole_diameter; function pin_z() = pin_t2/2 + pin_t/2; function pin_zs() = pin_t2/2; function pin_zh(x) = pin_t2 + pin_t + x; function batc_pyramid() = batc_h/sin(45)/2; function batc_top() = pcb_h/2-bat_h/2-allclear()/2+batc_h/2; function batc_bot() = pcb_h/2-bat_h/2-allclear()/2-batc_h/2; function batc_cent() = pcb_h/2-bat_h/2-allclear()/2; module boxbottom() { difference() { union() { translate([0,0,-wall_t+e]) linear_extrude(wall_t) square([pcb_w+allclear(), pcb_h+allclear()], center=true); // hole pins translate([toppair_x(), toppair_y(), pin_z()+pcb_t]) cylinder(h = pin_zh(pcb_t), r = pin_dia/2, center=true, $fn=40); translate([-toppair_x(), toppair_y(), pin_z()+pcb_t]) cylinder(h = pin_zh(pcb_t), r = pin_dia/2, center=true, $fn=40); translate([midpair_x(), midpair_y(), pin_z()]) cylinder(h = pin_zh(0), r = pin_dia/2, center=true, $fn=40); translate([-midpair_x(), midpair_y(), pin_z()]) cylinder(h = pin_zh(0), r = pin_dia/2, center=true, $fn=40); translate([botpair_x(), botpair_y(), pin_z()]) cylinder(h = pin_zh(0), r = pin_dia/2, center=true, $fn=40); translate([-botpair_x(), botpair_y(), pin_z()]) cylinder(h = pin_zh(0), r = pin_dia/2, center=true, $fn=40); // standoff pins translate([toppair_x(), toppair_y(), pin_zs()+pcb_t/2]) cylinder(h = pin_zs()*2+pcb_t, r = pin_dia2/2, center=true, $fn=40); translate([-toppair_x(), toppair_y(), pin_zs()+pcb_t/2]) cylinder(h = pin_zs()*2+pcb_t, r = pin_dia2/2, center=true, $fn=40); translate([midpair_x(), midpair_y(), pin_zs()]) cylinder(h = pin_zs()*2, r = pin_dia2/2, center=true, $fn=40); translate([-midpair_x(), midpair_y(), pin_zs()]) cylinder(h = pin_zs()*2, r = pin_dia2/2, center=true, $fn=40); translate([botpair_x(), botpair_y(), pin_zs()]) cylinder(h = pin_zs()*2, r = pin_dia2/2, center=true, $fn=40); translate([-botpair_x(), botpair_y(), pin_zs()]) cylinder(h = pin_zs()*2, r = pin_dia2/2, center=true, $fn=40); // corners //translate([wall_x(), wall_y(), box_t/2]) cube([wall_t,wall_t,box_t], center=true); //translate([-wall_x(), wall_y(), box_t/2]) cube([wall_t,wall_t,box_t], center=true); //translate([wall_x(), -wall_y(), box_t/2]) cube([wall_t,wall_t,box_t], center=true); //translate([-wall_x(), -wall_y(), box_t/2]) cube([wall_t,wall_t,box_t], center=true); // walls translate([wall_x(), 0, box_t/2]) cube([wall_t, pcb_h+allclear(), box_t], center=true); translate([-wall_x(), 0, box_t/2]) cube([wall_t, pcb_h+allclear(), box_t], center=true); translate([0, wall_y(), box_t/2]) cube([pcb_w+allclear(), wall_t,box_t], center=true); translate([0, -wall_y(), box_t/2]) cube([pcb_w+allclear(), wall_t, box_t], center=true); // battery compartment translate([0,pcb_h/2-bat_h/2-allclear()/2,-1]) linear_extrude(3) square([batc_w+clear-e, batc_h+clear*1.2-e], center=true); } union() { translate([0,pcb_h/2-bat_h/2-allclear()/2,-wall_t]) linear_extrude(wall_t+e) square([batc_w, batc_h], center=true); //translate([0,pcb_h/2-bat_h/2-allclear()/2,0]) linear_extrude(wall_t*3+e) square([batc_w/2, batc_h+2], center=true); // latch cuts translate([-15,batc_top()-batc_h/4+4,0]) linear_extrude(wall_t*3+e) square([15, batc_h/2], center=true); translate([15,batc_top()-batc_h/4+4,0]) linear_extrude(wall_t*3+e) square([15, batc_h/2], center=true); translate([0,batc_bot()+batc_h/4-4,0]) linear_extrude(wall_t*3+e) square([25, batc_h/2], center=true); // pyramid cuts translate([-batc_w/2+batc_h/2,pcb_h/2-bat_h/2-allclear()/2,0]) rotate([0,0,45]) cylinder(h=wall_t*2,r1=batc_pyramid(),r2=batc_pyramid()-wall_t*4,$fn=4); translate([0,pcb_h/2-bat_h/2-allclear()/2,0]) rotate([0,0,45]) cylinder(h=wall_t*2,r1=batc_pyramid(),r2=batc_pyramid()-wall_t*4,$fn=4); translate([-batc_h/2+batc_w/2,pcb_h/2-bat_h/2-allclear()/2,0]) rotate([0,0,45]) cylinder(h=wall_t*2,r1=batc_pyramid(),r2=batc_pyramid()-wall_t*4,$fn=4); } } } *color([1,1,0,0.4]) boxbottom(); module backstay() { difference() { cube([2, 1.5, bat_t*2/3], center=true); translate([1.5,0,0]) rotate([0,-8,0]) cube([2.1, 1.6, bat_t*4/3], center=true); } } module batc_latch() { union() { translate([0,0,bat_t/2]) cube([4, 1, bat_t], center=true); translate([0,-0.4,bat_t+0.05]) rotate([45,0,0]) cube([4, 1.2, 1.35], center=true); translate([0,1-e,bat_t/3]) rotate([0,0,90]) backstay(); } } module batc_door() { union() { difference() { union() { translate([0, batc_cent(), (-wall_t+e)/2]) cube([batc_w-0.5, batc_h-0.5, wall_t], center=true); // rear latches latch_w = 4.2; translate([15,batc_top()-batc_h/4+(10.2-latch_w/2),wall_t*0.375-e*10]) cube([14.6, latch_w, wall_t], center=true); translate([-15,batc_top()-batc_h/4+(10.2-latch_w/2),wall_t*0.5-e*10]) cube([14.6, latch_w, wall_t], center=true); // battery guides/latches translate([-15,batc_cent()+(bat_h/2)+2,-e*10]) batc_latch(); translate([-15,batc_cent()-(batr_h/2)+2,-e*10]) rotate([0,0,180]) batc_latch(); translate([26,batc_cent(),0]) rotate([0,0,-90]) batc_latch(); translate([-26,batc_cent(),0]) rotate([0,0,90]) batc_latch(); } //translate([-15,batc_top()-batc_h/4,wall_t*0.5-e*10]) //cube([14.6, latch_w, wall_t], center=true); translate([0,pcb_h/2-bat_h-allclear()/2,(-wall_t+e)/2]) cube([24.5, 12, 10], center=true); } difference() { union() { translate([0,pcb_h/2-bat_h-allclear()/2,(-wall_t+e)/2]) cube([22, 15, wall_t], center=true); translate([0,pcb_h/2-bat_h-allclear()/2,wall_t*-0.1]) rotate([-2.5,0,0]) cube([22, 15, wall_t/2], center=true); } // spring cutw = 1.6; cutd = 5.0; translate([-cutd,pcb_h/2-bat_h-allclear()/2+1.5,(-wall_t+e)/2]) cube([21, cutw, 10], center=true); translate([cutd,pcb_h/2-bat_h-allclear()/2+5,(-wall_t+e)/2]) cube([21, cutw, 10], center=true); translate([cutd,pcb_h/2-bat_h-allclear()/2-2,(-wall_t+e)/2]) cube([21, cutw, 10], center=true); //translate([-2,pcb_h/2-bat_h-allclear()/2+3,(-wall_t+e)/2]) cube([21, 1, 10], center=true); //translate([-2,pcb_h/2-bat_h-allclear()/2-1,(-wall_t+e)/2]) cube([21, 1, 10], center=true); //translate([-2,pcb_h/2-bat_h-allclear()/2-5,(-wall_t+e)/2]) cube([21, 1, 10], center=true); // spring latch translate([0,pcb_h/2-bat_h-allclear()/2-9.5,(-wall_t+e)/2]) rotate([-45,0,0]) cube([23, 4, 11], center=true); translate([0,pcb_h/2-bat_h-allclear()/2-10.25,(-wall_t+e)/4-0.35]) rotate([75,0,0]) cube([23, 3, 9.8], center=true); translate([0,pcb_h/2-bat_h-allclear()/2-10.65,(-wall_t+e)/0.75]) rotate([90,0,0]) cube([23, 3, 11.2], center=true); } } } batc_door(); //color([1,0,0,0.2]) translate([0,0,pin_zs()*2]) linear_extrude(pcb_t) square([pcb_w, pcb_h], center=true); //color([0,0,1,1.0]) translate([0,pcb_h/2-bat_h/2-allclear()/2,bat_t/2]) cube([bat_w, bat_h, bat_t], center=true); //color([0,1,0.5,0.2]) translate([toppair_x()-2, toppair_y(), pin_t2+pcb_t+standoff/2]) cylinder(h = standoff, r = pin_dia/2, center=true, $fn=40); //color([1,0.3,1,0.6]) translate([toppair_x()-2, toppair_y(), pin_t2+pcb_t+standoff+pcb_t/2]) cylinder(h = pcb_t, r = pin_dia/2, center=true, $fn=40); //color([0,0.6,1,0.6]) translate([toppair_x()-2, toppair_y(), pin_t2+pcb_t+standoff+pcb_t+screen_t/2]) cylinder(h = screen_t, r = pin_dia/2, center=true, $fn=40); //color([0,0.6,1,0.6]) translate([0,pcb_h/2-bat_h/2-allclear()/2,pin_t2+pcb_t+standoff+pcb_t]) linear_extrude(5) square([pcb_w-allclear(), bat_h], center=true);