Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
blog:240913_3d_schild_prozess [2024-09-12] – angelegt volker | blog:240913_3d_schild_prozess [2024-11-21] (aktuell) – volker | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
====== Process for 3D Printed Signs 🇬🇧 ====== | ====== Process for 3D Printed Signs 🇬🇧 ====== | ||
\date // | \date // | ||
+ | \note // | ||
+ | \_ | ||
+ | |||
<WRAP :en> | <WRAP :en> | ||
+ | |||
+ | So ... I want to 3D print multi-coloured signs. But my printer does not have multi-colour or multi-material capabilities, | ||
+ | |||
+ | ** The full documentation including screenshots and example files can be found at my Printables account: **\\ | ||
+ | [[https:// | ||
+ | \_ | ||
{{ : | {{ : | ||
+ | |||
+ | How does it work? | ||
+ | |||
+ | Each colour must be in its own STL file. The STLs get loaded into PrusaSlicer and then get merged into a single model. This allows us to set a Z coordinate offset for each colour -- for convenience, | ||
{{ : | {{ : | ||
+ | |||
+ | Now, we need to " | ||
+ | |||
+ | {if layer_z == 10.2} | ||
+ | M400 ; finish moves | ||
+ | G0 Z1.2 ; go back down to base plate | ||
+ | M600 ; filament change | ||
+ | G92 Z10.2 ; adjust Z position | ||
+ | {endif} | ||
+ | |||
+ | The G92 command makes the printer " | ||
+ | |||
+ | Note the //if layer_z == 10.2// does not say exactly 10 mm. This is because PrusaSlicer puts the coordinate origin of each model in the model' | ||
{{ : | {{ : | ||
+ | |||
+ | So ... that was not too hard -- we have the second colour in place. But how do we get the next colours printed without tearing through, what's already printed? By setting a sufficiently high Z hop distance! That way, travel moves will always fly over printed parts. That's also why this process only really works for flat objects ... like signs 🤓 | ||
+ | |||
+ | All we need to do is to let the model for the next colour hover even higher (say, Z=25 mm) and put more //after layer-change G-code// like this | ||
+ | |||
+ | {if layer_z == 25.4} | ||
+ | M400 | ||
+ | G0 Z10.4 | ||
+ | M600 | ||
+ | G92 Z25.4 | ||
+ | {endif} | ||
+ | |||
+ | The M400 //finish moves// command is important so that the printer clears its cached moves before going into the filament change. Otherwise, we might dunk the nozzle into already printed parts after right filament change. | ||
+ | |||
+ | More colours go on in the same way -- just load more STLs, let them hover higher and higher and put more lines of G-code. | ||
{{ : | {{ : | ||
+ | |||
+ | <WRAP caution> | ||
+ | **One word of caution:** | ||
+ | |||
+ | G92 messes with the origin of the coordinate system. Since end-stop positions are maintained in modern firmware (at least for Marlin-based including Prusa), you should not be able to crash your nozzle into the bed on subsequent prints. But I've had nozzle jams due to the nozzle remaining at Z=0 for multiple layers after printing a sign with this method. Since the origin is reset during power off, just do a hard reset or power cycle your printer after each sign printing job! | ||
+ | </ | ||
+ | |||
+ | I really enjoy making signs like that. They also make great gifts -- like the " | ||
+ | |||
+ | Thin writing needs a 0,25 mm nozzle. I use it with 0,2 mm layer height ... officially, that does not work -- but it comes out just fine. | ||
{{ : | {{ : | ||
+ | |||
+ | Here's an example with four different colours. The number of objects can be increased in PrusaSlicer, | ||
{{ : | {{ : | ||
+ | |||
+ | For me, OpenSCAD is the best tool to generate the different STLs. Simple geometries and text can be generated directly in OpenSCAD, more complicated things get imported as an SVG and then extruded accordingly. By putting each colour in a module, I generate the separate STLs by just commenting out all but the one module I want to output. | ||
+ | |||
+ | Here's all the " | ||
+ | |||
+ | myellow(); | ||
+ | mblack(); | ||
+ | mred(); | ||
+ | | ||
+ | | ||
+ | $fa = 1; | ||
+ | $fs = 0.5; | ||
+ | |||
+ | | ||
+ | module myellow(){ | ||
+ | // Base | ||
+ | color(" | ||
+ | difference(){ | ||
+ | cube([200, 100, 1.01]); | ||
+ | |||
+ | translate([9, | ||
+ | cylinder(h=3, | ||
+ | |||
+ | // ... simple, repetitive code for three more cylinders as screw holes ... | ||
+ | }; | ||
+ | }; | ||
+ | | ||
+ | | ||
+ | module mblack() { | ||
+ | // Frame | ||
+ | color(" | ||
+ | translate([3, | ||
+ | difference(){ | ||
+ | cube([194, 94, 0.8]); | ||
+ | | ||
+ | translate([1.5, | ||
+ | cube([191, 91, 1]); | ||
+ | }; | ||
+ | | ||
+ | // SVG Import | ||
+ | color(" | ||
+ | translate([8, | ||
+ | scale([0.35, | ||
+ | linear_extrude(0.8) | ||
+ | import(" | ||
+ | }; | ||
+ | | ||
+ | | ||
+ | module mred() { | ||
+ | // Text | ||
+ | sfont=" | ||
+ | color(" | ||
+ | translate([138, | ||
+ | scale([0.68, | ||
+ | linear_extrude(0.8) { | ||
+ | translate([0, | ||
+ | text(" | ||
+ | | ||
+ | translate([0, | ||
+ | text(" | ||
+ | | ||
+ | translate([0, | ||
+ | text(" | ||
+ | | ||
+ | text(" | ||
+ | } | ||
+ | }; | ||
{{ : | {{ : |