// rivet.scad // male and femal rivet // frettage conique // // created on 2012/12/12 // by charlyoleg // with the help of open source tools and inspirations of cool people // license: CC BY-SA // rivet_diameter = 15; // The external diameter of the male and female frettage_angle = 10; // The frettage angle to get the rivet stuck // 0 means pure cylinder // small angle is better for effort but more dependent on fabrication tolerance // big angle is easier to make but less efficient female_hole_diameter = 8; // The diameter of the through-hole of the female rivet male_hole_diameter = 5; // The diameter of the hole of the male rivet female_frettage_height = 3; // The height of the frettage cone male_frettage_extra_height_peak = 1; // An extra length at the peak of the nuzzle male_frettage_extra_height_base = 2; // An extra length at the base of the nuzzle female_press_cylinder_diameter = 11; // The internal diameter of the female cylinder pressing the male base female_press_cylinder_height_extra = -0.0; // The height of the female press cylinder is calculated from previous parameter. // You can add an extra positive or negative value to it. male_nuzzle_height_extra = 1; // The height of the cylinder portion of the nuzzle is per default 0. // You can make it bigger if you want. female_base_height = 2; // This is also the height of the cylinder portion of the through-hole male_base_height = 3; // The height of the base cylinder of the male rivet male_z_extra_position = 10; // extra value use in the rivet system to position the rivet male remover_skin = 10; // just use with difference to ensure no skin is remaining rivet_fn = 32; // to set the special variable fn // calculation female_frettage_base_diameter = female_hole_diameter + 2 * female_frettage_height * tan(frettage_angle); male_nuzzle_peak_diameter = female_hole_diameter - 2 * male_frettage_extra_height_peak * tan(frettage_angle); male_nuzzle_base_diameter = female_hole_diameter + 2 * (female_frettage_height + male_frettage_extra_height_base) * tan(frettage_angle); female_press_cylinder_height_default = male_frettage_extra_height_base; female_press_cylinder_height = female_press_cylinder_height_default + female_press_cylinder_height_extra; female_height = female_base_height + female_frettage_height + female_press_cylinder_height; male_nuzzle_cone_height = male_frettage_extra_height_base + female_frettage_height + male_frettage_extra_height_peak; male_height = male_base_height + male_nuzzle_height_extra + male_nuzzle_cone_height; // some log echo("female diameters: hole - frettage - pressing - external"); echo(female_hole_diameter); echo(female_frettage_base_diameter); echo(female_press_cylinder_diameter); echo(rivet_diameter); echo("female heights: base - frettage - pressing - total"); echo(female_base_height); echo(female_frettage_height); echo(female_press_cylinder_height); echo(female_height); echo("male diameters: hole - nuzzle peak - nuzzle base - external"); echo(male_hole_diameter); echo(male_nuzzle_peak_diameter); echo(male_nuzzle_base_diameter); echo(rivet_diameter); echo("male heights: base - nuzzle cylinder - nuzzle cone - total"); echo(male_base_height); echo(male_nuzzle_height_extra); echo(male_nuzzle_cone_height); echo(male_height); // drawing module rivet_female(){ female_frettage_cut_height = female_frettage_height + remover_skin; female_frettage_cut_diameter = female_hole_diameter + 2 * female_frettage_cut_height * tan(frettage_angle); color([0.9,0.4,0.1]) difference(){ union(){ translate([0,0,0]) cylinder(r=rivet_diameter/2, h=female_height, center=false); } union(){ translate([0,0,-remover_skin]) cylinder(r=female_hole_diameter/2, h=female_height+2*remover_skin, center=false, $fn=rivet_fn); translate([0,0,female_base_height+female_frettage_height]) cylinder(r=female_press_cylinder_diameter/2, h=female_press_cylinder_height+remover_skin, center=false, $fn=rivet_fn); translate([0,0,female_base_height]) cylinder(r1=female_hole_diameter/2, r2=female_frettage_cut_diameter/2, h=female_frettage_cut_height, center=false, $fn=rivet_fn); } } } //rivet_female(); module rivet_male(){ male_nuzzle_base_z = male_base_height + male_nuzzle_height_extra; color([0.6,0.9,0.1]) difference(){ union(){ translate([0,0,0]) cylinder(r=rivet_diameter/2, h=male_base_height, center=false, $fn=rivet_fn); translate([0,0,0]) cylinder(r=male_nuzzle_base_diameter/2, h=male_nuzzle_base_z, center=false, $fn=rivet_fn); translate([0,0,male_nuzzle_base_z]) cylinder(r1=male_nuzzle_base_diameter/2, r2=male_nuzzle_peak_diameter/2, h=male_nuzzle_cone_height, center=false, $fn=rivet_fn); } union(){ translate([0,0,-remover_skin]) cylinder(r=male_hole_diameter/2, h=male_height+2*remover_skin, center=false, $fn=rivet_fn); } } } //rivet_male(); module rivet_system(){ union(){ translate([0,0,0]) rotate([0,0,0]) rivet_female(); translate([0,0, male_height - male_frettage_extra_height_peak + female_base_height + male_z_extra_position]) rotate([0,180,0]) rivet_male(); } } module print_rivet_parts(){ rivet_female(); //rivet_male(); } rivet_system(); //print_rivet_parts();