//By Glen Chung, 2013. //Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later include $fn=200; radius=52/2; height=100; thick=3; pen_hole_radius=15/2; pen_radius=9.2/2; module spindle_shell(radius, thick, height) { hole_radius = height / 12; difference() { union() { if(1) difference() { cylinder(r=radius, h=height); translate([0,0,thick]) cylinder(r=radius-thick, h=height+0.1); //holes for (angle = [0, 90, 180, 270]) rotate([0,0,angle+45]) translate([0,0,height/2]) scale([1.0,1.0,height/(radius-0)/2]) translate([radius-thick,0,0]) rotate([-90,0,0]) scale([1.5,2,1]) sphere(r=hole_radius); } cylinder(r=22/2,h=8); } translate([0,0,-2]) spindle_top_screw(pen_hole=11,height=21,with_hole=false); for(x=[radius, -radius]) for(y=[radius, -radius]) translate([x/2,y/2,-1]) cylinder(r=2, h=8); } } module spindle_top_screw(pen_hole=10, thick=3, height=18, head_thick=6, with_hole=true) { if(1) difference() { if(1) translate([0,0,-head_thick]) hex_screw(pen_hole+2*thick+1,4,55,height,1.5,2,pen_hole+2*thick+4,head_thick,0,0); if(with_hole) translate([0,0,-2+12]) cylinder(r=(pen_hole+1)/2, h=height+3); } translate([0,0,-2+12]) scale([1,1,1.5]) difference() { sphere(r=(pen_hole-3)/2); translate([0,0,-6]) cube([10,10,10],center=true); translate([0,0,pen_hole*0.6]) cube([pen_hole,pen_hole,pen_hole],center=true); } } module pen_holder_single(thick, width, height) { difference() { translate([-thick,0,0]) cube([thick*2, width, height]); translate([2*thick,0,0]) rotate([0,0,atan((thick/2)/width)]) translate([-thick,0,-height/2]) cube([thick*2, width*2, height*2]); translate([-2*thick,0,0]) rotate([0,0,-atan((thick/2)/width)]) translate([-thick,0,-height/2]) cube([thick*2, width*2, height*2]); rotate([-40,0,0]) translate([-thick,0,0]) cube([thick*2, width*2, height*2]); } } module pen_holder_four(height=60, radius=radius, thick=thick) { difference() { for(angle = [0, 90, 180, 270]) rotate([0,0,angle]) translate([0,-(radius-thick/2),0]) rotate([0,0,-atan((pen_radius+0.4)/(radius-thick))]) pen_holder_single(thick*0.8, radius, height); cylinder(r=pen_radius, h=150); } } module probe_holder() { height = 20; probe_radius = 2/2; probe_hole_radius = probe_radius + 0.8/2; difference() { union(){ difference() { cylinder(r=pen_radius+thick, h=height); translate([0,0,-thick/2]) cylinder(r=pen_radius-0.05, h=height+thick); translate([-(pen_radius+thick),0,height]) scale([1.6,4,1.5]) sphere(r=pen_radius+thick); } translate([pen_radius+5, 0, 0]) { difference(){ cylinder(r=probe_hole_radius+2.2, h=height); translate([0,0,-thick/2]) cylinder(r=probe_hole_radius, h=height+thick); } } } translate([pen_radius+5*2, 0 , height/2]) scale([2,4,1.8]) sphere(r=(probe_hole_radius+2)); translate([-10,-pen_radius/2,-1]) cube([10, pen_radius, height]); translate([pen_radius+5, -probe_hole_radius*.8, height/2]) cube([10, probe_hole_radius*1.6, height]); } translate([20, 0, 0]) difference() { cylinder(r=probe_radius+2.2, h=6); translate([0,0,2]) cylinder(r=probe_radius, h=6); translate([0,-probe_radius/2, 2]) cube([10, probe_radius, height]); } } module pen_holder() { difference() { union() { spindle_shell(radius, thick, height); translate([40, 0, 6]) spindle_top_screw(head_thick=6); translate([0,0,height-90]) pen_holder_four(height=90); //pen if(0) translate([0,0,16]) cylinder(r=pen_radius, h=135); } if(0) translate([0,0,-1]) cube([radius*2,radius*2,height+2]); for(angle = [0, 180]) rotate([0,0,angle]) rotate([0,0,-atan((pen_radius+0.4)/(radius-thick))]) translate([-thick,2.5*thick,height-15]) cube([radius+2*thick,radius,radius]); } } pen_holder(); translate([-60,0,0]) probe_holder();