How to win at 3D printing

Adventures with an Ender 3

Similar projects worth following
Despite being 1 of the 1st affordable printers, the Ender 3 actually a kind of anachronism. Most of the internet uses much more expensive prusa printers. The lion kingdom got an Ender 3 anyway because it was cheap. Here are the travails of surviving with it. Lions also use Cura for slicing while most of the internet uses prusaslicer.

11 years after the expiration of the FDM patent, 3D printing is still kind of like Linux in 1996, purely considered a hobby with no economic value. Like Linux, it could end up being a requirement to have any kind of job. The lion kingdom's day job buys a lot of FDM printed enclosures from China. Lions have previously taken posession of commercial FDM printed prototypes.


This makes very high quality parts, but takes forever.

nozzle: .4mm 

 layer height: .2mm 

 line width: .4mm 

 wall thickness: 1.2mm 

 top/bottom thickness: .8mm 

 ironing: off 

 infill: 25% 

 nozzle temperature: 210C 

 bed temperature: 60C 

 speed: 50mm/s 

 wall speed: 25mm/s 

 top/bottom speed: 25mm/s 

 travel speed: 75mm/s 

 initial layer speed: 20mm/s 

 retraction: 5mm 

 print cooling: OFF

 support: touching buildplate

support overhang angle: 80deg 

 adhesion: skirt

Layer height must be a multiple of .04mm.  Thicker layers print faster but make rougher diagonals.  Layers over .32mm can't make diagonal overhangs at all .

Design parts with multiples of the layer height.

Design 45 degree angles instead of using support whenever possible.

Avoid brims & rafts at all costs.  The bottom layer needs to press onto the bed to be flat.

Place parts in the center of the bed because this area tends to have more stable height.

Lions have never had any use for print cooling.  It might be useful for artwork but it weakens layer adhesion & the fan has to be cleaned.


The stock Ender 3 bed is a buildtak bed.  It works at 60C.  Increase temperature to increase adhesion.  Decrease temperature to decrease adhesion. 

For most models, the lion kingdom only heats the bed for the 1st layer.  It retains most of its adhesion after cooling.  Only difficult models with little contact with the bed need full time bed heating.

Lower the nozzle to press the filament down & increase adhesion.  Raise the nozzle to decrease adhesion.

Any print bed, whether glass or plastic, must be kept free of skin oil.  Washing it off with dishwashing soap greatly enhances adhesion.  If the bed is clean, the nozzle can achieve adhesion with very little downward pressure.

Remove the bed, let it cool down, & bend it to remove the part.  Use an xacto knife to remove the skirt & extra bits.

Ordinary glass provided no significant adhesion or improvement in leveling, but required a lot more heat.  The trick with glass is it makes a smooth surface.  There are specially treated glasses which might give better adhesion, for a price.


Lions started out by using this file to coarsely level the bed:

It's a modified version of

Clean excess filament from the nozzle before leveling.  Heat the bed to the printing temperature before leveling by going to control->temperature->bed.

After much experience, lions switched to just going to prepare->auto home, then prepare->disable steppers, then manually sliding the nozzle around.  Instead of sliding paper under the nozzle, lions just eyeballed the nozzle height. The nozzle height after auto home should be right on the bed.  It doesn't raise it a layer height.

Bed leveling is manely affected by changing nozzles, slippage of the springs & X arm.  The center of the bed is higher than the sides because it rocks around the center.  Turn the eccentric nuts under the bed to reduce the rocking, but it can never be completely eliminated.

Once coarsely leveled, it only needs to be fine tuned while printing the skirt.  Lions print 4 skirt lines.  There's no need to print a test pattern.


Automated bed leveling is cheap enough to be considered essential nowadays. You can't use the entire bed area or print the most optimum designs without it.


The print head parks...

Read more »



gcode - 4.86 kB - 12/18/2020 at 21:16


  • Fixing the button

    lion mclionhead11/24/2021 at 23:05 0 comments

    Many animals have exited a menu only to find their nozzle temperature was suddenly too cold or their probe Z offset was .1mm too high.  For animals who destroyed a print by trying to exit from a menu, the solution is to whack on a separate button instead of using the dial as a button.

    The hardest part is drilling through the 2mm thick depleted uranium steel armor that is the front panel.

  • Mane filament colors

    lion mclionhead11/05/2021 at 22:29 0 comments

    Lions never print in any clear filament because

    it's what prison gadgets are made of.  The mane colors are 

    silver for the default material

    orange for high visibility gadgets & simulating wood with a brown sharpie

    black for anything flexible.

    A dedicated spool of brown would be good for simulated wood, but might not be as realistic as orange with brown sharpie.

  • 1st nozzle burn

    lion mclionhead11/05/2021 at 05:40 0 comments

    Felt the pointy end & ejected before feeling any heat.  Fortunately, lions don't need to feel heat to know what's coming.

  • Overclock the Ender 3 display

    lion mclionhead09/28/2021 at 19:59 0 comments

    You can make the display slightly faster.  It uses software SPI.  For Marlin 1.1.x, the timing values are defined in Conditionals_LCD.h

      #ifndef ST7920_DELAY_1
    //    #define ST7920_DELAY_1 DELAY_NS(125)
        #define ST7920_DELAY_1 DELAY_NS(64)
      #ifndef ST7920_DELAY_2
    //    #define ST7920_DELAY_2 DELAY_NS(125)
        #define ST7920_DELAY_2 DELAY_NS(64)
      #ifndef ST7920_DELAY_3
    //    #define ST7920_DELAY_3 DELAY_NS(125)
        #define ST7920_DELAY_3 DELAY_NS(64)
    #elif ENABLED(MKS_12864OLED)

    The lion kingdom managed to get them down to 64, but no lower.  

    More SPI delays are defined in ultralcd_st7920_u8glib_rrd.h


    all have delays but the lion kingdom didn't have any luck reducing those.

  • Ender 3 heat block stripping

    lion mclionhead09/12/2021 at 06:37 0 comments

    A common problem for animals who frequently change nozzles is the heat block getting stripped.

    They're all made of aluminum.  The stock nozzle had red thread locker.  The maximum torque before stripping probably isn't enough to get a reliable attachment.  Replacing just the heat block is a huge pain, manely because all the bits which have to be removed can only be removed when they're hot, so the lion kingdom replaced the heat block, heat sink, heater, & thermocouple.

  • Freecad/Blender vs Fusion 360

    lion mclionhead09/07/2021 at 07:30 0 comments

    It feels like the lion kingdom would save a lot of time & effort by using Fusion 360 instead of Freecad with a pile of workarounds in Blender.  There's just the memory of Blender becoming the world's standard 3D animation program after lions used Maya for years.  Then kicad became the world's standard electronics design program after lions used Eagle for years.  Arguably, Altium Designer is now the world's electronics design program but kicad got a lot of publicity a few years ago.

    Lions have come to rely on being able to access a lot more than 10 CAD files at any given time.  These CAD files stay in the same directories as software & electronical files.  They're all managed by the same git repositories with revision histories.

    It would be another hoop to have the CAD files exclusively online in an autodesk server while all the other bits are still on the gits.  Then, these CAD files would have to be constantly toggled read-only to get beyond 10.  The lion kingdom uses Comca$t internet which constantly goes down for days at a time but is never quite worth the hassle of switching out of.

    Fusion 360 still has a lot of problems compared to Freecad booleans.

  • Fixing FreeCAD models in Blender

    lion mclionhead09/06/2021 at 07:50 0 comments

    Freecad has a famously bad boolean solver, but creating temporary booleans is essential to split models up for printing.  When it fails, it normally leaves off a face.  Cura can't slice it unless it's a closed solid.  

    Cura shows a goofy pattern where a boolean error has happened & it slices it into garbage.  Fortunately, you have a friend in the boolean business: Blender.  Just go to file->import to import the STL file.

    Blender shows 2 faces are missing.  It's just a matter of going into edit mode, hitting C to select the vertices around the holes & hitting F to create faces.

    Then, export it as an STL file.  Cura is happy to load the STL file generated from blender, with all the right dimensions.

    Booleans in Freecad are a pain in the mane anyways, with goofy offsets & goofy tweeks normally required.  Blender can import the STL files for the model & print mask.

    Then apply the boolean by "adding a modifier" to the object to be printed & hiding the print mask object.  Of course, we still need a tiny offset to get rid of some dangling faces.  At least blender shows the dangling faces instead of completely failing.

    Blender converts 1mm to 1 meter.  .1 meter in Blender is .1mm.

    You now have to export the STL file with "apply modifiers" enabled.

    Cura slices booleans from Blender just as well as Freecad.

  • Auto bed leveling with the 3dtouch

    lion mclionhead09/02/2021 at 21:29 0 comments

    Automatic bed leveling has become a standard feature in the last 2 years & has standardized on hall effect sensor pin testers.  Hall effect sensors can measure distance down to the .1mm precision required.

    The lion kingdom got a cheaper 3dtouch instead of the standard bltouch.

    Tearing it down is a destructive operation, so the only teardown of a sensor is:

    There's a solenoid which raises & lowers the pin in order to change the XY position.  Then, the hall effect sensor detects when the Z position hits a fixed height & emulates the Z stop switch.  There's no analog height output.  The user sets a difference between nozzle & probe height.

    The mane problems are mounting the probe, recompiling the firmware & reconfiguring the gcode.  The lion kingdom made a custom mount since all the online ones were junk.

    While this happened, the lion kingdom also ripped off the cooling fan.

    The only useful starting point came from:

    The firmware has to be Marlin 1.1.x for the Ender 3, not marlin 2.0.x.

    The board has to be set to Sanguino & the processor has to be ATMEGA1284.

    The best firmware notes were in:

    The lion kindom used "PIN29" instead of "PIN27" for servo0 & kept the speaker alive, because you need the speaker to save the settings.

    PIN 29 is actually pin 35 on the ATMega 1284, but the internet calls it PIN 29.  We find PIN 29 being translated to PORTA2 in 


    Then PORTA2 is pin35 on the 1284.  The arduino libraries use some archaic pin numbering which has nothing to do with the datasheet.  Pin29 emerges next to a capacitor.

    Programming the Ender 3 bootloader required writing the ArduinoISP sketch on an uno, then setting "Arduino as ISP" as the programmer to write the bootloader on the sanguino.  Then, the Marlin firmware could be written to /dev/ttyUSB*.  Sadly, the arduino bootloader on this board is crap.  1 problem is Marlin & the bootloader compete for the serial port.  

    The decision was made to scrap the bootloader & always use ICSP.  It didn't free up a meaningful amount of memory, it was real slow, but it worked.  

    The trick with ICSP mode is you have to take the SD card out.   The SD card shares the SPI pins with the programming pins & runs on 3.3V, so it'll get destroyed if you try programming with a 5V arduino.

    You need to set the BAUDRATE & SPI_CLOCK in ArduinoISP.ino to 115200 & 200000 to speed up ICSP programming, then write the new ArduinoISP to an Arduino.

    The avrdude command required to flash Marlin is given in an attempt to upload the sketch.  All the Show verbose output check boxes must be enabled in preferences.

    /root/arduino-1.8.15/hardware/tools/avr/bin/avrdude -C/root/arduino-1.8.15/hardware/tools/avr/etc/avrdude.conf -v -patmega1284p -cstk500v1 -P/dev/ttyACM0 -b115200 -Uflash:w:/tmp/arduino_build_951059/Marlin.ino.hex:i

    In this case, the baud rate was increased to use the hacked ARduinoISP.

    Notes about configuring gcode to level the bed are in

    The mane point is it doesn't level the bed unless the gcode contains G29 after the bed is preheated & it gives a G28.

    G29 makes it probe & applies the mesh, but requires a preceeding G28 to home the nozzle or it'll crash.

    The lion kingdom updated its script to add bed leveling gcode.

    The default auto bed leveling firmware failed to access the very edges of the bed.  It did incrementally improve the quality of smaller parts.

    After giving...

    Read more »

  • EZR struder teardown

    lion mclionhead08/26/2021 at 18:14 0 comments

    It's surprising how little 3D printer owners document how their overpriced addons work.  The 3D printing industry is like the mafia where everyone wants to sell an addon, but no-one wants to reveal what's inside & it's priced like it's made of gold.  It might be like that because 3D printer owners can print their own copy of whatever is being sold, so sellers have to be extra cautious about revealing anything.

    The lion kingdom's EZR struder gave no material improvement in printing TPU.  Its only advantage was a knob for manually turning the extruder, which always falls off.  It didn't work with the softest TPU which was 1.7mm.  It only worked with a harder TPU which was 1.8mm:

    The more constrained path isn't all that constrained & similar results can be obtained by printing an extruder.  The best results may come from a bondtech extruder.

    Before the EZR, the lion kingdom printed some constrained extruder paths.

    There was using a piece of PTFE to extend the constrained path.

    There was also printing a complete constrained path & grinding it down to fit between the idler pulley.

    The lion kingdom has found a similar lack of teardowns when embarking on automatic bed leveling.  The BLtouch/3Dtouch is similarly overpriced.

  • OpenSCAD

    lion mclionhead02/21/2021 at 02:31 0 comments

    Lions started making procedural models using FreeCAD's own python bindings, but OpenSCAD has emerged as the tool of choice for making procedural models.  This is after phases where it was sketchup, tinkercad, & fusion 360.  The reason might be fusion 360 being on a path to becoming more & more crippled for unpaying users, google abandoning sketchup right after acquiring it, & tinkercad not being functional enough.  When the lion kingdom was getting started with CAD modeling in 2018, the Freecad GUI was like a brick wall while it was much easier to make models programatically.  In older age & with more complicated models, a GUI has proven easier, though.

    A purely programmatic CAD modeler would be good for very simple models with 3D printable dimensions, Z lengths in multiples of layer height, overhangs at 45 degrees.  It would have been the way to go, 40 years ago when confusers weren't fast enough to have an interactive 3D model.  There were libraries for drawing 3D graphics in BASIC, which would be equivalent to OpenSCAD.  Most modern programming languages are what used to be libraries.  Why we switched from creating libraries to inventing a new programming language for every set of functions is another phenomenon.

    Lions evolved to using 2 methods for procedural models: python bindings for FreeCAD & generating 1 face at a time in native C.  Complicated models like an isogrid cylinder

    could only be modeled by creating individual faces in C.  It was too slow to do with Freecad python bindings or even native python.  Unfortunately, Freecad can't do any booleans with these models so there's still a desire to optimize the output of Freecad python.  

View all 11 project logs

Enjoy this project?



benkster wrote 08/26/2021 at 20:29 point

Pretty extensive explanation - Nice!
Can you buys yourself a artillery sidewinder and do the same for it ;-)
Just kidding of course - well done

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates