Freitag, 14. August 2015

CAD - womit konstruiert man seine 3D Druckobjekte?

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.
(c) Wikipedia

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ß!

Kommentare:

  1. Nachdem ich Deine Meinung zu AutoCAD teile und Catia für den Privatgebrauch viel zu mächtig und kompliziert ist, habe ich mir zur 3D-Konstruktion unseres Hauses Google Sketchup angesehen und bin sehr angenehm überrascht worden. Dafür gibts wohl auch ein Plugin für den STL-Export. Solltest Du Dir evtl. auch mal ansehen, falls nicht schon geschehen...

    AntwortenLöschen
    Antworten
    1. Ich hab's mir angesehen, weil ich mal ein Bauteil in diesem Format verändern wollte. Zu mehr bin ich bislang aber nicht gekommen.

      Löschen