$fn = 0; //$fs = 2; $fs = 0.1; // HQ cylinders //$fa = 8; $fa = 4; // HQ spheres/hulls picamboardW = 25.5; picamboardD = 25; picamH = 4; module slidein_picam(){ difference(){ cube([2+picamboardW+2, 3+picamboardD, picamH+2.5]); translate([2+1.5, -0.1, -0.1]) cube([picamboardW-(1.5*2), picamboardD+0.2, picamH+0.1]); translate([0+2, -0.1, picamH-0.1]) cube([picamboardW, 1+picamboardD+0.2, 1.2]); translate([2+1, -0.1, picamH-0.1]) cube([picamboardW-(1*2), 1+picamboardD+0.2, picamH]); } } irR = 30; irH = 15; irpostR = 56 / 2; irpinW = 1.25; module irholder(){ difference(){ cylinder(r=irR+2, h=irH); difference(){ translate([0,0, 0- irH*0.05]) cylinder(r=irR, h=irH*1.1); translate([0-(irR*1.05), irR/3, 0- irH*0.05]) cube([irR*2.1, irR, irH*0.3]); } translate([0-(irR*1.05), 0-(irR*1.2), 0- irH*0.05]) cube([irR*2.1, irR, irH*1.1]); } translate([0,irpostR,0]) cylinder(r1=irpinW, r2=irpinW*2, h=irH*0.75); translate([irpostR,0,0]) cylinder(r1=irpinW, r2=irpinW*2, h=irH*0.75); translate([0-irpostR,0,0]) cylinder(r1=irpinW, r2=irpinW*2, h=irH*0.75); hull(){ translate([irpostR,0,0]) cylinder(r=irpinW, h=irH); translate([irR,0,0]) cylinder(r=irpinW, h=irH); } hull(){ translate([0-irpostR,0,0]) cylinder(r=irpinW, h=irH); translate([0-irR,0,0]) cylinder(r=irpinW, h=irH); } hull(){ translate([0,irpostR,0]) cylinder(r=irpinW, h=irH); translate([0,irR,0]) cylinder(r=irpinW, h=irH); } } forkGap = 52.5; bracketW = forkGap + 4; forkW = 1.5; forkD = 0; //3.5; screwHoleR = 4.5 /2; screwHeadR = 7 /2; module bracket(){ difference(){ cube([irR*1.2, (irR/3)*2, irH]); translate([0, 0-(irR/3), 0- irH*0.05]) cylinder(r=irR, h=irH*1.1); } difference(){ translate([irR*1.2, 0-(bracketW)+(irR/3)*2, 0]) cube([(irR/3)*2, bracketW, irH]); translate([(irR*1.45) + ((irR/3)*2), 0, 0]) rotate([0,-45,0]) union(){ cylinder(r=screwHoleR, h=irH*1.1); translate([0, 0, irH]) cylinder(r=screwHeadR, h=irH*1.1); } } translate([(irR*1.2)+forkD, 0-(forkGap+((bracketW-forkGap)/2))+(irR/3)*2, 0]) cube([(irR/3)*2, forkW, irH]); translate([(irR*1.2)+forkD, 0-(0+forkW+((bracketW-forkGap)/2))+((irR/3)*2), 0]) cube([(irR/3)*2, forkW, irH]); } /********************************************************/ translate([0- ((picamboardW+10)/2), 0- ((picamboardD+10)/2) + 3, 0]){ cube([picamboardW+10, picamboardD+10, 2]); translate([((picamboardW+10) - (2+picamboardW+2) )/2, ((picamboardD+10) - (2+picamboardD) )/2, 2]) slidein_picam(); } irholder(); translate([0, irR/3, 0]) bracket();