Filamentwechsel-GCode für zweifarbigen 3D-Druck auf dem Anycubic i3 Mega
Mein mit dem Farblaserdrucker ausgedruckter "Bitte keine Werbung" - Aufkleber für meinen Briefkasten ist in die Jahre gekommen und sieht nicht mehr ansehnlich aus. Die Schwankungen in Temperatur und Luftfeuchtigkeit haben die Haftung an den Ecken verringert und nun hängt da so ein gewölbter, ausgeblichener, schäbig aussehender Aufkleber an meinem Briefkasten.Meine Idee ist ein achteckiges rotes Stop-Schild mit weißer Schrift "KEINE WERBUNG", wie es auch meine Nachbarn am Briefkasten haben - allerdings auch in Papier und mitunter auch ausgeblichen und mehr rosa denn rot.
Der Aufkleber der Nachbarn war schnell ausgemessen: 31mm in der Breite und die Schrift war wohl Arial. So sollte auch mein Aufkleber aussehen - man will ja möglichst schließlich einen einheitlichen Look. Nur halt aus Kunststoff, in den Hoffnung, dass sich das nicht wellt und auch nicht so schnell ausbleicht. Rotes und weißes PLA habe ich da, nur ist mein 3D-Drucker, der Anycubic i3 mega eben ein Einzelfilament-Drucker und druckt immer nur eine Farbe.
Das Schild soll mit 0.2mm Layerhöhe gedruckt werden, 4 Layer (also 0.8mm) rotes Achteck und danach 4 Layer (0.8mm) weiße Schrift darauf. Da müsste ich doch einfach nur, nachdem der vierte Layer fertig ist, den Druck anhalten, das Filament von rot auf weiß wechseln und dann weitermachen.
Eine Möglichkeit wäre es vielleicht im richtigen Moment auf Pause zu drücken, sei es bei SD-Kartendruck auf dem Display oder auf den Pause-Button in Octoprint. Aber das haut nie so richtig hin mit dem Timing, so gut wie möglich, genau beim Layerwechsel zu pausieren.
Ich möchte euch heute eine Lösung dazu vorstellen, die mit SD-Karten-Druck direkt über den Drucker als auch in Octoprint funktioniert.
Dazu weise ich meinen Slicer (ich verwende ideaMaker von Raise3D, aber das geht natürlich auch in Cura von Ultimaker und anderen) einen bestimmten GCode auszuführen, wenn er den Layer 5 erreicht. Dann soll er sich melden und mir Zeit geben, bis ich Pause (in Octoprint oder am Drucker) gedrückt habe, um in aller Ruhe das Filament zu drücken. Mit Continue bzw. Weiter soll es dann mit der anderen Farbe weitergehen.
Design in Fusion 360
Doch dazu später mehr. Zuerst will das Schild erst einmal designt sein. Das geschieht ganz normal als ein einziges Objekt, in dem Schild und Schrift vereint sind. Gedruckt wird ja auch ein Objekt, halt nur, dass ich dem Drucker mitten im Druck eine andere Farbe unterschiebe.Als 3D-Design-Software greife ich diesmal wieder zu Autodesk Fusion 360, weil ich mich darin eigentlich ganz gut zurechtfinde. Siehe dazu auch meinen Artikel 3D Designprogramme im Vergleich.
Zuerst brauchen wir ein Achteck mit 31mm Breite. Das funktioniert mit folgenden Schritte in Fusion 360:
- Im Würfel oben rechts "OBEN" anklicken
- Skizze Erstellen und die Oberfläche anklicken
- Polygon erstellen:
- Mittelpunkt des Polygons auf den Nullpunkt der Skizze setzen
- mit der Maus gerade nach oben (0°), mit Tab 31mm und 8 Kanten für Achteck eingeben:
- Skizze fertig stellen
- E für Extrudieren drücken
- 0.8mm als Höhe für das Schild eingeben:
Erst dachte ich, ich müsste an dieser Stelle eine Schrift in einem Grafikprogramm wie Inkscape oder dergleichen erstellen, als .svg speichern und dann importieren, doch mit Fusion 360 geht das zum Glück viel viel einfacher:
- links rechtsklick auf Skizze1 klicken, Skizze bearbeiten auswählen
- Text für 1. Zeile erstellen:
- Text eingeben: KEINE
- Das Ganze nocheinmal für die 2. Zeile, hier WERBUNG eingeben
- Auf die beiden Textzeilen jeweils rechtsklicken und Verschieben/Kopieren auswählen:
- Mit den erscheinenden Pfeilen an die richtige Position schieben:
- ... bis alles schön mittig ist:
- dann die beiden Schriftzeilen auswählen und um 0.8mm extrudieren:
Wer sich das eigene Design im 3D-CAD-Design-Programm sparen will, kann auch die fertige .STL-Datei hier downloaden.
GCcode-Anpassung in ideaMaker
Nachdem wir uns das Modell in ideaMaker geladen haben, kopieren wir uns am besten ein bereits vorhandenes Slicing-Profil mit duplicate und nennen es "Keine Werbung" oder "Zweifarbdruck" oder so ähnlich.Dann doppelklicken wir das Profil und dann auf Advanced. Hier ist jetzt der Reiter GCode und darunter der Reiter Layer Change GCode wichtig.
Der GCode, der hier steht, wird bei jedem Layerwechsel beim Druck ausgeführt, wenn dieses Slicing-Profil gewählt ist. Da wir aber nur etwas wollen, wenn vom vierten auf den fünften Layer gewechselt ist, bedienen wir uns eine Variable aus der Liste recht, und zwar layer_index.
Zusammen mit der IF-Anweisung [if {layer_index} = 5] weisen wir den Slicer an, diese Zeile nur auszuführen, wenn gerade ein Layerwechsel auf Layer 5 erfolgt. Und das ist genau der richtige Zeitpunkt für uns, weil hier unsere weiße Schrift (ab 0.8mm) erfolgen soll.
Ich habe lange gesucht und versucht, eine Block-Markierung (wie das in Programmiersprachen so üblich ist) zu finden, um die If-Anweisung nur einmal schreiben zu müssen, aber leider nichts gefunden. So bleibt uns leider nichts anderes übrig, als vor jede einzelne Zeile die If-Anweisung zu schreiben. Das geht aber mit einem anständigen Editor fix, wenn wir alle Zeilenumbrücke enstsprechend ersetzen.
Da die Nozzle und das Bett immer noch auf Temperatur gehalten wird, habe ich zwar keine Zeitnot, sollte aber trotzdem nicht trödeln, denn der nächste Layer soll ja noch gut mit dem, was jetzt steht, verschmelzen und da ist es nicht schlecht, wenn der letzte Layer noch ein bisschen Temperatur hat. Da der Kopf 50mm angehoben wurde, ist es eigentlich egal, ob der Bauteil-Lüfter sirrt oder nicht, den obersten Layer sollte er nicht mehr kühlen können.
Nach dem Einleiten der Hardware-Pause durch Tastendruck kann ich dann das rote Filament herausziehen und beiseite legen. Dann lege ich einen Notizzettel auf den bisherigen Druck und schiebe das weiße Filament ein. Solange, bis es aus der Düse wieder austritt und noch ein bisschen weiter, so dass nur noch weiß ohne rot aus der Düse kommt. Das landet alles auf dem Papier, dass ich dann entsorge. Dann drücke ich Continue auf dem Drucker bzw. Weiter in Octoprint und der Druck geht weiter, was durch nochmaliges Spielen der Melodie bestätigt wird.
Jetzt muss ich laufend aufpassen, austretendes Filament mit der Pinzette zu beseitigen, denn ab jetzt landet alles im Druck. Ich hab die Erfahrung gemacht, dass sich ein weißer Blob kaum vermeiden lässt. Das macht den Ausdruck unschön.
Wenn man allerdings 4 oder gleich 9 Keine-Werbung-Schilder druckt, ist nur eines davon versaut. Oder man setzt links und rechts noch einen kleinen Turm hin, an dem zuletzt (rechts, Layer 4, Wiederaufsetzpunkt) und zuerst (links, Layer 5, erster Druck mit weiß, Blob) gedruckt wird. Die gehören nicht zum Druck und deshalb ist nicht schlimm, wenn die unschön sind. Muss muss allerdings herausfinden, in welcher Reihenfolge der Drucker seine Bahnen fährt - dabei hilft einem die Preview-Funktion.
Der GCode für die Pause zum Filamentwechsel sieht bei mir zur Zeit folgendermaßen aus:
[if {layer_index} = 5] ; relative Positionierung
[if {layer_index} = 5] G91
[if {layer_index} = 5] ; ein bisschen retracten vor dem Hochfahren
[if {layer_index} = 5] G1 E-1 F300
[if {layer_index} = 5] ; hoch fahren, sonst schmilzt die Duese den Ausdruck
[if {layer_index} = 5] G1 F300 Z50.0
[if {layer_index} = 5] ; Erkennungsmelodie für Wechsel
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1396 P103
[if {layer_index} = 5] M300 S1318 P103
[if {layer_index} = 5] M300 S1396 P413
[if {layer_index} = 5] M300 S1174 P310
[if {layer_index} = 5] M300 S1046 P103
[if {layer_index} = 5] M300 S1174 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1396 P206
[if {layer_index} = 5] M300 S1318 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1396 P103
[if {layer_index} = 5] M300 S1318 P103
[if {layer_index} = 5] M300 S1396 P413
[if {layer_index} = 5] M300 S1174 P413
[if {layer_index} = 5] M300 S1318 P206
[if {layer_index} = 5] M300 S1046 P206
[if {layer_index} = 5] M300 S1174 P827
[if {layer_index} = 5] M300 S0 P206
[if {layer_index} = 5] ; Wartet 60 Sekunden auf Pause in Octoprint (oder Geraet), dann Filament wechseln und nochmal Pause druecken
[if {layer_index} = 5] G4 S60
[if {layer_index} = 5] ; nach Pause ----
[if {layer_index} = 5] ; ein bisschen retracten, um Blob zu vermeiden
[if {layer_index} = 5] G1 E-1 F300
[if {layer_index} = 5] ; nochmal kurz Melodie: es geht weiter
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1396 P103
[if {layer_index} = 5] M300 S1318 P103
[if {layer_index} = 5] M300 S1396 P413
[if {layer_index} = 5] M300 S1174 P310
[if {layer_index} = 5] M300 S1046 P103
[if {layer_index} = 5] M300 S1174 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1396 P206
[if {layer_index} = 5] M300 S1318 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1567 P206
[if {layer_index} = 5] M300 S1396 P103
[if {layer_index} = 5] M300 S1318 P103
[if {layer_index} = 5] M300 S1396 P413
[if {layer_index} = 5] M300 S1174 P413
[if {layer_index} = 5] M300 S1318 P206
[if {layer_index} = 5] M300 S1046 P206
[if {layer_index} = 5] M300 S1174 P827
[if {layer_index} = 5] M300 S0 P206
[if {layer_index} = 5] ; wieder absolute Positiong
[if {layer_index} = 5] G90
[if {layer_index} = 5] ; wieder an Ausgangsposition und weiter mit anderer Farbe
[if {layer_index} = 5] G1 F300 Z-50.0
Was der GCode im Einzelnen macht, sollte durch die zahlreichen Kommentare klar sein. Wer es genau wissen will, kann in der GCode-Referenz von Marlin, der Firmware des Anycubic i3 Mega, nachschauen.Andere Slicer
Der oben stehende GCode lässt sich natürlich auch händisch in einen GCode einfügen, den das persönlich preferierte Slicerprogramm erzeugt hat. Hier kommt es nur auf die richtige Stelle, den richtigen Zeitpunkt an. Häufig fügt der Slicer Kommentare wie "Layer 0", "Layer 1" etc. ein. Hier ist dann auf die Nummerierung zu achten und ob bei Null oder Eins mit dem Zählen begonnen wird.Vielleicht ist es keine schlechte Idee schon etwas vorher vor dem Layerwechsel mit dem Farbwechsel zu beginnen, wenn man ein Objekt mit Infill hat. Dann landet ein evtl. Blob im Infill und ist unsichtbar und die Außenlinie fängt perfekt mit der neuen Farbe an.