Konstruiere OpenSCAD-Modelle für den 3D-Druck: Bohrungsspiel, Wandstärken, Druckorientierung und assert(). Mit Testplatte und Montagewinkel.
Voraussetzungen
Du brauchst OpenSCAD und die Grundlagen aus Teil 19. Die Beispiele verwenden die klassische OpenSCAD-Syntax; eine Ausführung mit einer konkreten Softwareversion wurde hier nicht geprüft. Wir behandeln eine Modelleinheit als einen Millimeter.
Kapitel 4 – Von 2D zu 3D
Ein 3D-Modell kann geometrisch vollkommen korrekt sein und trotzdem schlecht druckbar.
Gerade bei funktionalen FDM-Bauteilen spielen neben der reinen Geometrie weitere Faktoren eine große Rolle:
-
Toleranzen
-
Passungen
-
Bohrungsgrößen
-
Wandstärken
-
Überhänge
-
Brücken
-
Druckorientierung
-
Belastungsrichtung
OpenSCAD eignet sich besonders gut für solche Modelle, weil diese Konstruktionsregeln direkt in Parameter und Berechnungen eingebaut werden können.
Lernziel:
Nach dieser Lektion kannst du einfache OpenSCAD-Modelle druckgerechter aufbauen und Toleranzen sowie Mindestwerte parametrisch berücksichtigen.
CAD-Maß und tatsächliches Druckmaß
Angenommen, wir konstruieren eine Bohrung:
bohrung_d = 5;
und möchten dort einen 5-mm-Stift einsetzen.
In der Theorie passen beide Maße exakt zusammen.
In der Praxis kann die Bohrung jedoch kleiner ausfallen.
Gründe dafür können unter anderem sein:
-
Druckerkalibrierung
-
Material
-
Extrusionsbreite
-
Temperatur
-
Schrumpfung
-
Slicer-Einstellungen
Deshalb brauchen funktionale Verbindungen häufig ein definiertes Spiel.
Toleranz als Parameter
Statt einen veränderten Bohrungsdurchmesser direkt fest einzutragen:
bohrung_d = 5.4;
ist eine parametrische Lösung besser:
nennmass = 5;
toleranz = 0.4;
bohrung_d =
nennmass + toleranz;
Damit bleibt sofort erkennbar:
-
welches Sollmaß vorgesehen ist
-
welche Toleranz hinzugefügt wurde
Passungen
Je nach gewünschter Funktion werden unterschiedliche Abstände benötigt.
Beispielsweise:
stramme Passung
leichtgängige Passung
freie Passung
Welche Werte tatsächlich funktionieren, hängt stark vom eigenen Drucker und Material ab.
Deshalb sollten Toleranzen nicht als universelle Konstanten betrachtet werden.
Bohrungen für Schrauben
Nehmen wir eine Schraube mit:
schraube_d = 4;
und definieren:
spiel = 0.4;
Dann ergibt sich:
bohrung_d =
schraube_d + spiel;
also:
4.4 mm
Diese Logik lässt sich später für andere Schraubengrößen wiederverwenden.
Wandstärken
Sehr dünne Wände können im CAD problemlos dargestellt werden.
Der Drucker muss sie aber tatsächlich herstellen können.
Bei FDM hängt eine sinnvolle Wandstärke unter anderem ab von:
-
Düsendurchmesser
-
Linienbreite
-
Anzahl der Wandlinien
-
Material
-
Belastung
Eine Wandstärke sollte deshalb bewusst als Parameter definiert werden:
wand = 2.4;
Mindestwerte mit assert()
Wir können Mindestanforderungen direkt im Modell prüfen.
Beispiel:
assert(
wand >= 1.6,
"Wandstärke zu klein"
);
Wird ein kleinerer Wert verwendet, stoppt OpenSCAD die Berechnung mit der angegebenen Fehlermeldung.
Das ist besonders interessant bei parametrischen Modellen, die später von anderen Personen verändert werden sollen.
Überhänge
FDM-Drucker bauen ein Modell Schicht für Schicht auf.
Große horizontale Bereiche ohne Material darunter benötigen deshalb möglicherweise Support.
Ein ungünstiges Modell:
senkrechte Wand
└──── großer horizontaler Überhang
kann häufig verbessert werden durch:
-
Schräge
-
Fase
-
andere Orientierung
-
konstruktive Verstärkung
Die 45-Grad-Regel
Als grobe Faustregel kann für viele FDM-Drucker gelten:
Überhänge bis ungefähr 45 Grad von der senkrechten Z-Achse lassen sich häufig ohne Support drucken.
Das ist keine feste technische Grenze.
Moderne Drucker können abhängig von:
-
Material
-
Kühlung
-
Geschwindigkeit
-
Layerhöhe
auch deutlich stärkere Überhänge drucken.
Für Einsteiger ist die Regel aber eine gute Orientierung.
Brücken
Kurze horizontale Strecken zwischen zwei Auflagen können häufig frei gedruckt werden.
Das nennt man:
Bridging
Die mögliche Brückenlänge hängt stark von Drucker und Material ab.
Bei kritischen Bauteilen sollte man deshalb nicht unnötig auf große Brücken angewiesen sein.
Druckorientierung
Die Orientierung eines Bauteils beeinflusst:
-
benötigten Support
-
Oberflächenqualität
-
Druckzeit
-
Festigkeit
-
Genauigkeit
Gerade bei funktionalen Bauteilen sollte die spätere Belastungsrichtung berücksichtigt werden.
Belastung in Z-Richtung
FDM-Bauteile sind häufig zwischen den einzelnen Layern schwächer als innerhalb einer gedruckten Schicht.
Ein mechanisch belastetes Bauteil sollte deshalb möglichst so orientiert werden, dass starke Belastungen nicht ausschließlich die Layer auseinanderziehen.
Horizontale Bohrungen
Eine vertikale Bohrung lässt sich meist sehr sauber drucken.
Bei einer horizontalen runden Bohrung kann die Oberseite dagegen einen starken Überhang bilden.
Mögliche Strategien sind:
-
Bohrung nacharbeiten
-
andere Druckorientierung
-
Geometrie anpassen
-
gegebenenfalls tropfen- oder rautenähnliche Kontur
Für viele einfache Bauteile reicht es zunächst, dieses Problem beim Konstruieren im Hinterkopf zu behalten.
Fasen als Einführhilfe
Bei Steckverbindungen kann eine kleine Fase helfen, zwei Bauteile leichter zusammenzusetzen.
Beispielsweise bei:
-
Zapfen
-
Achsen
-
Steckverbindungen
-
Schraubbohrungen
Eine Einführfase kompensiert kleine Druckabweichungen und verbessert die Montage.
Spiel für Steckverbindungen
Beispiel:
zapfen_d = 10;
spiel = 0.3;
aufnahme_d =
zapfen_d + spiel;
Damit kann das Spiel zentral verändert werden, ohne die eigentliche Geometrie neu konstruieren zu müssen.
Praxisprojekt: druckgerechter Montagewinkel
Wir erstellen einen einfachen parametrischen Montagewinkel.
Parameter
breite = 80;
tiefe = 40;
hoehe = 50;
wand = 4;
schraube_d = 5;
spiel = 0.4;
bohrung_d =
schraube_d + spiel;
rand = 12;
ueberstand = 1;
Grundkörper
union() {
cube([
breite,
tiefe,
wand
]);
cube([
breite,
wand,
hoehe
]);
}
Die beiden Körper überlappen sich und bilden gemeinsam den Winkel.
Befestigungsbohrungen
for (x = [
rand,
breite - rand
])
translate([
x,
tiefe / 2,
-ueberstand
])
cylinder(
h=wand + 2 * ueberstand,
d=bohrung_d,
$fn=64
);
Vollständiges Modell
breite = 80;
tiefe = 40;
hoehe = 50;
wand = 4;
schraube_d = 5;
spiel = 0.4;
bohrung_d =
schraube_d + spiel;
rand = 12;
ueberstand = 1;
assert(
wand >= 2,
"Wandstärke muss mindestens 2 mm betragen"
);
assert(
rand > bohrung_d / 2 + 2,
"Bohrung liegt zu nah am Rand"
);
difference() {
union() {
// Grundplatte
cube([
breite,
tiefe,
wand
]);
// Rückwand
cube([
breite,
wand,
hoehe
]);
}
// Befestigungsbohrungen
for (x = [
rand,
breite - rand
])
translate([
x,
tiefe / 2,
-ueberstand
])
cylinder(
h=wand + 2 * ueberstand,
d=bohrung_d,
$fn=64
);
}
Warum die Bohrung größer ist als die Schraube
Unsere Parameter:
schraube_d = 5;
spiel = 0.4;
ergeben:
bohrung_d = 5.4 mm
Damit ist das Spiel ausdrücklich Bestandteil des Modells.
Das ist deutlich besser nachvollziehbar als eine scheinbar willkürliche 5,4-mm-Bohrung.
Toleranzen testen
Toleranzen sollten möglichst am eigenen Drucker ermittelt werden.
Dafür kann eine kleine Testplatte erzeugt werden.
Beispiel:
platte_b = 80;
platte_t = 25;
platte_h = 4;
durchmesser = [
5.0,
5.2,
5.4,
5.6
];
difference() {
cube([
platte_b,
platte_t,
platte_h
]);
for (i = [0:3])
translate([
15 + i * 18,
platte_t / 2,
-1
])
cylinder(
h=platte_h + 2,
d=durchmesser[i],
$fn=64
);
}
Nach dem Druck kann beispielsweise eine 5-mm-Schraube oder ein 5-mm-Stift getestet werden.
So lässt sich die tatsächlich benötigte Toleranz des eigenen Systems bestimmen.
Warum Testteile sinnvoll sind
Ein Testteil:
-
benötigt wenig Material
-
ist schnell gedruckt
-
spart Fehlversuche bei großen Bauteilen
-
liefert reale Werte für den eigenen Drucker
Diese Werte können anschließend als Standardparameter in zukünftige OpenSCAD-Modelle übernommen werden.
Mitmach-Aufgabe
Erstelle einen parametrischen Montagewinkel.
Vorgaben
| Parameter | Wert |
|---|---|
| Breite | 100 mm |
| Tiefe | 50 mm |
| Höhe | 60 mm |
| Wandstärke | 4 mm |
| Schraubendurchmesser | 6 mm |
| Spiel | 0,4 mm |
| Randabstand | 15 mm |
Die Grundplatte erhält zwei Bohrungen.
Zusätzlich soll geprüft werden:
wand >= 2
Musterlösung
breite = 100;
tiefe = 50;
hoehe = 60;
wand = 4;
schraube_d = 6;
spiel = 0.4;
bohrung_d =
schraube_d + spiel;
rand = 15;
ueberstand = 1;
assert(
wand >= 2,
"Wandstärke muss mindestens 2 mm betragen"
);
difference() {
union() {
// Grundplatte
cube([
breite,
tiefe,
wand
]);
// Rückwand
cube([
breite,
wand,
hoehe
]);
}
// Bohrungen
for (x = [
rand,
breite - rand
])
translate([
x,
tiefe / 2,
-ueberstand
])
cylinder(
h=wand + 2 * ueberstand,
d=bohrung_d,
$fn=64
);
}
Was haben wir gelernt?
Beim Konstruieren für den 3D-Druck sollten nicht nur die Sollmaße berücksichtigt werden.
Wichtig sind auch:
-
Fertigungstoleranzen
-
Passungen
-
Bohrungszugaben
-
geeignete Wandstärken
-
Überhänge
-
Brücken
-
Druckorientierung
-
Belastungsrichtung
OpenSCAD eignet sich hervorragend dafür, solche Regeln direkt in ein Modell einzubauen.
Beispielsweise:
bohrung_d =
schraube_d + spiel;
oder:
assert(
wand >= 2
);
Damit werden Modelle nicht nur parametrisch, sondern auch konstruktiv robuster.
Im nächsten Teil
Im nächsten Teil erreichen wir das Abschlussprojekt unseres Einsteigerkurses.
Dort führen wir viele Inhalte noch einmal zusammen:
-
Parameter
-
Berechnungen
-
Module
-
Funktionen
-
for() -
if() -
union() -
difference() -
Text
-
Toleranzen
-
druckgerechte Konstruktion
Das Ergebnis wird ein vollständig parametrischer Universalhalter, der sich über wenige Werte an verschiedene Anwendungen anpassen lässt.
Weiterlernen
- Teil 19: vorherige Lektion
- Teil 21: Abschlussprojekt: parametrischer Universalhalter
- OpenSCAD-Kurs und Cheatsheets
- 3D-Druck: Bohrungen und Toleranzen
Referenz
Die OpenSCAD-Sprachreferenz verlinkt die Dokumentation der verwendeten Befehle.
