Sunday 22 April 2012

Ooze free unattended start

Normally plastic oozes from the nozzle during warm up due to thermal expansion and gravity. It is then necessary to prime the extruder by running it for a few seconds to fill up the now empty barrel. Any oozed or extruded plastic then needs to be removed, typically with tweezers, before the build can start.

This procedure is inconvenient because it means you have to stay with the machine during the warm up sequence rather than simply starting a build and letting it get on with it. I discovered a simple solution which I now use on my Mendel and Mendel90.

I remove any filament hanging from the nozzle while it is cold and then start the machine and leave it. My software moves the nozzle to the front edge of the bed and parks it 0.05mm above the surface. It then warms up the extruder and the bed. As soon as the plastic starts to ooze from the nozzle it meets the relatively cold bed and sets. That seals the nozzle and prevents and more ooze. I leave the small gap to ensure the bed does not take heat away from the nozzle.

When the bed and extruder reach their operating temperatures the software waits for two minutes to allow the nozzle to expand to its full length, otherwise I find the first layer height is inconsistent. The extruder is then run for a couple of seconds to prime it before doing a rapid move 50mm along the edge of the bed to wipe it. It then lifts to 1mm and moves to the start of the build. I always start that with a blob and an outline.

Here is a video of the sequence on my Mendel90:

So now I can start my machines and leave them to do their own thing. I use Python scripts but it should be easy to do the same thing in G code. The technique works with PLA as well as ABS shown above.


  1. Very nice, would you mind sharing your Python scripts? I assume they use printcore?

  2. Sorry, I don't use printcore, Gcode or USB, so my scripts are not relevant to any Reprap software, firmware or electronics.

    The code I inserted looks like this:

    hydra.moveto_xy((-50, -100))
    warmup(material.first_outline_temp, material.bed_temp_first, material.bed.time, filename)
    extruder.extrude(extruder.nozzle, extruder.max_rate)

    I have built my second Mendel90 with standard electronics so when I get round to configuring that I will have some gcode that does the same thing to share.

  3. Hi Nophead,
    I know this is a bit 'off-topic', but I am exasperated with my attempts to get a reliable hot end for my Mendel. I was wondering, could you publish a description of the Extruder you use and what hot end arrangement you have? I find that the PTFE insulators are forever 'oozing'.
    Thanks for a most interesting blog. I am always riveted reading it!
    Best regards.

    1. Here is mine.

      I have only ran 25 pounds or so through it, but it never oozes. If I do something stupid like run the head all the way against the table and try to print the Wades will spin out on the filament, but other than that no problems. I also once ran 25C to cold and caused the Wades to spin out. I'm very happy with the design and my next 3d printer will get the same extruder with no modifications.

  4. I have one machine with a stainless steel insulator but that needs a heatsink. The rest are all PEEK / PTFE hybrid designs. I have one J-head and that seems reliable but I haven't run it for very long and it doesn't play well with my firmware. I have another two machines with my own design that is simpler than a J-head. I will publish it soon and intend to get it manufactured.

    The PTFE needs to be totally enclosed and not a structural component. I seal my threads with silicone sealant. I also use a set screw to stop my nozzles unscrewing themselves.

    1. Thanks for that.
      I look forward, eagerly to the publication.

    2. I really look forward to seeing your design. Will you make both 1.75mm and 3mm? Any hints as to when :-).

    3. This was a long time ago now. I found that J-heads were more reliable than my own PEEK / PTFE design so I abandoned it and use J-Heads on most of my machines now.

  5. What i do for my printers is just to draw a line from x0y0z0.3 to e10 to y50e40 to e38 once the hotend has heated up (while parked 50mm above the bed) . I've played with the amount of material extruded and different y-lengths for each hotends and found a perfect value for each of them.
    My prints start completely unattended, all i need to do is pull the primer-extrusion off the bed after each print.

  6. That wouldn't work for me because the filament would tend to curl up and stick to the nozzle during the purge.

  7. Hi

    I like the general idea and I'm still experimenting with the different variables but I think that this gcode in the startup sequence would do something similar.
    G28 ; home all axes
    G1 X150 Y0 F4000 ; fast move to 3/4 of the way along the back edge
    G1 Z0.05 ; move nozzle close to bed
    M109 S235 ; heat nozzle to 235 and wait until reached
    G4 P120000 ; wait another 120 seconds for nozzle length to stabilise
    G1 E2 ; extrude 2 mm of filament
    G1 X100 F12000 ; move 50 mm along the back edge towards the origin
    G1 Z1 ; lift nozzle to 1 mm ready to begin main sequence

    Any thoughts?

  8. Many thanks nophead - a very useful tip indeed!
    On a related note, while checking the level of my bed using a DTI mounted on the X axis carriage, I noticed the entire bed 'grows' in height - by approx 0.15 mm over half an hour. The only way I can see around that problem is to either start from a cold bed or keep it hot.

    richgain, thanks for the G-code example. When I used it, my extruder behaved very erratically - sometimes reversing 2mm, other times reversing all the filament out of the extruder body!
    Here are the changes I made:
    * Added "G92 E0 ;reset extruder" near the beginning and end of the Start G-code. (To be sure, to be sure.) Extruder now behaves correctly.
    * Added "G1 Z0.3 ; move z to 0.3mm to avoid scraping bed". (Self explanatory.)
    * Changed the wiping movement from 'X150 -> X100' to 'X50 -> x10'. On a large build area, this prevents the skirt drawing over any material which might have oozed out between the end of "G1 X100 F12000" and the beginning of the skirt.
    * Changed G1 E2 to G1 E5. I found I had to extrude 5 mm to get a decent sized blob. Sometimes even now I still get none. (I'm using an Arcol hotend v3 with marlin and slic3r.)

    One more idea - in the 'End G-code' section, right before my last line "M84 ; disable motors" I inserted "G1 Z0.2 F200 ; move nozzle close to bed to stop ooze" - which seals the nozzle ready for the next print session. I use Z0.2 to accommodate the 'height growth' of my heated bed mentioned earlier.

    Here's my full Start G-Code:

    G28 ; home all axes
    G92 E0 ; reset extruder
    G1 Z0.3 ; move z to 0.3mm to avoid scraping bed
    G1 X100 Y0 F4000 ; move half way along the front edge
    G1 Z0.05 ; move nozzle close to bed
    M109 S200 ; heat nozzle to 200 degC and wait until reached
    G4 P120000 ; wait another 120 seconds for nozzle length to stabilise
    G1 E5 ; extrude 5 mm of filament
    G1 X10 F12000 ; move 50 mm towards the origin as fast as firmware permits
    G1 Z1 ; lift nozzle to 1 mm ready to begin main sequence
    G92 E0 ; reset extruder

  9. What sort of bed are you using and how is it mounted? I currently have glass, PCB and metal pillars so I would be surprised if mine grows that much.

    What is a DTI?

    Isn't going back to bed level in danger of hitting the object(s) you have just built?

    1. I'm using a Prusa PCB Heated Bed V1, + 2.5 mm window glass on a 'standard' Prusa sprung-loaded Y-Axis constructed of two pieces of 6 mm MDF. The PCB is mounted to the top MDF with screws and nuts. The glass is clipped to the PCB using foldback clips. After seeing RichRap's MendelMax, I'll upgrade to metal pillars soon.

      DTI = Dial Test Indicator - sorry. I picked up a digital one* second hand on eBay - much cheaper. (My bed's level variation over the entire surface is +/-0.03mm - hot or cold.)


      I return the nozzle Z to just off bed level outside the lateral build envelope. I do see your point, though as yet I'm not using the full build area.

  10. Yes the nozzle will be clear of the build area but the rest of the hot end and indeed the X axis itself could hit tall objects.

    I know a lot of people use MDF for a Y carriage but I found it warped with the heat and the bed would never stay level. You could try a heat shield like I use on Mendel90. That stops the Y carriage getting hot so may well stabilise your MDF.

    1. Thanks, I'll take a look at your heatshield.

  11. Sorry hairykiwi
    I tend to forget that not everyone agrees with me that relative E is the only sensible way to extrude ;)

    1. Any links where I can read up on the arguments for each? It's not something I've given any thought.

    2. Basically some people object to the fact that when using relative you might loose some accuracy due to repeated rounding, but that is just down to the host to keep track of and compensate. The difference is very small anyway. The problem with absolute is it can easily go backwards as you found out, or may overflow.

  12. Very good, I can now almost leave the printer to start and complete a job.
    But... you have to remember to remove the bit of surplus extrudate before hitting the print button!
    Here is my start.gcode --------------
    G90 ;set positioning to absolute
    G21 ;set units to millimeters
    G28 ; go home
    G92 E0 ; zero extruder length
    M190 S56 ; set bed temp & wait
    M140 S60 ; set final bed temp
    M104 S215 ; set extruder temp
    M116 ; wait for both temps to be reached
    G1 X0 Y150 F1000 ; go centre left keep z on base