I am building a new type of tool for paste extruder 3D printers with the help of some of my students. We are calling it a “screed tool” and it’s job is to position a shaping tool next to the paste as it extrudes. The idea is to be able to create different texture and not be stuck with the rough layered look that we usually get with this type of printer. Here are some examples of our prints without the screed tool:
I have connected this to driver7 port on my octopus 1.1 board and used the following configuration to add this motor as an additional axis to my printer.cfg:
Now I am able to test that the wiring is correct by running the following command and the screed tool happily buzzes around:
STEPPER_BUZZ STEPPER=stepper_c1
Please note that this is a delta printer and the rest of the motors are defined as stepper_a, stepper_b, and stepper_c so I made an assumption that stepper_c1 should be the next one.
In grasshopper I am able to use a little bit of trigonometry to generate GCode for this tool or 4th axis so that at any given point it remains tangent to the current printing path. Here is a snippet of the GCode:
However, it seems that axis A is not working or at least the motor is not responding. What is more interesting is that when I move other axis such as Z without giving any command to A, the screen motor is turning.
Could anyone shed some light on this issue? Is the configuration of the tool as an additional axis such as stepper_c1 a good path to take? If so, how should I reference this new axis from gcode?
Any other advice or suggestion is much appreciated.
I don’t know how you’re going to define that in Gcode though, I mean I know you can with macros but as for legit slicing and working with things I’m not sure.
This is kind of a unique situation, maybe someone else has tackled something similar.
@TheFuzzyGiggler thanks for the tip. I finally got a chance to update the configuration and now I am able to move the screed tool independently using commands. But as you hinted, now the challenge is how to execute this from GCode ideally using a G1 command.
After enabling the screed and setting it’s current position to 0 I can then send a command to move it, for example:
MANUAL_STEPPER STEPPER=screed MOVE=10
However, this movement in GCode needs to happen at the same time a print head movement happens which is using a command such as G1 X+10 Y+10 F6000.
Can anyone make some suggestions at what I could try next to a get a bit closer to my goal. To summarize I need to move the screed tool independently but at the same time as the other 3 axis from GCode.
Can you define the stepper under the [extruder] section? As in, just use your stepper setup just define the pins in the extruder section and it should work like any other 3d printer after that?
But I was not sure how to test this newly created extruder called screed using GCode. I then linked this to the main extruder just to see what happens:
And now when I issue an extrusion GCode such as G1 E100 F19500 I see my screed tool also moving along.
My question is how can I control this using GCode? Do I need to define some macros? Is there a way right now to command this tool to move, ideally using a G1 command in GCode?
It is important to note the position of this tool will depend on the tangent line of the curve that is being followed and in no way it is linked to the amount of extrusion. So while it is interesting to see it move when extruding, the goal here is to position the tool based on direction of X and Y plane movements.
I’d then see if you could use a regular 3d printer slicer to create and slice the designs and feed the results straight into your printer.
Of course you’d have to play with the settings, you’d need a very slow print speed and a very high layer height and all that. But that’s not hard to mess with by trial and error.
I’m sure other things would come up but that SHOULD get you 99% there I would thing. Cause fundamentally, what’s the difference between shoving hot thermoplastic out of a nozzle and shoving something out of a plunger and tip?
@TheFuzzyGiggler thanks for the quick response and your help so far.
Maybe I did not explain well before but that is not the issue at all. The two extruder motors are working just fine and I have had many successful ceramic 3D prints with this printer so far. I am trying to get the screed tool to work which is an additional independent motor that I am hoping to control using a G1 command. Here are some pictures that should help understand my setup a bit better:
My question is how do I control this extra tool, be it defined as an extruder or not, using a G1 or other GCode commands so movement of the tool can happen at the same time as X and Y axis movements.
Interesting project. I have the same problem like Nick. I don’t understand the whole process.
edit: Sorry forgot to mention my answer. I’m not aware that Klipper can fulfill your needs (see quote). Maybe some of the Klipper cracks may give an input.
Good luck, hcet14
PS: I would change the two hoses. They look way too stiff.
I think the stiffness of the hoses is most problematic. Next question would be, how much weights the “extruder unit”. Is a delta printer the right start for that project?
This is not a problem at all. As I mentioned previously I am getting lots of great prints with this 3D printer. We also have a commercial ceramic 3D printer at our lab and this one that I built works just as well. And yes the delta has been an excellent platform for this.
I take that as a complement :). Yes this sturdy setup was the result of a project I did with my students to improve cleaning and changing out materials. Unlike plastic printers, switching material in a ceramic 3D printer is a messy process. You should see the 3" camlocks that are attached on both end of the plunger cylinder that is sitting on top. So far I am loving the use of camlocks, they make switching and refilling much easier than any other ceramic printer I have seen.
Thanks for your interest and help so far. Ok I’ll try to do a better job of explaining. I chose the name screed because it is a common tool used for applying texture (usually smoothe) to concrete:
Large scale 3D printers used for printing homes often have rotating nozzles and can have static “screed” tools attached to the side of the nozzle and that can help shape and stabilize the material as it flows out and gives a move smooth texture. Here is a good video that shows this process in a research lab:
My goal is to create an open source tool for ceramic 3D printers that can be used to further research in this particular area. At first glance it may not seem a big problem when you are printing a small cup. You can pickup a sponge and smooth the surface, but if you are 3D printing a multi-million $ home every bit of improvement in how the material is laid out will make a huge difference. I want to use my ceramic 3D printer to do research in this area.
So as you see in the video with the rotating nozzle head the goal is to keep the tools attached to the side of the nozzle tangent to the direction of the movement in XY plane. I have already made a grasshopper definition that can calculate the tangent value and can create the proper gcode. The problem I have is this:
How can I control this additional tool, which currently uses only 1 stepper motor, from GCode. Ideal solution would be to use a G1 command so that I could move this extra motor at the same time as the XY movement. However, if that is not possible, I could send a separate GCode for moving the tool and although the movement wont happen synchronously, it should be close enough that I could test the concept.
Does that help clarify what I am trying to achieve?
PS: Please don’t tell me Klipper is not the right tool for this. It is an open source project. If I have to get into the code and write a new kinematic for my printer I will do it eventually. I was just hoping for a straightforward solution because I imagine there must be many other scenarios that one would need to control additional stepper motors during print.
Some people ask for help doing wild things that are totally not feasible using Klipper, but I don’t think this is really one of them. Really, you are 3D printing using a delta printer so I don’t think this is anything wild.
Possibly the easiest solution would be, why don’t you use a flanged outlet for where you’re extruding?
The bottom face of the flange would always screed the top of your layer no matter which direction you went.
I could be missing something obvious there, you definitely won’t offend me by pointing out any glaring issues, I’m mostly spit-balling ideas before delving into the harder things like rewriting kinematics.
I got it working! I had to write a small macro but the key was the use of SYNC=0 to allow the movement of my screed tool happen at the same time as the XYZ movement with G1 command.
I am trying to give texture to the side walls not the top of the material. The tool needs to be able to reach previous layer
I’ll try to print get some clay running with this rool attached and I’ll post a video. I need to first update my grasshopper script and tune a few things, but I am almost there!
Not quite, as to screed the extruded whatever it is the screed tool needs to be essentially tangential to the extrusion. Or at the very least directly in line with it.
Using another axis would be if it wasn’t related to the existing movements.
I agree with cad435. From the GCODE it seems that this is what OP wants as well:
@arasbm as other might have pointed out already, stepper_c1 is not the way to add an extra axis to the machine. That syntax defines an extra C stepper, in sync with the main C stepper.
Using a manual stepper with sync=0 will probably work in appearance, but as the option implies, it is executed out of sync with the other movements. Your GCODE sample implies you wanted a proper axis, in sync with the rest.
If the loose coordination of sync=0 works for you, then great, you get independent acceleration control with it. Otherwise you’ll need a proper A axis, and for that you have two choices:
Use a Klipper fork (and know its limitations).
Use a Duet board with its nice web UI.
I’d go with option 2. I see no benefit to sticking to klipper just for this application.