Klipper macros to support 3D Printers with Zoned Hotbeds.
If you just want to help with the code but don't have a zoned hotbed, the macro will work with a normal heated bed! A 1x1 grid 😉 Just set variable_zone_0_is_heater_bed to True and num_zones_x/y to 1.
- Configure each heater used in your hotbed as a
[generic_heater zone<id>]
. Each zone's name should be the same except for a number at the end (zone0, zone1, zone2...
). Start with 0. Default iszone
but you can change this withvariable_base_zone_name
.- To make the first heater
heater_bed
, setvariable_zone_0_is_heater_bed
toTrue
.
- To make the first heater
- Copy this macro to your config directory and include it and
exclude_object
in yourprinter.cfg
file:
# printer.cfg
[include zoned_hotbed.cfg]
[exclude_object]
...
- Then configure the internal variables by changing the variables in the
HEAT_BED_ZONE
macro insidezoned_hotbed.cfg
. There are comments there to guide you. For now, you'll have to duplicate all these variables into_HEAT_BED_ZONE_WAIT
as well. I promise that won't last.
All configurations will be moved to a separate config section inside printer.cfg
in the future, but
Use it like normal (M140
, M190
) to heat the entire bed like normal, or specify X_MAX
, Y_MAX
, X_MIN
, and/or Y_MIN
to heat only the specified area. Any zone that touches that area will fully heat. Setting OBJECT_ONLY
to 1 will heat the area around min and max of the current print (which is why we include exclude_object
).
The M140
and M190
gcodes are overridden in this macro so they support all parameters. You can also directly use the HEAT_BED_ZONE
macro.
You can contribute by building a zoned bed and trying this macro out, or by helping clean up the code, or by hopping into any of the TODO's down below! Post any issues, questions, or ideas under Issues on GitHub.
Also, sharing zoned hotbed designs and PCBs is hugely helpful. Not many people have attempted this and everyone can use a good example.
- ❗Change to a klippy extra. Jinja makes the code to start heating all zones then wait for them all super inefficient.
- Ring zones
- Custom grids (ex. a large build plate and smaller zones to extend the work area.)
- Warm surrounding zones to minimize warping
- 3D Model of my zoned hotbed design
- 100x100 PCB design for manufacturing (Help?)
- When we've heated one zone and want to heat another: Prioritize new full-temp zones, take the greatest temperature of warm zones/already heated zones.
Q: What if I try to heat a zone partially outside the bed? A: It will heat the zone that is inside. This way, if you have a model that hangs over the side of the bed (like a statue) it won't fail to heat. Q: What if I try to heat a zone entirely outside the bed? A: It will give an error letting you know nothing is being heated.