-
Notifications
You must be signed in to change notification settings - Fork 225
Change Log
This project continues to take considerable effort and time not to mention the cost of building many MMU prototypes. Please consider helping to support me by donating to my PayPal link in the github 🙏
I couldn't wait for v4 so have dumped a lot of new features on v3. There is a lot here so read carefully:
Features:

Accurate clog and tangle detection and handling when using any kind of sync-feedback "buffer" sensor. This also integrates the existing encoder based clog/tangle detection.
-
Sync-Feedback: Re-implemented with two algorithms for keeping MMU stepper in sync with the extruder:
- "Two-Level" for switch based sensors
- Extended Kalman Filter (EKF) for proportional sensors.
- This new implementation also can create telemetry logs and plot graphs for easy debugging.
- Lot's to read about in the new Synchronized Gear & Extruder wiki page.
- Note that there are some
mmu_parameter.cfgchanges that will be made on upgrade:
sync_multiplier_high: 1.05
sync_multiplier_low: 0.95has been changed to:
sync_feedback_speed_multiplier: 5
sync_feedback_boost_multiplier: 3
sync_feedback_extrude_threshold: 5Two great examples include: FPS board, and PFS Sensor.
- Proportional sync-feedback sensors are AMAZING and definitely represent the future - they allow for very controlled sync feedback adjustments and reliable FlowGuard clog/tangle triggering. They are also easy to set up with a new
MMU_CALIBRATE_PSENSORcommand. - Full setup details in the new Synchronized Gear & Extruder wiki page.
Constantly evaluates the correct rotation distance of the MMU as it's synchronizing with the extruder.
- Now with option to save calibrated value
- Experimental "flowrate" display in UI's if used in conjunction with analog sync-feedback sensor
Upgraded MMU_ESPOOLER command to conveniently operate on any spool.
- Includes tightening and loosening operations.
- New assist and rewind burst configuration.
- Full info in updated Espooler Support wiki page.
Many new designs have integrated heaters into the filament enclosures so now Happy Hare can conveniently control the heater temperature and display the environment in the new Mainsail/Fluidd UI's.
- This system controls a list of max filament temperatures so wil never exceed the lowest temperature OR that of your MMU construction!
- See Environment Manager wiki page.
Want to convert your MMU into a filament drying machine? MMU_HEATER DRY=1 now allows for a supervised drying cycle that can even rotate spools as they dry.
- Uses eSpooler if fitted to optional rotate spools (need to unload and secure filament end to spool)
- Manages multiple per-gate heaters (check out EMU MMU design) and will perform simple power management to prevent too many heaters at once if your PSU can't handle it
- Full setup and usage details in the new Environment Manager wiki page.
A few fixes and improved look an useability of the main panel display
- More rounded and realistic enclosure look
- New MMU unit footer area to show evironment, heater and drying cycle (tooltip for multi-heater/sensor designs)
- Click to select replaced with click for action menu (includes selection).
- Direct navigation to edit the filament in a particular gate
- Integrated OR separated bypass representation. Keep integrated for designs like ERCF or external for BoxTurtle, EMU, QuattroBox, VVD, etc.
- Bug fixes for sync-feedback display and some font sizes
- Operation of multiple espoolers can now be rendered at once (previously it was just active gate)




- My KlipperScreen fork has been updated with upstream and all PR's integrated (smaller screen support, proportional sensor feedback, install support for root-only systems)
- Many Happy Hare PR's integrated. Check here for full list, but includes: multi-unit led fixes, VVD hardware update, orca flush volume updates, MMU_PURGE fix, ...
- Allow
MMU_SYNC_GEAR_MOTORto force gear syncing even if HH doesn't think it's necessary (helps error recovery) - New printer variables:
drying_state(for filament dryer info),espooler(list of espooler states per gate),sync_feedback_*(new sync algorithm),flowguard.*for flowguard info - Start of a new integrated help system (pulled from v4 work) for important commands that often are hard to remember. Add a
HELP=1option to the command for help without any action occuring. Only are few newer commands have this (MMU_RECOVER, MMU_ESPOOLER, MMU_FLOWGUARD, MMU_HEATER, but it will develop.. ).
Several Happy Hare mmu_parameters.cfg settings have also been renamed in this release:
selector_touch_enable --> selector_touch_enabled
enable_clog_detection --> encoder_clog_detection_enabled
enable_endless_spool --> endless_spool_enabledWith Happy Hare v3 I have made effort to retain Python 2.7 support despite being deprecated Jan 1 2020. I have continued this committment but no long have a Python 2.7 system to test with, so it is possible there could be errors -- these would be blatent and easy to fix. Let me know. BTW Be warned, HHv4 will drop Python 2.7 support.
I know some folks have been having problems with the latest klipper updates that would manifest as stepcompress errors ... this release should fix those errors as well as still supporting older version of klipper.
Other updates include:
- Lazy servo movement for Tradrack/ERCF where the servo would unnecessarily flutter especially during the call to the EREC filament cutter (thanks @ningpj )
- Fixed recovery of filament position on BoxTurtle and NightOwl when setup with gate homing to
mmu_gearand a negative parking distance (thanks @gabrielwong1991 ) - Improved logic for preload and ejecting the not active lane on type-B MMU's
- Fixed corner cases and improved detection of incorrect configuration of the automated sync-feedback (also thanks to @gabrielwong1991 ).
- If you haven't used this and have a sync-feedback "buffer" with both compression and tension sensors I would suggest you try... set this parameter. It will ensure **perfect filament tension AND autotune **the correct rotation distance.
autotune_rotation_distance: 1
- If you haven't used this and have a sync-feedback "buffer" with both compression and tension sensors I would suggest you try... set this parameter. It will ensure **perfect filament tension AND autotune **the correct rotation distance.
- Added installer support for @jacksky007 new WGB Mcu (https://github.com/kashine6/WGB-Board-For-BoxTurtle-MMU) . It was designed for BoxTurtle but perfect for other type-B designs
- Inclusion of many PR's (refer to github closed PR's to check)
NOTE: you will be asked to upgrade but it is very straightforward: (note that if you are upgrading from a version < v3.3 then see the previous announcement because some manual edits of config might be necessary
cd Happy-Hare
./install.sh -b main
**Before you ask: **Mainsail integration is still underway. @meteyou is being super helpful in ensuring the integration is perfect. Until released you can still use my fork (see #mainsail-fluidd ). Fluidd integration is already available.
This is likely the last of the v3 release (v4 with vastly improved installation and modular hardware definition comming soon!)

-
New Fluidd UI Features
- (Note that Mainsail will follow as soon as initial full PR is pulled)
- Sync-feedback tension/compression "buffer" is now only shown when filament is at the toolhead. This avoids confusing "under tension" display for some spring loaded buffers.
- A small icon is now shown when filament is gripped on type-A MMU's where it is possible to ungrip filament even if loaded. Grip control is still managed with
MMU_GRIP,MMU_RELEASEorMMU_SERVOcommands.
-
New Auto-calibration and auto-tuning options
- This means that many of the new MMU's (like BoxTurtle, KMS, QuattroBox, ...) can now be configured to work without non-essential calibration and have Happy Hare "learn" from the telemetry as MMU is used.
- Full set of options that are most useful on new setup's. Full details on options and required sensors is in the upgraded
mmu_parameters.cfgfile: - (Related is new
bowden_homing_max: 2000setting that aids calibration to limit the absolute max bowden move)
autocal_bowden_length: 1
autotune_bowden_length: 1
skip_cal_rotation_distance: 0
autotune_rotation_distance: 0
skip_cal_encoder: 0
autotune_encoder: 0-
New optimizations with sync-feedback "buffer" sensors
- Two new
mmu_parametersare used to optimize movement inside of the buffer: - New filament tension balancing logic after load. If you have a sync-feedback "buffer" then filament tension can be balanced immediately after loading.
- Two new
sync_feedback_buffer_range: 8 # Travel in "buffer" between compression/tension
sync_feedback_buffer_maxrange: 12 # Total max traveland
toolhead_post_load_tension_adjust: 1 -
MMU syncing and filament grip logic
- Hopefully no-one will see this other than for sync/grip state to be more consistent now.
- 3DChamelon, MMX and PicoMMU users can now choose between the default
filament_always_gripped: 0(mmu_hardware.cfg) logic or set this tofilament_always_gripped: 1if you prefer for Happy Hare not to never release filament.
-
New MMU support for KMS!
- More details on this soon as it launches internationally, but it is a cool type-B design with integral encoder, espooler and heated filament enclosure!
- This deisgn has it's own PCB's and so installation is simple with pre-configured templates
-
Bug Fixes and PRs, including:
- Prevent error when color certain colored messages
New version available that builds on 3 years of experience with a ton of new features supporting: Box Turtle, QuattroBox, ERCF, Tradrack, 3MS, PicoMMU, Night Owl, Angry Beaver, MMX, 3D Chameleon, and more...

-
Full Mainsail & Fluidd UI Support
- Fully interactive main panel with accurate filament position rendering and animations for tip forming, purging and cutting! Intuitive visual feedback makes interacting with your MMU/AFC easier
- Filament editor panels with optional link to Spoolman
- Tool to gate/lane mapping on print start!
- State recovery panel **Fluidd has already been pulled 💪 and Mainsail is set to be very soon 😊 ** (both are available via forks in my repo until then) Read more on the wiki: Mailsail Fluidd Integration
-
Full DC eSpooler support with rewind, load-assist and in-print "intelli-assist" 🤘 with multiple burst options
- New MMU_ESPOOLER command for easy control/testing of eSpooler. See Command Reference
- Intelli-Assist will advance the spool to relieve strain with 3 triggering options including proper close-loop feedback system (mods for Box Turtle underway). This is a very important option to control a DC motor where movement is porportional to load and not deterministic as is the case with stepper control
- Simple streamlined setup
- Read more about Espooler Support
-
Formal purging macro hook similar to form tip macro for use in an out of a print
- Separate extruder current control so you never loose steps
- Now the preferred place to add BLOBIFER purge macro since current control and extruder syncing control is possible
- New reference "bucket" purge macro that intelligently purges only the filament necessary (knows the previously loaded color)
- Separate timing statistic options for both tip forming and purging. You can see it with
MMU_STATS DETAIL=1or you can add new columns to the stats report inmmu_parameters.cfg:
# Comma separated list of desired columns
# Options: pre_unload, form_tip, unload, post_unload, pre_load, load, purge, post_load, total
console_stat_columns: unload, load, post_load, totalNew purge configuration and reference "bucket" purge macro:
force_purge_standalone: 0 # 0 = Slicer wipetower in print else standalone, 1 = Always standalone purging (TURN WIPETOWER OFF!)
purge_macro: _MMU_PURGE # Name of macro to call to perform the standalone purging operation. E.g. BLOBIFIER, _MMU_PURGE
extruder_purge_current: 100 # % of extruder current (100%-150%) to use when purging (100 to disable)Other new features:
- Install support for new MMX MMU (more MMUs coming next month!)
- Option to increase X/Y stepper current when filament cutting. See this section in
mmu_macro_vars.cfg:
# Change to X and Y stepper current during the cut operation. Technically any stepper
# current can be modified by adding the stepper name to the list. Be careful not to
# overload your steppers but generally up to 150% is safe
variable_cut_axis_steppers : 'stepper_x, stepper_y'
variable_cut_stepper_current : 100- Improved "automatic homing" option on startup
- Filament colors will now retain the alpha channel (useful for translucent filaments and great in the UI)
- Optimization of servo selector movement for the PicoMMU
- Much improved
MMU_GATE_MAPreadability:
MMU_GATE_MAP
Gates / Filaments:
0: Empty; Id: 1 --> PLA - Silk | 210°C | #8CDFAC | Matte Green
1: Spool; Id: 2 --> PTEG | 220°C | #DCDA3472 | eMarble
2: Spool; Id: n/a; PLA | 200°C | blue | No brand cheap filament
3: Buffer; Id: 4 --> ASA | 239°C | #95DC34 | Prusament Lime Green
4: Buffer; Id: 8 --> ABS | 235°C | #2F30BE | Blue Sparkle
5: Unknown; Id: 6 --> ABS | 240°C | #7C6555 | eSun ABS
6: Spool; Id: 10 --> Unknown | 240°C | #080808 | Jet Black
7: Spool; Id: n/a; TPU | 240°C | grey | eight [Speed:50%]
8: Spool; Id: 9 --> ABS | 235°C | #2F30BE | Blue Sparkle
- Allow negative parking movements. Previously a '-1' value was treated as a "don't move". To allow for negative movement this magic number has been change to '-999' in the parking macros
- Fixed (nasty) bug in v3.1 where the print would not always pause on mmu error.
- Fixed "random" delay some folks were seeing typically on print startup
- Fixed corner cases when gate map was not updated (filament attributes) from UI's when using Spoolman.
- Fixed bug in parking logic that sometimes caused it not to park on print completion or error
- Fixed bug where un-retract was not run on loading the initial tool
- Fix to ensure parameters can be specified to you custom macro extensions instead of just the macro name
Support for Multiple MMU
- It is now possible to combine mutliple MMUs on the same printer and operate them as one. Currently this only works with type-B designs that have a separate stepper per gate/lane but will be extended to support any number and combinations in a future release.
- Updated visualization for status
- New Muli-MMU wiki page
- Updated LED support
- New configuration that allows for complete flexibility of multiple chains, individual leds, partial chains, etc
- New separate
logoLED control (adds toentry,exitandstatus)
- New
gear_unload_speedandgear_unload_accelinmmu_parameters.cfgto allow for tuning different from load speed - this allows squeezing the best performance out of your MMU but also allows for imposing limits on rewinder speed, etc - New
has_filament_bufferoption inmmu_parameters.cfg(default to 1). This can be set to0if no filament buffer is installed (e.g. on designs with DC rewinder systems or users of Filamentalist). This option controls the use and visability inMMU_STATUSdisplay. - Beta support for awesome new QuattroBox MMU
- Beta support for the tiny PicoMMU with servo selector
- Fixed bug in
MMU_SOAKTEST_LOAD_SEQUENCEwhere it may not home when unloading - Ensure extruder syncing is disabled if MMU is disabled with
MMU ENABLE=0(note it is often better to enable bypass and have a bowden feed that is outside of the MMU if not already integrated like ERCF) - Minor fix for encoder reading accuracy on ERCF
- Integrated several PRs (refer to Github for details)
Mainsail beta!!
- Production release of v3.0.2 beta (support for multiple running MMUs)
- Compatibility with New mainsail beta UI! (Fluidd under development)
- Allows for blobifer animation, and toolhead and MMU tip cutting visualization
- Support for the fantastic new QuattroBox
- Support for the PicoMMU
Production Release for v3
- Support for 3DChameleon added thanks to user @u3dreal !!
- Fixed some bugs introduced during the code refactor
- Dare I say fixed the majority of Timer Too Close (TTC) errors. Really... results are very promising.
Major code refactor for modular design
The BIG news - Finally support for Type-B MMU's
-
MMU's now supported by Happy Hare:
- ERCF
- Angry-Beaver
- Box Turtle
- Night Owl
- 3MS
- Tradrack
- Custom
- more comming! (Prusa, Chameleon)
-
MMU Options supported by Happy Hare:
- Toolhead filament cutting
- MMU filament cutting (EREC, Snapping Turtle, ..)
- Blobifier purging system
- Passive or active rewinders
- Sync feedback (Belay, TurtleNeck, ..)
Specific changes:
- New style
mmu_hardware.cfgto support replicated stepper configuration. Old configurations will be upgraded with new[mmu_machine]section but this might be a good time to look at the latestmmu.cfgandmmu_hardware.cfgtemplates. - New individual
mmu_gearsensor option just past the MMU filament driver (e.g. for Box Turtle and Night Owl) - Combined
mmu_gateandmmu_extruder(entry) sensors for "no bowden designs" (e.g. Angry Beaver and 3MS) - New per-gate bowden lengths option for specific MMU designs
- New "no bowden" option for certain Type-B designs where the filaments are kept close to the extruder
- Simplifed
mmu_parameters.cfgfor type-B MMU's without selector - KlipperScreen-happy_hare_edition updated with new type-B functionality
Other
- New calculated purge volume option using filament colors that is calculted by Happy Hare rather than relying on slicer to supply purge matrix
- New
MMU_CALC_PURGE_VOLUMEScommand to instruct Happy Hare to calculate purge volumes based on color strategy (slicer or gatemap). This is an option to reading from the slicer. - Printer varible
printer.mmu.toolchange_purge_volumeis always available on toolchange with the purge volume based on chosen strategy.
- New
E.g. In this example I have my "gate map" populated with filaments (that were pulled from spoolman). I can now calculate purge volume map...
> MMU_CALC_PURGE_VOLUMES
Purge map updated. Use 'MMU_SLICER_TOOL_MAP PURGE_MAP=1' to view
> MMU_SLICER_TOOL_MAP PURGE_MAP=1
No slicer tool map loaded
Purge Volume Map (mm^3):
To -> T0 T1 T2 T3 T4 T5 T6 T7 T8
T0 - 117 209 174 201 201 203 203 203
T1 287 - 190 141 357 357 296 296 296
T2 348 162 - 171 321 321 178 178 178
T3 293 71 130 - 327 327 240 240 240
T4 121 141 112 150 - - 150 150 150
T5 121 141 112 150 - - 150 150 150
T6 285 204 89 192 320 320 - - -
T7 285 204 89 192 320 320 - - -
T8 285 204 89 192 320 320 - - -- MMU_UNLOAD / MMU_EJECT distinction: MMU_UNLOAD should be used for unloading filament and parking at the gate. MMU_EJECT will do the same as MMU_UNLOAD if loaded but if unloaded will take the further action of ejecting the filament out of the the gear stepper! careful which one you pick -- KlipperScreen and print end macros have been updated. Note on multi-gear MMUs is it possible to
MMU_EJECT GATE=xeven when another gate is loaded- the "final_ejection" of filament from the MMU is necessary for type-B designs but also use for ERCF/Tradrack users. You just have to change your muscle memory
- Improved "exit" LED status (a "blue" loading/loaded status) for MMU designs without a separate "status" LED.
- Removed
persistence_levelparameter so that state is now always persisted. There are many command available to reset specifc parts of the state so I decided it was better to always persist. But for QoL, two new startup options have been added:-
startup_home_if_unloadedcan be used to force homing of the selector (if MMU is unloaded) on startup if using a type-A MMU. -
startup_reset_ttg_mapused to reset TTG map to the default on restart.
-
- Renamed
auto_calibrate_gatestoautotune_rotation_distanceto better describe what it does (auto upgraded) - Renamed
auto_calibrate_bowdentoautotune_bowden_lengthto better describe what it does (auto upgraded) - Added
extruder_homing_bufferparameter which is the amount to reduce the fast bowden load so filament doesn't overshoot the extruder homing point. Useful if you need/want to home to extruder sensor before loading extruder - New per-filament temperature setting!
- New (persisted) gatemap "filament temperature" attribute
-
MMU_GATE_MAPcommand extended with "TEMP=xx" setting per gate - When out of a print, logic to ensure correct temperature will be per-filament, falling back to
extruder_default_temperaturesetting if not available - Extruder temperature will be pulled from spoolman if spoolman is enabled
- New "addon" for driving DC eSpooler motor (for example for the Armored Turtle MMU design). Thanks @ammaze!
- Two new parameters in
mmu_parameters.cfgfor calling macro to control the eSpooler:espooler_start_macroandespooler_stop_macro
- Two new parameters in
- Reworked state recovery (MMU_RECOVER) that will utilize all new sensors if available
- Imporved filament pre-load functionality. Most noticable on type-B MMU's where we can load a gate without selecting it but it can now also allows pre-loading during a pause
- Don't enforce the
min_toolchange_zif the parking move is-1, -1, 0i.e. no movement - Improved calibration and intial setup:
- Better selector calibration for designs without CAD defined physical travel limit (e.g. Tradrack)
- Improved bowden calibration methods. Will now use automatically use the best method possible but all methods have been revamped
- New startup calibration state message that reports any lapses of calibration
- Incorporated many PR's. Sorry, I lost count, but thanks to all of you who submitted, not matter how big or small
** Blobifier v1.5 update. Pretty cool update by @dendrowen incorporating @igiannakas idea of pulsing purging!**
- Purge with a pulsating (and occasionally, retracting) motion. This will prevent laminar flow from occuring and purge the old filament more quickly. (Up to 30% EXTRA filament saved!)
- Changed the blob calculation mode. The blob will now split into equal parts if it is too large (e.g. 2x85mm instead of 150mm + 20mm). This will eliminate/reduce the small blobs scattering over the buildplate.
- Due to the above changes, certain variables have been added and removed:
- new:
- z_raise: The total amount the nozzle should be raised during a blob. The value should be somewhere around iteration_z_raise * max_iterations_per_blob - triangular(iteration) * iteration_z_change
- z_raise_exp: The rate at which the hotend reduces raising speed during a blob. 0.85 seems to be a good starting value.
- purge_length_maximum: The maximum length of the entire purge. Use max_iterations_per_blob * max_iteration_length.
- removed:
iteration_z_raise, max_iterations_per_blob, iteration_z_change, max_iteration_length
- new:
- Revised some parameter checks to work with the new Happy Hare version 2.7
- Add settings:
- shaker_arm_z to allow for different bed/shaker arm heights.
- brush_accell to be able to change the acceleration of the brush movement.
Addressed design oversight in toolhead calibration settings when cutting tips
- Fixes issue where
toolhead_ooze_reductionparameter was used for two purposes that cancelled each other out and thus prevented use for fine tuning load distance.- The previous
toolhead_ooze_reductionvalue will be moved totoolhead_residual_filamentto better represent what is means -
toolhead_ooze_reductionwill be reset to 0 and used exclusively for tuning the loading length (it's primary purpose) -
MMU_CALBRATE_TOOLHEADupdated accordingly - Printer variables updated:
printer.mmu.extruder_filament_remainingnow holds the combinedtoolhead_residual_filament+ any cut fragment length - Wiki updated
- The previous
- New printer variable
printer.mmu.toolchange_purge_volumewhich is valid during a toolchange and contains the recommended purge volume (from slicer tool map purge volues + volume of any residual filament left in extruder). Saves time in macros reading the entire purge volumes map - Possible TTC mitigations (doing everything possible to give host more headroom)
- Absolute minimal writes to
[save_variables]during toolchange or check gates operations - Improved logger
- Absolute minimal writes to
- Allow extruder (entry) sensor to be used to autoload extruder when using the bypass. Controlled with new
bypass_autoloadparameter inmmu_parameters.cfg - New rainbow effect on startup on entry LEDs
Completely revised parking and movement for toolchange operations:
- This is the big one. After upgrade, you MAY NEED TO REVIEW and TWEAK the MOVEMENT section
mmu_macro_vars.cfgto finish configuration -- upgrade cannot be completely automated for all setups. - Previously anything other than simple toolchange workflows was very confusing to setup. The configuration had too many "enable_parking" settings, etc. The new system is both much more sophisticated but should be easier to configure to get the behavior you want. Specifically parking can be defined on 7 operations: toolchange, load, unload, runout, complete, pause & cancel, and for each of those you can choose the parking location,z-hop (including optional ramp) and retraction.
- Additionally movements can be specified between certain toolchange steps to make it easy to, for example, park on a silicon pad to stop ozzing while changing.
- End of print eject will no longer return to the print.
- Rewritten wiki page: Toolchange Movement
Teaser:
variable_enable_park_printing : 'toolchange,runout,load,unload,complete,pause,cancel'
variable_enable_park_standalone : 'toolchange,load,unload,pause,cancel'
variable_enable_park_disabled : 'pause,cancel'
variable_min_toolchange_z : 1.0
variable_park_toolchange : -1, -1, 1, 10, 2
variable_park_runout : -1, -1, 2, 10, 2
variable_park_pause : 50, 50, 10, 0, 2
variable_park_cancel : 150, 50, 20, 0, 5
variable_park_complete : 50, 50, 20, 0, 5
variable_pre_unload_position : -1, -1, 0
variable_post_form_tip_position : -1, -1, 0
variable_pre_load_position : -1, -1, 0Automated calibration / tuning of bowden length and gear ratios:
- Gear "ratios" in
mmu_vars.cfghave been upgraded to a single list ofrotation_distances. - Bowden tube length can now be automatically tuned over time by setting the
auto_calibrate_bowden: 1parameter. This will use telemetry from successful loads and unloads on gate 0 to adjust slowly to find the perfect length. [Caveat: not tested with all sync-feedback devices like Belay so may be better to initially disable] - For designs like the ERCF that use a different BMG drive for each gate, each gear needs to be calibrated. Now the option
auto_calibrate_gates: 1will use telemetry similar to above to tune the "rotation_distance" for that gear so movement matches the reference gate 0.
Other:
- Further TTC mitigation. Working with various users I narrowed down the cases where this was most likely to happen and worked around them. Logic is near identical but changes timing enough to prevent the error. But note that TTC can be caused by legitimate causes: PSU, heat, bad cables, overload, etc, etc.
- Fixed error in the amount of filament loaded when using tip cutting (Filametrix). The load length was not correctly being reduced by the
toolhead_ooze_reductionvalue when cutting tip (thanks to user @jacksky007 for debugging) - Improved error feedback from spoolman moonraker module
- X and Y axis filament cutter support (PR413 - thank you)
- Creality K1 support (PR388 -- thank you)
- Toolerance to skew correct (move out of bounds) in both axes in blobifer macro (PR427 - thank you)
- Various bug fixes from Discord / Issue feedback
- Start of a new wiki page for KlipperScreen-Happy-Hare edition: Klipperscreen
- Wiki pages updated: Slicer Setup, Command Reference, Happy Hare Parameters, Blobbing and Stringing and more..
- Lots of work to avoid TTC errors. Specifically working around what appears to be a klipper bug when lots of homing moves are used. I know this has solved the problem for the 4 users I was working closely with.
- Improved error reporting for connection problems with SpoolMan.
Main focus: tighter integration with spoolman
- Better integration with spoolman db. Printer name and gate assignment will be reflected in the spoolman db (requires spoolman >= 0.18.1)
- Now three modes of spoolman integration:
readonlythe former mode,pushthe former augmented with the updating of assigned gate directly in spoolman, andpullwhere the gate map is defined by what is in spoolman. Useful in larger print farms. This is controlled via a newspoolman_supportparameter. Details here - New
MMU_SPOOLMANcommand for performing gate related management (updates) to spoolman db - New innovative automatic TTG mapping strategies. Controlled by
variable_automap_strategy. Essentially this is applied after reading the slicer tool map to ensure mapping to the correct gate even if the MMU is loaded incorrectly. Strategies include: 'none', 'filament_name', 'material', 'color', 'closest_color', 'spool_id'. Details here - Moonraker plugin now parses the filament names and includes in slicer tool map and mmu gate maps
- Mainsail integration: Extruder/Filament colors and other filament attributes from spoolman are displayed in UI. Also there are controls on what color to display:
slicer,gatemap(hiding unused filaments),allgatesfor the full gate map. Controlled with the newt_macro_colorparameter. Details here 🆒
Other features/updates:
- Can now use LEDs without led_effects being installed. A new
variable_led_animation_enablehas been added to control this behavior and will simply be forced to False if led_effects module isn't installed. It can also be controlled fromMMU_LED ANIMATION=[0|1]. LED updates have also been made slightly more efficient. Details in this Wiki - Consumption counters now automatically track servo arm movement and filament cutting for automatic maintenance warnings - no need to add macros yourself. Remember
MMU_STATS SHOWCOUNTS=1to view current counts. - Now incorporates a filament "tightening" move after loading the toolhead if synced extruder is turned off. This is to prevent false clog detection when the slack in the bowden is greater than the clog detection length
- New
variable_user_park_move_macrocan be used to customized the movement to the park position instead of default straight line move (Issue #351). - New printer variables:
printer.mmu.gate_filament_nameandprinter.mmu.spoolman_support - Fixed issue when the loaded slicer tool map could be reset during print start.
- Several PR's incorporated and bug fixes to address reported Issues.
- Slight changes to stepper synchronization that should help with TTC and stepcompress errors.
- Lots of wiki updates (see links above).
- Tolerance to in Danger Klipper "bleeding edge" added. Comes without warantee!
- Fixed (cosmetic) problem where the load/unload distances in the console animation weren't consistent (Issue #348)
- Added sanity checks to MMU_COLDPULL parameters so it can be called from Mainsail UI (Issue #362)
- Exposed
preload_retriesparameter to extend the time Happy Hare tries to automatically load a spool once the pre-gate sensor has been triggered (Issue #360) - Added
variable_min_toolchange_z(mmu_macro_vars.cfg) to specify the floor at which any toolchange movement will occur to prevent scraping the bed if no z-hop is specified. - Project against klipper's new habit of setting toolhead position slightly out of range after homing - save position will ensure it is in range.
- Octoprint compatibity option has been removed from mmu_macro_vars .. not necessary to ensure compatibility anymore
- Wiki page on macro customization has been improved.
- Bloblifier macro update that adds "safe decend logic" to ensure toolhead doesn't hit parts of the print.
Main focus on this release is the reduction of blobing, stringing and tuning for beautiful prints Read here. Most issues are because of incorrect toolhead parameters and the former lack of a retract setting when the toolhead is moving. Both of those are now solved with automated toolhead calibration (including tip cutting variables) and an new z-hop ramp setting:
- Added new
MMU_CALIBRATE_TOOLHEADcommand for automated measurement oftoolhead_extruder_to_nozzle,toolhead_sensor_to_nozzle,toolhead_entry_to_extruderandtoolhead_ooze_reduction. Read the doc but this will eliminate incorrect "trial and error" values for these key dimensions. - Added new
toolchange_retractandtoolchange_retract_speedparameters to allow for retraction at the time of "z-hop" and un-retract as print resumes. - Added new
z_hop_rampparameter to control how the toolhead move off the print to help break stringing. It allow the definition of a horizonal move on top of the "z-hop". The direction will be towards the center of the print area. The toolhead will ramp up and away from the print and then move back to original position above starting point.z_hop_speedshould be increased closer to your x,y travel speed - Updated
form_tipandcut_tipmacros (and Blobifer) to correctly compensate fortoolhead_ooze_reductionandtoolchange_retract - Blobifier automatically calculates "additional purge" volume basaed on filament left in the hotend based on calibration rather than having to compensate by altering slicer purge map
- New printer.mmu variables.. 'extruder_filament_remaining', 'extruder_residual_filament', 'toolchange_retract' for use in your own macros
- Removed some minor pauses when resuming print
- New
MMU_COLD_PULLhelper command. Useful in its own right but essential for the new toolhead calibration. Check it out - it can work in a completely automated way (https://github.com/moggieuk/Happy-Hare/wiki/Blobbing-and-Stringing#---cleaning-extruder-with-a-cold-pull)
Other new features include:
- Help address one of the Timer Too Close error conditions - Klipper has a less than optimal "save-variable" implementation can can cause problems with old/slower SD-cards. To workaround this HH now includes a batch update so all the HH overhead is combined into one or two calls rather than the previous 10 or so. You can see a "mmu__revision" added to you
mmu_vars.cfgthat increments on every write. - Couple more bug fixes (erroneous load errors) when using the
EXTRUDER_ONLY=1flag on extruder loading/unloading without using bypass - Added
gate_autoloadparameter to allow the pre-gate sensor autoload feature to be disabled - Enhanced EndlessSpool functionality with
endless_spool_eject_gateoption allow for one gate to marked the waste gate ('W' in status) so that filament fragments will be sent to this gate rather than current gate. Allows for a "dump shoot" and prevents possible tangling when buffering on certain buffer designs where retracted filament end can escape into neighboring buffers. The default value of-1will use the current gate. - Change parameter name
extruder_homing_currenttoextruder_collision_homing_currentto be more precise on meaning (upgrade will have made this change for you) - Improved
MMU_STATUS SHOWCONFIG=1functionality - New installer support:
- For new MMU's boards
- For GDW DS041MG servo option with Siboor ERCFv2 kits
- New
servo_always_activeparameter for servos that require continuous PWM signal (like GDW DS041MG). Use with caution! -
MMU_CHECK_GATEnow defaults to current gate when invoked with no arguments.ALL=1flag to force checking all gates. - New Wiki content and enhancements to existing pages
- Bug fixes: one condition that could result in klipper "stepcompress" error
- Doc converted to Wiki and removed from distribution. Old doc links will be invalid
- Fixed incorrect doc in
mmu_macro_vars - Bug: Fixed user defined load/unload_sequence macro names (previously would always look for default names)
- Add all slicer tools to the "slicer_tool_map" (unused tools only visible with DETAIL=1 flag).
- Set color on Tx macros so color can be seen in Mainsail / Fluidd UI's. Requires refresh of Mainsail screen because it doesn't update dynamically :-(
The release provides more flexibilty in tool change movement, introduces consumption counters, optimizes statistics output
- New (moonraker) pre-processing option to lookahead for next print location to allow for option to move to the NEXT print position on completion of tool change. Requires addition to
[mmu_server]section ofmoonraker.conf:enable_toolchange_next_pos: True-
variable_restore_xy_poscan now be "none", "last" or "next" (next being new functionality)
- Augmented
MMU_STATSfunctionality to provide "consumption counters" that can warn or even pause your print when threshold is exceeded - New doc page to explain statistics and consumption counters
- New doc page to explain spoolman config and use
- Elimination of "h" option to ERCFv2 MMU - ThumperBlock are not a compatible 23mm wide so no longer required
- More accurate timing of tool change phases
- Defaults for "white" and "black" filament can not be configured in
mmu_macro_vars.cfg - Fixes to
printer.mmu.runoutandprinter.mmu.last_toolfor better accuracy at all possible times - Filament remaining in toolhead is now tracked accross reboots / restarts to prevent over extruding initial load
-
custom_coloris now a more intuitiveslicer_colorand set with theMMU_SLICER_TOOL_MAPcommand (MMU_START_SETUP does this for you) - New config parameter
extruder_temp_varianceto specify the +/- delta allowable when waiting for extruder temperature - Updates and to bloblifier macro (needs latest klipper)
- Allow specifying spool_id in advance for supporting RFID readers. You can read more about it here
This release centralizes macro configuration and extends will a lot more pre-packaged options
- Macro config moved into a unified
mmu_macro_vars.cfg. - Default macros have become read-only with a formal way to add custom extensions
- New recommended "print_start" and end integration
- New
MMU_SLICER_TOOLS_MAPcommand that is used by the "print_start" and for easy integration of non-wipetower purge options like the excellent "Blobifier" E.g.
> MMU_SLICER_TOOL_MAP DETAIL=1
--------- Slicer MMU Tool Summary ---------
2 color print (Purge volume map loaded)
T0 (Gate 0, ASA, ff0000, 245°C)
T1 (Gate 1, ABS+, 00fe02, 240°C)
T6 (Gate 6, ABS, 0310fe, 240°C)
Initial Tool: T0
-------------------------------------------
Purge Volume Map:
To -> T0 T1 T2 T3 T4 T5 T6 T7 T8
T0 - 200 210 210 200 200 200 210 210
T1 200 - 210 210 200 200 200 210 210
T2 210 210 - 220 210 210 210 220 220
T3 210 210 220 - 210 210 210 220 220
T4 200 200 210 210 - 200 200 210 210
T5 200 200 210 210 200 - 200 210 210
T6 200 200 210 210 200 200 - 210 210
T7 210 210 220 220 210 210 210 - 220
T8 210 210 220 220 210 210 210 220 -
- New Tip Forming and Purging doc
- New printer variables:
printer.mmu.slicer_tool_map.initial_toolprinter.mmu.slicer_tool_map.tools.<tool_num>.material|color|tempprinter.mmu.slicer_tool_map.purge_volumes-
printer.mmu.runoutwhich is true during runout toolchange -
printer.mmu.active_gatemap of a attributes of current filament (like color, material, temp,..)
- Z-hop modfications:
- By default HH will not return to pre-toolchange position (will only restore z-height).
- New
variable_restore_xy_pos: True|Falseto control sequence macros return to starting pos or let the slicer do it. This has benefit when printing without a wipe tower so the print is not contaminated at the point of tool-change
- New "addons" folder for recommended third-party extensions with ready-to-use configs
- Includes @kevinakasam's "EREC" filament cutter logic for cutting at the MMU (ERCF specific)
- Includes @dendrowen's excellent "Blobifier" - intelligent purging that doesn't require a wipe tower!! (Any MMU)
- Enhanced
MMU_SENSORScommand for quick review of all mmu sensors - New (optional) popup dialog option in Mainsail/KlipperScreen/Fluidd when MMU pauses on error
- Two new pre-processing placeholders: !materials! and !purge_volumes!
- Also, thanks to the Blobifer author, @dendrowen, the "MMU Statistics" has been given some love with new layout and some new customization. For both total stats and current job status. See
console_stat_*options inmmu_parameters.cfg). Note advanced formatting on Python3 only.
MMU Statistics:
+------------+-----------------------+--------------------------+----------+
| 1895(1230) | unloading | loading | complete |
| swaps | pre | - | post | pre | - | post | swap |
+------------+------+---------+------+------+---------+---------+----------+
| total | 0:47 | 6:54:24 | 0:02 | 0:02 | 5:35:31 | 6:40:30 | 20:05:52 |
| └ avg | 0:00 | 0:13 | 0:00 | 0:00 | 0:10 | 0:12 | 0:35 |
| this job | 0:36 | 4:26:51 | 0:01 | 0:01 | 3:34:34 | 4:34:54 | 13:22:01 |
| └ avg | 0:00 | 0:12 | 0:00 | 0:00 | 0:10 | 0:13 | 0:38 |
| last | 0:00 | 0:12 | 0:00 | 0:00 | 0:10 | 0:17 | 0:42 |
+------------+------+---------+------+------+---------+---------+----------+
11:43:27 spent paused over 10 pauses (All time)
8:15:38 spent paused over 3 pauses (This job)
Number of swaps since last incident: 105 (Record: 1111)
Gate Statistics:
#0: 😎, #1: 😎, #2: —, #3: —, #4: —, #5: —, #6: 😎, #7: —, #8: —
- Bug fixes reported via github "Issues"
- Added capability to install to auto-check github to ensure the latest version and to switch branches with
-b <branch name>option
- New placeholder preprocessing for colors and filament temps pulled from you slicer ( !colors! and !temperatures! ). See here
- LED update: New effect
custom_color. This will display colors stored for each gate based on user setting. One example use is to render the colors used in the slicer so you can visually compare with what is loaded. Documentation is in the gcode pre-processing section. - Improved movement "sequence" macros. These now work better when not completely homed (e.g. z-hop is optional.
- CUT_TIP macro now has option to control whether movement goes back to wipetower or not after cut
- Faster pausing on runout
- Fix for not automatically engaging the sync/servo after fixing error and resuming.
- New Slicer Setup doc on how to setup your slicer to disable tip forming
- New Toolchange Movement doc on how to setup toolhead movement during toolchange or error
- Couple of new states to filament movement. These are to enable and display of various other sensors such as a gate sensor (option to encoder) and pre-entry extruder sensor.
- New rendering of filament position in console (and KlipperScreen-HH) showing all sensor options if fitted
- Imporved use of miscellaneous sensors to detect errors or non-errors
- Cleanup of the status displays of various commands
MMU_GATE_MAP,MMU_TTG_MAP,MMU_ENDLESS_SPOOL - New encoder calibration routine that allows calibration that "remembers" gate homing point and compensates for space between gate sensor and encoder if both are fitted
- Other bug fixes report in github "Issues"
- Fixes / update to the way toolhead movement occurs through the "sequence macros" like
_MMU_PRE_UNLOADand_MMU_POST_LOADetc.- Also if enabled these will now work while not actively printing (that was an oversight)
- These macros also play nicely with Klippain pause/resume macros now
- The z_hop_height_error has been deprecated. Additional z_hop height can be configured in the macro variables at the start of mmu_sequence.cfg
- LED update
- Better error feedback on LED misconfiguration
- Fix for led index when order of reversed.
- Updated LED support with lots more "multi-segment" flexibility
- New servo calibration - to fine tune and save without klipper restart!
- New full set of default toolhead positioning macros (defined in
mmu_sequence.cfg) - Full support for pre-extruder sensor option (prior to extruder entry)
- Exposed vendor-specific params (including the "cad_" set -- see doc at bottom of
mmu_parameters.cfg) - Full support for Tradrack including installer
- New manual bowden calibration for setups without encoder
- Workaround for CANbus comms timeout that is plaguing klipper
- Much improved
MMU_STATUS SHOWCONFIG=1. It will tell you in english what loading and unload sequence you have based on dynamic changes withMMU_TEST_CONFIGor sensor disable/enable. - EndlessSpool is now available on tool load
- Sync feedback sensor support .. I.e support for Annex Belay or another other sensor including proportional feedback. doc
- Improved "tip forming" test procedure and
MMU_FORM_TIPcommand - Fixed silly bug in spoolman integration where spool_id was being used to search as filament_id
- New
toolhead_ooze_reductionparameter for tuning without messing with what should be fixed extruder measurements. Doc page to follow - Refined toolhead unloading with better detection of incorrect config
- Cleanup and separation of config files based on function
- Lots of new/updated doc
-
Better Spoolman integration: will now pull material and colors from spoolman in addition to activating the spool
-
Allow the LED effects to be configure anywhere on a chain (as well as gate 0->N or N->0 ordering)
-
EndlessSpool got some love because I think it will be much more valuable with pre-gate switches and early runout detection:
a) endless_spool_on_load parameter that will activate ES on loading a tool with empty gate
b) endless_spool_final_eject distance specification for push beyond park position in an attempt to prevent filament from being accidentally re-loaded
c) Cleanup of the display on klipper console and log messages
d) Will ensure that the gate_status is at least "unknown" when MMU_REMAP_TTG is run, so attempt will always be made to load from the gate
NOTE: Requires Klipper 0.12.0 or greater
- LED support for bling, gate_status, filament color and action status, pre-gate sensor support for automated loading and gate_status setting, BTT MMB board support, integrated filametrix cutter support, new [mmu_sensors] config section of easy sensor setup. Doc improvements. New Features:
- LED (bling) support! See new page in the wiki doc
- Pre-gate sensor support: Automatically set gate_status, LED status and activate pre-load. Oh, and new earlier run-out detection of reliable EndlessSpool
- Installer updates and support for BTT MMB board
- Integrated Filament Cutter support (Filametrix)
- Improved doc. E.g. Conceptual MMU
- New [mmu_sensors] section for simple setup of filament_sensors and endstops
- Enhancements for gate_sensor as alternative or in addition to encoder
- Lots of bug fixes and minor enhancements requested.
- Version tracking and better feedback on what to do
- Enhancements to existing commands. E.g try: 'MMU_STATUS SHOWCONFIG=1'
- Replacement of manual steppers with new MMU toolhead - faster homing and movements in general, new optional
gateandextrudersensors, optional encoder, intial support for Tradrack and other customized designs. - Ever wanted to use Happy Hare on a non-ERCF MMU?
- Ever wanted to use a pre-extruder entry sensor instead of collision?
- Wanted to fit a gate sensor and not rely on encoder for loading and parking at the gate
- Want to run without an encoder? (why? 🤷 )
- Want fast (no wait) homing?
- DON'T WANT TO RECONFIGURE YOUR EXISTING EXTRUDER? 👍
- Want the latest and greatest features?
- Speed and extrusion overrides (M220/M221) support .. records overrides across tool changes (MMU_TOOL_OVERRIDES command to see/reset)
- SpoolMan support (new options to MMU_GATE_MAP for SpoolD.. see doc)
- Separate "per-print" and total swap stats! No need to clear in your print_start anymore.
- "Auto restoring" gate quality indication (the "excellent/good/../terrible" one). Slowly averages out bad results.
- New "state machine" that closes a lot of annoying corner cases that I knew about but most users hadn't found yet doc.
- New filament cutter option (Alternative
_MMU_CUT_TIPmacro) instead of tip forming andmmu_form_tip_macrosetting - MMU_UNLOCK is back (but as an optional step to resume temps). Can just call
RESUMEas well. - Better support for Octoprint users where the [print_stats] module is not available. Read up on new state machine and
_MMU_START_PRINTand_MMU_END_PRINTconventions (must read doc) - New moonraker gcode pre-processor module! Adds !referenced_tools! placeholder so you can automatically check all used tools before printing wiki
- 'MMU_FORM_TIP' command updated to allow for runtime "tuning" Any variable to the macro can be adjust (and persisted) for testing or tweaking in print (handles tip cutting macro as well)
- Config now also automatically adjusts references to "extruder" when referring to stepper (e.g. in rare [controller_fan], [homing_heaters] and [angle])
- Lots of little things/bug fixes but I lost track 🫣
- Initial Release (forked from my ERCF-Software-V3 project which is now deprecated).
- HHv2 is a rewrite to structure the software so it can support all types of MMU (only ERCF at release) and sanitize command set
- Adds total control of motor synchronization, multiple endstops (even for the extruder!!)
- Although HHv1 (aka ERCF-Software-V3) will remain available, HHv2 will be where all future enhancements will be made
- The latest KlipperScreen-Happy_Hare edition requires HHv2 (for my sanity)
- Much better doc and LOTS of new features to discover
This project continues to take considerable effort and time not to mention the cost of building many MMU prototypes. Please consider helping to support me by donating to my PayPal link in the github 🙏
(\_/)
( *,*)
(")_(") Happy Hare ReadyCopyright (C) 2022-2026 Paul Morgan
1. Introduction
2. Installation
3. Essential Configuration
5. Operation
-- YOUR MMU IS READY TO PLAY WITH --
6. Slicer-MMU Setup
-- NOW YOU ARE READY TO PRINT! --
7. Tuning
8. Optional Feature Setup
9. Advanced Configuration
10. Advanced Concepts
- State Persistence
- Statistics and Counters
- Tool and Gate Maps
- Filament Bypass
- Runout/Clog Detection
- Consumption Counters
- Synchronized Gear/Extruder
11. Quick References
12. Troubleshooting
13. FAQ
14. MCU Board Reference 🆕
15. Change Log
Happy Hare Discord
Imperfect Log Changes since V2 launch