home    Inhaltsverzeichnis
erste Version am 31.01.2018
letzte Änderung am 31.03.2018

Aufbau eines 3D-Druckers vom Typ Velleman K8200 - Seite 2


Vorab muss ich erstmal eine URL notieren: https://cypax.net/blog/?tag=K8200 (also der Abschnitt "Tuning für den K8200" - falls sich da nachträglich was verschieben sollte).

Das gestern gedruckte Gehäuse war nicht mehr in schön zu retten. Der abgebrochene Sockel ist zwar wieder an Ort und Stelle, wird aber ein Festschrauben des Boards nicht überleben. Eigentlich war die gesamte Konstruktion eine Fehlplanung - ist also quasi als Lehrgeld zu betrachten. Aber egal, gerade hat der Postbote die nächsten zwei Rollen mit je einem Kilo PLA gebracht. Noch einmal weiß und einmal schwarz.

Vorhin habe ich ein mehrteiliges Brotkasten-Gitter entworfen. Auf dem soll zukünftig das Brot lagern - statt wie bisher auf einem passend gefalteten Geschirrtuch.
Dessen Druck macht jedoch Probleme. Das Ergebnis ist in Z-Richtung verschoben, weil der Slicher extrem hektische Bewegungsmuster erzeugt hat. Daher gleich noch eine URL, weil bei mir offenbar genau das darin beschriebene passiert ist.
Allerdings hat der Controller meine Änderungen im EEPROM nach einem ColdBoot immer wieder vergessen gehabt, weshalb ich in der Slic3r-Config unter "Custom G-code / Start G-code" einfach ein M204 P800 R800 T800 angehängt habe. Nun beschleunigt er zwar langsamer, hat dafür aber nicht mehr das Problem, Schritte zu verlieren, wenn der Slicer kranke Bewegungsmuster eingebaut hat.
Für einmal war das gut - aber das war es dann auch schon. Ab dem folgenden Druck interessieren ihn die geänderten Werte nicht mehr. Mal schauen, ob eine Anfrage im RepRap-Forum weitere Erkenntnisse bringt.


Repetier-Host mit CuraEngine unter Linux

Gerade läuft mein erster Druck unter Linux, der tatsächlich erfolgversprechend aussieht. Erzeugt von der CuraEngine. Er ist bei Ebene 3 von 60 und bisher sieht es sehr gut aus. Gedruckt wird eine Kabel-Halterung. Meine Änderungen an der Konfiguration scheinen gepasst zu haben. Das durchschmieren der Düse durch die vorige Schicht tritt jedenfalls nicht mehr auf.
So. Fertig. Das Ergebnis ist ein perfekter Druck. Allerdings sind mir bei diesem Modell die Abstände zwischen den einzelnen Auslegern zu hoch. Viele USB-Stecker können da einfach durchrutschen, wenn sie Winkel-technisch entsprechend gedreht sind. Aber glücklicherweise habe ich genug andere Kabel, für die das Ding taugt.

Der nächste Druck ist ein selbst-designter Weißbier-Flaschen-Separator. Sowas brauche ich bei längeren Radtouren, bei denen ich immer mindestens drei Pullen in einer Kühltasche dabei habe, die ihrerseits im Fahrradkoffer liegt. Bisher musste ich die Flaschen mit zusammengeknülltem Zeitungspapier voneinander separieren, damit sie einerseits auch bei Offroad-Fahrten heil bleiben und andererseits nicht ständig Geräusche machen. Zukünftig werde ich das jetzt in geil haben :-)
Für ein Sixpack werde ich das 12x drucken müssen......er schätzt 42 Minuten Druckdauer für ein Teil.
Mal schauen, ob die Software unter Linux bessere Zeitschätzungen liefert. Der Start war um 19:58 Uhr.
Um 20:20 Uhr beginnt er mit Ebene 20 von 40.
Um 20:43 Uhr ist der Druck fertig. Okay, er hat sich um drei Minuten verschätzt - aber im Gegensatz zur Windows-Version ist das quasi nix.
Unter Linux ist -schlicht und ergreifend- alles besser, als unter Windows.....
Würde Velleman ihre K8200-Konfig gleich für Linux angeboten haben, hätte ich mir den ganzen Frust mit diesem erbärmlichen Windows-Laptop sparen können.
Aber egal - jetzt macht der 3D-Drucker jedenfalls richtig Spaß!


Erkenntnisse

Nun habe ich meinen Weißbier-Flaschen-Separator sechsmal gedruckt:
Screenshot vom
        Weißbier-Flaschen-Seperator
Es passt auch alles insofern schön, dass man die einzelnen Teile stabil miteinander verbinden kann.
Neben zwei weiteren Exemplaren bräuchte es aber noch zwei seitliche Verbinder, um am Schluss sowas hier zu bekommen:
Screenshot
Und dafür wird mir der Filament-Verbrauch einfach zu viel hoch - für etwas, was man ebenso gut (ohne sonderlichen Aufwand) aus Sperrholz zurechtsägen kann.
Fazit: nochmal Lehrgeld gezahlt.
Merke: große Objekte, die man in wenigen Minuten aus Sperrholz herstellen kann, sollte man aus Sperrholz herstellen. Das führt weit schneller zu einem Ergebnis, als der Entwurf eines Modells und dessen Ausdruck.


Konfiguration der CuraEngine unter Linux

Diesen Abschnitt habe ich auf eine eigene Seite ausgelagert.


ein Repetier-Server auf einem RasPi

Eben habe ich einen alten RasPi mit dem SD Image for Raspberry Pi von repetier-server.com befruchtet.
Der Hintergrund ist der, dass ich langsam mal meinen Schreibtisch wieder frei bekommen möchte. Und weil der Drucker nicht in USB-Kabel-Länge von meinem Hauptrechner entfernt aufgestellt werden soll, braucht es dazwischen ein Proxy-System mit Ethernet-Anschluss.

Die erste Idee war ja, dafür einen Laptop einzusetzen. Aber der ist so sperrig und braucht zu allem Übel eine hinreichend große Stellfläche in Arbeitshöhe, um sinnvoll genutzt werden zu können. Insofern ist ein RasPi deutlich geeigneter - insbesondere dann, wenn es fertige Software dafür gibt, die sich per Webbrowser bedienen lässt.

Die Installation des Repetier-Servers verlief dank des vorgefertigten SD-Card-Images vollkommen schmerzfrei. Entpacken, draufkopieren und läuft. Lediglich ein paar Settings aus der Drucker-Konfiguration des Repetier-Hosts musste ich ins Web-GUI des Repetier-Servers übertragen.
Ein Ausdruck wird nun dadurch eingeleitet, dass man im Web-GUI des Repetier-Servers eine Datei mit G-Code hochlädt und auf Start klickt.
Was im Repetier-Host auf der Seite manuelle Kontrolle möglich war, ist jetzt unter dem Tab Steuerung im Web-GUI erreichbar.

Damit konnte der Drucker heute umziehen. Er steht jetzt hinter meinem Schreibtisch.
Foto vom K8200
Das selbstgedruckte Unterbau-Gehäuse für das Controller-Board war dann doch zu retten. Offenbar ist der verwendete UHU-Kleber erst nach zwei Tagen richtig ausgehärtet. Somit konnte der größte Teil der Kabelage darin verstaut werden ... und es sieht nicht mehr ganz so chaotisch aus.
Zu dem Tisch gehen jetzt genau zwei Kabel. Einmal 230V und einmal Ethernet. So soll es sein :-)


Fix für einen nicht anlaufenden Lüfter

Weil der Lüfter regelmäßig nicht angelaufen ist, wenn er laut G-Code mit 15 oder 20 Prozent Drehzahl laufen sollte, habe ich ein kleines Python-Script gebaut, das als Post-Sliche-Filter läuft und den G-Code derart verändert, dass bei jedem M106-Kommando mit zu kleiner Drehzahl (<100) ein Kommando M106 S255 eingefügt und der ursprüngliche M106 hinter das nächste G-Kommando gestellt wird.
Dadurch bekommt der Lüfter erstmal einen Vollgas-Impuls, dreht los und bleibt ingange, wenn die Drehzahl danach reduziert wird.
Das nach-hinten-schieben ist nötig, damit der Vollgas-M106 genug Zeit hat, den Lüfter in Schwung zu bringen.
Der Code ist folgender:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys

with open(sys.argv[1], "r") as file:
lns=file.readlines()

lnm=""
with open(sys.argv[2], "w") as file:
file.write("; modified by postscript4slicher.py"+chr(13))
for ln in lns:
if ln.startswith("M106"):
wrds=ln.split()
if len(wrds)>1:
for i in range(len(wrds)):
if wrds[i].startswith("S"):
spd=int(wrds[i][1:])
if spd<50: # mind. auf 20%
ln="M106 S50"+chr(13)
if spd<100: # Anlauf-Puls zufügen
file.write("M106 S255"+chr(13))
lnm=ln
ln=""
if ln!="":
file.write(ln)
if lnm!="" and ln.startswith("G"):
file.write(lnm)
lnm=""

Für Drucker mit mehreren Fans wird der Code nicht funktionieren - aber ich habe ja nur den einen Lüfter.
Der Aufruf erfolgt im Repetier-Host unter Druckereinstellungen / Erweitert / Filter Pfad... und lautet:
    python /home/dede/bin/postscript4slicher.py #in #out


Messuhr zur Ausrichtung des Heizbettes

Bei der letzten Bestellung habe ich mir u.a. eine Messuhr für 20€ bestellt. Damit wird es dann hoffentlich nicht wieder mehr als eine Stunde Zeit kosten, wenn ich das Heizbett nach einem Umbau neu justieren muss.
Mein erster Entwurf der Messuhr-Halterung wurde an den Extruder geklemmt. Grundsätzlich hat das auch funktioniert. Jedoch ist diese Art der Montage nicht steif genug, um die Uhr exakt an einer Position zu halten, wenn das Bett darunter bewegt wird. Die Abweichung betrug zwar nur fünf bis zehn Hundertstel - aber wenn die Uhr auf ein hundertstel Millimeter auflöst, ist [mir] das trotzdem zu viel.
Daher jetzt die Idee, die Messuhr an einem Konstrukt aus Alu-Profilen zu montieren, das seinerseits an der Profilschiene für den Extruder befestigt wird.
Weil ich es aus Resten von vor Jahren gekauften Profilschienen bauen werde, wird das konkrete Design nur begrenzt nachbau-freundlich sein...
Es kommt U-Profil und sog. Vierkantrohr zum Einsatz. Das U-Profil hat eine Wandstärke von 1.5mm, eine Höhe von 10mm und eine Breite von 9mm. Das Vierkantrohr hat eine Wandstärke von 1mm und ist außen 10x10mm.
Aneinander befestigt werden die einzelnen Teile durchgängig mit M4-Muttern, M4x16mm Zylinderschrauben und M4-Unterlegscheiben.
Die STL-Dateien habe ich auf thingiverse hochgeladen.


Z-Achsen-Endschalter und PEI Druckplatte

Vor zwei/drei Tagen hatte sich offenbar die Auslöseschraube für den Z-Achsen-Endschalter verstellt. Dies hat sich darin geäußert, dass die erste Ebene verschmiert gedruckt wurde und die Düse beim Druck der zweiten Ebene das zuvor gedruckte Filament auf der Glasplatte verschoben hat. Um sowas zukünftig zu vermeiden, habe ich erstmal die Auslöseschraube mit der Feder von einem (ohnehin nicht mehr funktionierenden) Kugelschreiber frisiert:
frisierter Z-Achsen-Endschalter
Dadurch ist nun konstant Spannung auf dem Gewinde der Schraube...was verhindern sollte, dass sich die Schraube verstellt, obwohl das gesamte Konstrukt bei jedem Druck ordentlich durchgegerüttelt wird.

Weil ich den Z-Anschlag nun eh neu justieren musste, habe ich vorab gleich noch die frisch gekaufte PEI-Druckplatte auf einer der Glasscheiben verklebt. Als Anleitung hat mir dieses Video gedient. Die 13€ für das Stückchen Kunststoff haben sich durchaus gelohnt. Die Druckobjekte haften hervorragend, wenn das Bett 55°C warm ist und lassen sich gleichzeitig gut lösen, nachdem das Bett etwas abgekühlt ist.
Leider kann ich jetzt nicht mehr so einfach zwischen den zwei Glasplatten wechseln - also die neue Platte schon für den nächsten Druck vorheizen, wärend die andere Glasplatte noch abkühlt und damit das letzte Druckobjekt freigibt. Vielleicht werde ich mir demnächst einfach ein zweites PEI-Stück bestellen.


kugelgelagerte Filament-Rollen-Halterung

Gestern habe ich mir Kugellager (vom Typ 626-2Z) gekauft und dafür eine Filament-Rollen-Halterung entworfen. Das erschien mir sinnvoll und nötig, weil ich häufiger mal den Eindruck hatte, dass der Filament-Fluss gleichmäßiger war, nachdem ich durch regelmäßiges von-Hand-drehen der Filament-Rolle die Spannung vom Filament-Strang genommen habe.
Zwecks Test der Wirksamkeit wurde dann noch ein weinender Engel in attack-pose gedruckt. Das fünfte Exemplar. Und das am besten gelungene.
Sicherlich hat das nicht nur an der neuen Filament-Rollen-Halterung gelegen. Hauptsächlich wird es an der Konfiguration des Slichers gelegen haben.
Mittlerweile habe ich nämlich auch den Slicher gewechselt. Bisher war das die CuraEngine, die beim Repetier-Host dabei ist.


Cura v14.12.1

Jetzt nutze ich den Repetier-Host nicht mehr und habe Cura als eigene Anwendung installiert. Das hier:
    Cura-Engine-14.12.1-4.1.x86_64
    Cura-14.12.1-5.1.noarch
Allerdings kam es damit zu einem neuen Problem.
Im Repetier-Host gab es ein Setting "Z-Axis Feed", mit dem die Geschwindigkeit des Z-Achsen-Motors limitiert werden konnte.
In Cura gibt es diese Einstellung derzeit nicht - und wird es wohl auch nie geben.
Jedenfalls hat das den Effekt, dass der Z-Achsen-Motor zu schnell angesteuert wird, es nicht schafft und sich schlicht gar nicht bewegt.
Zunächst hatte es geholfen, das Kommando M203 Z5 in den Start-GCode aufzunehmen. Wie jedoch schon bei der CuraEngine vom Repetier-Host und dem M204-Kommando war der positive Effekt nicht von Dauer. Warum auch immer.....
Kurzum habe ich mein postscript4slicher.py entsprechend erweitert:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys

lf=chr(10)

with open(sys.argv[1], "r") as file:
lns=file.readlines()
print len(lns)
lnm=""
with open(sys.argv[1], "w") as file:
file.write("; modified by postSlicher.py"+lf)
for ln in lns:
if ln.startswith("M106"):
wrds=ln.split()
if len(wrds)>1:
for i in range(len(wrds)):
if wrds[i].startswith("S"):
spd=int(wrds[i][1:])
if spd<50: # mind. auf 20%
ln="M106 S50"+lf
if spd<100: # Anlauf-Puls zufügen
file.write("M106 S255"+lf)
lnm=ln
ln=""
break
if ln.startswith("G0"): # non-extrusion movement
if ln.find("Z")>=0:
ln1=""
ln2=""
wrds=ln.split()
for i in range(len(wrds)):
if wrds[i].startswith("Z"):
ln2="G0 F150 "+wrds[i]+lf
else:
ln1+=" "+wrds[i]
ln=ln1.strip()+lf+ln2
if ln!="":
file.write(ln)
if lnm!="" and ln.startswith("G"):
file.write(lnm)
lnm=""
Das Zeichen für NewLine ist übrigends chr(10) und nicht chr(13) - wie ich es bei der vorigen Version noch hatte. Es hat einige Fehldrucke gekostet, bis ich diesen Fehler gefunden hatte. Schließlich diente die Änderung am Script dem Zweck, den Z-Achsen-Motor mit einer funktionierenden Geschwindigkeit anzusteuern. Wenn dann aber genau dieser Motor nicht richtig angesteuert wird, weil das Controller-Board veränderte Befehle wegen eines falschen NewLine-Zeichens nicht versteht, sucht man natürlich erstmal an der ganz falschen Stelle..... Darauf gekommen bin ich nur, weil meine modifizierten GCode-Dateien im Repetier-Server immer mit "Layers=1" angezeigt wurden, die nicht-modifizierten Versionen aber mit der korrekten Layer-Anzahl. Nach dieser Feststellung kam dann wxHexEditor zum Einsatz und hat die Ursache für das Problem ganz schnell ans Tageslicht gebracht.

Vom Script werden nun zusätzlich alle mit "G0" beginnenden Zeilen untersucht, ob in ihnen ein "Z"-Parameter vorkommt.
Also etwa:
    G0 F4200 X87.665 Y85.515 Z0.350
Eine solche Zeile wird vom Script in zwei Zeilen aufgeteilt:
    G0 F4200 X87.665 Y85.515
    G0 F150 Z0.350

Auf diese Weise werden zunächst nur X- und Y-Position mit der vorgesehenen Geschwindigkeit angefahren - die Z-Position nachträglich mit sehr viel geringerer Geschwindigkeit.

Weil mir bisher nicht bekannt ist, wo und wie ich Post-Scripts in Cura festlege, habe ich auch die Parameter meines Scripts geändert. Es wird jetzt nur noch ein Parameter angenommen. Das ist der Dateiname der GCode-Datei. Diese Datei wird vom Script mit der geänderten Version überschrieben.
Auf dem Desktop meiner VM habe ich einen postslicher-Starter, der folgende Befehlszeile enthält:
    python /home/dede/bin/postSlicher.py %F
Durch den "%F"-Parameter kann ich eine GCode-Datei einfach auf diesem Starter fallenlassen, damit sie korrigiert wird.

Hier gibts was, dem ich bei Gelegenheit mal nachgehen sollte.
Und hier gibt es Doku zu Cura.


zurück zum Prittstift

Von der PEI-Druckplatte bin ich wieder abgekommen. Wahrscheinlich bin ich zu ungeduldig für einen Drucktisch mit Plastik-Oberfläche. Mittlerweile ist die PEI-Platte im Zentrum nämlich deutlich zerkratzt, weil ich die Druckobjekte häufiger mal von der Platte runter bekommen wollte, bevor alles hinreichend abgekühlt war. Daher hatte ich mit der Klinge eines Teppichmessers nachgeholfen.
Als Folge verhält sich die PEI-Druckplatte bezüglich Druckobjekt-Ablösbarkeit jetzt eher so, wie mein erster Versuch mit Prittstift-Kleber - als ich viel zu viel Kleber verwendet hatte und schweres Gerät zum Ablösen einsetzen musste.
Was jetzt mehrmals gut geklappt hat, war wenig, gut verschmierter Prittstift-Kleber auf der Glasplatte. Dazu habe ich auf die saubere Glasplatte mit dem Prittstift ein Z geschrieben und anschließend den Kleber mit einem angefeuchteten Geschirrtuch (aus Leinen) gleichmäßig auf der Glasplatte verteilt.

Gestern ist meine Messuhr-Halterung erstmalig zum Einsatz gekommen. Auslöser für die erneute Justage des Drucktisches waren Fehldrucke, die immer im rechten unteren Eck des Tisches aufgetreten sind. Die Messung hat ergeben, dass der Tisch dort zwei Zehntel tiefer als der Rest war.
Jetzt habe ich über den gesamten Tisch maximal drei Hundertstel Abweichung. Mal sehen, wie lange das so bleibt....
Vielleicht werde ich die Justage-Vorrichtung vom Tisch demnächst mit einer Federung versehen. Schließlich wird es auch zukünftig immer wieder vorkommen, dass sich auf -bzw. unter- der Druckdüse erkaltetes Filament befindet und die Funktion "Z-Achse auf Home" gewählt wird. Je nach Größe des Filament-Tropfens drückt der Extruder den Tisch in so einem Fall mehr oder weniger tief nach unten.


Heizbett-Upgrade zwecks Druck von ABS

Neulich habe ich mir folgendes bestellt: ein Anycubic Ultrabase Heizbett, eine Packung mit zehn Federn, einen MOSFET-Regler und ein ATX-Netzteil. Je einen Satz M3-, M4- und M5-Schrauben hatte ich mir davor schon mal bestellt gehabt.
Nach der Lieferung habe ich mir beim lokalen Bauhaus noch 10x10'er Vierkantrohr und 10x13.2'er U-Profil besorgt, weil die Befestigungslöcher des neuen Heizbetts deutlich weiter außen liegen, als sie es beim alten Heizbett taten.

Von dem Vierkantrohr habe ich dann zwei 220mm lange Stücke abgesägt und unterhalb der Heizbett-Basis angeschraubt.
Zwei weitere Stücke Vierkantrohr (240mm) wurden um 90° gedreht daran festgeschraubt und jeweils ein Stück U-Profil (240mm) mit einer M5x40-Schraube und Feder darüber angebracht. Das Heizbett ist am U-Profil befestigt.
K8200 mit Anycubic Ultrabase - Foto1   K8200 mit Anycubic Ultrabase - Foto2

Damit ist das Heizbett nun gefedert und verstellbar (bzw. justierbar) mit dem XY-Tisch verbunden. Dessen Ausrichtung war dank meiner Messuhr-Halterung schnell erledigt. Auf der Z-Achse musste ich den Drucker von 200mm auf 190mm verkleinern.
Das Heizbett wird nicht mehr direkt vom Controller-Board angesteuert. Stattdessen sitzt der MOSFET-Regler dazwischen und die 12V kommen aus dem ATX-Netzteil.

Bisher hat das Aufheizen von 20°C auf 55°C gefühlte 10 bis 15 Minuten gedauert. Mit dem neuen Heizbett und dem ATX-Netzteil dauert es gefühlte 30 Sekunden.
Okay...mit der Glasplatte auf dem Heizbett dauert es dann doch knapp zwei Minuten....aber jedenfalls ist die Wartezeit jetzt sehr viel erträglicher.
Die spezifizierten 120°C erreicht das Heizbett [bei mir] allerdings nicht. Selbst 100°C hat schon sehr lange gedauert. Ab 102°C hatte ich keine Lust mehr, länger zu warten. Vielleicht müsste ich den Drucker in ein wärmegedämmtes Gehäuse einbauen, um die 120°C irgendwann tatsächlich erreichen zu können...

Erste Erkenntnis zu ABS: die Adhäsion von ABS ist bei 95°C und dem neuen Bett deutlich besser, als bei 60°C und der Glasplatte mit Prittstift-Kleber. Einen weinenden Engel konnte ich mit 240°C / 95°C erfolgreich drucken - erfolgreich jedoch nur bezüglich Adhäsion.
Bei 240°C ist das Filament zwar schön flüssig, dafür gibt es bei dieser Temperatur Probleme mit der Extraktion nach einer Retraktion - will heißen: beim Wiederansetzen wird nicht sofort genug Filament extrudiert. Hier gibts einen ganzen Schwung möglicher Gründe für solches Verhalten.
Drucke ich ABS mit 210°C, ist das Zeug offenbar zu zähflüssig - jedenfalls wird das Druckobjekt bei dieser Temperatur nach Erreichen einer gewissen Höhe vom Heizbett gerissen.
Kurzum: bisher habe ich ABS noch nicht im Griff.....
Aber: .... allein wegen der ungleich besseren Aufheizzeit für PLA hat sich der Umbau schon gelohnt.

...weiter zu Seite 3.