$fn=50;
//piston
height=40;
diameter=20;
compression_height=15; // z distance between piston top and centerline of pin
pin_radius=6;
ring_to_deck=2; // z distance from deck to ring groove
parts_gap=5; // empty distance between piston and wristpin
gap=0.04; // shrink by this much to make bolts/pins easier to fit
/////////////////////////////////////////
// END SETTINGS /////////////////////////
/////////////////////////////////////////
////////////
// piston //
////////////
module piston()
{
difference()
{
//piston body
cylinder(h=height, r1=diameter, r2=diameter, center=false);
//piston interior
translate([0, 0, (compression_height-pin_radius)/2]) cylinder(h=height, r=diameter*.75, center=false);
//wristpin hole
translate([0-diameter-1, 0, compression_height]) rotate([90, 0, 90]) cylinder(h=diameter*2+2, r=pin_radius+gap, center=false);
//rod relief
translate([0-height/1.5, 0, height+height/4]) rotate([90, 0, 90]) cylinder(h=height*1.3, r=height/2, center=false);
top_ring();
bottom_ring();
}
}
module top_ring()
{
//ring grooves
difference()
{
translate([0, 0, ring_to_deck]) cylinder(h=3, r1=diameter+1, r2=diameter+1, center=false);
translate([0, 0, ring_to_deck+1]) cylinder(h=2, r1=diameter-1, r2=diameter+3, center=false);
translate([0, 0, ring_to_deck-1]) cylinder(h=2, r1=diameter+3, r2=diameter-1, center=false);
}
}
module bottom_ring()
{
difference()
{
translate([0, 0, ring_to_deck+2]) cylinder(h=3, r1=diameter+1, r2=diameter+1, center=false);
translate([0, 0, ring_to_deck+3]) cylinder(h=2, r1=diameter-1, r2=diameter+3, center=false);
translate([0, 0, ring_to_deck+1]) cylinder(h=2, r1=diameter+3, r2=diameter-1, center=false);
}
}
//main
piston();
translate([0, 0-(diameter+pin_radius/2+parts_gap), 0]) wristpin();
///////////////////////////////
//test fittings - not for actual prints
///////////////////////////////
//wristpin in piston
//translate([0-diameter*.97, 0, ring_to_deck*5.5]) rotate([90,180,90]) wristpin();