// The stock solidoodle print head is designed to rock around the front // shaft with a teflon block positioned under the back shaft to stop the // rocking from moving too far. // // http://www.thingiverse.com/thing:44572 is a part on thingiverse that // attempts to spring load the rocking so it is less likely to rock just // because the carriage moved. It provides more ani-rocking force than mere // gravity can provide (depending on the spring you use). // // This set of parts was inspired by 44572, but it is designed to do more // than just keep the rocking motion down. It is designed to add a force // sensitive resistor into the system so the rocking can be observed // electrically as a change in resistance. This is intended to be a way to // detect when the nozzle comes in contact with the bed, and therefore serve // as a bed level sensor. By using the actual nozzle to detect the bed, it // should be as accurate as possible, and deal with not only bed warpage, // but any lack of straightness in the shafts. // // Good theory. I'll see how it works in practice when I get the parts // assembled and can try them out. slop=0.5; // The width of the teflon block as measured on the stock solidoodle carriage. // block_width=12.65; // The thickness and flat to flat dimension of the M3 nut // m3nut_thick=2.47; m3nut_flat=5.44; // Dimensions of the "preloader" part that moves the teflon block out to // the side. pl_width=block_width; pl_length=34; pl_thick=3; pl_pivot_width=block_width-slop; pl_pivot_dia=10; pl_holes=3; pl_support_height=pl_pivot_dia; pl_support_width=pl_pivot_dia; module m3nut(flat, thick) { intersection_for ( i = [0,60,120]) { rotate([0,0,i]) translate([-(2*flat)/2, -flat/2, -(thick+1)]) cube([2*flat,flat,thick+1]); } } module preloader() { difference() { union() { cube([pl_length,pl_width,pl_thick]); translate([(pl_pivot_dia/2),(pl_width-pl_pivot_width)/2, pl_thick+(pl_pivot_dia/2)]) rotate([-90,0,0]) difference() { union() { cylinder(h=pl_pivot_width,r=(pl_pivot_dia/2)); translate([-(pl_pivot_dia/2),0,0]) cube([pl_pivot_dia,pl_thick+(pl_pivot_dia/2), pl_pivot_width]); } translate([0,0,-1]) cylinder(h=pl_pivot_width+2,r=(pl_holes/2)); } translate([pl_length-pl_support_width,-pl_thick,0]) difference() { cube([pl_support_width,pl_thick,pl_thick+pl_support_height]); translate([pl_support_width/2,pl_thick+1, pl_thick+(pl_support_height/2)]) rotate([90,0,0]) cylinder(h=pl_thick+2,r=(pl_holes/2)); } translate([pl_length-pl_support_width,pl_width,0]) difference() { cube([pl_support_width,pl_thick,pl_thick+pl_support_height]); translate([pl_support_width/2,pl_thick+1, pl_thick+(pl_support_height/2)]) rotate([90,0,0]) cylinder(h=pl_thick+2,r=(pl_holes/2)); } translate([pl_length-(pl_pivot_dia/2),-(pl_thick+(pl_pivot_dia/2)),0]) union() { difference() { cylinder(h=pl_thick,r=(pl_pivot_dia/2)); translate([0,0,-1]) cylinder(h=pl_thick+2,r=2); } translate([-(pl_pivot_dia/2),0,0]) cube([pl_pivot_dia,pl_thick+(pl_pivot_dia/2),pl_thick]); //translate([-(4+pl_pivot_dia-2*slop)/2, // (pl_pivot_dia/2)-(pl_thick-slop),0]) // cube([4+pl_pivot_dia-2*slop,pl_thick-2*slop,pl_thick]); } } translate([pl_length-(pl_support_width/2),-(pl_thick/2), pl_thick+(pl_support_height/2)]) rotate([0,0,90]) rotate([0,90,0]) m3nut(m3nut_flat+slop, m3nut_thick); } } preloader();