Seit dem ersten Post hier in diesem Blog war mir klar, dass ich die
Fähigkeit entwickeln musste, eigene 3D-Objekte entwerfen zu können. Der Gedanke "Es
wird sicher irgendwann auf mich zu kommen, etwas zu drucken, was es
nicht schon fertig zum Download irgendwo gibt." begleitete mich von Anfang an.
Von der 8. bis zur
12. Klasse habe ich Unterricht im technischen Zeichnen bekommen. Freilich nicht an einem CAD-Arbeitsplatz. Stattdessen gab es mit Bleistift oder Tusche ausgeführte 3-Tafel-Projektionen sich durchdringender Körper, deren isometrische Ansicht und immer mal wieder Abwicklungen, die man dann auch ausschneiden konnte und so einen 3-dimensionalen Körper vor sich hatte.
Beruflich habe ich hin
und wieder mit CAD Dateien zu tun, welche von Architekten stammen - die
Masse davon ist aber 2-dimensional. Dennoch kommt man in die
Verlegenheit, einmal in die Welt der Profi-CADer zu schnuppern. Leider
ist meine Begeisterung was z.B. AutoCAD betrifft nicht sehr groß. Diese
Software zu lizenzieren ist mangels Budget nicht möglich. Die Home-Use
Lizenz von Visio nutze ich hin und wieder.
Die Grundlagen
was das 2-dimensionale betrifft, wären also vorhanden. Das reicht aber bei Weitem nicht aus. Ein Beispiel:
Vor einigen Monaten ergab sich am Stammtisch die Notwendigkeit, an einem fertigen 3D-Objekt ein wenig Hand anlegen zu müssen. Damals hatte ich weder die richtigen Werkzeuge noch das nötige Wissen um so etwas zu machen. Ich glaube, eine Wand an dem Körper war zu hoch, oder ein Durchbruch zu klein - jedenfalls etwas ziemlich Einfaches. Natürlich gelang es uns nicht, die Datei so zu manipulieren, wie wir wollten. Letztlich wurde der Versuch abgebrochen. Das war dann der Auslöser, endlich eine Konstruktionssoftware näher kennenzulernen.
Für den 3D-Druck werden .stl Dateien benötigt. Alle Programme, die nicht in der Lage sind .stl Dateien zu exportieren, scheiden aus. Von einem Programm habe ich bei diversen Anlässen schon gehört. Es wird auch in meinem Umfeld von ein paar wenigen Leuten benutzt:
Blender
Blender ist ein Multitalent. Es kann viel mehr als nur 3D-Objekte erzeugen. Es dauert seine Zeit, bis man "drin" ist - und selbst nach vielen Stunden des Lernens gibt es noch immer einiges zu entdecken. Man muss sich auch darauf einstellen, dass die Einheiten, die Blender verwendet, nur mit Mühe in reale Dimensionen überführt werden können. Ein Bekannter äußerte sich mal zu diesem Problem mit "Blender kann nicht exakt, Blender kann hauptsächlich schön".
Einen Abend lang habe ich einen
Freecad Workshop besucht. Diese Software kann man relativ schnell erlernen. Freecad versucht irgendwie alles zu können. Ob Maschinenbau oder Architektur, es hat Schnittstellen für Makroprogrammierung, es kann Bemaßen, viele Formate anderer Programme im- oder exportieren, Bewegungen simulieren und vieles mehr. Natürlich lernt man an einem Abend nicht alles - aber es genügt um weiter zu machen. Gestört hat mich bei Freecad lediglich, dass man alle Konstruktionsschritte erst 2-dimensional macht und dann in die dritte Dimension bringt.
Mein erster
Eintrag in diesem Blog enthält einen Abschnitt wie ich meinen 3D-Drucker ausgewählt habe:
Der hat eine recht innovative Sache zur Konstruktion des Druckers verwendet: OpenSCAD. Diese Software hat keine Zeichenwerkzeuge. Stattdessen (be)schreibt man seine Objekte durch Positionieren,
Dimensionieren und Kombinieren von Grundkörpern. Dabei hat man auch die
Möglichkeit, Variable zu verwenden. Im Ergebnis kommt eine höchst
flexible Konstruktion dabei heraus. Will man z.B. statt der M6
Gewindestangen welche mit M8 verwenden, trägt man das in eine
Parameterdatei ein und lässt den Drucker einfach neu "berechnen". Alle
davon abhängenden Bereiche werden automatisch angepasst. faszinierende
Sache das.
Ja, so faszinierend das zu Beginn war, es war - und ist zum Teil auch heute noch - schwer verständlich, was mein Druckerkonstrukteur in den vielen Dateien anstellt.
Zum Erlernen ist das ungeeignet. Dennoch hat mir das dahinter liegende Prinzip so gut gefallen, dass ich dabei geblieben bin. Natürlich konstruiere ich nicht jeden Tag irgendwelche Objekte. Aber immer wenn es zu einer Konstruktion kommt, merke ich, dass ich immer mehr Sprachelemente in effektiverer Weise benutze als früher.
Dieser Rackmount-Winkel erlaubt es, einen Raspberry Pi in einen 19" Schrank zu montieren. Die beiden Bauteile benötigen knapp 270 Zeilen Code. Dabei geht es im wesentlichen darum, Platten zu positionieren, Quader auszuhöhlen und Löcher zu bohren. Die Positionen und Dimensionen dieser Bauelemente werden in Konstanten vorgehalten. Aus dem
Wikipedia-Eintrag zum 19" Rack entnimmt man z.B. diesen Satz
"Das 19-Zoll-Rack-System ist für gute Kompatibilität genormt (EIA 310-D,
IEC 60297 und DIN 41494 SC48D). Die Frontplatten der Einschübe sind
demnach ein Vielfaches einer Höheneinheit, welche 1,75 Zoll entspricht.
Für etwas Spielraum beim Ein- und besonders Ausbau werden von
Frontplatten einmal 1/32 Zoll (entspricht 0,787 mm) abgezogen."
und bildet daraus die Konstante in Millimeter für eine Höheneinheit:
he = (1.75 - 1/32) * 25.4;
In gleicher Art bildet man alle weiteren Konstanten, die man zur Konstruktion benötigt. Wenn dann später die Teilkonstruktionen definiert werden, kann man sich auf diese Konstanten beziehen und die Frontplatte einfach mit
cube([platte_l, platte_d, he]); // 1 HE Platte
konstruieren. Sollte später festgestellt werden, dass die Stärke der Platte platte_d=2; nicht ausreicht, wird einfach der Wert verändert und man muss nicht den Code nach allen in Frage kommenden Stellen durchsuchen. Ähnlich einfach werden die beiden Montagelöcher gesetzt:
// Loch unten
translate([winkel / 2, -0.5, he / 2 - lochabstand / 2])
rotate([-90, 0, 0])
cylinder(d=m6_durchgangsloch, h=platte_d + 1);
// Loch oben
translate([winkel / 2, -0.5, he / 2 + lochabstand / 2])
rotate([-90, 0, 0])
cylinder(d=m6_durchgangsloch, h=platte_d + 1);
Die volle Eleganz von OpenSCAD kommt aber erst zum Vorschein, wenn man z.B. gleichartige Objekte geometrisch verteilen will. Beim
LED-Halter für meine Kamera war es notwendig, 23 Abstandshalter (+ 1 Lücke für die Anschlußkabel) auf 24 Positionen zu verteilen:
In OpenSCAD ist das ein 6-Zeiler:
for(i=[0:22])
{
rotate([0, 0, i * 360 / 24 - 75])
translate([led_halter_m, 0, 1])
cylinder(d=5, h=1);
}
Dabei wird i pro Schleifendurchlauf von 0 bis 22 iteriert. Pro Schleifendurchlauf wird der Rotationswinkel neu berechnet. Er durchläuft nacheinander die Werte -75°, -60°, -45° ... 255°. Der Zylinder wird in x-Richtung im Halter etwas erhöht positioniert und anschließend entlang der Kreislinie des Halters rotiert.
Was aktuell in OpenSCAD schlecht ist, wären die verfügbaren Bibliotheken. Einerseits gibt es weder einen einheitlichen Ort, wo man Bibliotheken findet, andererseits gibt es Bibliotheken die Fehler enthalten. Die mitgelieferte Bibliothek ist auch noch sehr schlecht dokumentiert. Man sollte davon ausgehen, dass eine Bibliothek für DIN-Gewinde, Objekte erzeugt, die man benutzen kann. Ich habe eine je eine Mutter und Schraube mit M20 Gewinde gedruckt - leider passen sie nicht ineinander. Die gedruckte Mutter lässt sich nur mit Mühe auf eine gekaufte M20 Schraube drehen, die gekaufte Mutter geht gar nicht auf die gedruckte Schraube. Das bedeutet nun für mich, dass ich die Bibliothek auseinander nehmen müsste um die dort enthaltenen Fehler zu finden. Das Gleiche gilt für eine Bibliothek zum Erzeugen von Zahnrädern mit Evolvente. Daran versucht sich derzeit ein Bekannter von mir.
Zum Schluss noch eine Fähigkeit, die man nicht so oft benötigt - aber eindrucksvoll zeigt, was alles machbar ist. OpenSCAD kann mittels der Variable $t animierte Darstellungen der Konstruktion erzeugen:
Die so erzeugten Einzelbilder lassen sich dann entweder zu einem .gif oder zu einem Film zusammenfassen.
Wer jetzt neugierig geworden ist, kann sich ja den
Blogeintrag von gestern durchlesen und die Workshop-Dateien durcharbeiten. Viel Spaß!