Baue einen parametrischen Universalhalter in OpenSCAD: Module, Funktionen, Bohrungen, optionale Beschriftung und Parameterprüfungen im vollständigen Code.
Voraussetzungen
Du brauchst OpenSCAD und die Grundlagen aus Teil 20. 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.
Abschlussprojekt des Einsteigerkurses
In den vorherigen 20 Lektionen haben wir Schritt für Schritt die wichtigsten Grundlagen von OpenSCAD kennengelernt.
Im Abschlussprojekt führen wir viele dieser Inhalte noch einmal in einem vollständigen parametrischen Modell zusammen.
Wir erstellen einen Universalhalter mit:
-
Grundplatte
-
Rückwand
-
zwei Befestigungsbohrungen
-
optionaler Mittelbohrung
-
optionaler Beschriftung
-
definiertem Toleranzspiel
-
Parameterprüfungen
Lernziel:
Nach dieser Lektion kannst du ein vollständiges OpenSCAD-Modell aus Parametern, Funktionen, Modulen, Schleifen, Bedingungen und booleschen Operationen strukturiert aufbauen.
Was verwenden wir aus dem Kurs?
Im Abschlussprojekt kommen unter anderem folgende Befehle zum Einsatz:
cube()
cylinder()
translate()
rotate()
union()
difference()
for()
if()
module
function
text()
linear_extrude()
assert()
Dazu verwenden wir:
-
Variablen
-
Berechnungen
-
Toleranzen
-
strukturierte Codeblöcke
Zielmodell
Der Universalhalter besteht aus einer horizontalen Grundplatte und einer senkrechten Rückwand.
Die Grundplatte besitzt zwei Befestigungsbohrungen.
Optional kann zusätzlich eine größere Mittelbohrung erzeugt werden.
Auf der Rückwand kann optional eine Beschriftung erscheinen.
Hauptparameter
Wir beginnen mit den Werten, die später vom Benutzer geändert werden sollen.
breite = 100;
tiefe = 50;
hoehe = 60;
wand = 4;
Befestigungsparameter
schraube_d = 5;
spiel = 0.4;
rand_x = 15;
Der tatsächliche Bohrungsdurchmesser wird nicht direkt eingegeben.
Wir berechnen ihn:
bohrung_d =
schraube_d + spiel;
Damit bleibt die Konstruktion nachvollziehbar.
Optionale Mittelbohrung
mit_mittelbohrung = true;
mittelbohrung_d = 20;
Mit:
mit_mittelbohrung = false;
wird sie vollständig ausgeblendet.
Optionale Beschriftung
mit_text = true;
beschriftung =
"OpenSCAD";
textgroesse = 10;
text_hoehe = 1;
Damit kann das gleiche Modell beispielsweise unterschiedliche Beschriftungen erhalten.
Hilfsfunktionen
Wir verwenden zwei einfache Funktionen:
function mitte(
wert
) = wert / 2;
function pos_rechts(
gesamt,
rand
) = gesamt - rand;
Damit werden wiederkehrende Berechnungen leichter lesbar.
Befestigungspositionen
x_pos = [
rand_x,
pos_rechts(
breite,
rand_x
)
];
Die rechte Bohrung bleibt dadurch automatisch im gleichen Abstand zur rechten Außenkante.
Parameter prüfen
Ein parametrisches Modell sollte problematische Eingaben möglichst früh erkennen.
assert(
wand >= 2,
"Wandstärke muss mindestens 2 mm betragen"
);
Zusätzlich:
assert(
rand_x > bohrung_d / 2 + 2,
"Befestigungsbohrung liegt zu nah am Rand"
);
und:
assert(
breite > 2 * rand_x,
"Breite zu klein für den gewählten Randabstand"
);
Modul für Bohrungen
Das bereits bekannte Bohrungsmodul:
module bohrung(
d,
h,
ueberstand=1
) {
translate([
0,
0,
-ueberstand
])
cylinder(
h=h + 2 * ueberstand,
d=d,
$fn=64
);
}
Dadurch brauchen wir den Schneidzylinder nicht mehrfach auszuschreiben.
Modul für den Grundkörper
module grundkoerper(
breite,
tiefe,
hoehe,
wand
) {
union() {
// Grundplatte
cube([
breite,
tiefe,
wand
]);
// Rückwand
cube([
breite,
wand,
hoehe
]);
}
}
Modul für Beschriftungen
module beschriftung_3d(
textinhalt,
groesse,
hoehe
) {
linear_extrude(
height=hoehe
)
text(
textinhalt,
size=groesse,
halign="center",
valign="center"
);
}
Damit wird auch die Texterzeugung zu einem wiederverwendbaren Baustein.
Befestigungsbohrungen mit for()
for (x = x_pos)
translate([
x,
tiefe / 2,
0
])
bohrung(
d=bohrung_d,
h=wand
);
Wir benötigen nur einen Bohrungsaufruf.
Die Schleife erzeugt beide Positionen automatisch.
Optionale Mittelbohrung
if (mit_mittelbohrung)
translate([
mitte(breite),
mitte(tiefe),
0
])
bohrung(
d=mittelbohrung_d,
h=wand
);
Damit kombinieren wir erneut:
if()
+
Funktion
+
Modul
+
difference()
Optionale Beschriftung
Die Schrift wird auf der Rückwand positioniert:
if (mit_text)
translate([
mitte(breite),
wand - 0.1,
hoehe / 2
])
rotate([
-90,
0,
0
])
beschriftung_3d(
textinhalt=beschriftung,
groesse=textgroesse,
hoehe=text_hoehe
);
Vollständiges Modell
// =========================================
// PARAMETER
// =========================================
breite = 100;
tiefe = 50;
hoehe = 60;
wand = 4;
schraube_d = 5;
spiel = 0.4;
rand_x = 15;
mit_mittelbohrung = true;
mittelbohrung_d = 20;
mit_text = true;
beschriftung = "OpenSCAD";
textgroesse = 10;
text_hoehe = 1;
// =========================================
// FUNKTIONEN
// =========================================
function mitte(
wert
) = wert / 2;
function pos_rechts(
gesamt,
rand
) = gesamt - rand;
// =========================================
// BERECHNUNGEN
// =========================================
bohrung_d =
schraube_d + spiel;
x_pos = [
rand_x,
pos_rechts(
breite,
rand_x
)
];
// =========================================
// PRÜFUNGEN
// =========================================
assert(
wand >= 2,
"Wandstärke muss mindestens 2 mm betragen"
);
assert(
rand_x > bohrung_d / 2 + 2,
"Befestigungsbohrung liegt zu nah am Rand"
);
assert(
breite > 2 * rand_x,
"Breite zu klein für den gewählten Randabstand"
);
// =========================================
// MODULE
// =========================================
module bohrung(
d,
h,
ueberstand=1
) {
translate([
0,
0,
-ueberstand
])
cylinder(
h=h + 2 * ueberstand,
d=d,
$fn=64
);
}
module grundkoerper(
breite,
tiefe,
hoehe,
wand
) {
union() {
cube([
breite,
tiefe,
wand
]);
cube([
breite,
wand,
hoehe
]);
}
}
module beschriftung_3d(
textinhalt,
groesse,
hoehe
) {
linear_extrude(
height=hoehe
)
text(
textinhalt,
size=groesse,
halign="center",
valign="center"
);
}
// =========================================
// MODELL
// =========================================
union() {
difference() {
grundkoerper(
breite=breite,
tiefe=tiefe,
hoehe=hoehe,
wand=wand
);
// Befestigungsbohrungen
for (x = x_pos)
translate([
x,
tiefe / 2,
0
])
bohrung(
d=bohrung_d,
h=wand
);
// optionale Mittelbohrung
if (mit_mittelbohrung)
translate([
mitte(breite),
mitte(tiefe),
0
])
bohrung(
d=mittelbohrung_d,
h=wand
);
}
// optionale Beschriftung
if (mit_text)
translate([
mitte(breite),
wand - 0.1,
hoehe / 2
])
rotate([
-90,
0,
0
])
beschriftung_3d(
textinhalt=beschriftung,
groesse=textgroesse,
hoehe=text_hoehe
);
}
Varianten erzeugen
Der große Vorteil des Modells zeigt sich durch reine Parameteränderungen.
Breitere Version
breite = 140;
Ohne Mittelbohrung
mit_mittelbohrung = false;
Andere Beschriftung
beschriftung =
"MakerLab";
Ohne Text
mit_text = false;
Abschlussaufgabe
Passe das Modell ausschließlich über die Parameter an.
Variante 1
| Parameter | Wert |
|---|---|
| Breite | 120 mm |
| Tiefe | 60 mm |
| Höhe | 70 mm |
| Wandstärke | 5 mm |
| Schraubendurchmesser | 6 mm |
| Spiel | 0,5 mm |
| Randabstand | 18 mm |
| Mittelbohrung | 25 mm |
| Beschriftung | MakerLab |
Dabei:
mit_mittelbohrung = true;
mit_text = true;
Variante 2
Gleiche Abmessungen, aber:
mit_mittelbohrung = false;
mit_text = false;
Das Modell selbst soll nicht verändert werden.
Was haben wir im gesamten Kurs gelernt?
Der Kurs begann mit:
cube();
und führte Schritt für Schritt weiter zu:
-
Syntax
-
Variablen
-
Grundkörpern
-
Transformationen
-
booleschen Operationen
-
Parametrik
-
Schleifen
-
Bedingungen
-
Modulen
-
Funktionen
-
2D-Geometrien
-
Extrusionen
-
Text
-
Rundungsqualität
-
mehreren Dateien
-
externen Importen
-
druckgerechter Konstruktion
Damit besitzt du jetzt eine solide Grundlage für eigene parametrische OpenSCAD-Projekte.
Wie geht es weiter?
Mit diesem Teil endet der OpenSCAD-Einsteigerkurs.
Ein möglicher Aufbaukurs könnte anschließend Themen behandeln wie:
-
komplexere Module und Bibliotheken
-
assert()und robuste Parameterprüfung -
OpenSCAD Customizer
-
wiederverwendbare Maker-Bibliotheken
-
Fasen und Rundungen
-
komplexere Listen und Vektoren
-
Rekursion
-
mathematische Funktionen
-
automatische Bauteilvarianten
-
Kommandozeilen-Rendering
-
automatischer STL-Export
-
Vorbereitung eigener Modelle für Web-Bauteilgeneratoren
Damit wäre der Übergang vom reinen OpenSCAD-Lernen hin zu automatisierten parametrischen Bauteilgeneratoren möglich.
Warum wird die Beschriftung um −90 Grad gedreht?
Die Rückwand liegt zwischen Y = 0 und Y = wand. Durch rotate([-90, 0, 0]) zeigt die Extrusion zur positiven Y-Seite und damit in den offenen Bereich des Halters. Der Start bei wand - 0.1 erzeugt eine kleine Überlappung, damit Text und Rückwand ein gemeinsames Volumen bilden. Prüfe bei längeren Texten die Breite und passe die Schriftgröße an. Die Parameterprüfungen im Beispiel decken einige Grundbedingungen ab; kontrolliere bei jeder Variante zusätzlich Lochabstände, verbleibendes Material und Textposition.
Weiterlernen
Referenz
Die OpenSCAD-Sprachreferenz verlinkt die Dokumentation der verwendeten Befehle.
