Cet article fait partie de la Série technique Prusa XL sur INVESTEGATE.de
Tous les guides supposent que les principes fondamentaux de la Prusa XL sont corrects.
Si ce n'est pas le cas, commencez ici :
Prusa XL Basics - Principes techniques fondamentaux

ScrubbyXL est un module de nettoyage de buse pour la Prusa XL, axé sur la fiabilité. Il ajoute un nettoyage automatique avant le Mesh Bed Leveling (MBL) et des nettoyages de buse optionnels pendant l'impression (déclenchés par un code G), aidant à prévenir l'accumulation de filament sur l'extrémité de la buse - en particulier sur les longues impressions où de petits résidus peuvent faire boule de neige et entraîner des défauts ou des défaillances.
Pourquoi ScrubbyXL existe-t-il ?
La contamination de l'extrémité de la buse est l'un de ces problèmes qui commencent souvent par une petite chose et se terminent par une impression gâchée. Une minuscule tache, un résidu de PETG ou un matériau légèrement brûlé peuvent coller à la buse et être entraînés sur la première couche, interférer avec le palpage ou finalement causer des défauts de surface et des collisions sur les travaux de longue durée.
ScrubbyXL répond à ce problème avec une idée simple : n'attendez pas que le problème apparaisse - essuyez de manière proactive. La première partie se passe avant le MBL : en ajoutant une petite modification à votre code G de démarrage, la buse est nettoyée afin qu'elle puisse sonder le lit dans un état plus propre. L'objectif n'est pas d'obtenir plus de nivellement, mais des conditions plus cohérentes pendant le nivellement, ce qui permet à la première couche de bien démarrer.
La seconde partie concerne les impressions longues. ScrubbyXL peut être déclenché pendant l'impression à un intervalle défini par l'utilisateur (par exemple, toutes les N couches) à l'aide d'un code G intégré dans les paramètres de votre trancheuse. Cela permet de réduire l'accumulation graduelle qui, autrement, s'accumule pendant de nombreuses heures et peut éventuellement entraîner un échec de l'impression à la fin du travail.
Versions et configuration
Pour s'adapter à différentes configurations, ScrubbyXL existe en plusieurs variantes :
- Taille des trous de montage : M3 / M4 / M5.
- Taille des brosses en silicone : A1 ou A1 mini.
- Options de montage : magnétique (aimants insérés pendant l'impression ou collés ultérieurement) ou version fixe, entièrement vissée, sans aimants.
Je recommande la version magnétique avec des aimants insérés et la mini-brosse A1. Le montage magnétique est particulièrement pratique car vous pouvez vouloir retirer la brosse rapidement - en particulier sur le côté droit où l'outil 5 se charge/décharge au-dessus de cette zone. Pour obtenir le meilleur résultat d'essuyage, je recommande d'installer des essuie-glaces des deux côtés, mais vous pouvez aussi ne faire fonctionner qu'un seul côté et ajuster le code G en conséquence.
Télécharger le Mod ScrubbyXL pour le Prusa XL sur Printables
À quoi s'attendre
- Moins de résidus à l'extrémité des buses lors des travaux de longue durée, ce qui réduit le risque de défaillance de l'impression à un stade avancé.
- Des conditions de sondage plus propres avant le LBM, ce qui peut se traduire par une première couche plus consistante.
Codes G
Commencer les modifications du code G
- Intégration de la routine de nettoyage et d'essuyage des buses de sorte que la buse est nettoyée mécaniquement lors de la mise en service.
- Ajustement de la position d'attente de l'outil pour la température vers l'avant pour faciliter le nettoyage manuel de la buse.
- Ajout d'un indicateur sonore (bips avant l'essuyage de la buse et avant la ligne de purge) pour un meilleur retour d'information lors du démarrage.
- Commentaires
G29 P9, Il s'agit d'une mesure qui fait monter la température à un niveau trop élevé juste avant la LBM. - Décalage de 3 mm de la ligne de purge pour le premier et le dernier outil pour éviter tout contact avec le module de brossage.
- Reprise du G-code du brush-mod en laiton de Surfalex2000 pour améliorer le résultat du nettoyage (comportement plus fiable de l'essuyage).
Optimisation et correction du gcode de démarrage complet du Prusa XL pour le ScrubbyXL
Début du code G pour le Prusa XL (5TH)
M17 ; activer les steppers
M862.3 P "XL" ; vérification du modèle d'imprimante
M862.5 P2 ; vérification du niveau du code g
M862.6 P "Input shaper" ; vérification de la fonction FW
M115 U6.4.0+11974
G90 ; utilisation de coordonnées absolues
M83 ; mode relatif de l'extrudeuse
; définir la zone d'impression
M555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(première_couche_impression_max[1]) - (première_couche_impression_min[1])}
; informer sur le diamètre de la buse
{if (is_extruder_used[0])}M862.1 T0 P{diamètre_buse[0]} A{(filament_abrasif[0] ? 1 : 0)} F{(buse_high_flow[0] ? 1 : 0)}{endif}
{if (is_extruder_used[1])}M862.1 T1 P{diamètre_de_buse[1]} A{(filament_abrasif[1] ? 1 : 0)} F{(buse_high_flow[1] ? 1 : 0)}{endif}
{if (is_extruder_used[2])}M862.1 T2 P{diamètre_buse[2]} A{(filament_abrasif[2] ? 1 : 0)} F{(buse_high_flow[2] ? 1 : 0)}{endif}
{if (is_extruder_used[3])}M862.1 T3 P{diamètre_buse[3]} A{(filament_abrasif[3] ? 1 : 0)} F{(buse_high_flow[3] ? 1 : 0)}{endif}
{if (is_extruder_used[4])}M862.1 T4 P{diamètre_buse[4]} A{(filament_abrasif[4] ? 1 : 0)} F{(débit_haut[4] ? 1 : 0)}{endif}
; éteindre les appareils de chauffage inutilisés
{if ! is_extruder_used[0]}M104 T0 S0{endif}
{if ! is_extruder_used[1]}M104 T1 S0{endif}
{if num_extruders > 2 and ! is_extruder_used[2]}M104 T2 S0{endif}
{if num_extruders > 3 and ! is_extruder_used[3]}M104 T3 S0{endif}
{if num_extruders > 4 and ! is_extruder_used[4]}M104 T4 S0{endif}
M217 Z{max(zhop, 2.0)} ; fixer le saut de z du changement d'outil à 2 mm, ou la variable zhop de la tranche si elle est plus élevée
; régler la température du lit et de l'extrudeuse pour le MBL
M140 S[first_layer_bed_temperature] ; définit la température du lit
M104 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (température de la première couche [outil initial] - 10) : (type_de_filament[outil_initial] == "PC" ou type_de_filament[outil_initial] == "PA") ? (température_première_couche[outil_initial] - 25) : (type_de_filament[outil_initial] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; régler la température
Home XY
G28 XY
; essayer de choisir les outils utilisés dans l'impression
G1 F{vitesse_de_course * 60}
{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}
{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}
{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}
{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}
{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}
; sélectionner l'outil qui sera utilisé pour la mise en place de la LBM
T{initial_tool} S1 L0 D0
; ICI L'OUTIL DOIT ATTENDRE UNIQUEMENT À CAUSE DE LA BROSSE EN SILICONE
G1 Z30
G1 X145 Y-8 F{vitesse_de_course * 60}
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (température de la première couche [outil initial] - 10) : (type_de_filament[outil_initial] == "PC" ou type_de_filament[outil_initial] == "PA") ? (température_première_couche[outil_initial] - 25) : (type_de_filament[outil_initial] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; attendre la température
; rentrer Z avec l'outil MBL
M84 E ; éteindre le moteur E
G28 Z
G0 Z5 ; ajouter le jeu Z
; ICI, L'OUTIL DOIT ATTENDRE UNIQUEMENT À CAUSE DE LA BROSSE EN SILICONE
G1 Z30
G1 X145 Y-8 F{vitesse_de_course * 60}
M104 T{outil_initial} S{si is_nil(idle_temperature[outil_initial])}70{else}{idle_temperature[outil_initial]}{endif} ; définir la température de repos
M190 S[first_layer_bed_temperature] ; attendre la température du lit
G29 G ; absorbe la chaleur
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (température de la première couche [outil initial] - 10) : (type_de_filament[outil_initial] == "PC" ou type_de_filament[outil_initial] == "PA") ? (température_première_couche[outil_initial] - 25) : (type_de_filament[outil_initial] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; attendre la température
M300 S800 P200 ; indicateur PIEP
; passer à la zone de nettoyage de la buse
; nettoyage de la buse pour l'essuie-glace en SILICONE de gauche et de droite
M302 S155 ; abaisser la limite d'extrusion à froid à 155C
G1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; rétraction pour le nettoyage de la buse
M84 E ; arrêt du moteur E
--- Démarrer le nettoyage de la buse
G1 Z5 ; écarter le lit du chemin
{if initial_tool == 0 or initial_tool == 1 }
; --- Démarrer l'essuyage par buse GAUCHE ---
G1 X-2 Y-8 F24000 ; Aller au début de la zone d'essuyage
G1 X28 Y-8 F24000 ; Essuyer la passe 1
G1 X-2 Y-7.5 F24000 ; Repositionnement
G1 X28 Y-7.5 F24000 ; Essuyage de la deuxième passe
G1 X-2 Y-7 F24000 ; Repositionnement
G1 X28 Y-7 F24000 ; Essuyage passe 3
G1 X-2 Y-6.5 F24000 ; Repositionnement
G1 X28 Y-6.5 F24000 ; Essuyer la passe 4
G1 X-2 Y-6 F24000 ; Repositionnement
G1 X28 Y-6 F24000 ; Essuyage passe 5
G1 X-2 Y-6.5 F24000 ; Repositionnement
G1 X28 Y-6.5 F24000 ; Essuyer la passe 6
G1 X-2 Y-7 F24000 ; Repositionnement
G1 X28 Y-7 F24000 ; Essuyer la passe 7
G1 X-2 Y-7.5 F24000 ; Repositionnement
G1 X28 Y-7.5 F24000 ; Essuyer la passe 8
G1 X-2 Y-8 F24000 ; Repositionnement
G1 X28 Y-8 F24000 ; Essuyage de la passe 9
; --- Essuyage de la buse d'extrémité GAUCHE ---
{else}
; --- Début buse essuyage DROITE ---
G1 X332 Y-8 F24000 ; Déplacement vers le début de la zone d'essuyage
G1 X361 Y-8 F24000 ; Essuyer la passe 1
G1 X332 Y-7.5 F24000 ; Repositionnement
G1 X361 Y-7.5 F24000 ; Essuyage de la deuxième passe
G1 X332 Y-7 F24000 ; Repositionnement
G1 X361 Y-7 F24000 ; Essuyage passe 3
G1 X332 Y-6.5 F24000 ; Repositionnement
G1 X361 Y-6.5 F24000 ; Essuyer la passe 4
G1 X332 Y-6 F24000 ; Repositionnement
G1 X361 Y-6 F24000 ; Essuyage passe 5
G1 X332 Y-6.5 F24000 ; Repositionnement
G1 X361 Y-6.5 F24000 ; Essuyer la passe 6
G1 X332 Y-7 F24000 ; Repositionnement
G1 X361 Y-7 F24000 ; Essuyer la passe 7
G1 X332 Y-7.5 F24000 ; Repositionnement
G1 X361 Y-7.5 F24000 ; Essuyer la passe 8
G1 X332 Y-8 F24000 ; Repositionnement
G1 X361 Y-8 F24000 ; Essuyage de la passe 9
--- Essuyage de la buse d'extrémité DROITE ---
{endif}
G1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(vitesse de déplacement * 60)}
; nettoyage de la buse
;Commenté ci-dessous car la température est trop élevée devant le MBL.
;G29 P9 X{((((première_couche_impression_min[0] + première_couche_impression_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}
{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}
{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}
{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}
{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}
{if (is_extruder_used[0]) and initial_tool != 0}
M591 S0 ; désactivation de la détection de blocage
Prêt à imprimer la mélodie, avant la purge
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
;
; purge first tool
; Modifié. La position X est passée de 30 à 33 en raison de la brosse en silicone.
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T0 S{température_de_la_première_couche[0]}
T0 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X33 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X70 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X73 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X76 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[0]} F2400 ; rétraction
{e_retracted[0] = retract_length_toolchange[0]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[0]) ? (température_de_la_première_couche[0] + température_de_la_veille_delta) : (température_de_la_veille[0]))} T0
{endif}
{if (is_extruder_used[1]) and initial_tool != 1}
;
; purge du deuxième outil
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T1 S{température_de_la_première_couche[1]}
T1 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X150 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X110 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X107 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X104 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[1]} F2400 ; rétraction
{e_retracted[1] = retract_length_toolchange[1]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[1]) ? (température_de_la_première_couche[1] + température_de_la_veille_delta) : (température_de_la_veille[1]))} T1
{endif}
{if (is_extruder_used[2]) and initial_tool != 2}
;
; purge du troisième outil
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T2 S{température_de_la_première_couche[2]}
T2 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X210 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X250 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X253 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X256 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[2]} F2400 ; rétraction
{e_retracted[2] = retract_length_toolchange[2]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[2]) ? (température_de_la_première_couche[2] + température_de_la_veille_delta) : (température_de_la_veille[2]))} T2
{endif}
{if (is_extruder_used[3]) and initial_tool != 3}
;
; purger le quatrième outil
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T3 S{température_de_la_première_couche[3]}
T3 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X327 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X290 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X287 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X284 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[3]} F2400 ; rétraction
{e_retracted[3] = retract_length_toolchange[3]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[3]) ? (température_de_la_première_couche[3] + température_de_la_veille_delta) : (température_de_la_veille[3]))} T3
{endif}
{if (is_extruder_used[4]) and initial_tool != 4}
;
; purger le cinquième outil
; Modifié. La position X de l'OUTIL 4 est passée de 330 à 327 en raison de la brosse en silicone.
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T4 S{température_de_la_première_couche[4]}
T4 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X327 Y-4.5 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X290 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X287 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X284 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[4]} F2400 ; rétraction
{e_retracted[4] = retract_length_toolchange[4]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[4]) ? (température_de_la_première_couche[4] + température_de_la_veille_delta) : (température_de_la_veille[4]))} T4
{endif}
;
; purge initial tool
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T{outil_initial} S{température_de_la_première_couche[outil_initial]}
T{initial_tool} S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
édité. La position X de l'OUTIL 0 est passée de 30 à 33 en raison de la brosse en silicone.
; Modifié. La position X de l'OUTIL 4 est passée de 330 à 327 en raison de la brosse en silicone.
G0 X{(outil_initial == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)))} Y{(outil_initial < 4 ? -7 : -4.5)} Z10 F{(vitesse_de_déplacement * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 10)} Z0.2 F{si is_nil(filament_multitool_ramming[outil_initial])}500{else}170{endif} ; purger en se déplaçant vers la feuille
G0 X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 40)} E9 F800 ; continuer la purge et essuyer la buse
G0 X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 40) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; essuyer, se rapprocher du lit
G0 X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 40) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; essuyer, s'éloigner rapidement du lit
G1 E-{longueur_de_retrait[outil_initial]} F2400 ; rétracter
{e_retracted[initial_tool] = retract_length[initial_tool]}
M591 R ; rétablir la détection de blocage
G92 E0 ; réinitialiser la position de l'extrudeur
Avant le changement de couche Code G
Pendant l'impression, la buse est automatiquement nettoyée toutes les X couches.)
Avant le changement de couche Code G
;AVANT_CHANGEMENT_DE_COUCHE
G92 E0.0
;[layer_z]
Pendant l'impression, la buse est automatiquement nettoyée toutes les X couches. (X = 400 couches)
; --- Toutes les 400 couches : nettoyage automatique ---
{if layer_num > 0 && layer_num % 400 == 0}
Sauvegarde de la position actuelle (Buddy FW)
G1 F{vitesse_de_course * 100}
G60 S0 ; enregistrer la position XYZ actuelle
M300 S300 P200 ; indicateur PIEP
; Relever un peu Z pour plus de sécurité
G1 Z{couche_z + 5} F1000
; --- Démarrer le nettoyage de la buse ---
{if initial_tool == 0 or initial_tool == 1 }
; --- Démarrer le nettoyage des buses à GAUCHE ---
G1 X-2 Y-8 F24000
G1 X28 Y-8 F24000
G1 X-2 Y-7.5 F24000
G1 X28 Y-7.5 F24000
G1 X-2 Y-7 F24000
G1 X28 Y-7 F24000
G1 X-2 Y-6.5 F24000
G1 X28 Y-6.5 F24000
G1 X-2 Y-6 F24000
G1 X28 Y-6 F24000
G1 X-2 Y-6.5 F24000
G1 X28 Y-6.5 F24000
G1 X-2 Y-7 F24000
G1 X28 Y-7 F24000
G1 X-2 Y-7.5 F24000
G1 X28 Y-7.5 F24000
G1 X-2 Y-8 F24000
G1 X28 Y-8 F24000
; --- Essuyage de la buse d'extrémité GAUCHE ---
{else}
; --- Début buse Essuyage DROITE ---
G1 X332 Y-8 F24000
G1 X361 Y-8 F24000
G1 X332 Y-7.5 F24000
G1 X361 Y-7.5 F24000
G1 X332 Y-7 F24000
G1 X361 Y-7 F24000
G1 X332 Y-6.5 F24000
G1 X361 Y-6.5 F24000
G1 X332 Y-6 F24000
G1 X361 Y-6 F24000
G1 X332 Y-6.5 F24000
G1 X361 Y-6.5 F24000
G1 X332 Y-7 F24000
G1 X361 Y-7 F24000
G1 X332 Y-7.5 F24000
G1 X361 Y-7.5 F24000
G1 X332 Y-8 F24000
G1 X361 Y-8 F24000
--- Essuyage de la buse d'extrémité DROITE ---
{endif}
; --- Fin de l'essuyage de la buse ---
; Rétablir la position
G61 S0 ; rétablir la position XYZ enregistrée
{endif}
Bonus : Print Finish Sound
Joue une courte mélodie de fin.
Fin du code G
G4 ; attendre
{if layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Déplacer le lit vers le bas
P0 S1 ; garer l'outil
{if layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+97, max_print_height)} F300{endif} ; Déplacer le lit vers le bas
; éteindre les appareils de chauffage de l'extrudeuse
{if is_extruder_used[0]}M104 T0 S0{endif}
{if is_extruder_used[1]}M104 T1 S0{endif}
{if is_extruder_used[2]}M104 T2 S0{endif}
{if is_extruder_used[3]}M104 T3 S0{endif}
{si is_extruder_used[4]}M104 T4 S0{endif}
M140 S0 ; éteint le lit chauffant
M107 ; arrêt du ventilateur
M221 S100 ; réinitialisation du pourcentage de débit
M84 ; désactiver les moteurs
Mélodie de finition
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
M77 ; arrêt de la minuterie d'impression
; max_layer_z = [max_layer_z]
En option : Modulation supplémentaire de la brosse en laiton MBL de Surfalex2000
Si vous souhaitez également utiliser le modèle de brosse à laiton MBL de @Surfalex2000:
Début du code G pour le Prusa XL (5TH)
M17 ; activer les steppers
M862.3 P "XL" ; vérification du modèle d'imprimante
M862.5 P2 ; vérification du niveau du code g
M862.6 P "Input shaper" ; vérification de la fonction FW
M115 U6.4.0+11974
G90 ; utilisation de coordonnées absolues
M83 ; mode relatif de l'extrudeuse
; définir la zone d'impression
M555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(première_couche_impression_max[1]) - (première_couche_impression_min[1])}
; informer sur le diamètre de la buse
{if (is_extruder_used[0])}M862.1 T0 P{diamètre_buse[0]} A{(filament_abrasif[0] ? 1 : 0)} F{(buse_high_flow[0] ? 1 : 0)}{endif}
{if (is_extruder_used[1])}M862.1 T1 P{diamètre_de_buse[1]} A{(filament_abrasif[1] ? 1 : 0)} F{(buse_high_flow[1] ? 1 : 0)}{endif}
{if (is_extruder_used[2])}M862.1 T2 P{diamètre_buse[2]} A{(filament_abrasif[2] ? 1 : 0)} F{(buse_high_flow[2] ? 1 : 0)}{endif}
{if (is_extruder_used[3])}M862.1 T3 P{diamètre_buse[3]} A{(filament_abrasif[3] ? 1 : 0)} F{(buse_high_flow[3] ? 1 : 0)}{endif}
{if (is_extruder_used[4])}M862.1 T4 P{diamètre_buse[4]} A{(filament_abrasif[4] ? 1 : 0)} F{(débit_haut[4] ? 1 : 0)}{endif}
; éteindre les appareils de chauffage inutilisés
{if ! is_extruder_used[0]}M104 T0 S0{endif}
{if ! is_extruder_used[1]}M104 T1 S0{endif}
{if num_extruders > 2 and ! is_extruder_used[2]}M104 T2 S0{endif}
{if num_extruders > 3 and ! is_extruder_used[3]}M104 T3 S0{endif}
{if num_extruders > 4 and ! is_extruder_used[4]}M104 T4 S0{endif}
M217 Z{max(zhop, 2.0)} ; fixer le saut de z du changement d'outil à 2 mm, ou la variable zhop de la tranche si elle est plus élevée
; régler la température du lit et de l'extrudeuse pour le MBL
M140 S[first_layer_bed_temperature] ; définit la température du lit
M104 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (température de la première couche [outil initial] - 10) : (type_de_filament[outil_initial] == "PC" ou type_de_filament[outil_initial] == "PA") ? (température_première_couche[outil_initial] - 25) : (type_de_filament[outil_initial] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; régler la température
Home XY
G28 XY
; essayer de choisir les outils utilisés dans l'impression
G1 F{vitesse_de_course * 60}
{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}
{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}
{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}
{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}
{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}
; sélectionner l'outil qui sera utilisé pour la mise en place & MBL
T{initial_tool} S1 L0 D0
; ICI L'OUTIL DOIT ATTENDRE UNIQUEMENT À CAUSE DE LA BROSSE EN SILICONE
G1 Z30
G1 X145 Y-8 F{vitesse_de_course * 60}
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (température de la première couche [outil initial] - 10) : (type_de_filament[outil_initial] == "PC" ou type_de_filament[outil_initial] == "PA") ? (température_première_couche[outil_initial] - 25) : (type_de_filament[outil_initial] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; attendre la température
; rentrer Z avec l'outil MBL
M84 E ; éteindre le moteur E
G28 Z
G0 Z5 ; ajouter le jeu Z
; ICI, L'OUTIL DOIT ATTENDRE UNIQUEMENT À CAUSE DE LA BROSSE EN SILICONE
G1 Z30
G1 X145 Y-8 F{vitesse_de_course * 60}
M104 T{outil_initial} S{si is_nil(idle_temperature[outil_initial])}70{else}{idle_temperature[outil_initial]}{endif} ; définir la température de repos
M190 S[first_layer_bed_temperature] ; attendre la température du lit
G29 G ; absorbe la chaleur
M109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*MBL160.*/) ? 160 : (filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (température de la première couche [outil initial] - 10) : (type_de_filament[outil_initial] == "PC" ou type_de_filament[outil_initial] == "PA") ? (température_première_couche[outil_initial] - 25) : (type_de_filament[outil_initial] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; attendre la température
M300 S800 P200 ; indicateur PIEP
; passer à la zone de nettoyage de la buse
; montage de la brosse à buse Surfalex2000 sur Printables
; https://www.printables.com/model/644817-prusa-xl-series-front-nozzle-srcubber-for-use-with
G1 E-10 F2400 ; plus de rétraction pour compenser le suintement avant le nettoyage de la buse
Démarrer le cycle de brossage de la buse Surfalex2000
; --- Démarrer le cycle de brossage de la buse (rampe de vitesse) ---
G1 X160 Y-5 Z5 F8000
G1 X160 Y-5 Z1 F8000
; --- Zyklus 1 (langsam) ---
G1 X200 Y-5 F8000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
; --- Zyklus 2 (mittel) ---
G1 X200 Y-5 F14000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
; --- Zyklus 3 (schnell) ---
G1 X200 Y-5 F16000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
; --- Zyklus 4 (schnell) ---
G1 X200 Y-5 F20000
G1 X200 Y-4
G1 X160 Y-4
G1 X160 Y-6
G1 X200 Y-6
G1 X200 Y-5
G1 X160 Y-5
G1 X160 Y-5 Z5 F20000 ; cycle de brossage des buses
Fin du cycle de brossage des buses surfalex2000
; nettoyage de la buse pour l'essuie-glace en silicones gauche et droit
M302 S155 ; abaisser la limite d'extrusion à froid à 155C
G1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; rétraction pour le nettoyage de la buse
M84 E ; arrêt du moteur E
--- Démarrer le nettoyage de la buse
G1 Z5 ; écarter le lit du chemin
{if initial_tool == 0 or initial_tool == 1 }
; --- Démarrer l'essuyage par buse GAUCHE ---
G1 X-2 Y-8 F24000 ; Aller au début de la zone d'essuyage
G1 X28 Y-8 F24000 ; Essuyer la passe 1
G1 X-2 Y-7.5 F24000 ; Repositionnement
G1 X28 Y-7.5 F24000 ; Essuyage de la deuxième passe
G1 X-2 Y-7 F24000 ; Repositionnement
G1 X28 Y-7 F24000 ; Essuyage passe 3
G1 X-2 Y-6.5 F24000 ; Repositionnement
G1 X28 Y-6.5 F24000 ; Essuyer la passe 4
G1 X-2 Y-6 F24000 ; Repositionnement
G1 X28 Y-6 F24000 ; Essuyage passe 5
G1 X-2 Y-6.5 F24000 ; Repositionnement
G1 X28 Y-6.5 F24000 ; Essuyer la passe 6
G1 X-2 Y-7 F24000 ; Repositionnement
G1 X28 Y-7 F24000 ; Essuyer la passe 7
G1 X-2 Y-7.5 F24000 ; Repositionnement
G1 X28 Y-7.5 F24000 ; Essuyer la passe 8
G1 X-2 Y-8 F24000 ; Repositionnement
G1 X28 Y-8 F24000 ; Essuyage de la passe 9
; --- Essuyage de la buse d'extrémité GAUCHE ---
{else}
; --- Début buse essuyage DROITE ---
G1 X332 Y-8 F24000 ; Déplacement vers le début de la zone d'essuyage
G1 X361 Y-8 F24000 ; Essuyer la passe 1
G1 X332 Y-7.5 F24000 ; Repositionnement
G1 X361 Y-7.5 F24000 ; Essuyage de la deuxième passe
G1 X332 Y-7 F24000 ; Repositionnement
G1 X361 Y-7 F24000 ; Essuyage passe 3
G1 X332 Y-6.5 F24000 ; Repositionnement
G1 X361 Y-6.5 F24000 ; Essuyer la passe 4
G1 X332 Y-6 F24000 ; Repositionnement
G1 X361 Y-6 F24000 ; Essuyage passe 5
G1 X332 Y-6.5 F24000 ; Repositionnement
G1 X361 Y-6.5 F24000 ; Essuyer la passe 6
G1 X332 Y-7 F24000 ; Repositionnement
G1 X361 Y-7 F24000 ; Essuyer la passe 7
G1 X332 Y-7.5 F24000 ; Repositionnement
G1 X361 Y-7.5 F24000 ; Essuyer la passe 8
G1 X332 Y-8 F24000 ; Repositionnement
G1 X361 Y-8 F24000 ; Essuyage de la passe 9
--- Essuyage de la buse d'extrémité DROITE ---
{endif}
G1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(vitesse de déplacement * 60)}
; nettoyage de la buse
;Commenté ci-dessous car la température est trop élevée devant le MBL.
;G29 P9 X{((((première_couche_impression_min[0] + première_couche_impression_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}
{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}
{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}
{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}
{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}
{if (is_extruder_used[0]) and initial_tool != 0}
M591 S0 ; désactivation de la détection de blocage
Prêt à imprimer la mélodie, avant la purge
M300 S1200 P150
G4 P200
M300 S1500 P150
G4 P200
M300 S1800 P300
G4 P500
;
; purge first tool
; Modifié. La position X est passée de 30 à 33 en raison de la brosse en silicone.
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T0 S{température_de_la_première_couche[0]}
T0 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X33 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X70 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X73 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X76 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[0]} F2400 ; rétraction
{e_retracted[0] = retract_length_toolchange[0]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[0]) ? (température_de_la_première_couche[0] + température_de_la_veille_delta) : (température_de_la_veille[0]))} T0
{endif}
{if (is_extruder_used[1]) and initial_tool != 1}
;
; purge du deuxième outil
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T1 S{température_de_la_première_couche[1]}
T1 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X150 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X110 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X107 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X104 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[1]} F2400 ; rétraction
{e_retracted[1] = retract_length_toolchange[1]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[1]) ? (température_de_la_première_couche[1] + température_de_la_veille_delta) : (température_de_la_veille[1]))} T1
{endif}
{if (is_extruder_used[2]) and initial_tool != 2}
;
; purge du troisième outil
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T2 S{température_de_la_première_couche[2]}
T2 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X210 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X250 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X253 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X256 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[2]} F2400 ; rétraction
{e_retracted[2] = retract_length_toolchange[2]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[2]) ? (température_de_la_première_couche[2] + température_de_la_veille_delta) : (température_de_la_veille[2]))} T2
{endif}
{if (is_extruder_used[3]) and initial_tool != 3}
;
; purger le quatrième outil
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T3 S{température_de_la_première_couche[3]}
T3 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X327 Y-7 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X290 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X287 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X284 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[3]} F2400 ; rétraction
{e_retracted[3] = retract_length_toolchange[3]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[3]) ? (température_de_la_première_couche[3] + température_de_la_veille_delta) : (température_de_la_veille[3]))} T3
{endif}
{if (is_extruder_used[4]) and initial_tool != 4}
;
; purger le cinquième outil
; Modifié. La position X de l'OUTIL 4 est passée de 330 à 327 en raison de la brosse en silicone.
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T4 S{température_de_la_première_couche[4]}
T4 S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
G0 X327 Y-4.5 Z10 F{(travel_speed * 60)} ; se rapprocher du bord de la feuille
G0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purger en se rapprochant de la feuille
G0 X290 E9 F800 ; poursuivre la purge et essuyer la buse
G0 X287 Z0.05 F8000 ; essuyer, se rapprocher du lit
G0 X284 Z0.2 F8000 ; essuyer, s'éloigner rapidement du lit
G1 E{-retract_length_toolchange[4]} F2400 ; rétraction
{e_retracted[4] = retract_length_toolchange[4]}
G92 E0 ; réinitialisation de la position de l'extrudeur
M104 S{(is_nil(idle_temperature[4]) ? (température_de_la_première_couche[4] + température_de_la_veille_delta) : (température_de_la_veille[4]))} T4
{endif}
;
; purge initial tool
;
G1 F{vitesse_de_course * 60}
P0 S1 L2 D0 ; garer l'outil
M109 T{outil_initial} S{température_de_la_première_couche[outil_initial]}
T{initial_tool} S1 L0 D0 ; prélever l'outil
G92 E0 ; réinitialisation de la position de l'extrudeur
édité. La position X de l'OUTIL 0 est passée de 30 à 33 en raison de la brosse en silicone.
; Modifié. La position X de l'OUTIL 4 est passée de 330 à 327 en raison de la brosse en silicone.
G0 X{(outil_initial == 0 ? 33 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 327)))} Y{(outil_initial < 4 ? -7 : -4.5)} Z10 F{(vitesse_de_déplacement * 60)} ; se rapprocher du bord de la feuille
G0 E{si is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 10)} Z0.2 F{si is_nil(filament_multitool_ramming[outil_initial])}500{else}170{endif} ; purger en se déplaçant vers la feuille
G0 X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 40)} E9 F800 ; continuer la purge et essuyer la buse
G0 X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 40) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; essuyer, se rapprocher du lit
G0 X{(outil_initial == 0 ? 33 : (outil_initial == 1 ? 150 : (outil_initial == 2 ? 210 : 327))) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 40) + ((outil_initial == 0 ou outil_initial == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; essuyer, s'éloigner rapidement du lit
G1 E-{longueur_de_retrait[outil_initial]} F2400 ; rétracter
{e_retracted[initial_tool] = retract_length[initial_tool]}
M591 R ; rétablir la détection de blocage
G92 E0 ; réinitialisation de la position de l'extrudeur



