Découpe laser & FabKit MK5

Cette page sert de notes de configuration et d’utilisation de machines à découpe laser, et en particulier de la FabKit MK5.

Logiciel

Le firmware Smoothieware de la machine FabKit MK5 est d’origine, installé par FabCreator. Selon la page de spécifications, rubrique Open Source Software, le logiciel recommandé est LaserWeb.

Je peux donc installer LaserWeb sur mon ordinateur personnel pour préparer en avance la découpe. Problème : la génération des binaires Linux est cassée depuis plusieurs années, la dernière version disponible pour Linux date du 29 juin 2018. D’un autre côté, ce n’est pas un grand problème, car le developpement de LaserWeb est presque totalement arrêté depuis cette même date.

La bonne nouvelle, c’est que FabCreator a contribué à LaserWeb, en ajoutant le fichier de configuration de leurs machines. Du coup, c’est directement accessible !

Il y a néanmoins quelques modifications à apporter, plus par confort qu’autre chose :

  • Les instructions “GCode Start”, pour démarrer la ventilation (M106 ; Compressor On) et le filtre à air (M555 S230 ; Filter On)
  • Les instructions “GCode End”, pour arrêter la ventilation (M107 ; Compressor Off) et le filtre à air (M555 S40 ; Filter idle)
  • La configuration “Tool Test Power” (100%), et “Tool Test Duration” (10ms), de manière à pouvoir utiliser le bouton “Laser Test” du panneau de contrôle.
  • Ajout de quelques macros :
    • Aller au centre de la zone de travail (Go to center G0 X340 Y235)
    • Effectuer la mise au point du laser en Z (Set focus Z G28.2Z G92 Z0)
    • Baisser le plateau de travail (presque) au minimum (Lower bed to -125mm G90 ; Absolute positionning, puis G Z-125 F1000 ; Move)
    • Mettre à disposition de quoi démarrer et arrêter manuellement le traitement d’air (compresseur et filtre), les mêmes que ceux ajoutés dans “GCode Start” et “GCode End”

Vous pouvez importer mes modifications et macros à l’aide des deux fichiers suivants en allant dans “Settings” → “Tools” → “Machine profiles” → “Load”.

laserweb-profile-mk5.json
{
  "machineProfiles": {
    "FabKit-MK5": {
      "machineLabel": "FabKit MK5",
      "settings": {
        "__version": "4.0.996",
        "__selectedProfile": "FabKit-MK5",
        "__latestRelease": "2020-07-19T10:00:00Z",
        "showMachine": false,
        "machineWidth": 680,
        "machineHeight": 450,
        "machineBeamDiameter": 0.1,
        "machineBottomLeftX": 0,
        "machineBottomLeftY": 0,
        "machineFeedRange": {
          "XY": {"min": 1, "max": 50000},
          "Z": {"min": 1, "max": 50000},
          "A": {"min": 1, "max": 50000},
          "S": {"min": 0, "max": 30000}
        },
        "machineXYProbeOffset": 0,
        "machineZEnabled": false,
        "machineZMatThickness": 0,
        "machineZToolOffset": 0,
        "machineZStartHeight": "",
        "machineZProbeOffset": 0,
        "machineAEnabled": false,
        "machineBlowerEnabled": false,
        "machineBlowerGcodeOn": "",
        "machineBlowerGcodeOff": "",
        "pxPerInch": 72,
        "forcePxPerInch": false,
        "dpiBitmap": 300,
        "toolGridWidth": 800,
        "toolGridHeight": 600,
        "toolGridMinorSpacing": 10,
        "toolGridMajorSpacing": 50,
        "toolSafetyLockDisabled": false,
        "toolCncMode": false,
        "toolImagePosition": "BL",
        "toolUseNumpad": true,
        "toolDisplayCache": false,
        "toolUseGamepad": false,
        "toolCreateEmptyOps": false,
        "toolFeedUnits": "mm/s",
        "toolTestSValue": 1,
        "toolTestDuration": 0,
        "gcodeStart": "G21 ; Set units to mm\nG90 ; Absolute positioning\nM555 S230 ; Filter On\nM106 ; Compressor On\nM3 ; Laser On",
        "gcodeEnd": "M5 ; Laser off\nG28.2XY ; Home X & Y\nM107 ; Compressor Off\nM555 S40 ; Filter idle",
        "gcodeHoming": "G28.2XY ; Home X & Y",
        "gcodeGenerator": "default",
        "gcodeToolOn": "",
        "gcodeToolOff": "",
        "gcodeLaserIntensity": "S",
        "gcodeLaserIntensitySeparateLine": false,
        "gcodeSMinValue": 0,
        "gcodeSMaxValue": 1,
        "gcodeCheckSizePower": 0,
        "gcodeToolTestPower": 100,
        "gcodeToolTestDuration": 10,
        "gcodeConcurrency": 2,
        "gcodeCurvePrecision": 0.1,
        "comServerVersion": "4.0.127",
        "comServerIP": "localhost:8000",
        "comServerConnect": false,
        "comInterfaces": ["USB", "ESP8266", "Telnet"],
        "comPorts": [],
        "connectVia": "USB",
        "connectPort": "",
        "connectBaud": "115200",
        "connectIP": "",
        "jogStepsize": 10,
        "jogFeedXY": 3000,
        "jogFeedZ": 10,
        "macros": {
          "*GotoXY0": {
            "label": "Goto XY zero",
            "gcode": "G0 X0Y0",
            "keybinding": "ctrl+f1",
            "_locked": false
          },
          "21fbaa24-4533-48de-b2fe-ce48f7c14577": {
            "keybinding": "",
            "label": "Go to center (FabCreator MK5)",
            "gcode": "G0 X340 Y235"
          },
          "aa296fbd-ebaf-4779-b35a-2764549ed953": {
            "keybinding": "",
            "label": "Set Focus Z",
            "gcode": "G28.2Z G92 Z0"
          },
          "605ab777-57c0-45c0-bc81-f4e1a2075a35": {
            "keybinding": "",
            "label": "Lower bed to -125mm",
            "gcode": "G90 ; Absolute positionning\nG Z-125 F1000 ; Move"
          },
          "b0957405-6343-4204-9524-8716544136c3": {
            "keybinding": "",
            "label": "Lower bed to -50mm",
            "gcode": "G90 ; Absolute positionning\nG Z-50 F1000 ; Move"
          },
          "fffe7d22-176c-4425-8d55-08b3736466e1": {
            "keybinding": "",
            "label": "Compressor and filter on (auto on job start)",
            "gcode": "M555 S230 ; Filter On\nM106 ; Compressor On"
          },
          "c20ee0e0-d4a3-469a-a774-b453a7e709a4": {
            "keybinding": "",
            "label": "Compressor and filter off (auto on job end)",
            "gcode": "M107 ; Compressor Off\nM555 S40 ; Filter idle"
          }
        }
      }
    }
  }
}

Matériel

Lors de la connexion de la machine à l’ordinateur, elle apparaît dans l’onglet “Comms” → “Machine Connection”. J’ai utilisé avec succès une connexion USB, avec le port série “Uberclock” qui est apparu avec la machine, avec une vitesse de 115200 bauds. Une fois cette sélection faite, ne pas oublier d’appuyer sur le bouton “Connect”.

Il est recommandé de vérifier que profil de machine sélectionné est correct dans “Settings” → “Machine Profiles” et de l’appliquer avec le bouton “Apply”

Conception

J’ai choisi de faire ma conception avec Inkscape, outil de dessin vectoriel. Pour faciliter la tâche, j’ai créé un fichier qui est pré-configuré avec une grille millimétrique et centimétrique, avec la taille maximale de ma surface de travail.

Si vous êtes intéressés par mon fichier de base, le voici : laser_cut_blank_mk5.svg

Mon fichier contient différentes couches :

  • Source text, pour tous les textes à découper ou graver,
  • Layer 1 engrave, calque qui servira pour tout ce qui est à graver avant la découpe,
  • Layer 2 cut, calque de découpe.

Avant la réalisation, une fois que toute la conception est finie, il reste quelques opérations à faire. Je conseille de sauvegarder en tant qu’un nouveau fichier, car nous allons effectuer quelques opérations destructives (dans le sens où l’on perd d’information sémantique) :

  1. LaserWeb ne prends pas en charge les textes, car le résultat varie fortement en fonction des polices de caractère installées. Je duplique donc les textes vers un des autres calques, puis je les convertis : menu “Chemin” → “Objets en chemin”. L’information de texte est perdue, mais le rendu est définitif,
  2. LaserWeb ne prends pas en charge les objets clonés. Il faut donc les convertir en vrais objets : menu “Édition” → “Clones” → “Délier les clones”,
  3. La découpe va suivre chaque trait dans le fichier fourni. C’est à dire que deux traits passant au même endroit sont considérés de la même manière que deux traits séparés. Le laser va donc effectuer deux passages au même endroit. Il est préférable d’éviter ça, en supprimant les recouvrements.

Exemple

Voici un exemple de petite étagère de cuisine pour y mettre des pots, avec en cyan la zone de travail, et en vert la planche que j’ai à découper :

Grâce à la représentation des contraintes physiques (zone de travail de la machine et taille de la planche de bois), il est facile de disposer le tout correctement.

Réalisation

Globalement, cette section se résume à “faire des tests, faire des tests, et refaire des tests”, avec quelques explications de comment utiliser LaserWeb.

Trouver les paramètres de découpe / gravure

Il est très compliqué de savoir quels sont les meilleurs paramètres pour faire une découpe réussie. En effet, cela dépends de :

  • La puissance du laser en arrivant sur le matériau (qui peut varier avec le temps et la propreté de la machine),
  • La vitesse de déplacement du laser : à puissance constante, plus le laser est rapide, moins il peut découper profondément,
  • Le nombre de passes de découpe,
  • Le type de matériau (du bois n’est pas du PVC, et un contreplaqué de bois n’est pas un bloc de bois massif),
  • L’épaisseur du matériau : découper 1mm de bois est plus rapide que 2mm de métal,
  • L’homogénéité du matériau : un panneau en bois de lamelles minces, longues et orientées ou OSB (pour Oriented Strand Board) est très peu homogène. Par conséquent, il va y avoir des parties ou la découpe se fera mieux qu’ailleurs.

Je recommande donc d’avoir un fichier avec plusieurs petits éléments à découper (cela peut simplement être des incisions sur le bord de la planche pour voir la profondeur de pénétration du laser), où chaque élément aura une puissance et/ou vitesse différente. Une fois qu’une configuration correcte est trouvée, il est possible de faire la découpe finale.

Charger les documents de découpe, et générer le G-code

LaserWeb est très flexible au niveau de l’interface de préparation du travail. Il est possible d’ajouter de multiples fichiers. Le contenu des fichiers SVG sont contrôlables que ce soit les calques (qui sont techniquement des groupes), les groupes, ou les objets individuels.

Il faut garder à l’esprit que la référence de travail x=0, y=0 est arbitraire. On peut la redéfinir quand on veut, et on le fera bientôt. Globalement, la disposition de tous les éléments en fonction du matériau à découper a déjà été faire depuis Inkscape, du coup il n’y a pas trop de travail de ce côté-ci.

On va pouvoir générer le G-code, c’est à dire la séquence d’instructions qui seront envoyées à la machine. En plus de la géométrie des éléments, il faut assigner à chacun (ou à chaque groupe, ou même document) les paramètres de coupe / gravure : quelle est la puissance du laser, quelle est la vitesse de déplacement de la tête ?

Pour faire cela, on va déplacer ce qu’on veut depuis la zone “Documents” jusqu’à la zone grise en dessous avec le texte “Drag document(s) here to add”. Cela créée une nouvelle opération qu’on peut choisir : “laser cut”, “laser fill”, etc… En utilisant les champs “Filter fill” et “Filter stroke”, on peut même restreindre l’opération aux objets qui ont une couleur de remplissage et/ou contour donnée.

Dans une cas d’une découpe “Laser Cut”, il n’est nécessaire de configurer que 3 choses (voire 2 si on ne fait qu’une passe, ou même 1 si on ne joue que sur la vitesse du laser pour contrôler la profondeur de coupe) : la puissance du laser, la vitesse de déplacement, et le nombre de passages.

Dans une cas d’une gravure vectorielle “Laser Fill Path”, il faut rajouter la distance entre chaque passage du laser : à la manière d’une imprimante qui dessine une ligne, puis repasse à côté pour faire une nouvelle ligne, le laser fait un remplissage en passant ligne par ligne. Ce paramètre est “Line Distance”.

Avant d’avoir une configuration finale de découpe, j’aime faire un test final de positionnement : je diminue grandement la puissance du laser, tout en augmentant la vitesse de déplacement et lance l’opération. Plutôt que de découper définitivement, cela dessine légèrement le chemin qui sera suivi.

Maintenant que tous les objets sont positionnés, et avec les paramètres de découpe/gravure, puissance et vitesse, on peut générer les instructions G-code à l’aide du bouton “Generate”. Une fois fait, il est possible de voir dans la zone de travail sur la droite le chemin qui sera parcouru par le laser en déplaçant le curseur “Simulator” de gauche à droite. Pour faciliter la visualisation, il est utilise de désélectionner les documents, voire même en les masquants en utilisant la case à cocher “Show documents”. Inversement, il est possible de masquer les instructions G-code actuellement générées avec la case “Show Gcode”.

Positionnement de l'origine (0, 0)

Le point d’origine x=0 y=0 se fait dans l’onglet suivant “Control”.

La première étape est de calibrer la machine, afin qu’elle sache précisément où est la tête qui se déplace au dessus de la surface de travail. Pour cela, appuyer sur le bouton “home all”. Une fois fait, il devient possible de déplacer la tête à l’aide des boutons colorés rouge (déplacements horizontaux) et verts (déplacement verticaux). Il est possible de changer de combien la tête se déplace à l’aide des boutons “job by”.

Une autre solution pour se déplacer consiste à activer l’option “live jogging”, qui permet de faire “Alt+Clic” dans la zone de travail pour que la tête se déplace à l’endroit correspondant.

Pour éviter les problèmes, il est important de vérifier qu’il n’y a rien sur le chemin de la tête : il est recommandé de descendre le plateau de travail avant de faire des déplacement.

La machine FabKit MK5 permet de rehausser le plateau à la distance idéale pour a coupe. Pour cela, positionner la tête au dessus du point le plus haut de la pièce à découper : une planche de bois peut ne pas être parfaitement plate. Une fois fait, utiliser la macro fournie “Set Focus Z” : le plateau va remonter jusqu’à être détecté par la tête.

Maintenant que tout est prêt, vous pouvez déplacer le laser au point d’origine (0, 0) désiré. Il doit correspondre à celui que vous avez choisi lors de la disposition des objets dans l’espace de travail. Par exemple, cela peut être le point inférieur gauche de votre planche à découper, qui peut éventuellement coïncider avec le point inférieur gauche de votre document Inkscape.

Il est possible d’utiliser le bouton “Laser Test” pour émettre une brève impulsion au point actuel, et ainsi marquer votre matériau à cet endroit.

Si le positionnement actuel de la tête est conforme à vos attentes, vous pouvez appuyer sur le bouton “set zero” : cela est maintenant votre origine de travail.

Démarrer le travail

Tout est prêt, il ne reste qu’une chose à faire : appuyer sur le bouton “run job”. La machine va suivre les instructions une à une.

Il est possible d’interrompre le travail avec le bouton “abort job”. Comme il s’agit d’une interruption forcée et non d’une fin normale, cela créée une alarme au même titre que lorsque la tête recoit une instruction de déplacement hors de limites de travail. Il faut s’assurer que la machine est bien en état d’être remise en service avant de cliquer sur “clear alarm”.

Résultat

Voici le résultat de la découpe de l’étagère donnée en exemple plus haut :

Détail de l’attache :