Beiträge von felixna

    Als kleine Fingerübung und damit keine Tiere in den Abluftschlauch fallen, habe ich es mal um ein Gitter ergänzt, dazu einfach diese Sektion eingefügt:

    Code
        # hexagon grid
        apothema = 5.0
        with BuildSketch() as grid_sk:
            Circle(radius=pipe_dia/2)
            with HexLocations(apothema, 11, 10):
                RegularPolygon(apothema, 6, mode=Mode.SUBTRACT)
        extrude(amount=wall_thickness)

    Ergebnis:


    (Code und STEP Datei im angehängten ZIP)

    Ich habe DietPi bisher nur auf den kleinen Wyse4 3040 benutzt (dort ohne Probleme), weil dieser nur 8GB Flash hat. Der "große" 5070 hat eine SSD mit mindestens 128 GB, da brauche ich kein abgespecktes DietPi. Alles von Proxmox über Debian, Arch und Fedora lief bei mir ohne Probleme... Es kann durchaus sein, dass es hier ein Problem mit DietPi gibt...

    Hier in dem Beispiel weicht y Achse zb zur x Achse im Würfel um 1/10 ab und Z Achse das kennt man liegt im Schnitt bei 0.12 drüber das finde ich persönlich korrektionswürdig

    Der Fehler setzt sich aber mehr aus Flow, Wobble, Materialschrumpfung und solchen Sachen zusammen als durch falsche X- oder Y-Steps!


    Wenn Du tatsächlich X- und Y korrigieren willst, dann würde ich eine möglichst lange Strecke drucken oder abfahren, damit die Fehler, die durch Über- oder Unterextraktion, Wobble o.ä. in die Messung einfließen im Verhältnis möglichst klein sind. Bei einem 20mm Würfel sind 0,12mm Abweichung durch solche Effekte schon 0,6% - wenn Du ein 200mm Objekt druckst, macht die selbe Abweichung nur noch 0,06% aus, also musst Du das an möglichst großen Objekten messen.


    Die X- und Y-Steps sind nur von der Mechanik abhängig, also welche Motoren, Pulleys usw. du verbaut hast. Wenn Du Motor oder Pulley nicht wechselst, gibt es da nix zu verstellen!


    Beim Extruder gilt das im Prinzip auch, allerdings hast Du da noch den Radius vom Antriebsrad und Filamente, die unterschiedlich stark eingedrückt werden usw., d.h. dort kann eine Korrektur durchaus sinnvoll sein. Aber nicht beim X- und Y oder Z.


    Das Thema wird leider viel zu oft falsch erklärt. Ich habe keinen Drucker, bei dem ich X- oder Y manuell statt rechnerisch einstellen musste.


    Die printer.cfg findest du im Web-UI von Fluidd, Du brauchst also gar nicht auf irgendwelche Kommandozeilen Befehle sondern kannst alles bequem im Web-UI machen, das geht alles im bequem im Browser. Ich hab gerade keinen Drucker mit Fluidd laufen, wenn du es nicht findest, suche einfach mal nach "fluidd edit printer.cfg" da findet sich bestimmt viele Videos wo das gezeigt wird...

    bin ich aber an meinen Testwürfeln xyz dran und nun geht es los, bei meinem Snappy mit Marlin, konnte ich das bequem über Prontaface lösen(messen, neu berechnen, eingeben, speichern, fertig)

    Was genau meinst Du damit genau? Die X- und Y-Steps sollte man i.d.R. nicht verstellen müssen. Abweichungen beim Testwürfel sind i.d.R. mehr vom Flow und anderen Faktoren abhängig, siehe z.B. hier:


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Davon abgesehen ist es mit Klipper grundsätzlich so, dass alle Einstellungen in der printer.cfg stehen, die Du von Fluidd oder Mainsail aus direkt im Web-Browser bearbeiten kannst.

    Am liebsten würde ich den Wyse 5070 mit Gewalt in die Ecke pfeffern oder/und mit Amboss Hammer bearbeiten........

    Tut mir leid, dass Du mit dem Wyse nicht zufrieden bist! Ich bin nach wie vor sehr angetan von dem Gerät, da ich keine nennenswerten Probleme damit habe und das Preis/Performance/Energieverbrauch Verhältnis sensationell finde. Ich bin allerdings auch mit Linux/Unix groß geworden und Windows kommt mir nur wiederwillig auf meine Geräte...

    Mal die Mechanik sauber gemacht und geschaut, ob noch alles geschmiert ist bzw. bei den Carbon-Stangen mit Alkohol?


    Dann die Riemenspanner auf der Rückseite mal gelöst und wieder festgeschraubt?


    Hier sind die Sachen gut erklärt:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Bambu Lab P1 series printer Maintenance Recommendation

    Hast du zweimal hintereinander den Befehl versucht? In Klipper war lange Zeit ein Bug, der beim ersten Zugriff so einen Fehler brachte, ab dem zweiten Mal geht's dann...


    Edith: sorry, glaub der Bug war nur auf RPi Nano, direkt angeschlossen an GPIO ging schon

    Ist jetzt Filamenttrocknung BambuLab Smalltalk?

    Da es auch Bambu noch nicht geschafft hat Drucker zu bauen, die das Filament auf dem Weg von der Spule zum Druckkopf trocknen, würde ich sagen: ja.


    Solange es dann nicht ausartet und z.B. die konstruktiven Details von Trockner X vs Trockner Y seitenlang besprochen werden, kann sowas m.M.n. Smalltalk-Thread.


    Ich gebe einfach keine technischen Antworten in einem Smalltalk.

    Das ist schade, denn in gewisser Weise verstehe ich diesen Thread auch als Ort, in dem man kurze "Frage/Antwort" Dialoge führt. Das ein technisches Thema hier nicht bis zum Exzess ausdiskutiert werden sollte und dann in einem separaten Thread gehört, verstehe ich natürlich auch.

    Wobei es hier ja noch Gottseidank noch sehr gesittet zugeht!

    Das ist in der Tat ein Merkmal dieses Forums das ich sehr schätze und ich hoffe es bleibt auch so!

    Nachdem unser Wäschetrockner umgezogen ist, war der Anschluss für den Abluftschlauch nicht mehr passend. Ich habe also einen neuen Schlauch bestellt, aber leider vergessen, dass ich auch eine Wanddurchführung brauche... freundlicherweise hat Amazon eine bemaßte Zeichnung in ihrem Angebot [Werbung**], daher konnte konnte ich diese einfach übernehmen:

    Es folgt eine kurze Erklärung des build123d Codes, sozusagen als Fortsetzung meines Einführungs-Tutorials.


    Nach dem Import der Bibliotheken habe ich zunächst, wie üblich, die wichtigsten Maße im Code als Variablen angelegt, damit ich sie weiter unten verwenden kann:


    Code
    pipe_dia = 99.0
    wall_thickness = 2.5
    pipe_height = 67.0
    flange_dia = 128.0
    holes_dia = 119.0
    hole_dia = 4.6


    Jetzt kommt das eigentliche Rohr mit zwei Kreisen und wird um die Höhe pipe_height extrudiert:


    Code
    with BuildPart() as wall_flange:
        with BuildSketch():
            Circle(pipe_dia/2)
            Circle(pipe_dia/2 - wall_thickness, mode=Mode.SUBTRACT)
        extrude(amount=pipe_height)

    Der Flansch wird genauso erstellt, nur mit anderen Maßen:

    Code
     with BuildSketch():
     Circle(flange_dia/2)
     Circle(pipe_dia/2, mode=Mode.SUBTRACT)
     extrude(amount=wall_thickness)

    Jetzt möchte ich eine kleine Phase am Übergang vom Flansch zum Rohr, damit der Druck stabiler wird. Ich suche mir also aus allen Kanten diejenigen heraus, die auf der Höhe der Flansch-Dicke liegen und selektiere die erste (das ist die innere Kreisförmige Kante). Daran wird dann eine Phase mit Radius 1.0 mm gemacht:

    Code
     edge = wall_flange.edges().filter_by_position(axis=Axis.Z, minimum=wall_thickness-1, maximum=wall_thickness+1)[0]
     fillet(objects=edge, radius=1.0)

    Jetzt fehlen nur noch die vier Löcher. Die Position aller vier Löcher kann man sich über Polarkoordinaten (PolarLocations) geben lassen, zeichnet jeweils einen Kreis und extrudiert diesen in Wandhöhe im SUBTRACT Modus:

    Code
     with BuildSketch():
     with PolarLocations(holes_dia/2, 4):
     Circle(hole_dia/2)
     extrude(amount=2*wall_thickness, mode=Mode.SUBTRACT)

    Das war's schon. Jetzt noch anzeigen und als STEP Datei ausgeben und schon kann gedruckt werden:

    Code
    show_object(wall_flange)
    wall_flange.part.export_step("wall_flange.step")

    So sieht das Ergebnis auf dem Bildschirm und in Echt aus:


    Für solche Dinge finde ich 3D-Druck einfach genial!


    Der gesamte Quellcode und die STEP-Datei ist im Anhang, vielleicht kann es ja jemand brauchen...


    PS: Demnächst mache ich noch Griffe für das Brett, damit ich es leichter wieder aushängen kann, wenn gelüftet werden muss...

    Hatte ich im Auge. Bauraum hatte angenehme 36Grad

    Das ist für PLA aber schon ganz schön viel, da wundert mich eine Verstopfung nicht... Ich bin bei ABS froh, wenn ich das im Inneren des P1S hin kriege (bei mir hat es aber auch nur 14 Grad im Keller wo der Drucker steht)

    Hey Magnetron , Danke für Dein Feedback!


    Ich bin auch kein Freund von Python und hatte damit bisher auch relativ wenig zu tun. Aber es lässt sich nicht abstreiten, dass Python eine sehr populäre Sprache ist, der man recht häufig begegnet. Was mich am meisten stört ist, dass es eine dynamisch typisierte Programmersprache ist und einige Dinge etwas "seltsam" angeht. Nicht nur die Syntax mit dem Einrücken, sondern z.B. auch den Scope von Variablen (da scheint es keinen Block-Scope zu geben sondern nur zwei Ebenen) oder die Art und Weise, wie die Elemente der funktionalen Programmierung oder Objektorientierung umgesetzt sind, finde ich mindestens ungewohnt bzw. wirken "angeflanscht" und wenig regulär. Python kommt aus der Ecke von imperativen Skriptsprachen und das merkt man schon sehr deutlich. Gerade was funktionale Programmierung angeht, von der ich ein großer Fan bin, hat OpenSCAD dem Python einiges voraus.


    Meine Motivation build123d zu lernen ist vor allem, dass ich es ausprobieren und näher kennenlernen will. Der "Anspruch an das eigene Kopfkino" von einer Sache verschwindet ja i.d.R. sehr schnell, wenn man sich darauf einlässt und ein wenig mehr Übung hat. Ich lese schon eine Weile im Discord mit und wenn ich sehe, wie elegant dort teilweise recht komplexe Geometrien codiert werden (für die man sich in OpenSCAD sehr schwer tun würde), wird mit bewusst, dass ich erst am Anfang stehe. Ich weiß noch nicht, wie weit ich mit Build123d komme und ob ich auf Dauer dabei bleibe, aber ein bisschen mehr einarbeiten will ich mich schon noch, damit mir die Dinge schneller von der Hand gehen und ich nicht für jeden zweiten Schritt in der Doku nachschauen muss. Ich bin mit Mitte 50 auch schon in einem Alter, in dem man nicht mehr so leicht neue Dinge lernt, aber es hält einen geistig flexibel, wenn man es trotzdem tut ;) Und vom CAD-Aspekt abgesehen, ist es sicher auch kein Schaden für mich, wenn ich ein bisschen Python mitnehme, schließlich begegnet man der Sprache an vielen Stellen...

    Ich hab ein kleines Tutorial für den Einstieg in build123d getippt, vielleicht interessiert es jemand?


    Ich hab SUNLU Meta PLA noch nicht im Bambu P1S gedruckt, aber in meinem Any i3 Mega S, dem ich ein Bambu Hotend (bzw. den China-CHT-Nozzle Clone) verpasst habe. Ich war wirklich baff, mit welch geringen Temperaturen es ohne Probleme bis fast 28 mm³/s sich sauber drucken hat lassen. Aber unter 200 Grad habe ich mich dann doch nicht getraut, d.h. ich bin bei 200 Grad geblieben und gute Ergebnisse erzielt.

    Der Vollständigkeit halber sei erwähnt, dass build123d Programme in zwei verschiednen Stilrichtungen geschrieben werden können. Dem gezeigten Builder-Stil (der vermutlich Anfängerfreundlicher ist) und dem Algebra-Stil (der am Anfang etwas verwirrend ist, aber vielen deutlich logischer vorkommt und i.d.R. kürzeren Code erlaubt).


    Build123d ist sehr mächtig, aber auch noch in sehr aktiver Entwicklung und man findet in Deuscher Sprache recht wenig Hilfestellung. Meine persönliche Motivation und Hoffnung ist, dass ich mich damit wieder ein wenig aus der Abhängigkeit von kommerziellen CAD-Programmen (Onshape) befreie, da es komplett Open-Source ist.


    Im Vergleich zu dem von mir auch lange Zeit genutzten OpenSCAD gefallen mir einige Dinge sehr gut, bei anderen sehe ich auch Nachteile.


    Aus meiner Sicht sind Vorteile:


    - eine verbreitete Universal Programmiersrpache (Python) als Grundlage incl. Zugriff auf das gesamte Ökosystem / Entwicklungstools

    - arbeitsweise näher an klassischen CAD Programmen als OpenSCAD

    - einfaches Anbringen von Rundungen / Phasen an Kanten

    - keine "doppelte Buchführung" im Code, da man sich auf bereits erstellte Geometrien beziehen kann und nicht ausschließlich neu

    - Export in verschiedenen Formaten


    Die Nachteile:


    - Build123d ist noch verhältnismäßig jung und wird schnell weiter entwickelt (noch keine 1.0 Version)

    - die Installation ist deutlich umständlicher

    - eine spezialisierte Sprache wie bei OpenSCAD ist bei manchen Dingen schöner / kürzer (z.B. Debugging mit # / % / !)


    Ich hoffe das war jetzt für den ein- oder anderen hilfreich oder wenigstens interessant. Wenn dem so ist, bitte gerne einen Like und/oder Kommentar hier lassen, dann kann ich sowas vielleicht öfters machen (hier wurde ja nur an der Oberfläche gekratzt und nicht sehr breit erklärt...)

    Jetzt fehlen natürlich noch die Löcher in der Box. Dies macht man wie bei einem klassischem CAD, indem man auf der oberen Fläche eine Skizze mit den Löchern anbringt und diese dann nach unten bohrt. Als erstes müssen wir also die obere Fläche ermitteln. Das machen wir, indem wir alle Flächen der Box nach Z-Achse sortieren und uns die letzte geben lassen:

    Code: holder.py
        # select top face plane
        top_face = holder.faces().sort_by(Axis.Z).last

    Jetzt legen wir eine Skizze an. Praktischerweise gibt es für gitterförmige Anordnung von Objekten das GridLocations Objekt, dem man nur die Abstände und Anzahl als Parameter einer Matrixförmigen Verteilung mitgibt. An diesen Stellen zeichnen wir einen Kreis. Sieht dann so aus:

    Code: holder.py
        with BuildSketch(top_face) as holes_sketch:
            with GridLocations(hole_dist, hole_dist, holes_in_a_row, row_count) as loc:
                Circle(radius=hole_diam/2.0)

    Dadurch, dass wir top_face als Parameter an BuildSketch übergeben, wird die Skizze zentriert auf dieser Fläche angelegt. Zentriert ist Standard, man kann auch links- oder rechtsbündig machen (bzw. oben/unten). Aber hier passt zentriert gut.


    Die Skizze muss jetzt noch nach unten extrudieren, also kommt noch diese Zeile dazu (und zwar eingerückt in Höhe des with BuildSketch:

    Code: holder.py
        extrude(amount=-hole_depth, mode=Mode.SUBTRACT)

    Zwischendruch kann man das Python Programm mal ausführen (Alt-R), das Sieht doch schon ganz gut aus, oder?



    Und jetzt kommt etwas, was ich bei OpenSCAD immer schmerzlich vermisst habe: ich will bestehende Kanten abrunden oder mit einer Phase versehen. In dem Fall will ich die vier äußeren Ecken mit einem 5mm Radius versehen. Dazu gibt es die fillet-Funktion, der ich die abzurundenden Kanten und den Radius als Argument übergebe. Die Kanten kann ich am einfachsten selektieren, indem ich von allen Kanten diejenigen selektiere, die in Z-Richtung verlaufen (holder.edges().filter_by(Axis.Z)), das sind dann die äußeren Kanten. Der Radius soll 5 mm sein. Also:

    Code
         fillet(holder.edges().filter_by(Axis.Z), 5.0)

    Schon sind die Kanten abgerundet:



    Jetzt noch sämtliche anderen Kanten mit einer 1,0 mm Phase versehen, dazu kann ich einfach die chamfer Funktion benutzen, die genauso wie fillet eine Menge von Kanten und eine (oder zwei) Maße für die Phase bekommt:

    Code
        chamfer(holder.edges(), 1.0)


    Wenn ich jetzt nicht möchte, dass die Phase an den unteren Kanten der Löcher kommt, kann ich z.B. alle Kanten in Z-Richtung Gruppieren lassen und dann nur die erste ([0]) und letzte ([-1]) Gruppe von Kanten mit einer Plase versehen:

    Code
        chamfer(holder.edges().group_by(Axis.Z)[-1], 1.0)
        chamfer(holder.edges().group_by(Axis.Z)[0], 1.0)

    Das sieht doch schon ganz gut druckbar aus!


    Damit ich es drucken kann, muss ich es ja noch als STL oder STEP-Datei ausgeben. Da die meisten Slicer heute STEP beherrschen, lasse ich es als STEP ausgeben:

    Code
    holder.part.export_step("coffee-glass-holder.step")


    (Die STEP-Datei findet sich auch im Anhang)


    Hier noch mal der komplette Code-Stand:


    Ich habe kürzlich diese Kaffeeglas-Halterung konstruiert und gedruckt:



    Die Halterung ist ein schönes kleines Projekt für build123d, einer Python basierten Code-CAD Bibliothek, mit der man sich in Vistual Studio Code eine nette Entwicklungsumgebung einrichten kann. Sieht bei mir z.B. so aus:



    Genau die Konstruktion der gezeigten Halterung will ich hier mal ein wenig kommentieren, vielleicht gibt es ja ein paar Interessenten hier, dann kann man sowas öfters machen.


    Installation


    Die Installation von build123d ist leider nicht mit dem Herunterladen eines Programmes getan, da build123d als Bibliothek für Python gedacht ist und kein Stand-Alone Programm. Am einfachsten geht es aus Visual Studio Code heraus mit der OCP CAD Viewer Extension. Das ist in der Doku der Extension beschrieben, ich fasse es hier aber auch kurz zusammen. Es sind folgende Schritte (bei mir Linux, mit Mac oder Windows sind ggf. ein paar Details anders):


    1. Virtuelle Python Umgebung für build123d einrichten: python3 -m venv build123d


    2. Visual Studio Code entweder aus der aktiven Umgebung heraus starten (oder nach dem Start von VSCode in die Python Umgebung wechseln):

    cd build123d

    source bin/activate

    code .


    3. Jetzt in VSCode die Extensions Python und OCP CAD Viewer installieren


    4. In der OCP CAD Viewer Extension auf den "Quickstart build123d" Button drücken und ggf. Nachfragen mit "yes" bestätigen:



    Jetzt kann man schon loslegen. Erst mal legt man eine neue Python-Datei an, z.B. coffee-glass-holder.py. Diese darf erst mal noch leer sein.

    Wenn man jetzt links auf das Icon der Extension () klickt, kann man die 3D-Vorschau im Viewer Manager öffnen:


    Nun ist links das Editor-Fenster mit der leeren Python Datei und rechts öffnet sich das Vorschau-Fenster mit dem OCP-Logo:



    Die Konstruktion in Python Code


    Im Python-Fenster können wir nun anfangen ein Objekt zu konstruieren. Zunächst muss man build123d und ocp_vscode Bibliotheken importieren. Dazu geht man mit dem Cursor in die Python-Datei und kann dann mit der Maus auf die Kopier-Icons vom build123d und dem OCP Viewer klicken:




    Danach sollten diese Imports in der Python-Datei stehen (falls nicht, kann man sie natürlich auch einfach so kopieren, es sind ja nur zwei Zeilen Code):

    Python: holder.py
    from ocp_vscode import show, show_object, reset_show, set_port, set_defaults, get_defaults
    set_port(3939)
    from build123d import *


    Jetzt fangen wir richtig an... Bevor wir richtigen Code zum "zeichnen" schreiben, setzen wir ein paar Werte mit Namen fest, die wir weiter unten benutzen: Durchmesser, Tiefe und Anzahl der Löcher, Abstände usw. Aus diesen Parametern berechnen wir dann noch ein paar weitere Werte, die wir für die Geometrie brauchen: den Lochabstand und die Gesamtmaße der Box (Länge, Breite, Höhe):

    Jetzt kann es mit dem "Zeichnen" losgehen. Grundsätzlich kennt build123d den Builder- und den Algebra-Modus. Zum Einsteigen ist der Builder-Mode sicher der einfachere. Im Builder-Mode gibt es in der Regel eine Hierarchie von Geometrie-Elementen aus 3D-Körpern (Part) der aus extrudierten Skizzen (Sketch) besteht, der wiederum aus Linien (Line) besteht. In Python-Code hat man dann oft diese Hierarchie im Code:


    So ist es auch uns, allerdings können wir das Zeichnen eines Rechtecks was anschließend zu einer rechteckigen Box extrudiert wird auch abkürzen und direkt eine Box erzeugen:

    Code: holder.py
    with BuildPart() as holder:
        # basic holder without holes
        Box(length=length, width=width, height=height)

    Nebenbei: in Python ist Einrückung Teil der Syntax. Ich bevorzuge es nur mit Leerzeichen einzurücken, auf keinen Fall sollte man Tabulatoren und Leerzeichen mischen, da bekommt man arge Probleme...


    Damit man die Box schon sehen kann, kommt noch einen show_object-Befehl ans Ende der Datei:


    Code: holder.py
    show_object(holder)


    Wenn man jetzt auf den Play-Button oder Alt+R drückt (Run Python File) , kann man schon die Grundform sehen



    (da jetzt die 10 Bilder aufgebraucht sind, mach ich im nächsten Post weiter)

    Die Layerhaftung ist aber nicht so mies das es schon vom Anschauen auseinander fällt oder doch?

    Nein, absolut nicht. Meine Aussage kam mehr aus allgemeinen Erfahrungen mit Silk-Filament, gerade SUNLU Silk PLA hab ich einige Teile hier, die überhaupt nicht viel aushalten. Ich empfand die Teile aus dem Bambu PLA Silk Gold sogar als relativ stabil, aber hab es nicht wirklich getestet.

    Uh das sieht schon mal gut aus und oh Wunder es ist bei Bambu verfügbar :D

    Danke dafür :thumbup:

    Ja, ich war selbst überrascht wie echt das Gold wirkt. Ich hatte echt Glück am Black Friday, da wurden nämlich zwei zufällig ausgewählte Filamente den bestellten Druckern beigelegt (solange der Vorrat reicht).


    Ist natürlich ein Silk-Filament, da ist die Layerhaftung nicht ganz so toll, aber für so Objekte wie ich damit gedruckt habe völlig in Ordnung.