Aller au contenu

Anycubic Kobra 3 Combo

PPAC

Modérateurs Globaux
  • Compteur de contenus

    9 151
  • Inscrit(e) le

  • Dernière visite

  • Jours remportés

    154

À propos de PPAC

Citation

  • "Poulet Prêt à Cuire"

Contact

Information

  • Genre
    Non renseigné
  • Lieu
    Pas très loin de Tours (37)
  • Imprimantes
    Ender-3 V3 (CoreXZ), SE et KE. Kobra 2 Pro. Q1 Pro. Halot-Mage Pro. Jupiter. Mono X2.

Visiteurs récents du profil

Le bloc de visiteurs récents est désactivé et il n’est pas visible pour les autres utilisateurs.

Récompenses de PPAC

Grand Master

Grand Master (14/14)

  • Well Followed Rare
  • One Year In
  • Problem Solver Rare
  • Reacting Well Rare
  • Dedicated

Badges récents

4,5k

Réputation sur la communauté

65

Sujets solutionnés !

Favoris

  1. PLA type, résistance et recuisson ...
    Qui connait le PLA haute température ?
    Il y a 2 heures, ixi a dit :

    Salut

    ça tombe bien que @filament-abs.fr passe ici, dans les filaments résistants, j'avais aussi acheté une bobine de EXTRUDR GREENTEC PRO CARBON.

    C'est un filament qui s'imprime très bien avec une buse 0.4 , belle finition, adhérence des couches parfaite ,pas de warping, résistant à +100° sans cuisson, 

    mais est difficilement utilisable avec des diamètres de buse plus gros.

    Mais question : quel est ce thermoplastique ? 

    Jamais testé, désolé. Mais j'ai entendu du bien de ce fil et de cette marque. Qu'est-ce que la base? Du PLA?

    Que se passe-t-il avec des buses >0.4mm ?

    Il y a 2 heures, 2cv001 a dit :

    Effectivement, le 3D870 a l'air intéressant :

    https://www.filament-abs.fr/pro)duit/filament-pla-3d850-noir/?ref=contact16

    Si j'ai bien compris, résiste à 144 ° (à priori sans cuisson). Me semble énorme (?)

    Ha non, c'est après recuisson. Ça serait trop beau! 🙂

     

    Il y a 2 heures, 2cv001 a dit :

    Au passage : je n'ai pas compris la différence entre le 2D850 et le 3D870. (?)

    Le 870 est aussi solide (sinon plus) qu'un ABS sans recuisson.

    le 850 est un peu plus solide qu'un PLA.

    L'intérêt avec ces deux grades, c'est la vitesse d'impression que l'on peut pousser sans problème 140mm/s. A condition d'avoir une imprimante aussi rapide, bien évidemment.

    Ce sont deux PLA conçus spécialement pour l'impression 3D contrairement au 4043 qui est utilisé par quasiment toute l'industrie de l'impression 3D et qui est un PLA classique.


  2. klipper trucs
    Mon imprimante est (enfin) Klippérisée ! il suffisait de franchir le pas
    Il y a 4 heures, ixi a dit :

    tout simplement fabuleux !

    Marlin a des soucis à se faire 😉

    La Sonic Pad, c'est du bon matériel avec les imprimantes Creality «stock». Dommage quant à leur  choix de l'OS (OpenWRT) et d'une sérieuse «déviation» par rapport à l'installation des éléments de base (Klipper, Moonraker, Fluidd, Mainsail, pas de KlipperScreen mais un navigateur et pas mal de Qt).

    Klipper comme tout firmware nécessitera de se plonger un peu (pas mal) dans sa documentation pour aller plus loin.

    La compensation de résonance (input shaping) est efficace mais nécessite d'être refaite en cas de re tension des courroies, déplacement de l'imprimante, … .

    Ne pas oublier, une fois faite d'utiliser les valeurs d'accélérations maximales indiquées en fonction du modèle de compensation (section printer).

    En plus ça permet d'obtenir de beaux graphes :

    Révélation

    shaper_calibrate_x_20221206.png.f6bd09e322b899f859130017f06dcba9.pngshaper_calibrate_y_20221206.png.75a855c879bf2a9e57d6ea56d8ff4a13.png

    Un autre réglage fort pratique est l'avance de pression (pression advance) qui permet, quand bien réglée, d'atténuer encore plus le stringing et également de réduire la rétraction. Par contre ce réglage (PA) dépend du type de filament et donc demande de faire des tests (très rapides avec ce test). La lecture du reste de cette documentation est fort instructive.

    Bonnes fêtes de fin d'année

    🙂


  3. klipper bases
    Mon imprimante est (enfin) Klippérisée ! il suffisait de franchir le pas
    Il y a 22 heures, ixi a dit :

    Je suis également surpris de l'abondance de la  documentation Klipper, et surtout des explications .

    Pour les allergiques à la langue de Shakespeare, la traduction en français se poursuit (lentement mais sûrement 😉 ) . 

    Un aperçu de la documentation en français => https://github.com/Klipper3d/klipper-translations/tree/translations/docs/locales/fr

    43% fait, reste le complément à réaliser pour arriver à 100%:

    weblate-klipper-20221224.thumb.jpg.0d51fba93ccc96a103b5d4f28b1d4042.jpg

    🙂


  4. "3MF Core Specification" et "3MF Production Extension"
    Problème d'ouverture des fichiers 3MF pour upgrade de la P1P

    Pour résumer :

    1. Le format 3MF est une spécification. Avec plusieurs variantes. Bambu Studio implémente / utilise deux parties de cette spécification : "3MF Core Specification" et "3MF Production Extension"

    2. De nombreux slicers (à l'heure actuelle), comme Prusa ou SuperSlicer, n'implémentent pas la partie "3MF Production Extension"

     

    Donc : 

    1. Dans Bambu Studio, on peut importer n'importe quel .3mf (produit par Bambu Studio OU par n'importe quel autre slicer)

    2. Dans Bambu Studio, on peut charger un .m3f "étendu" générer avec Bambu Studio (forcément) et l'exporter au format "simple" ("3MF Core Specification") directement compatible avec tous les autres slicers (depuis la 1.2 de Bambu Studio) (c'est l'option Export > "Generic 3MF")

    image.png.74f06ee6c4f59ebd8ac82d0cd4c14363.png

     

    A noter

    - Les .3MF sont juste des .ZIP, vous pouvez les ouvrir avec P7ZIP (ou autre) pour voir le contenu (XML, .model, ...).

    image.png.53c868b935dcaf5a56dfdd6f9f5fae62.png

    - Le consortium 3MF est là : https://3mf.io/, les spécs ici : https://github.com/3MFConsortium/spec_core/blob/master/3MF Core Specification.md et https://github.com/3MFConsortium/spec_production/blob/master/3MF Production Extension.md

    - Bambu Studio utilise cette extension pour une question d'optimisation : d'après eux, sur de gros modèles 3D, çà leur permet d'avoir des temps d'écriture plus rapides en sauvegarde dans Bambu Studio.

     


  5. Ender-3 v2 ... choix firmware et firmware par pommeverte
    Pas de filament en sortie

    On peut te fournir un firmware plus récent mais pour cela, il faudrait préciser certains points:

    - la référence de ton microcontroleur (STM32... ou GD32... ) et éventuellement la/les lettres écrites sur le lecteur de carte µSD:

    Citation

    1797665381_CMV4.2.2_microcontroleur.thumb.jpg.05de72d68dbf2609e553792bce3f126c.jpg

     - le modèle de ton écran: tu devras dévisser l'arrière du boitier de l'écran pour identifier si c'est un

    • DWIN
    Citation

    DWIN_Display_MB.thumb.jpg.8f25474bf52250adcf7d63a43959477d.jpg

     

    • DCAI:
    Citation

    DACAI_Display_MB.thumb.jpg.bc1c969696d12249f735d4dda0216d30.jpg

     


  6. Top qualité - FDM Hauteur de couche de 0.04 mm
    Photos De Vos Prints

    J'avais lu qu'en "théorie", la couche minimale qu'on pouvait obtenir sur une imprimante FDM était de 0.04mm ( vu qu'un "pas" du coupleur correspond à cette valeur ), j'ai voulu tester et sincèrement, tout s'est très bien déroulé et la qualité est vraiment incroyable ! On se rapproche d'une qualité SLA.....

    La lumière ne mets clairement pas en valeur le résultat mais bordel c'est HYPER propre.... 🤩

    Ender3 V2
    Vitesse 60mm/s
    Hauteur couche : 0.04mm
    T°C Buse 205°C / T°C plateau : 60°C
    Filament Eryone Gris 

     

    chiphazard.png


  7. Erreur de modèle, approx, ...
    Trous bouchés lors du tranchage

    Ce qui marche le mieux, quand j'ai un modèle récalcitrant : faire "dépasser" un tout petit peu l'intérieur du trou par rapport aux autres formes de la pièce.

    Prenons l'exemple d'un trou cylindrique vertical, typiquement un perçage dans un objet avec une face inférieure et une face supérieure.

    L'intérieur du trou est un cylindre ; en haut ce cylindre correspond dans la face supérieur à un trou en forme de cercle. De même en bas.

    Pour que le fichier STL soit valide, il faut que les triangles qui composent le cylindre aient des arrêtes et des sommets parfaitement raccordés avec les triangles des trous en forme de cercles en haut et en bas. C'est loin d'être facile. En informatique beaucoup de calculs aboutissent à des erreurs d'arrondi ; et dessin 2D et 3D, il faut gérer tous les cas particuliers qui ne manquent pas de se produire. Quand on écrit le code source d'un logiciel qui traite des formes 2D ou 3D, on ne fait pas du tout les calculs de la même façon qu'à l'école en géométrie.

    D'abord il faut que tout fonctionne dans tous les cas ; par exemple pour une équation de droite 2D :

    - à l'école on utilise Y = A * X + B

    - en informatique on va plutôt utiliser une équation paramétrique avec une variable S telle que  X = A * S + B et Y = C * S + D, avec des contraintes sur les rapports entre les coefficients A et C.

    Pourquoi ? parce que si la droite est verticale la formule scolaire ne marche pas ; en plus, elle fonctionne mal si la droite est très raide (presque verticale)

    Les erreurs d'arrondi compliquent beaucoup les choses... Par exemple si tu tournes 36 fois une forme de 10° dans le même sens, normalement tu dois retrouver la même forme qu'au départ. En informatique il faut prendre des précautions pour que ce soit le cas - par exemple conserver en mémoire la forme de départ, et stocker l'angle de rotation final pour ne faire la rotation qu'une seule fois et ne pas les accumuler l'une derrière l'autre.

    On peut aussi faire les calculs internes avec des nombres entiers (avec un facteur d'échelle, une unité = un millième de mm) ; de cette façon les coordonnées sont sur une grille régulièrement espacée (alors qu'avec des nombres à virgule flottante la précision relative est constante mais la résolution baisse de façon logarithmique avec la taille du nombre ce qui est bordelique en géométrie)

    Autre chose particulière : les ordinateurs fonctionnent en binaire, les humains comptent en base 10. En binaire, il n'y que les divisons par 2 qui sont précises, une division par 10 ou par 5 donne toujours une erreur d'arrondi ! (pareil que quand on divise par 3, par exemple 1/3 = 0.3333333333...)

    Revenons au sujet.

    Si les triangles ne sont pas parfaitement raccordés, le slicer va essayer de corriger la pièce, soit en modifiant les coordonnées des sommets des triangles, soit en ajoutant des triangles pour que tout soit bien raccordé.

    On ne se rend pas compte à quel point un fichier 3D est complexe. Cela peut sembler évident de créer un algorithme de correction automatique (par exemple "simplement" en rapprochant les points les plus proches pour les fusionner), mais il y a toujours des cas particuliers. Les pièces peuvent avoir beaucoup de petits triangles, de triangles pointus, ou de cas ambigus de chevauchement. Parfois, un seul minuscule triangle au mauvais endroit ou dans le mauvais sens va semer la pagaille car ses sommets vont fausser certaines valeurs stratégiques que l'algorithme calcule pour analyser la pièce.  L'algorithme de correction automatique qui marche bien d'habitude va alors avoir un comportement inattendu (mais logique du point de vue mathématique) et la pièce ne correspond plus à la forme désirée.

    Souvent le slicer corrige la face supérieure ou la face inférieure, ce qui a pour effet de boucher le trou seulement en haut et en bas, mais il réalise bien le trou à l'intérieur.

    On peut s'en rendre compte en parcourant le résultat du tranchage couche par couche. D'ailleurs c'est ce qu'il faut faire pour vérifier le tranchage mais surtout pour trouver où sont les endroits litigieux en cas d'échec du tranchage.

    Lorsque je n'arrive pas à corriger mon STL, je regénère ma pièce en faisant "dépasser le cylindre", c'est à dire qu'il commence un peu trop bas et se termine un peut trop haut par rapport aux faces supérieures et inférieures. Le fichier STL contient toujours des erreurs, mais cette fois-ci le slicer n'ignore plus le cylindre, le trou n'est plus bouché. 

    C'est de la méthode bourrin, mais quand un fichier STL ne passe pas, il faut parfois un peu tricher pour "aider" l'algorithme de correction.

     


  8. éviter un hyper-statisme entre les guidages lisse Z et les tiges trap Z
    Tige filetée, axe Z doit elle être maintenue en haut ou pas sur une architecture type prusa?

    Hello,

    La tige Z doit être libre, par design. Cela pour éviter un hyper-statisme entre les guidages lisse Z et les tiges trap Z.

    Si ces deux "axes" ne sont pas parfaitement parallèles, ça va forcer ou bloquer. Laisser libre un des deux côtés de la tige trap permet de la mettre comme sur une rotule.

    En pratique, il suffit de bien aligner la tige lisse et trap en plaçant le chariot au plus bas. On voit directement à l'oeil si c'est aligné au sommet ou pas, et en jouant sur le jeu des fixations moteur on arrive à ajuster facilement. Avec le jeu dans les écrous trap et la flexibilité des matériaux, on est pas au millimètre près. Laisser libre le sommet accentue cette liberté de mouvement.

    Evidemment, si les axes sont bien alignés, avec ou sans guidage au sommet, ça sera kif kif. Ce qui compte, c'est que le guidage lisse lui, ait le moins de jeu et de contrainte possible.

    Ca c'est en réfléchissant sur les jeux possibles en XY de l'axe Z. Maintenant si on se pose la question du jeu possible en Z de l'axe Z, la gravité fera que le jeu de l'écrou n'a aucun effet (le fameux backlash), mais quid des coupleurs ressort, qui font rebondir tout le chariot à chaque changement de couche ou Z-hop ? 🙂 Mine de rien, le poids de l'ensemble du chariot (axe X, moteur X, hotend) repose sur les écrous Z, mais surtout sur les coupleurs Z, puis les roulements des moteurs Z. A méditer.


  9. SLA - Quelques commentaires généraux
    [Anycubic Photon M3 Plus] Problème première couche

    Quelques commentaires généraux : 

     

    - La m3 plus est une grande imprimante. Il est donc nécéssaire que le plateau se soulève pas mal pour être sûr a 100% que même le milieu est bien décollé. Un plateau qui ne se décolle pas a 100% peut finir par donner un print qui fini par rester sur le FEP

    - En général quand ça "colle" trop sur le FEP, c'est qu'on sur-expose. Il faut réduire. 11 sec ça me parait vraiment monstrueux, même si je ne connais pas la résine en question. Le cas échéant peut-être faire des couches plus mince pour avoir a mon exposer pour les résines très opaques comme ça. Eventuellement envisager de faire ses premières print sur une résine facile, quitte à passer, une fois qu'on a un peu d'expérience, sur des résines un peu moins commode si besoin.

    - Il faut faire attention quand on fait des pièces fermées et creuse au fait que cela va former une ventouse au moment de l'impression. Ca peut facilement "casser" le print en deux, avec une partie qui reste sur le FEP, l'autre sur la plaque. Que ça démarre directement sur la plaque n'y change rien. Et oui vous pouvez sans problème démarrer tous les prints qui s'y prêtent directement sur la plaque.


  10. Blender - mode sclupt, dessiner avec des masques de textures
    Tutos Blender...

    Bonjour,

    Aujourd'hui je vous explique comment, en mode sclupt, dessiner avec des masques de textures...

    im01.thumb.jpg.1859fd8ac523b3629f6317748ee38e8f.jpg

    Pour l'exemple j'ai choisi un cube, mais cela s'applique sur toutes les formes..

    im02.thumb.jpg.b73f8e5a509ea6e5123ea4222e2a9036.jpg

    Pour avoir un bon résultat, l'objet doit avoir une bonne résolution, là j'ai appliqué le modificateur subdivision de surface au niveau 6 puis un remesh 0.2...

    im03.thumb.jpg.ba16fd5b090085d788c4174a07f64681.jpg

    Ensuite on clique sur l'icône texture et on choisit l'image correspondante, elle doit être carré...

    im04.thumb.jpg.91e219311bda5de45c75917691b6ca52.jpg

    L'image apparait dans la fenêtre de prévisualisation...

    im05.thumb.jpg.205435b364d1b725a3efe5b5af1a847f.jpg

    On passe ensuite en mode sculpture, on clique sur texture et sur l'icône à gauche pour choisir la texture...Le mieux est de prendre une image en noir et blanc.

    im06.thumb.jpg.0035d89fe58c2f6cf58006244bcde35a.jpg

    On choisit ensuite le mode de placage : Masque...

    im07.thumb.jpg.d27210e093a15ffd010602a137da9c30.jpg

    Le masque de texture apparait alors à l'écran, avec le bouton clic droit de la souris on peut le déplacer...

    im08.thumb.jpg.b06b2fdbef6e9f9252d0dbb3ecd6fd1b.jpg

    En maintenant la touche MAJ enfoncé et avec le clic droit de la souris on  modifie l'échelle  du masque...

    im09.thumb.jpg.3b8cbea7372e55e13cb4da833fb9e0dc.jpg

    En maintenant la touche CTRL enfoncé et avec le clic droit de la souris on  fait une rotation  du masque...

    im10.thumb.jpg.20fc8a8f9f54afea1a4d730d0d3a5a99.jpg

    Pour avoir une bonne définition il faut cocher Dyntopo, mettre la taille du détail à 1 et cocher ombrage doux...

    im11.thumb.jpg.4060482c725e89d54e2c2b60721c1e55.jpg

    Avec le raccourci F on modifie la taille de l'outil de manière à englober la totalité du masque, un clic gauche et c'est bon...

    im12.thumb.jpg.4e02ee5f9d413b3c6f5ae8b539ae79ad.jpg

    En modifiant l'effet de la brosse (+ ou -) on obtient un relief ou une incrustation...

    im13.thumb.jpg.b43c6be88459d2ed02ba58aca285d48a.jpg

    Pour supprimer la texture, ouvrir l'onglet texture et cliquer sur la croix...

     

     


  11. douche de sécurité
    Article sur la dangerosité des résines

    Je suis venu sur le forum car je vais me lancer dans l'impression 3D, et en plus par la résine donc je vais avoir 300K questions, mais là je vais pouvoir aider ! \o/

     

    Une douche de sécurité (quand on est pas au boulot avec des douches spéciales) c'est d'abords rincer ABONDAMMENT à l'eau "froide" (mettez pas froide, mettez tiède enfin ce qui sort de votre pommeau de douche au plus vite !!!)

    Ensuite une fois bien rincer 5mn, passer à une solution savonneuse afin que les acides gras forment des micelles qui emprisonnent les particules... pareils, n'hésitez pas ! 

    Et pour finir, un appel au centre antipoison n'est pas inutile, ne vous inquiétez pas ils vont vous laisser à la maison mais avec des consignes et enregistrer l'appel comme cela si la nuit se passe mal ils seront plus réactif.


  12. vref dual Z //
    Vrefs des moteurs en cas de double z sur un seul driver

    Salut et bienvenue sur le forum,

    Si les 2 moteurs ont les mêmes caractéristiques (résistance des bobines), alors le courant est également réparti dans les 2 moteurs (montés en parallèle). Le réglage de Vref devra donc respecter les limitations du matériel:
    - courant max supporté par le pilote
    - courant max autorisé par 1 moteur x 2 x coef sécurité (0.7 voire 0.8)
    - température des moteurs "raisonable" (< ~40/50°C)

    En pratique, tu peux conserver le même réglage de Vref pour 1 moteur ou 2 moteurs en parallèle puisque le couple des 2 moteurs devrait être équivalent à 1 seul moteur. Tant que tu n'observes pas de défaut lié à l'axe Z par manque de couple, donc des pertes de pas, tu peux garder ton réglage. sinon, tu l'augmentes de ~10%.

    PS: n'hésite pas à ajouter le nom de ton imprimante dans ton profil, c'est pratique pour te répondre. (voir ce message pour plus d'explications)


  13. Klipper config Qidi X-Max 3
    La Qidi Tech X-Max 3, revue détaillée

    Le fichier de configuration : printer.cfg

    Qiditech fournit dans ce fichier à la fois:

    • la configuration matérielle de tous les composants gérés par le firmware Klipper flashé sur les deux cartes contrôleurs
    • un ensemble de macros

    Ayant plutôt l'habitude de séparer «serviettes et torchons» ma première modification a été de scinder et réorganiser ce gros fichiers en deux parties:

    1. printer.cfg (configuration matérielle uniquement)
    2. macros.cfg (les macros QIDI utilisées via une directive [include macros.cfg] au début du fichier ci-dessus

    Analyse de la configuration matérielle

    MCU

    La X-Max 3 gère trois (3) «mcu» (micro controler unit) :

    • le principal est celui correspondant au microcontrôleur STM32F402 via une liaison série USB
      [mcu]
      # The hardware use USART1 PA10/PA9 connect to RK3328
      serial: /dev/ttyS0
      restart_method: command
    • le second est celui de la carte fille situé sur la tête, microcontrôleur STM là encore en liaison série USB
      [mcu MKS_THR]
      serial:/dev/serial/by-id/usb-Klipper_rp2040_65054E953D866458-if00
    • le troisième correspond au contrôleur de la carte (le Rockship RK3328) à l'identique d'un Raspberry Pi
      [mcu rpi]
      serial: /tmp/klipper_host_mcu

    [printer]

    La section de configuration (printer) correspondant à la cinématique de l'imprimante, ses accélérations et vitesses maximales    

    [printer]
    kinematics: corexy
    max_velocity: 600
    max_accel: 20000
    max_accel_to_decel: 10000
    max_z_velocity: 20
    max_z_accel: 500
    square_corner_velocity: 8

    Pilotes moteurs

    On trouve évidemment les déclarations de paramètres des moteurs pilotant les axes (stepper …). Les axes X et Y utilisent la mise à l'origine sans capteur permise grâce aux pilotes TMC 2209. Exemple pour le pilote de l'axe X :

    [stepper_x]
    …
    endstop_pin: tmc2209_stepper_x:virtual_endstop
    …
    [tmc2209 stepper_x]
    …
    driver_SGTHRS: 85
    …

    L'utilisation de ce mode nécessite la modification du processus de mise à l'origine via la directive [homing_override] (réduction du courant envoyé aux pilotes le temps de cette mise à l'origine) :

    Citation

    ## Modification du processus de mise à l'origine
    [homing_override]
    set_position_X: 0
    set_position_y: 0
    set_position_z: 0
    axes: xy
    gcode:
        {% set HOME_CUR = 1 %}
        {% set driver_config = printer.configfile.settings['tmc2209 stepper_x'] %}
        {% set RUN_CUR = driver_config.run_current %}
        {% set HOLD_CUR = driver_config.hold_current %}
        {% if params.X is defined %}
            SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.8}
            G28 X
            SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR}     
            BEEP I=1 DUR=100       
            G1 X10 F1200
        {% endif %}
        {% if params.Y is defined %}
            SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR * 0.9}
            G28 Y
            SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR}   
            BEEP I=1 DUR=100          
           G1 Y10 F1200
        {% endif %}
        {% if params.Z is defined %}
    #        G90
    #        G1 X{printer.toolhead.axis_maximum.x/2 - printer.probe["x_offset"]} Y{printer.toolhead.axis_maximum.y/2 - printer.probe["y_offset"]} F7800
    #        G91
            G28 Z
            G1 Z20 F600      
            BEEP I=1 DUR=100      
        {% endif %}
        {% if params.X is undefined %}
        {% if params.Y is undefined %}
        {% if params.Z is undefined %}
        G91
    #    G1 Z5 F600    
        G1 X10 F2400
        G1 Y10 F2400
        G4 P2000
        SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.8}
        G28 X
        SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR}
        BEEP I=1 DUR=100  
        G1 X10 F1200
        SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR * 0.9}
        G28 Y
        SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR}
        BEEP I=1 DUR=100        
        G90
        G1 X{printer.toolhead.axis_maximum.x/2 - printer.probe["x_offset"]} Y{printer.toolhead.axis_maximum.y/2 - printer.probe["y_offset"]} F7800
        G91
        G28 Z
        BEEP I=1 DUR=100  
        G1 Z50  F600
        {% endif %}
        {% endif %}
        {% endif %}
        SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CUR}
        SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CUR}
        M204 S10000

    Gestion des mises en chauffe et surveillance des températures

    • Lit chauffant
      [heater_bed]
      heater_pin: PC8
      sensor_type: NTC 100K MGB18-104F39050L32
      sensor_pin: PA0
      max_power: 1.0
      control: pid
      pid_kp: 71.039
      pid_ki: 2.223
      pid_kd: 567.421
      min_temp: -50
      max_temp: 125

      et la vérification de ce capteur

      [verify_heater heater_bed]
      max_error: 200
      check_gain_time: 60
      hysteresis: 5
      heating_gain: 1
    • Extrudeur

      [extruder]
      step_pin: MKS_THR:gpio5
      dir_pin: MKS_THR:gpio4
      enable_pin: !MKS_THR:gpio10
      rotation_distance: 53.5
      gear_ratio: 1628:170				
      microsteps: 16
      full_steps_per_rotation: 200
      nozzle_diameter: 0.400
      filament_diameter: 1.75
      min_temp: 0
      max_temp: 360
      min_extrude_temp: 170
      smooth_time: 0.000001
      heater_pin: MKS_THR:gpio0
      sensor_type: MAX6675
      sensor_pin: MKS_THR:gpio17
      spi_software_sclk_pin: MKS_THR:gpio18
      spi_software_mosi_pin: MKS_THR:gpio19
      spi_software_miso_pin: MKS_THR:gpio16
      max_power: 1.0
      control: pid  
      pid_Kp: 14.734
      pid_Ki: 6.549 
      pid_Kd: 8.288
      pressure_advance: 0.032
      pressure_advance_smooth_time: 0.03
      max_extrude_cross_section: 10
      instantaneous_corner_velocity: 10.000
      max_extrude_only_distance: 100.0
      max_extrude_only_velocity: 5000
      max_extrude_only_accel: 2000
      step_pulse_duration: 0.000002

      et la vérification de ce capteur

      [verify_heater extruder]
      max_error: 120
      check_gain_time: 20
      hysteresis: 5
      heating_gain: 1
    • Chambre (enceinte / caisson)
      [heater_generic chamber]
      heater_pin: PB10
      max_power: 1.0
      sensor_type: NTC 100K MGB18-104F39050L32
      sensor_pin: PA1
      control: watermark
      max_delta: 1.0
      min_temp: -100
      max_temp: 70
      déclenchement du ventilateur associé à ce capteur
      [temperature_fan chamber]
      pin: PC9
      max_power: 1
      hardware_pwm: false
      off_below:.1
      sensor_type: NTC 100K MGB18-104F39050L32
      sensor_pin: PA1
      control: pid
      pid_kp: 60
      pid_ki: 1
      pid_kd: 900
      pid_deriv_time: 120
      min_temp: 0
      max_temp: 90
      target_temp: 50.0
      max_speed: 1
      min_speed: 0.0
      gcode_id: chamber
      et la vérification de ce capteur
      [verify_heater chamber]
      max_error: 300
      check_gain_time: 480
      hysteresis: 5
      heating_gain: 1
    • Ventilateur de refroidissement du radiateur de la tête
      [heater_fan hotend_fan]
      pin: MKS_THR:gpio1
      max_power: 1.0
      kick_start_time: 0.5
      heater: extruder
      heater_temp: 50.0
      fan_speed: 1.0
      off_below: 0
    • surveillance des températures hôte et MCU
      [temperature_sensor RPI]
      sensor_type: rpi_temperature
      sensor_type: temperature_host
      min_temp: 10
      max_temp: 85
      
      [temperature_sensor mcu_temp]
      sensor_type: temperature_mcu

    Ventilateurs

    Les ventilateurs sont gérés via des directives [output_pin] et seront donc actionnés via des macros Gcode en utilisant la commande «SET_PIN PIN=broche_a_actionner VALUE=valeur»

    • Refroidissement du filament (buse) => fan0
      [output_pin fan0]
      pin: MKS_THR:gpio2
      pwm: True
      cycle_time: 0.0100
      hardware_pwm: false
      value: 0
      scale: 255
      shutdown_value: 0.0
    • Refroidissement du filament (auxilaire) soufflant sur le plateau => fan2
      [output_pin fan2]
      pin: PA8
      pwm: True
      cycle_time: 0.0100
      hardware_pwm: false
      value: 0.00
      scale: 255
      shutdown_value: 0.0
    • Extraction air interne à travers filtre à charbon actif => fan3
      [output_pin fan3]
      pin: PC9
      pwm: True
      cycle_time: 0.0100
      hardware_pwm: false
      value: 0.0
      scale: 255
      shutdown_value: 0.0

    Détecteur de fin de filament

    Activé par défaut, permet de mettre en pause l'impression quand il n'y a plus de filament, voir ce lien

    [filament_switch_sensor fila]
    pause_on_runout: True
    runout_gcode:
                PAUSE
                SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1
    event_delay: 3.0
    pause_delay: 0.5
    switch_pin: !PC1

    Un message s'affiche sur l'écran, l'écran suivant après remplacement du filament permet de purger le nouveau puis de reprendre l'impression (testé à deux reprises, en tout cas chez moi, il fonctionne parfaitement).

    asa_yenaplus.thumb.jpg.2af9e5d79190b8cdd7c4d263def0649a.jpg

    Le processus de retrait de l'ancien filament s'effectue en trois étapes via l'appel à une macro Gcode M603:

    1. extrusion lente d'une petite quantité de filament
    2. pause
    3. retrait «rapide» de la quantité nécessaire à sortir le filament des roues dentées d'entrainement
      [gcode_macro M603]
      description: filament unload
      gcode:
          G92 E0
          G0  E15 F400
          G4  P1000
          G92 E0
          G1  E-80 F800

       

    tip_dechargement-filament.thumb.jpg.99e2638d30636c77f1a0d67d5c99cb2f.jpg

    A noter que l'extrudeur ne possède pas de levier permettant la libération / l'insertion du filament, Il faut procéder via des manipulations sur l'écran. Le mieux est d'extraire le PTFE guidant le filament vers la tête au niveau de celle-ci (pas très pratique ni facile quand on a des gros doigts ou qu'on imprime avec le caisson totalement fermé).

    La chaine Youtube Qiditech propose cette vidéo pour le processus de changement de filament 😉

    Nivelage du lit d'impression

    Le capteur Bltouch est à la fois:

    • le dispositif permettant de détecter la mise à l'origine de l'axe Z (remplace l'interrupteur de fin de course)
    • une sonde permettant de réaliser la topographie (maillage / mesh) via le palpage du plateau suivant une matrice de points 9x9 (8x8 avec le firmware originel)
      [bed_mesh]
      speed: 150
      horizontal_move_z: 10
      mesh_min: 30,15
      mesh_max: 310,310
      probe_count: 9,9
      algorithm: bicubic
      bicubic_tension: 0.2
      mesh_pps: 4, 4
      
      [bltouch]
      sensor_pin: ^MKS_THR:gpio21
      control_pin: MKS_THR:gpio11
      stow_on_each_sample: False
      x_offset: 28
      y_offset: 4.4
      z_offset: 0.0
      speed: 10 #5
      samples: 2
      samples_result: average
      sample_retract_dist: 3.0
      samples_tolerance: 0.08
      samples_tolerance_retries: 3

    Une fois le réglage du Zoffset puis de la topographie du plateau faits via l'écran tactile, le maillage palpé est enregistré dans le fichier printer.cfg tout à la fin :

    #*# <---------------------- SAVE_CONFIG ---------------------->
    #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
    #*#
    …
    #*#
    #*# [bed_mesh default]
    #*# version = 1
    #*# points =
    #*# 	  -0.426250, -0.312500, -0.252500, -0.201250, -0.303750, -0.256250, -0.220000, -0.217500, -0.323750
    #*# 	  -0.207500, -0.126250, -0.111250, -0.066250, -0.113750, -0.090000, -0.100000, -0.107500, -0.147500
    #*# 	  0.000000, 0.008750, 0.057500, 0.058750, 0.036250, 0.041250, 0.030000, -0.001250, -0.020000
    #*# 	  0.071250, 0.086250, 0.126250, 0.153750, 0.127500, 0.122500, 0.108750, 0.072500, 0.038750
    #*# 	  0.022500, 0.127500, 0.192500, 0.198750, 0.086250, 0.162500, 0.150000, 0.138750, 0.020000
    #*# 	  0.173750, 0.190000, 0.190000, 0.213750, 0.213750, 0.183750, 0.206250, 0.143750, 0.125000
    #*# 	  0.165000, 0.200000, 0.210000, 0.256250, 0.210000, 0.175000, 0.178750, 0.123750, 0.145000
    #*# 	  0.150000, 0.175000, 0.226250, 0.216250, 0.180000, 0.192500, 0.172500, 0.160000, 0.100000
    #*# 	  0.025000, 0.136250, 0.187500, 0.198750, 0.091250, 0.187500, 0.170000, 0.180000, 0.026250
    #*# tension = 0.2
    #*# min_x = 30.0
    #*# algo = bicubic
    #*# y_count = 9
    #*# mesh_y_pps = 4
    #*# min_y = 15.0
    #*# x_count = 9
    #*# max_y = 309.96
    #*# mesh_x_pps = 4
    #*# max_x = 310.0

    Dans l'interface Web Fluidd, on peut visualiser ce maillage :

    maillage-plateau.thumb.jpg.8a37be62b4748b83a69df44352ce8a06.jpg

    Malgré la représentation ci-dessus, une fois le Zoffset correctement réglé, je n'ai rencontré aucun problème avec les pièces imprimées (pas de gauchissement, pas de décollement, …).

    A noter que Qiditech gère le «z_offset» via l'écran d’étalonnage puis sauvegarde la valeur trouvée non pas à la fin du fichier «printer.cfg» mais stocke cette valeur dans le fichier de  configuration de l'écran (config.mksini). Inconvénient de cette méthode: on ne peut plus utiliser les outils habituels de Klipper (probe_calibrate, …) et surtout il faut laisser le z_offset à 0 dans la section [bltouch].

    Compensation de résonance

    La puce ADXL345 est située sur la carte fille au niveau de la tête. Avec une imprimante CoreXY, comme la X-Max 3, la calibration se trouve facilitée. Avec mes autres imprimantes non CoreXY (des «bed slinger», le plateau se déplace sur l'axe Y), il faut ou deux ADXL345 (un par axe) ou déplacer le matériel de la tête au plateau.

    [adxl345]
    cs_pin: MKS_THR:gpio13
    spi_software_sclk_pin: MKS_THR:gpio14
    spi_software_mosi_pin: MKS_THR:gpio15
    spi_software_miso_pin: MKS_THR:gpio12
    axes_map: -x, z, -y
    
    [resonance_tester]
    accel_chip: adxl345
    probe_points:
        160, 160, 10 

    Une fois le processus de tests des fréquences de vibrations  réalisé, le résultat (type de compensation et fréquence pour chaque axe ) est enregistré à la fin du printer.cfg dans la section réservée :

    #*# <---------------------- SAVE_CONFIG ---------------------->
    #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
    #*#
    #*# [input_shaper]
    #*# shaper_type_x = ei
    #*# shaper_freq_x = 53.8
    #*# shaper_type_y = zv
    #*# shaper_freq_y = 45.2

    J'ai ajouté l'extension «G-Code Shell Command» (un script Python) de KIAUH (Kiauh est installé dans le répertoire de l'utilisateur «mks»), puis créé les scripts shell et les macros Gcode nécessaires pour produire les graphiques :

    # Process csv files issued from "input_shaping" to obtain png files
    # 
    [gcode_macro PROCESS_SHAPER_DATA]
    description: process csv file to png
    gcode:
        RUN_SHELL_COMMAND CMD=adxl_x
        RUN_SHELL_COMMAND CMD=adxl_y
      
    [gcode_shell_command adxl_x]
    command: sh /home/mks/klipper_config/shell_commands/adxl_x.sh 
    timeout: 300.
    verbose: True
    
    [gcode_shell_command adxl_y]
    command: sh /home/mks/klipper_config/shell_commands/adxl_y.sh 
    timeout: 300.
    verbose: True
    
    # Pour faire une sauvegarde "régulière" via Github
    # https://github.com/th33xitus/kiauh/wiki/How-to-autocommit-config-changes-to-github%3F
    #
    [gcode_shell_command backup_cfg]
    command: sh /home/mks/klipper_config/shell_commands/autocommit.sh
    timeout: 30.
    verbose: True
    
    [gcode_macro BACKUP_CFG]
    gcode:
        RUN_SHELL_COMMAND CMD=backup_cfg
    

    Ce fichier shell_command.cfg est inclus au début du fichier printer.cfg via une directive [include shell_command.cfg]. Un répertoire nommé «shell_commands» est créé dans ~/klipper_config dans lequel je stocke les scripts shell. Exemple pour l'axe X (remplacer x par y pour obtenir le script de l'axe Y) :

    #!/bin/sh
    #
    # Create PNG from csv file issued after INPUT_SHAPING, X axis
    #
    
    # Paths
    # Qiditech use the old configuration ~/klipper_config
    #
    DATE=$(date +"%Y%m%d")
    SCRIPTS="/home/mks/klipper/scripts/calibrate_shaper.py"
    CSV_FILE="/tmp/calibration_data_x_*.csv"
    PNG_FILE="/home/mks/klipper_config/shaper_calibrate_x_$DATE.png"
    
    $SCRIPTS $CSV_FILE -o $PNG_FILE

    L'appel de la macro «PROCESS_SHAPER_DATA» dans la console Fluidd permet d'obtenir les graphiques suivants. Étant enregistrés dans ~/klipper_config, ils sont facilement téléchargeables sur un matériel informatique (clic droit sur le fichier, téléchargé)

    shaper_calibrate_x_20230902.pngshaper_calibrate_y_20230902.png

    Reste de la configuration

    Emplacement du stockage de la carte SD virtuelle :

    [virtual_sdcard]
    path: ~/gcode_files

    Quelques paramètres utiles ( exclusion d'objet, gestion des courbes, délai d'inactivité ) :

    [exclude_object]
    
    [gcode_arcs]
    resolution: 0.1 # 1.0
    
    [idle_timeout]
    timeout: 5400 # en secondes

    Voilà pour l'essentiel du fichier «printer.cfg»

    Les macros

    Pour les macros fournies par Qiditech, je ne détaille pas plus que cela et livre seulement le contenu

    Révélation

    ## Macros QidiTEch (from printer.cfg)
    [gcode_macro M84]
    rename_existing: M84.1
    gcode:
        SET_STEPPER_ENABLE STEPPER=stepper_x enable=0
        SET_STEPPER_ENABLE STEPPER=stepper_y enable=0
        SET_STEPPER_ENABLE STEPPER=stepper_z enable=0
        SET_STEPPER_ENABLE STEPPER=extruder enable=0
        SET_KINEMATIC_POSITION
        
    #[gcode_macro G30]
    #    G28
    #    G1 X100 Y130 Z10
    #    PROBE_CALIBRATE

    [gcode_macro SHAPER_CALIBRATE]
    rename_existing: RESHAPER_CALIBRATE
    gcode:
        RESHAPER_CALIBRATE FREQ_START=30 FREQ_END=150

    [gcode_macro HOT_CALIBRATE_START]
    variable_k: 0
    gcode:
        {% if k == 0 %}
            {% if printer['heater_generic chamber'].temperature > 49 %}
                SET_GCODE_VARIABLE MACRO=HOT_CALIBRATE_END VARIABLE=hot_set VALUE=1
                SET_GCODE_OFFSET Z_ADJUST=-0.05 MOVE=0
                SET_GCODE_VARIABLE MACRO=HOT_CALIBRATE_START VARIABLE=k VALUE=1
            {% endif %}
        {% endif %}

    [gcode_macro HOT_CALIBRATE_END]
    variable_hot_set: 0
    gcode:
        {% if  hot_set == 1 %}
            SET_GCODE_VARIABLE MACRO=HOT_CALIBRATE_END VARIABLE=hot_set VALUE=0
            SET_GCODE_OFFSET Z_ADJUST=+0.05 MOVE=0
            SET_GCODE_VARIABLE MACRO=HOT_CALIBRATE_START VARIABLE=k VALUE=0
        {% endif %}

    [gcode_macro PRINT_START]
    gcode:
        HOT_CALIBRATE_START

    [gcode_macro PRINT_START_QD]
    gcode:
        HOT_CALIBRATE_START

    [gcode_macro CANCEL_PRINT]
    rename_existing: BASE_CANCEL_PRINT
    gcode:
        {% if (printer.gcode_move.position.z) < 200 %}       ; check that zhop doesn't exceed z max
            G1 Z200 F600                                         
        {% endif %}
        G1  X0 Y0 F12000
        SDCARD_RESET_FILE
        PRINT_END
        BASE_CANCEL_PRINT

    [gcode_macro PRINT_END]
    gcode:
        M106 P2 S0
        M106 P0 S0
        M106 P3 S0  #关闭活性炭风扇 (Eteindre le ventilateur à charbon actif)
        M104 S0
        M140 S0
        M141 S0
        M220 S100
        M221 S100
        SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value
        CLEAR_PAUSE
        HOT_CALIBRATE_END
        M84
    #    SET_STEPPER_ENABLE STEPPER=stepper_x enable=0
    #     SET_STEPPER_ENABLE STEPPER=stepper_y enable=0
    #     SET_STEPPER_ENABLE STEPPER=stepper_z enable=1
    #     SET_STEPPER_ENABLE STEPPER=extruder enable=0
        BED_MESH_CLEAR      #恢复调平数据 (# Récupération des données de nivellement)
        BED_MESH_PROFILE LOAD=default
        G31
        BEEP I=2 DUR=500

    [gcode_macro PRINT_END_POWEROFF]
    gcode:
           M107
           M104 S0
           M140 S0
           G28 Z
           M84
    #       BEEP I=2 DUR=500
           M81    
        
    [gcode_macro PAUSE]
    rename_existing: BASE_PAUSE
    gcode:
        # Parameters
        {% set z = params.Z|default(50)|int %}                                                   ; z hop amount
        {% if printer['pause_resume'].is_paused|int == 0 %}     
            SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z}                              ; set z hop variable for reference in resume macro
            SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target}    ; set hotend temp variable for reference in resume macro
    #        SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0                        ; disable filament sensor       
            SAVE_GCODE_STATE NAME=PAUSE                                                          ; save current print position for resume                
            BASE_PAUSE                                                                           ; pause print
            {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %}       ; check that zhop doesn't exceed z max
                G91                                                                              ; relative positioning
                G1 Z{z} F600                                                                     ; raise Z up by z hop amount
            {% else %}
    #            { action_respond_info("Pause zhop exceeds maximum Z height.") }                  ; if z max is exceeded, show message and set zhop value for resume to 0
                SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
            {% endif %}
            SAVE_GCODE_STATE NAME=PAUSEPARK2
            G90                                                                                  ; absolute positioning
            G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y} F6000   ; park toolhead at front center
            SAVE_GCODE_STATE NAME=PAUSEPARK                                                      ; save parked position in case toolhead is moved during the pause (otherwise the return zhop can error)
            M104 S0                                                                              ; turn off hotend
            SET_IDLE_TIMEOUT TIMEOUT=43200                                                       ; set timeout to 12 hours
        {% endif %}

    [gcode_macro RESUME]
    rename_existing: BASE_RESUME
    variable_zhop: 0
    variable_etemp: 0
    gcode:
        # Parameters
        {% set e = params.E|default(2.5)|int %}                                          ; hotend prime amount (in mm)
        {% if printer['pause_resume'].is_paused|int == 1 %}
    #        SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1                          ; enable filament sensor
    #         INITIAL_RGB                                                                 ; reset LCD color
            SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}  ; set timeout back to configured value
            {% if etemp > 0 %}
                M109 S{etemp|int}                                                        ; wait for hotend to heat back up
            {% endif %}
            RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=150                     ; go back to parked position in case toolhead was moved during pause (otherwise the return zhop can error)  
            G91                                                                          ; relative positioning
            M83                                                                          ; relative extruder positioning
            {% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}                                                
                G1  E{e} F900                                   ; prime nozzle by E, lower Z back down
    #        {% else %}                      
    #            G1 Z{zhop * -1} F900                                                     ; lower Z back down without priming (just in case we are testing the macro with cold hotend)
            {% endif %}  
            RESTORE_GCODE_STATE NAME=PAUSEPARK2 MOVE=1 MOVE_SPEED=150                           
            RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=10                          ; restore position
            BASE_RESUME                                                                  ; resume print
        {% endif %}

    [gcode_macro BEEP]
    gcode:
        # Parameters
        {% set i = params.I|default(1)|int %}        ; Iterations (number of times to beep).
        {% set dur = params.DUR|default(100)|int %}  ; Duration/wait of each beep in ms. Default 100ms.

        {% if printer["output_pin sound"].value|int == 1 %}
            {% for iteration in range(i|int) %}
                SET_PIN PIN=beeper VALUE=1
                G4 P{dur}
                SET_PIN PIN=beeper VALUE=0
                G4 P{dur}
            {% endfor %}
        {% endif %}

    #[gcode_macro _CG28]
    #gcode:
    #    {% if "xyz" not in printer.toolhead.homed_axes %}
    #        G28
    #    {% endif %}

    [gcode_macro G30]
    gcode:
        BED_MESH_CLEAR
    #    G28
        BED_MESH_CALIBRATE mesh_min=10,10  mesh_max=310,310  METHOD=manual

    [gcode_macro M141]
    gcode:
          #SET_HEATER_TEMPERATURE HEATER=hot TARGET={params.S}
          SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.S}

    [gcode_macro M106]
    gcode:
        {% if params.P is defined %}
          {% if params.S is defined %}
            SET_PIN PIN=fan{params.P|int} VALUE={params.S|int}
          {% else %}
            SET_PIN PIN=fan{params.P|int} VALUE=255
          {% endif %}
        {% endif %}
        {% if params.T is defined %}
            {% if (params.T|int)==-2 %}
              {% if params.S is defined %}       
                SET_PIN PIN=fan3 VALUE={params.S|int}
              {% else %}
                SET_PIN PIN=fan3 VALUE=255
              {% endif %}
            {% endif %}
        {% endif %}
        {% if params.P is undefined %}
        {% if params.T is undefined %}
        {% if params.S is defined %}
                SET_PIN PIN=fan0 VALUE={params.S|int}
           {% else %}
                SET_PIN PIN=fan0 VALUE=255       
        {% endif %}
        {% endif %}
        {% endif %}

    [gcode_macro M107]
    gcode:  
        SET_PIN PIN=fan0 VALUE=0
    #    SET_PIN PIN=fan1 VALUE=0
    #    SET_PIN PIN=fan2 VALUE=0

    [gcode_macro M303]
    gcode:
        {% if params.E is defined %}
         {% if params.S is defined %}
            {% if (params.E|int)==-1 %}
             PID_CALIBRATE HEATER=heater_bed TARGET={params.S|int}
            {% endif %}
            {% if (params.E|int)==0 %}
             PID_CALIBRATE HEATER=extruder TARGET={params.S|int}
            {% endif %}
         {% endif %}
      {% endif %}

    [gcode_macro M8029]
    gcode:
         {% if params.D is defined %}
           {% if (params.D|int)==1 %}
            SET_FILAMENT_SENSOR SENSOR=fila  ENABLE=1
           {% endif %}
           {% if (params.D|int)==0 %}
            SET_FILAMENT_SENSOR SENSOR=fila  ENABLE=0
           {% endif %}
         {% endif %}

    [gcode_macro M900]
    gcode:
        {% if params.K is defined %}
              SET_PRESSURE_ADVANCE ADVANCE={params.K}
        {% endif %}  
        {% if params.T is defined %}    
           SET_PRESSURE_ADVANCE SMOOTH_TIME={params.T}
        {% endif %}

    [gcode_macro M290]
    gcode:
       SET_GCODE_OFFSET Z_ADJUST={params.Z}

    [gcode_macro M901]
    gcode:
        G28
        SHAPER_CALIBRATE

    [gcode_macro M0]
    gcode:
        PAUSE

    [gcode_macro M25]
    rename_existing: M9925
    gcode:
        PAUSE

    [gcode_macro beep_on]
    gcode:
        SET_PIN PIN=sound VALUE=1
        
    [gcode_macro beep_off]
    gcode:
        SET_PIN PIN=sound VALUE=0

    [gcode_macro M109]
    rename_existing: M99109
    gcode:
        #Parameters
        {% set s = params.S|float %}
        M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %}  ; Set hotend temp
        {% if s != 0 %}
            TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1}   ; Wait for hotend temp (within 1 degree)
        {% endif %}
        
    [gcode_macro M4029]
    gcode:
        BED_MESH_CLEAR
        G28
        G1 X{printer.toolhead.axis_maximum.x/2 - printer.probe["x_offset"]} Y{printer.toolhead.axis_maximum.y/2 - printer.probe["y_offset"]} F7800
        G1 Z15 F600
        ABORT
        PROBE_CALIBRATE
        ABORT
        G0 Z0

    [gcode_macro M603]
    description: filament unload
    gcode:
        G92 E0
        G0  E15 F400
        G4  P1000
        G92 E0
        G1  E-80 F800

    ##################################### KAMP
    [gcode_macro G31]
    gcode:
        SET_GCODE_VARIABLE MACRO=G29 VARIABLE=k VALUE=1

    [gcode_macro G32]
    gcode:
        SET_GCODE_VARIABLE MACRO=G29 VARIABLE=k VALUE=0

    [gcode_macro G29]
    variable_k:1
    gcode:
        {% if k|int==1 %}
            BED_MESH_CLEAR
            #G28   
            BED_MESH_CALIBRATE PROFILE=kamp
        {% endif %}

    [gcode_macro M204]
    rename_existing: M99204
    gcode:
        {% if params.S is defined %}
            {% set s = params.S|float %}
        {% endif %}
        {% if params.P is defined %}
          {% if params.T is defined %}
            {% set s = [params.P|float ,params.T|float] | min %}
          {% endif %}
        {% endif %}
        SET_VELOCITY_LIMIT ACCEL={s}
        SET_VELOCITY_LIMIT ACCEL_TO_DECEL={s/2}


    [gcode_macro M1029]
    gcode:
    #    X_TWIST_PROFILE_LOAD NAME=default
    #    X_TWIST_COMPENSATE_MESH MESH_NAME=default COMPENSATION_NAME=default
    #    SAVE_CONFIG

    Les seules modifications que j'ai apportées sont principalement cosmétiques (remplacement des «=» par «:», suppression / ajout d'espaces pour les indentations, suppression de lignes vides, …).

    Remarques à propos de ces macros:

    • Fulidd et Mainsail utilisent désormais tous deux un fichier de configuration (client.cfg) qui propose :
      • des macros PAUSE, RESUME, CANCEL_PRINT plus abouties et facilement configurables via l'ajout au début du fichier printer.cfg d'une macro Gcode _CLIENT_VARIABLE,
      • quelques directives Klipper ( virtual_sdcard, pause_resume, display_status, respond )
    • Il n'y a pas les macros START_PRINT / END_PRINT habituelles, permettant d'être intégrées dans les sections dévolues au Gcode de début / fin des trancheurs. Cependant Qiditech utilise le système KAMP (Klipper Adaptive Meshing & Purging) pour réduire le temps de palpage en fonction de la taille du fichier imprimé
    • Pas de macro M600 (facile à ajouter)
    • La macro M106 gère les trois ventilateurs (refroidissement filament, refroidissement auxiliaire, extraction air)
    • Plusieurs macros xx29 (1029, 4029, 8029) probablement utilisées en association avec l'écran 🤔
    • le M141 gère le chauffage de la chambre

     

    C'est tout pour ajourd'hui. Le test final approche (ou pas).

    🙂


  14. imprimer des vis et pas de vis
    Retour d'expérience sur l'impression de pas de vis

    Bonjour,

    j'ai imprimé avec succès des filetages et des taraudages imprimés en 3D

    Avec la buse standard (0.2mm) je ne suis jamais descendu en dessous du pas M6

    On peut bien sûr imprimer plus gros

    La qualité de la modélisation est très importante ; attention beaucoup d'astuces données pour modéliser des filets sont des approximations parfois médiocres

    Il faut aussi tenir compte du jeu pour le diamètre ; ne pas hésiter à imprimer une série de pièces tests en changeant le diamètre par 0.1mm pour chaque.

    Certaines matières (ABS) se rétractent après refroidissement... D'ou l'intérêt de faire des tests 😅

    Si ton filetage n'est pas vertical (axe correspondant à l'axe Z) tu peux avoir des déformations plus complexes à gérer.

    Bien sûr, le plastique étant plus fragile que le métal, imprimer des filetages et taraudage de plus gros diamètre ou plus longs

    Attention pour les filetages : souvent une vis ou un filetage imprimé en 3D va avoir tendance à casser au niveau de la jonction entre le filetage et la tête (concentration de contrainte)

    Une autre astuce marche bien : imprimer des trous cylindriques lisses dans lesquels on va visser des vis à bois auto taraudeuses. C'est pas cher, facile à faire et solide. Par exemple un trou lisse de diamètre 2.5mm pour une vis à bois standard de 4mm de diamètre. Il existe une grande variété de vis à bois, les têtes coniques sont pratiques pour un vissage encastré (il faut modéliser le cône pour accueillir la tête de vis)

    On peut "armer" une grosse vis imprimée en 3D en modélisant au centre un trou cylindrique, pour visser dedans une vis à bois (en fait la vis imprimée en 3D est une sorte de tube qui acceuille une vis à bois). D'ailleurs cette technique de "plastique imprimé en 3D armé" est utile pour toutes les pièces longues et fines, on peut "armer" avec une tige fileté avec deux écrous ou taraudages à chaque extrémité.

    On peut enfin prévoir dans une pièce imprimée en 3D une empreinte hexagonale pour y loger un écrou traditionnel en métal. On peut aussi imprimer en 3D une pièce en deux parties avec un logement pour l'écrou et une rondelle large, qui seront pris en sandwich. De la même façon on peut imprimer une "tête" en 3D pour servir de bouton ou de poignée pour une vis classique en métal. C'est assez simple à modéliser, pas cher et très solide.

    Dans le même esprit, l'impression 3D peut servir à faire des cales et entretoises sur mesure pour adapter une vis traditionnelle à une pièce à fixer. C'est la vis en métal qui fait l'essentiel de la solidité, et la modélisation est plus simple.

    A noter également : les filetages et taraudages imprimés en 3D sont très utiles pour faire des boites avec bouchon qui se visse. Là on est totalement libre : on peut faire des pas fins, des filets multiples, ...

    A bientôt


  15. InhibDetectFil.gcode
    Fin de filaments

    Salut,

    Tu n'as pas répondu à nos questions:

    1.

    Le 07/10/2023 at 17:43, PPAC a dit :

    sans le g-code de démarrage ou un extrait du début d'un fichier d'impression pour vérifier

    2.

    Le 06/10/2023 at 18:53, pommeverte a dit :

    Comme tu as remplacé ta carte-mère, est-ce que tu as le même firmware que précédemment?

    quel firmware as-tu flashé? un lien vers la page de téléchargement?

    Pour désactiver la détection du filament, tu peux également imprimer ce fichier :  InhibDetectFil.gcode

    ce qui revient à envoyer ces gcodes dans Pronterface:

    Citation

    M501
    M412 S0
    M500

    Suite à tes tests, je pense que tu as un "faux négatif" / détection peu fiable, due à une usure du galet du détecteur de filament ou autre raison. Peut-être qu'en jouant sur la position du détecteur avec le jeu dans les vis de fixation du détecteur (voir cette vidéo) tu peux solutionner le problème. Sinon, il faudra envisager le remplacement du détecteur, après confirmation que ce n'est pas un souci au niveau du firmware 🥴.


  16. mots clé de remplacements / replacement pattern, Cura vs Prusa
    Gcode démarrage Hotend

    Salutation

    il y a 45 minutes, Bipsom a dit :

    mais ensuite comment lui dire de reprendre la température indiqué dans le slicer ?

    avec un M109 ( cf M109: Wait for Hotend Temperature )suivie d'une expression avec un "mot clé de remplacement" (fr), "Replacement Patterns" (en), mots clé et syntaxe de l'expression qui change selon le trancheur utilisé.

     

    par exemple avec Ultimaker Cura dont les mots clé de remplacement se trouve sur http://files.fieldofview.com/cura/Replacement_Patterns.html

    il faudrait mettre un 

    M109 S{material_print_temperature_layer_0} ; wait for nozzle temperature // Cura

    après ton G29 ... ou M500

     

    mais sous Prusa Slicer c'est d'autre mots clé de remplacement et une autre syntaxe ( plutôt des "[" que des "{" selon comment on les utilisent ) et pour les mots clé voir https://help.prusa3d.com/article/macros_1775?a_aid=Li3D&data1=forum#variables-placeholders 

    il faudrait alors mettre 

    M109 S[first_layer_temperature] ; wait for nozzle temperature // Prusa

     

    Sachant que c'est toujours mieux après avoir modifier un truc dans le g-code de démarrage et ou de fin, d'aller avec un éditeur de texte vérifier le fichier d'impression obtenus (pour vérifier que les expression avec mot clé de remplacement ont bien étaient remplacé)  plutôt que de l'imprimer sans vérifier ...

     

    Edit > Aussi pour gagner du temps, il est possible dé le début de lancer une chauffe sans attente ( M104: Set Hotend Temperature ) pour disons 150°C voir 170°C car normalement a cette température la buse ne suinte pas encore. et donc cela pourrait continuer de chauffer jusqu’à cette 1er température le temps du G29 puis après le G29 tu demande de chauffer et d'attendre d'arriver a la température d'impression ( M109) .


  17. M600
    Octoprint Changement de filament
    il y a une heure, Pasca DOE a dit :

    Faut il injecter la commande M600 dans Cura ?

    oui, le fichier d'impression ".gcode" doit contenir a la position souhaité, une commande g-code de pause ou de changement de filament

    Sous Ultimaker Cura, c'est via un post traitement.

    Barre de menu, "Extensions" , "Post-Traitement", "Modifier le G-Code"

    image.png.11b81bb16d5c36a6097a993762ea4e82.png

     

    Puis ajouter un script "Filament Change", sans oublier de mettre la bonne valeur pour "Layer"

    image.png.6dac8bcba8495c0bb1faad09ed8c2ed2.png

    Et bien identifier la bulle rouge avec un compteur qui indique qu'il y a un ou plusieurs script de post-traitement d'appliqué lors du découpage ( a ne pas oublier d'enlever pour le découpage de l'impression suivante ... )

    image.png.0bb9e11612eacd32ede178ac781763a6.png

     

    Ou via une pause

      

    Le 16/03/2021 at 16:05, Savate a dit :

    Dans Cura, tu vas dans le menu Extensions / Post Traitement / Modifier le G-Code

    Tu choisis le script 'Pause at height'

    image.png.aa897df95a20191e32238e5913e404ed.png

    et ensuit tu choisis la hauteur de la pause (tu peux choisir si la hauteur est en mm ou en n° de couche)

    tu peux aussi spécifier plein d'autres paramètres tels que la position de la tête (pour l'écarter de la pièce pendant le changement de filament), la rétraction du filament pour l'éjecter

    image.png.bdd4c0858b717ee9ccc33851a64748de.png

    Je te conseilles d'essayer les réglages avec une petite pièce et de mettre la pause à la couche 2 ou 3 histoire de ne pas attendre 2 heures pour que ça parte en vrille 🙂 

     

    ATTENTION  : le script de post traitement reste actif sous cura même si tu changes de pièce, donc il faut bien penser à le supprimer quand la pièce est finie. (il y a un petit rond rouge en bas à droite pour te le rappeler)

     


  18. Klipper sur RPi methode fran6p
    [Klipper - Mainsail] Camera détectée mais n'affichant plus rien depuis mises à jour

    Généralement pour les installations:

    • via RPImager, j'installe une distribution minimale (RaspberryPi OS bullseye si possible mais surtout pas la dernière version Bookworm)
    • j'installe ensuite «git»
    • je clone le dépôt KIAUH
    • je procède via son intermédiaire à l'installation des éléments nécessaires :
      • Klipper
      • Moonraker
      • une interface Web (ou les deux) Fluidd / Mainsail
      • si j'ai un écran adapté : Klipperscreen
      • pour une caméra, j'installe Crowsnest

    Ensuite, j'installe manuellement les dépôts :

    Si la distribution installée n'est pas Bullseye mais Buster, il faut installer la version 3 de Crowsnest (branche legacy) sinon la caméra ne fonctionnera pas.

    Autre possibilité, installer Mainsail-OS ce qui installera quasiment tout ce qui est listé plus haut dès le début.

    🙂


×
×
  • Créer...