// Ein Spezialdübel mit vielen Einstellmöglichkeiten module duebel ( bohrloch_dm, // Durchmesser des Bohrlochs in Millimeter schraube_dm, // Durchmesser der Schraube in Millimeter laenge, // Länge des Dübels in Millimeter uebergroesse = 2, // Übergröße des Außendurchmessers aussen_vj = 0.75, // Verjüngungsfaktor des Außendurchmessers schraube_vj = 0.2, // Verjüngungsfaktor des Innendurchmessers schraube_vjend = 0.3, // Relatives Ende der Verjüngung entlang der Tiefe kragen = 0.1, // Relative Länge des ungeschlitzten Teils schlitzstaerke = 0.5, // Stärke der Schlitze in Millimeter abschluss = 2, // Stärke der Abschlusskappe in Millimenter zahn_div = 5, // Divisor für die Anzahl der Zähne zahn_tiefe = 1.5, // Tiefe der Zähne in Millimeter rund = false // Erstelle runden anstatt eckigen Dübel ){ difference() { aussen_dm = bohrloch_dm + uebergroesse; seitenlaenge = rund ? aussen_dm : sqrt( pow(aussen_dm, 2) / 2 ); linear_extrude(height = laenge, scale = aussen_vj) if (rund) circle(d = seitenlaenge, $fn=36); else square( seitenlaenge, center = true ); // Loch svj_ende = laenge * schraube_vjend; vj_dm = schraube_dm * schraube_vj; translate([0,0,-0.01]) union() { $fn = 24; cylinder( d1 = schraube_dm, d2 = vj_dm, h = svj_ende + 0.01); translate( [0, 0, svj_ende] ) cylinder( d = vj_dm, h = laenge - svj_ende + 0.02 ); } // Schlitze kragen_abs = laenge * kragen; for (i = [0:1]) rotate( [0, 0, i * 90] ) translate([ -(seitenlaenge + 2) / 2, -schlitzstaerke / 2, kragen_abs ]) cube ([ seitenlaenge + 2, schlitzstaerke, laenge - abschluss - kragen_abs ]); // Zähne zahnanzahl = floor( (laenge - kragen_abs) / zahn_div ); zahnabstand = (laenge - kragen_abs) / (zahnanzahl + 1); gegenkathete = (aussen_dm - (aussen_dm * aussen_vj)) / 2; hypothenuse = sqrt( pow(gegenkathete, 2) + pow(laenge, 2) ); winkel = asin( gegenkathete / hypothenuse ); diag_abst = sqrt( pow(aussen_dm/2 - zahn_tiefe, 2) / 2 ); for ( j = [0:90:359] ) rotate( [0, 0, j] ) rotate( -winkel, [1,1,0] ) for (i = [1:zahnanzahl] ) translate( [diag_abst, -diag_abst, kragen_abs + i * zahnabstand] ) rotate([0,0,-45]) translate( [0, -aussen_dm / 2, 0] ) rotate([0,45,0]) cube( aussen_dm ); } } duebel(8,4,40, schraube_vj = 0.33, rund = false); /* // Ein Spezialdübel mit vielen Einstellmöglichkeiten module duebel ( bohrloch_dm, // Durchmesser des Bohrlochs in Millimeter schraube_dm, // Durchmesser der Schraube in Millimeter laenge, // Länge des Dübels in Millimeter schraube_vj = 20, // Verjüngung des Innendurchmessers in Prozent schraube_vjend = 30, // Ende der Verjüngung entlang der Tiefe in Prozent uebergroesse = 2, // Übergröße des Außendurchmessers aussen_vj = 75, // Verjüngung des Außendurchmessers kragen = 10, // Länge des ungeschlitzten Teils in Prozent schlitzstaerke = 0.5, // Stärke der Schlitze in Millimeter zahn_div = 5, // Divisor für die Anzahl der Zähne zahn_tiefe = 1.5, // Tiefe der Zähne in Millimeter abschluss = 2, // Stärke der Abschlusskappe in Millimenter rund = false // Erstelle runden anstatt eckigen Dübel ){ difference() { seitenlaenge = rund ? bohrloch_dm : sqrt( pow(bohrloch_dm, 2) / 2 ) + uebergroesse; linear_extrude(height = laenge, scale = aussen_vj / 100) if (rund) circle( d = seitenlaenge, $fn = 36); else square( seitenlaenge, center = true ); // Innendurchmesser svj_ende = laenge * schraube_vjend / 100; vj_dm = schraube_dm * schraube_vj / 100; translate([0,0,-0.01]) union() { $fn = 24; cylinder( d1 = schraube_dm, d2 = vj_dm, h = svj_ende + 0.01); translate( [0, 0, svj_ende] ) cylinder( d = vj_dm, h = laenge - svj_ende + 0.02 ); } kragen_abs = laenge * kragen / 100; // Schlitze for (i = [0:1]) rotate( [0, 0, i * 90] ) translate( [-(seitenlaenge + 2) / 2, -schlitzstaerke / 2, kragen_abs] ) cube( [seitenlaenge + 2, schlitzstaerke, laenge - abschluss - kragen_abs] ); // Zähne zahnanzahl = floor((laenge - kragen_abs) / zahn_div); zahnabstand = (laenge - kragen_abs) / (zahnanzahl + 1); winkel = asin((seitenlaenge - (seitenlaenge * aussen_vj / 100)) / (2 * laenge)); for (j = [0:90:359]) rotate( [0, 0, j] ) rotate( -winkel, [1,1,0]) for (i = [1:zahnanzahl] ) translate( [bohrloch_dm - zahn_tiefe, -(bohrloch_dm - zahn_tiefe) , kragen_abs + i * zahnabstand] ) rotate([45,0,45]) cube( bohrloch_dm, center = true); } } rotate([-90,0,0]) duebel(8,5,50); translate([15,0,0]) rotate([-90,0,0]) duebel(8,5,50,zahn_tiefe = 2, rund = true); */