On commence par une présentation du proto?
Cahier des charges
L'existant :
Le lit d'origine de la K40 a tous les défauts du monde. En effet il est à focale fixe et conçu pour graver. Dès que l'on découpe, ce n'est pas focalisé au mieux. De plus, le dispositif de bridage de brut que l'on trouve dessus (l'espèce de poignée en tôle a des ressorts pour bloquer une pièce) est bien trop petit au regard des capacités de la machine. Du coup, on ne peut mettre des pièces épaisses que dans ce trou de 8X15cm, et pas sur toute la surface de travail.
Une vue du lit d'origine de la K40 :
Cette simple plaque en tôle maintenue à hauteur par des colonnettes par rapport au fond. Ces dernières ne sont pas placées au bon endroit par rapport au châssis X/Y et sont montées de travers pour que cela puisse tenir... C'est très moche.
Les addons commerciaux?
Bien sur il est toujours possible d'acheter la table réglable de Lightobject (https://www.lightobject.com/K40-Upgrade-Parts/Power-Z-Table-Bed-Kit-for-K40-Small-Laser-Machine) qui est superbe et semble bien fabriquée, mais coute 200 USD. Il en existe d'autres dans le même genre et dans les mêmes fourchettes de prix. Or comme dit dans mon précédent billet, il ne me semble pas logique d'investir 2 ou 3X le prix de la machine pour la mettre à jour. Autant acheter une machine beaucoup plus grande à 1000 ou 1500 euros directement...
Les réalisations des Makers?
Lorsque j'ai regardé ce que les makers avaient fait sur leur K40, j'ai pu noter que certains découpaient le fond de leur machine afin que le lit puisse descendre très en dessous. Bien que ceci permette de graver des pièces existantes beaucoup plus hautes, ce n'est pas ce que je souhaitais faire et ce pour 2 raisons :
- Cela fait une modification importante de la machine qui oblige à modifier le boitier (défonce du fond, fabrication d'une allonge du caisson, etc..).
- Je l'utiliserai le plus fréquemment en découpe et gravure sur des matériaux classiques (contreplaqué, balsa, plexi...) et non sur des pièces existantes. Si le cas se présentais, j'irai dans l'un des fablabs amis autour de mon domicile pour trouver une machine de plus grande envergure.
Par ailleurs, certains ont réalisé les leurs avec des solutions très simples (manuelles) grâce à de simples tiges filetées indépendantes aux 4 coins. Pas cher, c'est certes fonctionnel, mais nécessite une calibration manuelle des 4 axes à chaque fois que l'on change d'épaisseur de matériau. D'autres encore on fait en sorte (avec une courroie) de lier ces 4 axes pour qu'ils montent en même temps, à la main en tournant l'un des axes. C'est beaucoup mieux, mais à nouveau c'est à régler à chaque fois avec les risques d'erreurs qui vont avec.... Bien qu'il y ait des solutions plutôt sympa, elle ne cadraient pas tout à fait avec ce que je voyais. J'ai donc décidé de développer la mienne.
A propos de ces histoires de focale...
La K40 est munie d'origine d'une lentille de 2 pouces (2''), soit un plan focal à 50.8mm de la lentille. Mais qu'est ce qu'il faut comprendre?
Si l'on est bien focalisé, c'est à dire avec la surface de la pièce à d=distance focale de la lentile, plus la focale est longue :
- Plus le spot est gros,
- En conséquence, la gravure manquera de détail
- En contrepartie la profondeur de champ sera plus grande
- L'angle incident sur la découpe sera faible
- Les découpes auront des flancs plus perpendiculaires à la surface du matériau.
Plus la focale est petite :
- Plus le spot est petit / précis
- En conséquence meilleure sera la finesse de gravure
- En contrepartie, la profondeur de champ sera plus faible
- L'angle incident sur le bord de la découpe sera plus grand
- En conséquence les découpes auront des flancs coniques (si focalisé sur la surface), ou en forme de diabolo (si focalisé dans le matériau)
On peut voir sur le schéma suivant, l'explication de la distance focale et de la profondeur de champs.
Un autre petit schéma explique l'angle de coupe en fonction de la focale. On voit bien que plus la focale est longue et plus le trait de coupe sera perpendiculaire au plan :
Avec une optique de 1.5'', on dispose d'une profondeur de champ très faible, mais une meilleure définition du spot, qui va permettre de faire des gravure beaucoup plus fines. Parfait pour la gravure, ce sera pratiquement inutilisable en découpe pour des épaisseurs supérieures à 2/3 mm.
Avec une optique de 4'', on disposera d'un spot plus gros, mais d'une profondeur de champ plus grande qui permettra de couper sans effet de cône sur le bord de la coupe. Parfait pour la découpe, les gravures seront pratiquement inexploitables...
2 est un compromis qui permettra de faire des gravures correctes. Même chose pour la découpe tant que l'on restera sur des épaisseurs relativement faibles (5/6mm). Ça tombe bien car on ne pourra pas aller beaucoup plus loin avec 40W laser... et c'est avec une 2 que la K40 est livrée...
Si l'on découpe en focalisant à la surface du matériau, on aura néanmoins une coupe avec un léger angle (de l'ordre de 1 à 1.5 degrés) qui sera bien visible à l'oeuil nu. Même avec du 2'', et malgré la profondeur de champ, il reste souhaitable en découpe de décaler le point focal à 1/2 l'épaisseur du matériau. Ceci permettra de minimiser l'effet de 'cône' en le transformant en un 'diabolo' moitié moins large :
Mes exigences :
Il me semblait donc plus intéressant de faire un bed motorisé et d'y adjoindre une prise d'origine mécanique ou électronique, avec un afficheur et un encodeur de panneau pour avoir une interface utilisateur très simple permettant de définir :
- L'épaisseur du matériau en mm jusqu'au dixième (ex: 5.1mm).
- Le mode de réglage (découpe / gravure) qui agira sur la focalisation à la surface du matériau (gravure) ou à mi chemin dans le matériau (découpe).
- L'offset éventuel par rapport à la surface de la table, pour graver/redécouper une pièce déjà existante, d'une épaisseur supérieure à celle du matériau (ex : boite).
- Et surtout la distance entre le fin de course d'origine et le zéro focal, et qu'elle soit mémorisable.
L'idée est de prérégler le lit (position retrouvable grâce à un fin de course) de façon à ce que le zéro soit à la distance focale, et ensuite de jouer uniquement le mode (découpe / gravure), l'épaisseur du matériau, et l'éventuel décalage de la surface à couper/graver par rapport au lit par une interface utilisateur simple. Terminé les cales d'épaisseur et autres pieds à coulisses....
Autres contraintes :
- Une Arduino, un afficheur OLED (128X32 pixels) et un encodeur de panneau feront très bien le job...
- Je veux pouvoir changer l'optique pour passer à 1.5'' si je veux faire des gravures fines.
- Je ne souhaitais pas que la courroie ou le moteur puissent être dans le champ du laser, même très en dessous. j'ai en effet vu plusieurs tables artisanales ou le tendeur de courroie faisait revenir la courroie à l'intérieur de la zone touchable par le laser. Certes, étant très en dessous, il est défocalisé et n'a plus beaucoup de puissance, mais je ne souhaitais pas tenter le diable et risquer de blesser la courroie.
Même remarque avec les pièces imprimées en 3D, qui devraient être en dehors de la portée du laser.
- Les 4 axes aux 4 angles devront bouger d'un mouvement synchrone grâce à une courroie crantée
- Un tendeur de courroie simple devra être présent.
- L'ensemble lit devrait être le moins épais possible afin de garder la plus grande course utile en Z.
- Je dois pouvoir monter n'importe quel matériau de support sur le lite, et notamment du nid d'abeille si j'arrive à en trouver (évolution future)
- La réalisation devra utiliser le max de pièces standard, de façon à éviter les usinages particuliers.
- Il devra être possible de faire évoluer l'électronique pour remplacer le fin de course + réglages, avec un capteur LIDAR (light detection and ranging) / TOF (time of flight) pour mesurer à partir de la tête directement la distance de la pièce. Bien que mes premiers essais avec du VL6180X ne soient pas super concluants ( tolérance de mesure +- 1mm à cause d'une dérive dans le temps), je ne désespère pas d'arriver à le faire marcher. En terme d'usage ce serai vraiment un plus puisqu'il suffirait de préciser le mode (découpe / gravure) et l'épaisseur du matériau, le reste se faisant automatiquement grâce au capteur...
- L'électronique devra consommer le moins possible, de façon à pouvoir être raccordée sur l'alimentation interne de la K40 qui fournit du 5 et du 12V.
Conception
La conception a été faite sur Sketchup. Voici le fichier Sketchup et des exports STL des pièces : SketchupEtPiecesSTL.zip
Voici une vue d'ensemble :
L'ensemble est réalisé sur la base d'un profilé aluminium carré 16X16 trouvé chez Leroy merlin. Des pièces imprimées en 3D viennent s'emboiter dessus et assurer pour les pièces du dessus la fixation de l'écrou noyé, et pour les pièces du dessous la liaison pivot.
Le support moteur est lui même emboitable sur le profilé. 2 poulies lisses sur roulement permettent d'enrouler au maximum la courroie autour de la poulie crantée GT2 qui assure la transmission. Le moteur est monté dans des trous oblongs qui permettent de gérer la tension de courroie. Une vis de blocage empêche l'ensemble moteur de se translater sur la barre en aluminium à cause du couple. Tout est démontable.
La transmission du mouvement vertical est assurée par des tiges filetées de 5 au pas de 0.8mm. Cette vis est montée dans les coins inférieurs en sandwich avec 2 roulements MR105ZZ, et 2 écrous bas profil M5 montés au frein filet pour éviter leur rotation intempestive par rapport à la vis. Un écrou M5 standard est monté dans les cois supérieurs pour assurer la montée / descente du lit. Un poulie GT2 20 dents axe de 5mm assure la transmission du mouvement. Voici une vue par transparence :
Le fin de course (ici non représenté) est monté à la colle chaude sur le coté du support moteur. En effet, vu la multiplicité des formes, il ne m'a pas semblé utile de prévoir des trous de fixation, mais plutôt de garder un système de fixation souple et démontable, et pour cela la colle chaude c'est bien...
Nomenclature des composants :
- 4 vis M3X8 (fixation moteur)
- 1 vis auto-foreuse 3X10 (fixation ensemble moteur sur profilé alu)
- 8 roulements MR105ZZ (5X10X4)
- 1 moteur pas à pas Nema 17 (ex: Wantai 42BYGHW609 de 1.7A disponible chez Aliexpress https://fr.aliexpress.com/premium/42BYGHW609.html)
- 1 barre de profilé carré 16X16 (ex: Leroy Merlin https://www.leroymerlin.fr/v3/p/produits/tube-carre-aluminium-brut-argent-l-2-6-m-x-l-1-6-cm-x-h-1-6-cm-e1501604693 )
- Plaque d'acier déployé 50X25 maille de 10mm (ex: leroy Merlin https://www.leroymerlin.fr/v3/p/produits/tole-acier-metal-deploye-brut-gris-l-25-x-l-50-cm-ep-2-2-mm-e19281)
- 4 longueurs de 100 mm de tige filetée 5mm
- 8 écrous HM5 (M5 bas profil)
- 4 écrous M5 (standard)
- Courroie GT2 1240mm en 6mm de large (ex : https://fr.aliexpress.com/item/4000230359952.html )
- 5 Poulies GT2 20 dents, diamètre intérieur 5mm (standard pour les imprimantes 3D)
- Contrôleur pas à pas TB600 ( ex : https://www.banggood.com/TB6600-Upgraded-Stepper-Motor-Driver-Controller-for-4A-940V-TTL-32-Micro-Step-2-or-4-Phase-of-4257-Stepper-Motor-3D-Printer-CNC-Part-p-1453122.html )
- Arduino Pro micro (à base d'ATMEGA 32U4, ex : https://fr.aliexpress.com/item/32865147071.html ) ou Leonardo, ou Arduino Micro
- Écran Oled 128X32 (ex : https://fr.aliexpress.com/premium/oled-128x32.html )
- Encodeur de panneau (ex: https://fr.aliexpress.com/item/32873198060.html )
- Switch de fin de course (ex : https://fr.aliexpress.com/premium/limit-switch.html )
- Frein filet ou colle cyanoacrylate.
Cout total : 60 euros max
Électronique
L'électronique est assez simple puisqu'il n'y a à raccorder que :
- Le contrôleur moteur pas à pas (3 sorties)
- L'encodeur de panneau (2 entrées)
- Le poussoir de l'encodeur de panneau (1 entrée)
- Le fin de course (1 entrée)
- L'écran (2 sorties)
Le contrôleur pas à pas nécessite 3 sorties: Step (avance d'un pas), Dir (direction CW ou CCW) et Ena (Enable). Cette dernière sortie est optionnelle, mais j'ai souhaité implémenter la désactivation du moteur dès lors que l'on ne commande pas le lit. Ceci a pour objectif de minimiser la consommation du dispositif, car je compte le raccorder sur l'alimentation de la K40 qui fournit un 5V et un 12V. Elle est dimensionnée pour l'électronique interne et ne supportera peut être pa un autre moteur. Or au moment ou l'on règle le lit, les autres moteurs ne sont pas commandés. SI le lit est coupé lorsque l'on découpe, il n'y aura pas de surconsommation.
L'encodeur de panneau a 5 broches. Les 2 séparées sont pour l'interrupteur à pourssoirr. Les 3 autres sont pour les 2 sorties A et B avec un point milieu qui devra être raccordé à la masse. A noter que la bibliothèque utilisée pour gérer l'encodeur nécessite des entrées sorties qui acceptent des interruptions. Sur les Arduino Pro Micro / Micro ou Leonardo, seules les broches 0, 1, 2 et 3 possèdent ces caractéristiques. Les 2 & 3 étant aussi le bus I2C qui sera utilisé pour communiquer avec l'écran, il ne nous reste que 0(RX) et 1(TX) , qui sont aussi la liaison série. Ce n'est pas très grave car nous n'allons pas en avoir besoin. A noter que si sur le proto que vous câblerez, l'encodeur semble tourner à l'envers, c'est qu'il faut permuter les entrées A et B.
L'écran est connecté en I2C sur les broches 2 (SDA) et 3 (CLK).
En voici le schéma :
Le contrôleur pas à pas n'est pas représenté, mais il est facile de le raccorder:
- Step, Direction et Ena sur les entrées '-' éponymes, les entrées + au 5V,
- Un enroulement du moteur pas à pas sur A-/A+, l'autre sur B-/B+
- Et enfin l'alimentation 12V sur GND/VCC
Logiciel
Le logiciel a été développé autour de plusieurs bibliothèques Arduino afin de gagner du temps de développement :
- Accelstepper pour la gestion du moteur pas à pas avec accélération
- ssd1306 d'Adafruit pour la gestion de l'afficheur
- AdagruitGFX, nécessaire également pour l'afficheur graphique
- Encoder library : gère un encodeur de panneau sous interruptions
- Ezbutton : gère des boutons, également sous interruptions.
Au boot, un écran de démarrage affiche la version du logiciel pendant 2 secondes, puis.
- Le firmware fait la recherche d'orgine en déplaçant le lit vers le bas tant que le switch de fin de course(Home) n'est pas activé. Pendant cette phase, l'écran affiche "Origine".
- Une fois l'origine prise, le lit se déplace de setting.fBedOffset vers le haut, puis affiche "Machine a zero" pour 1 seconde, efface l'écran et coupe le moteur.
L'écran suivant est l'écran principal. Il affiche 2 lignes. Un appui court sur l'encodeur permet de changer de paramètre actif. La valeur du paramètre peut être changée en tournant l'encodeur. Décrémenter en tournant dans le sens inverse des aiguilles d'une montre, et incrémenter dans le sens des aiguilles d'une montre.
- Le paramètre "Cut" est pour déterminer si les réglages sont pour la découpe (Oui) ou la gravure (Non)
- Le paramètre "Epais" est pour déterminer l'épaisseur du matériau. Un pas d'encodeur = 0.1mm.
------------- | Cut: Oui | | Epais:05.0 | -------------
Une pression longue sur l'encodeur permet d'aller au menu de paramétrage.
Il est constitué de 2 lignes, chacune avec un a paramètre différent. Une pression courte permet de passer de l'un à l'autre. La valeur du paramètre se change en tournant l'encodeur.
- Le paramètre "Decal" permet de régler un décalage entre la surface du lit et le bas de la pièce à couper. C'est pratique par exemple pour recouper ou graver une boite en contreplaqué déjà assemblée pour y faire une gravure ou un trou supplémentaire par exemple.
- Le paramètre "ZeroB" est pour ajouter la distance entre le fin de course d'origine et le zéro focal (2'' = 50.8mm entre la lentille et la surface du lit)
------------- | Decal:00.0 | | ZeroB:08.0 | -------------
Une pression longue sur l'encodeur permet de quitter l'écran de paramétrage, en sauvant tous les réglages dans la mémoire flash, et ramène l'utilisateur dans l'écran principal.
Merci de noter que les 4 paramètres sont sauvés quand on quitte l'écran d'accueil, mais seulement à ce moment afin de limiter le nombre d'écriture dans l'e2prom.
Point important!!!!
Lors du premier lancement du soft, il attend une eeprom vide avec que des zero, ce qui n'est pas toujours le cas même sur une arduino flambant neuve. Avant de flasher le code ci dessous, je vous recommande de flasher et lancer un programme d'effacement de l'Eeprom (ex : https://www.arduino.cc/en/Tutorial/LibraryExamples/EEPROMClear ) qui va vous mettre la mémoire dans l'état attendu.
Voici le logiciel que j'ai développé pour piloter le lit, pour environnement Arduino : _bedK40.zip. Il suffit de le décompresser dans votre dossier "Arduino" et le téléverser.
Nota: si lors du lancement, le programme fait bien la recherche d'origine puis affiche "Rising up -1073741.8" et actionne indéfiniment le moteur, c'est que vous n'êtes pas passé par la phase de mise à zero de l'eeprom décrite ci dessus!
Montage et réglages
Assemblage:
Rien de particulier à dire sur l'assemblage, si ce n'est qu'il vaut mieux mesurer au pied à coulisse entre les profilés alu du haut et du bas, sur les quatre côtés, et retoucher le réglage de chaque vis avant de serrer les 4 poulies crantées. Ainsi le dessus sera parfaitement parallèle au dessous.
Montage dans la laser:
Pour monter le lit il faut le descendre à mi course sinon ça coince quand on le présente. Le moteur doit être au fond à droite, il y a la place. Ensuite, le mettre à égale distance des profilés gauche et droite, lui faire touche le moteur pas à pas à l'avant.
J'ai choisi de ne pas faire de trous en plus dans le châssis, mais de fixer le lit avec des pads autocollants de 25X25. Ces pads, munis d'adhésifs 3M, collent très bien et assurent une fixation durable mais démontable (en sacrifiant les pads). Ils font 3mm d'épaisseur, ce qui fait qu'en les fixant sur les barres aluminium, les pièces plastiques ne sont pas en contact et la référence est sur les barres aluminium.
Les câbles peuvent être passé à l'arrière droit de la machine vers le compartiment électronique.
Exemple de pads : https://www.banggood.com/fr/10Pcs-Remote-Control-Helicopter-Spare-Parts-Sponge-Double-Sided-3m-Tape-p-1403006.html
Réglage:
Il n'est pas aisé de mesurer exactement la distance attendue de 50.8mm entre la surface du lit et la lentille, cette dernière étant noyée dans le porte lentille en aluminium. L'expérimentation reste la façon la plus facile pour trouver ce réglage. Pour ce faire:
- Mettre "Cut" à "Non et "Decal" à zero.
- Prendre un matériau quelconque (ex : contreplaqué), mesurer son épaisseur au pied à coulisse et le reporter dans le réglage "Epais".
- Régler ZeroB pour avoir une distance approximative de 45mm entre la position théorique de la lentille et le lit (avec un réglet)
- Tracer une ligne verticale avec le laser, décaler le brut pour refaire une gravure (ex : vers la droite) et mettez le lit 1mm plus bas en réglant zeroB
- .. et répéter l'opération 10 fois.
Vous obtiendrez un motif constitué de lignes verticales plus ou moins larges. La plus fine désigne la bonne altitude de la tête, que vous n'aurez plus qu'à reporter dans le réglage ZeroB correspondant.
Ceci n'est à faire qu'une fois à moins que vous ne changiez la tête laser, la focale de la lentille (par exemple pour mettre une lentille de 1.5'') ou que vous ne changiez complètement la calibration optique.
En ensuite?
Il peut être judicieux de refaire une face avant à la découpe laser afin d'intégrer le nouvel écran, l'encodeur, mais aussi le M/A de l'assistance d'air, de l'éclairage intérieur et pourquoi pas aussi une visu de la température d'eau. A titre d'exemple, voici un visuel de ce que j'ai réalisé :
Et voici le ficher SVG qui a servi à la découpe (téléchargeable ici) :