In my experience one of the most affordable ways to get into 3D printing is to take advantage of the ridiculously cheap Ender 3 variants. At the time of writing, retailers like MicroCenter offer the Ender 3 for as low as $99 on sale. Now these printers are stripped down and lack many of the creature comforts that can be found on the higher end printers like Prusas and Dremels. The most substantial of which, for a newcomer is automatic bed leveling (ABL). ABL is typically performed with a probe attached to the print head, the printer travels to different places on the build plate and takes samples (typically 9) of the distance between the print head and the bed. So, instead of fiddling with knobs and trying to get a perfectly level bed a user can simply start the print and the printer will compensate for deviations in the bed height. For the Ender 3s ABL can be achieved with a $20 BL touch upgrade.
For many readers, this isn’t news, mesh bed leveling has been around for sometime and the BL touch is the go to first modification to an Ender 3. That being said there are a lot of users [on Reddit] commenting about how they opt not to use bed leveling and prefer to hand level the bed “to get the print started quicker.” This is true, but only because the firmware running the Ender 3s and those distributed by Creality run each step of the pre-print process sequentially, starting with the preheating of the bed/nozzle, then bed leveling, then priming, and finally printing. The stock bed leveling process takes about a minute and preheating can take a couple minutes in some cases. Ostensibly, someone could send a print, wait 3 minutes for it to start, have a questionable first layer for whatever reason and then have to scrap the print and that time is wasted. Other savvy users pointed out that you don’t need to run mesh leveling for every print, you can just set a reminded to run it every 20th print, which could save time. This is what I did for some time, until I realized it must be possible to use the time spent preheating the bed more efficiently. If it were possible to run mesh leveling at the same time we would have 2 minutes to spend probing and improving the mesh. This will also improve the quality of bed adhesion and reduce the number of failed prints. So attached here is my start GCode. For context, M104 sets the hot end to the first layer temp chosen in the slicer, M140 does the same for the bed, G29 starts auto bed leveling process (in my firmware I have it set to probe 5 locations twice and my travel speed is relative fast, perhaps I’ll write a comprehensive guide on my firmware best practices in the future), and M109 to wait until the target temp is hit before starting the priming process, which is made shorter and therefore faster, and then starting the print.
; Ender 3 Custom Start G-code
M104 S190 ; Set pre-purge extruder temp
G92 E0 ; Reset Extruder
G28 ; Home all axes
G29 ; Auto bed level
M109 S[first_layer_temperature] T0 ; Wait to allow extruder to reach minimum extrusion temp
G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
G1 X5 Y5 Z0.3 F5000.0 ; Move to start position
G1 X120 Y5 Z0.3 F1500.0 E15 ; Draw the first line
G1 X120 Y4.6 Z0.3 F5000.0 ; Move to side a little
G1 X5 Y4.6 Z0.3 F1500.0 E30 ; Draw the second line
G92 E0 ; Reset Extruder
G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
G1 X20 Y4.6 Z0.3 F5000.0 ; Move over to prevent blob squish
Feel free to add this to PrusaSlicer and share your results!
-JD
Edit: Many users are concerned that I chose to level the bed before heating it. Heating the bed will expand the aluminum and can warp it distorting the mesh. I have not personally experience any issues with bed warping and the predicted thermal expansion of a 3mm aluminum plate raised 35°C is about 2.4 micron which should not make a significant impact on your print. Your mileage may vary and it may be worth testing your machine before committing to this change. Happy printing!