Workflow beim 3D-Drucker

Dieser Post wird langweilig für alle, die bereits einen 3D-Drucker haben. Aber ich bin diese Woche völlig ahnungslos reingestolpert und will den anderen Ahnungslosen mal erzählen, wie das funktioniert.

Die erste Anlaufstelle ist eine Bibliothek mit fertigen Designs, z.B. Thingiverse. Dort legt man sich einen Account an und sucht sich Gegenstände, die man gebrauchen könnte, etwa diese. Man lädt ein solches Design herunter und öffnet es in einem Slicer, z.B. Ultimaker Cura. Cura liest STL-Dateien, etwa von diesem Design:

Die Software heißt Slicer, weil sie das Modell in Schichten schneidet, die vom Drucker wie eine Torte aufgebaut werden. Man kann das Modell in Cura nicht mehr verändern, also z.B. das dünne Ende verlängern. Man kann es nur skalieren. Andere Modelle enthalten die Vorstufe in Form einer CAD-Datei, etwa dieses mit einem SCAD-File. Bei diesen Dateien bietet Thingiverse einen Open In Customizer Button an. Hier lassen sich dann je nach Modell eine oder mehrere Variable anpassen und so ein individuelles STL bauen, das man mit Cura dann umwandelt.

Alternativ lädt man das SCAD-File herunter, installiert sich OpenSCAD und bearbeitet dort das Design offline, hier am Beispiel eines kleinen Schildes. Links sieht man den einfachen Source Code, rechts das Rendering.

Der Code ist leicht zu verstehen. Zwei Körper werden voneinander abgezogen. Zunächst wird das Rechteck definiert, dann die Schrift. Im Ergebnis hat man eine Schablone.

line1="BABY";
line2="SCHLÄFT";
line3="";
border=12;

difference() {
    $fn=32;
    minkowski() {
        union(){
            cube([max(len(line1),len(line2),len(line3))*7+border,15,0.75], center=true);
            if(line2||line3) {
                translate([0,-15,0]) cube([max(len(line1),len(line2),len(line3))*7+border,15,0.75], center=true);
            }
            if(line3) {
                translate([0,-30,0]) cube([max(len(line1),len(line2),len(line3))*7+border,15,0.75], center=true);
            }
        }
        cylinder(r=3,h=1);
    }
    
    union() {
            linear_extrude(height = 3, center=true) text(line1, font = "Stencil", "center", size = 10, valign="center", halign="center");
        if(line2) {
            translate([0,-15,0]) linear_extrude(height = 3, center=true) text(line2, font = "Stencil", "center", size = 10, valign="center", halign="center");
        }
        if(line3) {
            translate([0,-30,0]) linear_extrude(height = 3, center=true) text(line3, font = "Stencil", "center", size = 10, valign="center", halign="center");
        }
    }
}

Mit OpenSCAD erzeugt man nun das STL File und lädt es in Cura.

Nach dem Slicen kann man den Auftrag per USB an den Drucker schicken. Wenn eine SD-Card im Reader steckt, bietet Cura an, die Datei dort zu speichern. Mit der läuft man dann zum Drucker, legt sie dort ein und startet den Auftrag über die Console des Druckers.

Bei mir erkennt Cura einen installierten Octoprint Druckserver und bietet den bevorzugt an. Der ersetzt das Sneaker-Net mit den Speicherkarten und läuft bei mir auf einem Raspberry Pi 3+.

Ich lerne 3D-Druck

Ich bin gerade etwas still, weil ich lerne. Und dabei geht viel Zeit drauf. Das ging so: “Ich brauche keinen 3D-Drucker. Ich brauche keinen 3D-Drucker. Ich brauche keinen 3D-Drucker. Ich brauche keinen 3D-Drucker. Ich brauche keinen 3D-Drucker. Ich habe einen 3D-Drucker.” Sven hat mich gezwungen 😉, seinen alten AnyCubic i3 Mega S abzuholen. Der steht nun im Keller und macht Krach. Mit einer Logi Circle kann ich ihm bei der Arbeit zuschauen.

Mein erstes Werk war eine Hutschienen-Halterung für einen Shelly 2.5. Nun sieht es im Elektroschrank gleich viel professioneller aus. Dann habe ich davon noch zwei Exemplare für die zentrale Jalousiesteuerung und eins für die Klingelanlage.

So simpel das Prinzip ist, so aufregend ist die Umsetzung. Man muss erst mal viel Zeit investieren, bis man die einzelnen Parameter kennt. So sieht zum Beispiel die Startsequenz des Druckers aus:

G21                                        ; metric values 
G90                                        ; absolute positioning 
M82                                        ; set extruder to absolute mode 
M107                                       ; start with the fan off 
M140 S{material_bed_temperature_layer_0}   ; Start heating the bed 
G4 S60                                     ; wait 1 minute 
M104 S{material_print_temperature_layer_0} ; start heating the hot end 
M190 S{material_bed_temperature_layer_0}   ; wait for bed 
M109 S{material_print_temperature_layer_0} ; wait for hotend 
M300 S1000 P500                            ; BEEP heating done 
G28 X0 Y10 Z0                              ; move X/Y to min endstops 
M420 S1                                    ; Enable leveling 
M420 Z2.0                                  ; Set leveling fading height to 2 mm 
G0 Z0.15                                   ; lift nozzle a bit 
G92 E0                                     ; zero the extruded length 
G1 X50 E20 F500                            ; Extrude 20mm of filament in a 5cm line. 
G92 E0                                     ; zero the extruded length again 
G1 E-2 F500                                ; Retract a little 
G1 X50 F500                                ; wipe away from the filament line
G1 X100 F9000                              ; Quickly wipe away from the filament line