Mit openSCAD habe ich ein parametrisches Modell für die Verbindung gemacht, bei dem man die Größe und Anzahl der Zapfen anpassen kann um es dann in andere Modelle einzubauen. Mit vielen kleineren Zapfen und geringer Höhe eignet es sich zum verbinden dünner Platten: Man kann aber auch massivere Teile damit ausstatten: Ein Probedruck ohne das gesamte Modell ist ratsam, um die richtige Einstellung für das Spaltmaß (zv_c) zu finden.
Weitere Details kann man den Kommentaren im Skript entnehmen. Hier ist es:
Code: Alles auswählen
// Zapfenverbinder
$fn = 128;
// zum Passungsspalt
// Erfahrung mit ABS, Extr.Multiplier 0.9, 0.4mm Düse, 2mm Wanddicke
// 0.10mm --> gute Passung, kein Spiel, gut zerlegbar
// 0.05mm --> gute stramme Passung, schwer zerlegbar
// 0,00mm --> zu stramm! aber möglicherweise geeignet für Aceton-Verschweißung
// Je nach Material und Einstellung des Druckers sind andere Ergebnisse zu erwarten.
// Parameter
zv_w = 20; // Wanddicke (Höhe)
zv_c = 0.05; // Passungsspalt (clearance) s.o.
zv_h = 4; // Zapfen-Halsbreite
zv_d = 5; // Zapfen-Kreisdurchmesser, es muss zv_d > zv_h !
zv_n = 2; // Anzahl Zapfen
// abgeleitete Variablen
zv_p = zv_d/2 + zv_h/2; // Pitch, Abstand Kreise in X
zv_t = sqrt(pow(zv_d, 2) - pow(zv_p, 2)); // Tiefe, Abstand Kreise in Y
zv_b = (zv_n+1)*zv_h + zv_n*zv_d; // Breite des Blocks
// Blockgröße (eine Hälfte), die sich aus den Parametern ergibt
echo (zv_Breite=zv_b);
echo (zv_Tiefe=2*zv_d);
// Weiblein
color("pink") difference() {
union() {
translate([0, -2*zv_d, 0]) cube([zv_b, 2*zv_d, zv_w]);
translate([0, -2*zv_d, 0]) cube([zv_h/2, 2.5*zv_d + (zv_t-zv_c)/2, zv_w]);
translate([zv_b - zv_h/2, -2*zv_d, 0]) cube([zv_h/2, 2.5*zv_d + (zv_t-zv_c)/2, zv_w]);
for (i=[0:zv_n]) {
translate([zv_h/2 + i*2*zv_p, zv_t/2, 0]) cylinder(d=zv_d-zv_c, h=zv_w);
}
}
for (i=[1:zv_n]) {
translate([zv_h/2 - zv_p + i*2*zv_p, -zv_t/2, -1]) cylinder(d=zv_d+zv_c, h=zv_w+2);
}
translate([-zv_d, -2*zv_d, -1]) cube([zv_d, 2.5*zv_d + (zv_t-zv_c)/2, zv_w+2]);
translate([zv_b, -2*zv_d, -1]) cube([zv_d, 2.5*zv_d + (zv_t-zv_c)/2, zv_w+2]);
}
// Männlein
color("blue") translate([zv_b+zv_d, 0, 0]) difference() {
union() {
translate([0, -2*zv_d, 0]) cube([zv_b, 2*zv_d, zv_w]);
for (i=[1:zv_n]) {
translate([zv_h/2 - zv_p + i*2*zv_p, zv_t/2, 0]) cylinder(d=zv_d-zv_c, h=zv_w);
}
}
for (i=[0:zv_n]) {
translate([zv_h/2 + i*2*zv_p, -zv_t/2, -1]) cylinder(d=zv_d+zv_c, h=zv_w+2);
}
translate([-1, -zv_t/2 - zv_d/2 - zv_c/2, -1]) cube([zv_h/2 + 1, 2*zv_d, zv_w+2]);
translate([zv_b - zv_h/2, -zv_t/2 - zv_d/2 - zv_c/2, -1]) cube([zv_h/2 + 1, 2*zv_d, zv_w+2]);
}