Atelier du Verdier

Journal de construction

L'histoire complète d'une fraiseuse CNC construite de zero, du premier montage à blanc jusqu'à la machine pleinement fonctionnelle.

6 mois
de patience, d'essais et de copeaux
265
etapes video
16 jan. 202629 juin 2026
construction
depuis le premier copeau
GitHub
PrintNC — Atelier du Verdier

PrintNC — Atelier du Verdier

Journal de construction d'une fraiseuse CNC PrintNC, de la première pièce au premier copeau. Documentation complète, ouverte et reproductible.

Explorer le site

Aout 2026

5 etapes

07/08/2026Mecanique

Allez, je vais retenter ma chance avec un ATC, mon premier fût un échec total Vidéo longue et lassive, ça sent la fatigue 😅

05:54Miniature 07/08/2026
06/08/2026Laser

Bon, je pense que je vais arrêter là avec les polices de caractère !!

00:15Miniature 06/08/2026
05/08/2026Laser

Lié-délié Machine nerveuse

05:14Miniature 05/08/2026
04/08/2026Laser

Allez, je suis comme un fou avec mon graveur laser 😅

01:33Miniature 04/08/2026
03/08/2026Laser

Gravure du nuancier avec calcul automatique des nuances

01:35Miniature 03/08/2026
Juillet 2026

Le laser entre en scene

Module laser sur l'axe Z, gravure et atelier FreeCAD LaserAtelier. 14 etapes

31/07/2026Laser

Mon atelier laser avance, je suis en v2.13. Quand je pense que je suis parti juste d'une projection de segment sur une surface 3D… et maintenant j'ai un atelier complet dans FreeCAD, marquage, gravure photo, découpe. En ce moment je suis dans la calibration, et c'est ça le plus long. Le bois se fiche de ce que raconte le programme, faut aller mesurer pour de vrai sur une chute : les tons, la puissance, la hauteur en Z, l'épaisseur des traits, le tout au pied à coulisse. J'en suis à 110 largeurs de trait et 76 tons jugés à l'œil, sur du hêtre et du MDF… et il en reste. Et à chaque fois que j'ai voulu croire le calcul plutôt que la planche que je venais de graver, c'est la planche qui avait raison. La photo, c'est 12 × 18 cm et 1h09 de gravure. Le gris c'est pas des points, c'est l'épaisseur du trait qui varie.

00:05Miniature 31/07/2026
31/07/2026Laser

Gravure du nuancier avec calcul automatique des nuances

02:56Miniature 31/07/2026
28/07/2026Laser

Première gravure Avec mon atelier pour FreeCAD

00:29Miniature 28/07/2026
28/07/2026Laser

Aperçu de ma première gravure Incroyable de voir le résultat de son travail 😄

00:57Miniature 28/07/2026
25/07/2026Laser

Test de gravure avec les mauvaises calibration, c'est pour du MDF normalement

00:59Miniature 25/07/2026
25/07/2026Laser

Test de gravure en defocus

00:59Miniature 25/07/2026
25/07/2026Laser

Usinage d'ondulation puis gravure 2.5D

00:29Miniature 25/07/2026
25/07/2026Laser

Résultats gravure laser sur surface non plane validé à 100%

00:27Miniature 25/07/2026
23/07/2026Laser

Mon Atelier Laser continu, je recherche les bug et problèmes et je test mais j'adore mon Atelier

12:52Miniature 23/07/2026
18/07/2026Laser

Test de gravure afin de trouver le meilleur focus

01:16Miniature 18/07/2026
18/07/2026Laser

Premier test de gravure avec mon programme... Attendons la fin.

00:36Miniature 18/07/2026
18/07/2026Laser

Je continue de tester mon atelier FreeCAD LaserAtelier

00:59Miniature 18/07/2026
17/07/2026Laser

Mise en place du laser sur l'axe Z de ma PrintNC

05:44Miniature 17/07/2026
02/07/2026Electronique

Bouton d'arrêt d'urgence en place, ça n'avance pas vite ces derniers temps, mais ça avance. Je suis en train de potasser pour une grosse nouveauté, mais pour le moment j'en dis pas plus car cela ne fonctionne pas et je n'ai pas tout modélisé encore.

00:15Miniature 02/07/2026
Juin 2026

ATC, relais et interface

Accessoires, automatismes et personnalisation de QtDragon. 32 etapes

29/06/2026LinuxCNC

Dieu dit : Que la lumière soit ! Et la lumière fut.

00:15Miniature 29/06/2026
29/06/2026LinuxCNC

Avec les leds en courant continu

00:15Miniature 29/06/2026
25/06/2026LinuxCNC

Je me suis mis un bouton afin de me faciliter le déplacement de la caméra vers outils

03:11Miniature 25/06/2026
24/06/2026LinuxCNC

Méthode de positionnement précis de la fraise à l'aide de la camera

03:09Miniature 24/06/2026
23/06/2026Mecanique

J'ai installé ma caméra de positionnement

09:02Miniature 23/06/2026
22/06/2026Mecanique

Les projets à venir

03:11Miniature 22/06/2026
20/06/2026Mecanique

C'est ma première fois avec du laiton

00:15Miniature 20/06/2026
20/06/2026Mecanique

C'est sympathique tout ça !

00:15Miniature 20/06/2026
20/06/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 20/06/2026
20/06/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 20/06/2026
20/06/2026Mecanique

Petite poche pour petite plaque

00:15Miniature 20/06/2026
20/06/2026Mecanique

Mais quel con !!

00:15Miniature 20/06/2026
19/06/2026Mecanique

Usinage de ma petite boîte contrôleur 3 boutons

00:15Miniature 19/06/2026
17/06/2026LinuxCNC

Les relais sont opérationnels

05:42Miniature 17/06/2026
13/06/2026Electronique

Petite carte de contrôle en service avec quelques petits soucis de réglage

01:00Miniature 13/06/2026
12/06/2026Mecanique

Usinage pour la fixation du radiateur

01:56Miniature 12/06/2026
09/06/2026LinuxCNC

Encore un petit bug corrigé qui me change la vie

10:11Miniature 09/06/2026
08/06/2026LinuxCNC

Modification de l'interface LinuxCNC afin de mettre mes boutons

01:00Miniature 08/06/2026
07/06/2026LinuxCNC

Mes relais fonctionnent avec un petit plus ... Des boutons 😁

00:15Miniature 07/06/2026
06/06/2026Mecanique

Etape de construction (video du jour)

02:09Miniature 06/06/2026
05/06/2026LinuxCNC

Correction de bug dans mon script de changement d'outils semi-automatique & Usinage de clamps en mdf

05:21Miniature 05/06/2026
04/06/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 04/06/2026
04/06/2026LinuxCNC

Je suis revenu à mon script de changement d'outils semi-automatique Avec quelques améliorations 😊

02:56Miniature 04/06/2026
03/06/2026Mecanique

Pas convaincu du système

00:15Miniature 03/06/2026
03/06/2026Mecanique

Une idée

01:00Miniature 03/06/2026
03/06/2026Mecanique

Pourquoi on ne peut pas enregistrer sous fusion 360 ?? 😤

01:00Miniature 03/06/2026
03/06/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 03/06/2026
03/06/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 03/06/2026
01/06/2026Mecanique

Gravure sur bois de hêtre

00:59Miniature 01/06/2026
Mai 2026

La renaissance et les reglages fins

Nouvelle carte, premiere decoupe, palpeur et precision. 69 etapes

31/05/2026Mecanique

Surfaçage en avance de 6000mm/min

00:14Miniature 31/05/2026
28/05/2026Mecanique

J'ai trouvé pourquoi je marquais mon martyre lors de la découpe de mon plateau

00:15Miniature 28/05/2026
28/05/2026Mecanique

Explication de mon petit soucis résolu du martyre et problème totalement de ma faute sur la cnc

01:59Miniature 28/05/2026
28/05/2026Mecanique

Etape de construction (video du jour)

00:30Miniature 28/05/2026
27/05/2026LinuxCNC

Voilà j'ai réussi

15:39Miniature 27/05/2026
27/05/2026LinuxCNC

Vidéo n.2 sur la prise Z zéro sur le haut de la pièce Avec changement d'outils

10:02Miniature 27/05/2026
26/05/2026LinuxCNC

Mon style de changement d'outil avec le palpeur fonctionne enfin !

11:55Miniature 26/05/2026
26/05/2026LinuxCNC

Amélioration de mon système de changement d'outils semi-automatique 1 fichier pour les gouverner tous

05:05Miniature 26/05/2026
25/05/2026LinuxCNC

Ce que je veux faire avec le palpeur ne fonctionne toujours pas

03:09Miniature 25/05/2026
24/05/2026LinuxCNC

En avant pour le palpeur de hauteur d'outils

01:00Miniature 24/05/2026
23/05/2026Mecanique

Je pense que cette fois c'est un essai réussi !

00:15Miniature 23/05/2026
23/05/2026Mecanique

Deuxième passage

00:16Miniature 23/05/2026
22/05/2026Mecanique

C'est pas aussi simple que dans grbl

00:15Miniature 22/05/2026
22/05/2026Mecanique

Consommation environ 500VA en fraisage

00:14Miniature 22/05/2026
22/05/2026Mecanique

Première bilan de la première gravure avec ma printnc

05:48Miniature 22/05/2026
21/05/2026Mecanique

4 mois sans utiliser le logiciel et j'ai tout oublié !! Ça fait pas vraiment ce que je voulais 😜

00:15Miniature 21/05/2026
21/05/2026Mecanique

La reprise est pas facile !

00:30Miniature 21/05/2026
20/05/2026Mecanique

Petite mise au point sur mes 20 000mm/mm

06:39Miniature 20/05/2026
20/05/2026LinuxCNC

Longue vidéo sur l'interface linuxcnc avec qtdragon-hd

18:11Miniature 20/05/2026
18/05/2026Mecanique

Présentation du matériel utilisé

14:22Miniature 18/05/2026
18/05/2026Mecanique

Je suis passé de 6500mm/min à 20 000 !!!

00:30Miniature 18/05/2026
18/05/2026Mecanique

Explication de comment je suis passé de 6500 à 20 000mm/min

08:45Miniature 18/05/2026
18/05/2026Mecanique

Impression en 3D du sabot d'aspiration

00:30Miniature 18/05/2026
18/05/2026Mecanique

Juste pour le fun 😁

00:15Miniature 18/05/2026
16/05/2026LinuxCNC

Réglage fin des moteurs nema23 directement sur le driver CL57T v4.1

01:00Miniature 16/05/2026
15/05/2026Mecanique

Test de surfaçage

00:15Miniature 15/05/2026
15/05/2026Electronique

Je valide mes réglages de tête de broche. Top 👌🏻

00:15Miniature 15/05/2026
15/05/2026Mecanique

Soyons fous

00:15Miniature 15/05/2026
15/05/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 15/05/2026
15/05/2026Mecanique

Après tant de travail pour réaliser cette cnc

00:15Miniature 15/05/2026
15/05/2026Mecanique

Ma PrintNC est fonctionnelle 4 mois de réalisation Au poil 👌🏻👍🏻

03:22Miniature 15/05/2026
15/05/2026Mecanique

Petite démo de surfaçage sur du chêne en boit de bout. Dernière passe de 4mm a 4500mm/min

06:46Miniature 15/05/2026
15/05/2026Mecanique

La chose dont je n'avais pas pensé L'évacuation des poussières

01:00Miniature 15/05/2026
14/05/2026Mecanique

Première utilisation de la cnc Perçage des trous pour les inserts

00:15Miniature 14/05/2026
14/05/2026Mecanique

Pour le moment tout fonctionne bien 😌

00:14Miniature 14/05/2026
14/05/2026Mecanique

Ma planche de base est devenue un gruyère

01:00Miniature 14/05/2026
13/05/2026Mecanique

J'ai été un peu foufou avec le nombre de vis !! 😅

01:00Miniature 13/05/2026
13/05/2026Mecanique

Astuces pour moi afin d'aller plus rapidement sans passer par ma perceuse à colonne sans butée

00:59Miniature 13/05/2026
12/05/2026Mecanique

Gabarit énorme pour faire mes perçages à égale distance. Je sais que j'aurai pu faire cela avec une planche et 6 trous

00:15Miniature 12/05/2026
12/05/2026Electronique

Longue explication de mon raisonnement pour le réglage de ma broche avec ces histoires de plans de référence

05:41Miniature 12/05/2026
12/05/2026Mecanique

Gabarit imprimé

00:30Miniature 12/05/2026
11/05/2026Mecanique

Mes réglages de niveaux & équerrages sont OK Plus qu'à confirmer cela dans la pratique

01:00Miniature 11/05/2026
11/05/2026Mecanique

Petite présentation de mon imprimante 3D Elegoo Neptune 4 Max

03:50Miniature 11/05/2026
10/05/2026Mecanique

C'est en répétant les gestes que l'on s'améliore Je refais mon parallélisme et équerrage

02:36Miniature 10/05/2026
10/05/2026Electronique

Je refais la perpendicularité Avec ma réflexion sur mes difficultés à la réaliser

02:39Miniature 10/05/2026
10/05/2026Mecanique

Je continue mes réglages. Explication de mon processus Faut être patient...

01:57Miniature 10/05/2026
09/05/2026Mecanique

Je prépare mes planches martyres

00:15Miniature 09/05/2026
09/05/2026Mecanique

Positionnement des planches martyres et petit raisonnement sur la largeur de 15cm

01:00Miniature 09/05/2026
09/05/2026Electronique

Je refais mes réglages de la broche J'avais oublié un truc essentiel 😜

01:00Miniature 09/05/2026
09/05/2026Electronique

Explication de mon réglage pour la perpendicularité de ma broche

01:00Miniature 09/05/2026
09/05/2026Electronique

J'ai imprimé la pièce pour faire mon réglage sur la broche

00:33Miniature 09/05/2026
09/05/2026Mecanique

Précision de la PrintNC Au centième

00:27Miniature 09/05/2026
08/05/2026Mecanique

J'ai fixé mon plateau. 56 trous

00:15Miniature 08/05/2026
08/05/2026Electronique

Début du réglage de la broche

00:15Miniature 08/05/2026
08/05/2026Mecanique

Rail pour la fixation des pièces Je pense tout haut

01:00Miniature 08/05/2026
07/05/2026LinuxCNC

Je continue mes réglages

05:58Miniature 07/05/2026
07/05/2026Mecanique

Patin pour mes tubes aciers en TPU

00:30Miniature 07/05/2026
07/05/2026Electronique

Vitesse de broche 3000trs/min

00:15Miniature 07/05/2026
07/05/2026Mecanique

Perçage - taraudages

00:48Miniature 07/05/2026
06/05/2026Electronique

J'ai reçu ma carte

00:15Miniature 06/05/2026
06/05/2026Mecanique

Blabla sur le premier fonctionnement de la machine

05:51Miniature 06/05/2026
06/05/2026Mecanique

Belle surface de travail

00:15Miniature 06/05/2026
03/05/2026Electronique

Je vais faire une tentative de sauvetage de ma carte flexiHAL

00:29Miniature 03/05/2026
01/05/2026Mecanique

PrintNC terminée

00:15Miniature 01/05/2026
01/05/2026Electronique

PrintNC terminé

04:53Miniature 01/05/2026
01/05/2026Mecanique

J'ai trouvé mon bout de tuyau pour les raccords du ventilateur

00:15Miniature 01/05/2026
Avril 2026

Mise en route... et la carte grillee

Premiers mouvements sous LinuxCNC, puis un coup dur. 42 etapes

29/04/2026Electronique

J'ai trouvé pourquoi l'extension m'a fait griller la carte

01:00Miniature 29/04/2026
29/04/2026Electronique

Petit clips pour ranger un peu mieux les cables

00:15Miniature 29/04/2026
29/04/2026Mecanique

Radiateur de refroidissement pour ma cnc

00:30Miniature 29/04/2026
28/04/2026Electronique

Mauvaise nouvelle Carte grillée 😭

00:30Miniature 28/04/2026
26/04/2026Electronique

J'ai re modilisé mes supports capteur Encore un petit ajustement et ce sera parfait

00:15Miniature 26/04/2026
25/04/2026Electronique

Liquide de refroidissement Pour la broche OK

00:15Miniature 25/04/2026
25/04/2026Electronique

Rodage de la broche

00:15Miniature 25/04/2026
25/04/2026Electronique

Broche à 24 000 tr/min

00:15Miniature 25/04/2026
24/04/2026Electronique

La machine fonctionne mais je dois régler un gros problème de câble USB-C Petite démo du mouvement à 6000mm/min

03:54Miniature 24/04/2026
23/04/2026Electronique

Présentation du boîtier de la PrintNC Terminé à 99.9%

05:27Miniature 23/04/2026
23/04/2026Mecanique

Premier démarrage de la PrintNC 😁

04:25Miniature 23/04/2026
19/04/2026Electronique

Mise en place du boîtier centralisateur des capteurs et pince pour regrouper les fils et tuyaux

01:00Miniature 19/04/2026
19/04/2026Mecanique

Petit point sur l'avancement de la PrintNC

01:00Miniature 19/04/2026
17/04/2026Mecanique

Plaque arrière refaite ainsi que des caches prises

00:15Miniature 17/04/2026
17/04/2026Electronique

Début de mise en place des capteurs sur la PrintNC

00:30Miniature 17/04/2026
13/04/2026Mecanique

Support de prises moins haut pour axe Y1 et Y2

00:15Miniature 13/04/2026
13/04/2026Mecanique

Modélisation réussi Ça passe 👍🏻👍🏻

00:15Miniature 13/04/2026
12/04/2026Electronique

Mise en place du boîtier sur les moteurs nema 23

00:15Miniature 12/04/2026
12/04/2026Mecanique

On ne pense jamais à tout sauf lors de la mise en place 🥴

00:15Miniature 12/04/2026
11/04/2026Electronique

Petit support pour la connectique du moteur

00:11Miniature 11/04/2026
11/04/2026Electronique

Impression de mon premier support de connectique moteur nema23 👍🏻

00:30Miniature 11/04/2026
10/04/2026Mecanique

youtube.com/@atelierduverdier

00:15Miniature 10/04/2026
10/04/2026Electronique

Comment retirer les barres des chemins de cables

00:15Miniature 10/04/2026
10/04/2026Electronique

Démontage chemin de câbles Suite

00:15Miniature 10/04/2026
10/04/2026Electronique

Réflexion sur la création d'un boîtier pour les connecteurs

00:15Miniature 10/04/2026
10/04/2026Electronique

J'ai reçu mes capteurs LJ8A3-2-Z/AX IMPECCABLE 👍🏻

01:34Miniature 10/04/2026
10/04/2026Electronique

Première version de mon boîtier pour brancher les câbles sur le moteur

00:15Miniature 10/04/2026
09/04/2026Mecanique

Début du montage final de la cnc PrintNC Encore plein de petits détails à régler

00:30Miniature 09/04/2026
09/04/2026Electronique

Modification de l'axe Z pour y passer mon capteur

00:15Miniature 09/04/2026
09/04/2026Electronique

Petite explication sur mes capteurs Ça cogite !!

05:58Miniature 09/04/2026
08/04/2026LinuxCNC

VICTOIRE Les moteurs tournent enfin sous LinuxCNC Merci Jean-François 🎉

05:10Miniature 08/04/2026
08/04/2026LinuxCNC

Longue Demo du logiciel qtdragon sous linuxcnc

09:34Miniature 08/04/2026
07/04/2026LinuxCNC

LinuxCNC avec firmware remora-flexi Interface qtdragon-hd Sur Raspberry pi 4

05:52Miniature 07/04/2026
07/04/2026Electronique

Impressions du support de mon chemin de câble Impeccable 👍🏻

00:15Miniature 07/04/2026
07/04/2026LinuxCNC

J'avance dans la configuration de LinuxCNC

01:37Miniature 07/04/2026
04/04/2026Mecanique

Le gros fail😂

00:15Miniature 04/04/2026
04/04/2026Mecanique

Quand on croit que l'on a terminé... Il y a toujours une petite chose qu'on oubli

00:30Miniature 04/04/2026
03/04/2026Electronique

Impressions des supports de chemin de cables

00:30Miniature 03/04/2026
03/04/2026Electronique

Raspberry pi 4 sur la carte flexiHAL J'aimerais bien tester

00:30Miniature 03/04/2026
01/04/2026LinuxCNC

Boîtier terminé 🥳 Explication de mon soucis avec les boutons e-stop et stop

06:17Miniature 01/04/2026
01/04/2026Electronique

Première mise en route de la broche 🤞🏻

00:30Miniature 01/04/2026
01/04/2026Electronique

Activation du RS485 Afin d'avoir le contrôle Sur la vitesse de broche

00:53Miniature 01/04/2026
Mars 2026

Mecanique finalisee, place a l'electrique

Montage du portique termine, debut du boitier electrique. 42 etapes

31/03/2026Electronique

Capteurs de fin de courses OK 😁 Ça sent la fin bientôt

01:00Miniature 31/03/2026
31/03/2026Electronique

Magnifique jonction des 2 chemins de câbles 👍🏻

00:30Miniature 31/03/2026
30/03/2026Electronique

Enfin mes moteurs tournent 😃

00:30Miniature 30/03/2026
26/03/2026Electronique

Premier démarrage du boîtier électrique Mais je me pose une question

01:00Miniature 26/03/2026
25/03/2026Electronique

Je redessine tous les supports pour mes chemins de câbles Je me suis trompé de dimension lors de la commande

00:15Miniature 25/03/2026
25/03/2026Electronique

Mon boîtier électrique pour CNC avance tranquillement Patience 😁

00:15Miniature 25/03/2026
20/03/2026Mecanique

Je regarde les vidéos youtubes Tout le monde a un atelier tout bien rangé Moi c'est ....... Moi

00:15Miniature 20/03/2026
18/03/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 18/03/2026
17/03/2026Mecanique

Positionnement des perçages à la CNC

00:15Miniature 17/03/2026
17/03/2026Electronique

Début du câblage du boîtier électrique

00:15Miniature 17/03/2026
15/03/2026Mecanique

C'est chouette l'impression 3D Je ne m'en sert que pour ce genre de pièces

00:15Miniature 15/03/2026
14/03/2026Electronique

Début du montage du boîtier électrique

00:15Miniature 14/03/2026
14/03/2026Mecanique

Première connerie

00:15Miniature 14/03/2026
14/03/2026Mecanique

Comment je coupe les goulottes

00:30Miniature 14/03/2026
13/03/2026Mecanique

Petite présentation de la printnc Partie mécanique Finalisée

03:05Miniature 13/03/2026
12/03/2026Mecanique

Petite info sur les supports en aciers

00:15Miniature 12/03/2026
12/03/2026Mecanique

Méthode que j'ai utilisé pour fixer le bloc

00:30Miniature 12/03/2026
12/03/2026Mecanique

Attention à la qualité de surface des impression 3D

00:15Miniature 12/03/2026
12/03/2026Electronique

Ma méthode pour bien fixer le support moteur.

00:14Miniature 12/03/2026
12/03/2026Mecanique

La partie mécanique commence à se terminer

00:14Miniature 12/03/2026
12/03/2026Mecanique

Méthode de mise à niveau des 4 côtés de la cnc

00:30Miniature 12/03/2026
11/03/2026Mecanique

Réimpressions des plaques pour la vis à billes avec taraudages

00:15Miniature 11/03/2026
11/03/2026Mecanique

Montage des supports pour l'axe X tout est OK Ouff

00:14Miniature 11/03/2026
11/03/2026Mecanique

Enfin tout est fluide sur les rails parallèles. J'ai trouvé le petit problème

00:14Miniature 11/03/2026
11/03/2026Mecanique

Explication de mon petit problème que j'ai mis tant de temps à résoudre

00:29Miniature 11/03/2026
10/03/2026Mecanique

Échec total des mes platines en aluminium

00:15Miniature 10/03/2026
10/03/2026Mecanique

Dans les échecs il y a toujours du bon ☺️

00:14Miniature 10/03/2026
09/03/2026Mecanique

Petit problème sur la vis sans fin

00:14Miniature 09/03/2026
08/03/2026Mecanique

Etape de construction (video du jour)

00:16Miniature 08/03/2026
08/03/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 08/03/2026
07/03/2026LinuxCNC

Changement de l'embase en aluminium par un tube d'acier coupé

00:15Miniature 07/03/2026
07/03/2026Mecanique

Bientôt la fin du montage de la printnc

01:00Miniature 07/03/2026
05/03/2026Mecanique

Légé surfacage pour que ce soit joli. Je voulais poncer et peindre mais j'ai changé d'avis en voyant mon étau de perceuse !

00:15Miniature 05/03/2026
05/03/2026Mecanique

Semelles en aluminium au lieu de l'impression 3D

00:15Miniature 05/03/2026
04/03/2026Mecanique

Malgré mon énervement d'hier

00:13Miniature 04/03/2026
04/03/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 04/03/2026
04/03/2026Mecanique

Etape de construction (video du jour)

00:30Miniature 04/03/2026
03/03/2026Mecanique

Etape de construction (video du jour)

00:12Miniature 03/03/2026
03/03/2026Mecanique

J'insiste pas avec cette cnc pour l'aluminium

00:15Miniature 03/03/2026
02/03/2026Mecanique

Montage de la printNC. Pas de serrage de vis définitif afin de bien régler les équerrage et les petits réglages diverses.

00:15Miniature 02/03/2026
02/03/2026Mecanique

Serrages des vis

00:15Miniature 02/03/2026
02/03/2026Electronique

Bientôt la fin du montage de PrintNC

00:15Miniature 02/03/2026
Fevrier 2026

La saga de l'axe Z

Plaques reimprimees, rajustees, et le cablage de la broche. 50 etapes

28/02/2026Mecanique

Début de montage de la printnc avec des vis de 6 mm et rondelle frein de vis.

00:15Miniature 28/02/2026
28/02/2026Mecanique

Montage et réglage axe X

00:15Miniature 28/02/2026
28/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 28/02/2026
25/02/2026Electronique

Étape cruciale sur la PrintNC : le câblage de la broche G-Penny ⚡️. Aujourd’hui

00:05Miniature 25/02/2026
25/02/2026Mecanique

Démontage d'un patin HGW20CC

03:49Miniature 25/02/2026
25/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 25/02/2026
25/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 25/02/2026
25/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 25/02/2026
25/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 25/02/2026
24/02/2026Electronique

Nettoyage de la broche CNC g-penny 2

00:15Miniature 24/02/2026
24/02/2026Mecanique

Dégraissage des patins de guidages des rails linéaires

00:15Miniature 24/02/2026
23/02/2026Electronique

En attendant de recevoir la peinture et le petit matériel électrique

00:30Miniature 23/02/2026
20/02/2026Mecanique

Clavier DIY réalisé en 2023 @qmk

01:01Miniature 20/02/2026
20/02/2026Mecanique

J'ai mis tout de visu afin de voir comment je vais brancher tout ça !!

00:15Miniature 20/02/2026
19/02/2026Electronique

Réglage du porte broche de la printnc. Pour ceux que ça intéresse : wiki.printnc.info

00:15Miniature 19/02/2026
19/02/2026Electronique

Capteur de proximité inductif LJ8A3-2-Z/AX npn nc 5v

00:15Miniature 19/02/2026
18/02/2026Electronique

Porte broche mais il me faut un gabarit pour percer au bon endroit !!

00:15Miniature 18/02/2026
18/02/2026Mecanique

Réalisation d'un gabarit de perçage en impression 3D

00:15Miniature 18/02/2026
18/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 18/02/2026
18/02/2026Electronique

Support de broche fixé

00:15Miniature 18/02/2026
17/02/2026Mecanique

Première couche d'orange

00:15Miniature 17/02/2026
17/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 17/02/2026
16/02/2026Mecanique

Partie peinture

00:15Miniature 16/02/2026
16/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 16/02/2026
16/02/2026Mecanique

Ponçage pour l'accroche de la peinture grain 120

00:13Miniature 16/02/2026
14/02/2026Mecanique

Je suis enfin parvenu à faire mon axe Z

00:15Miniature 14/02/2026
13/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 13/02/2026
13/02/2026Mecanique

Encore une plaque pour l'axe Z

00:39Miniature 13/02/2026
13/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 13/02/2026
13/02/2026Mecanique

Etape de construction (video du jour)

00:14Miniature 13/02/2026
12/02/2026Electronique

Parcours d'outils sous FreeCAD pour la plaque pour le porte broche sur l'axe Z. Test sur bois avant aluminium en espérant que c'est la bonne cette fois-ci

00:09Miniature 12/02/2026
12/02/2026Mecanique

Réimpression 3D propre d'un support BF12

00:15Miniature 12/02/2026
12/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 12/02/2026
12/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 12/02/2026
11/02/2026Electronique

Axe Z qui rentre enfin dans le porte moteur

00:15Miniature 11/02/2026
10/02/2026Electronique

Problème d'entre axe entre le porte moteur et la vis sans fin

00:15Miniature 10/02/2026
09/02/2026Mecanique

Plaque pour l'axe Z réalisée

00:15Miniature 09/02/2026
09/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 09/02/2026
09/02/2026Mecanique

Profile de coupe.

00:15Miniature 09/02/2026
09/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 09/02/2026
06/02/2026Mecanique

Simulation d'usinage sous 1.1.0rc2

00:12Miniature 06/02/2026
06/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 06/02/2026
06/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 06/02/2026
06/02/2026Mecanique

Etape de construction (video du jour)

00:07Miniature 06/02/2026
05/02/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 05/02/2026
05/02/2026Mecanique

3 problèmes à régler Patience et persévérance

00:15Miniature 05/02/2026
04/02/2026Mecanique

Test de découpe de la plaque en Z de ma sur du bois. J'ai changé quelques pièces et je dois modifier le plan original

00:15Miniature 04/02/2026
04/02/2026Mecanique

Légé surfacage de 0

00:15Miniature 04/02/2026
04/02/2026Mecanique

Usinage plaque axe Z pour

00:15Miniature 04/02/2026
02/02/2026Mecanique

J'avance doucement mais sûrement.

00:15Miniature 02/02/2026
Janvier 2026

Les debuts et le montage a blanc

Premieres etapes de construction et essai d'assemblage. 11 etapes

30/01/2026Mecanique

Montage à blanc de la cnc

00:50Miniature 30/01/2026
27/01/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 27/01/2026
27/01/2026Mecanique

Etape de construction (video du jour)

00:15Miniature 27/01/2026
26/01/2026Mecanique

Premier montage de la cnc afin de voir si tout est ok.

01:00Miniature 26/01/2026
23/01/2026Mecanique

Etape de construction (video du jour)

00:51Miniature 23/01/2026
22/01/2026Mecanique

Etape de construction (video du jour)

00:50Miniature 22/01/2026
20/01/2026Mecanique

Etape de construction (video du jour)

00:59Miniature 20/01/2026
19/01/2026Mecanique

Etape de construction (video du jour)

01:01Miniature 19/01/2026
17/01/2026Mecanique

Etape de construction (video du jour)

01:25Miniature 17/01/2026
16/01/2026Mecanique

Etape de construction (video du jour)

01:40Miniature 16/01/2026
16/01/2026Mecanique

Etape de construction (video du jour)

01:47Miniature 16/01/2026
Aucune etape pour cette combinaison.

Avant-propos

Ce document raconte la construction de ma fraiseuse CNC PrintNC, depuis le tout premier montage à blanc jusqu'à la machine pleinement fonctionnelle. Il a été reconstitué à partir de mon journal de bord quotidien publié sur Instagram (@atelierduverdier), où j'ai documenté presque chaque jour mes avancées, mes échecs et mes petites victoires. Plus qu'une notice technique, c'est l'histoire d'un projet mené avec patience et persévérance — deux mots qui reviennent souvent, et pour cause.

PrintNC - Orange Mécanique
PrintNC - Orange Mécanique

Janvier 2026 — Le montage à blanc

Tout commence fin janvier. Avant de visser quoi que ce soit définitivement, je procède à un premier montage à blanc de la machine, juste pour voir si tout s'emboîte correctement. Sage décision : dès le 30 janvier, je note déjà « beaucoup de petits problèmes à régler, équerrage... » mais la PrintNC avance bien. Faire ce montage à blanc se révèle très utile — c'est un conseil que je retiendrai.

La devise des premiers jours est déjà posée : « J'avance doucement mais sûrement. »

PrintNC - le commencement
PrintNC - le commencement
PrintNC -Construction table CNC
PrintNC -Construction table CNC

Février 2026 — L'axe Z, ce chantier sans fin

Le mois de février est largement consacré à l'axe Z, et il me donne du fil à retordre. Je dois usiner les plaques de l'axe Z sur mon autre machine — pas vraiment faite pour ça — et les cotes ne sont pas toujours au rendez-vous.

C'est une succession de tentatives : une plaque réalisée « non sans mal » avec des défauts rattrapés, un problème d'entraxe de 2,5 mm entre le porte-moteur et la vis, des réimpressions 3D, des tests sur bois avant de passer à l'aluminium. Le 13 février, je lâche un « j'espère que c'est la bonne cette fois !! » qui en dit long sur la persévérance nécessaire. Et le 14 février, enfin : « Je suis enfin parvenu à faire mon axe Z, non sans mal. »

PrintNC - Usinage plaque Z
PrintNC - Usinage plaque Z

En parallèle, je m'attaque à l'esthétique et aux détails : démontage complet pour la peinture (sous-couche puis une belle couche orange), réalisation d'un gabarit de perçage imprimé en 3D pour fixer le porte-broche au bon endroit, et réglage du porte-broche en m'appuyant sur le wiki PrintNC.

Fin février, le matériel sérieux entre en scène. Je nettoie la broche G-Penny 2,2 kW refroidie à eau, je dégraisse les patins des rails linéaires HGW20, et je m'attaque à une étape cruciale : le câblage de la broche, avec la soudure du connecteur aviation GX20. Entre le câble blindé et les petites pins, il a fallu sortir la double paire de lunettes — « on ne rajeunit pas, mais la précision n'attend pas ! »

PrintNC - Moi en train de souder
PrintNC - Moi en train de souder

Mars 2026 — Le montage mécanique et le début de l'électrique

Mars marque le vrai assemblage. Montage avec des vis de 6 mm et rondelles frein, réglage de l'axe X, et surtout un principe de méthode : ne pas serrer définitivement les vis avant d'avoir réglé l'équerrage. La mise en butée pour l'équerrage, les réglages divers... c'est minutieux.

PrintNC - Positionnement des rails
PrintNC - Positionnement des rails
PrintNC - Prémontage
PrintNC - Prémontage
PrintNC - Prémontage
PrintNC - Prémontage
PrintNC - Prémontage
PrintNC - Prémontage
PrintNC - Prémontage
PrintNC - Prémontage

L'aluminium me résiste : après plusieurs tentatives et un certain énervement, je finis par renoncer à usiner certaines pièces en alu sur l'ancienne machine et je reviens à des platines imprimées en 3D. « Échec total de mes platines en aluminium, je remets mes platines en 3D. » Mais comme je le note moi-même : « Dans les échecs il y a toujours du bon. » L'embase en aluminium est même remplacée par un tube d'acier coupé, dans l'esprit costaud de la machine.

Le 11 mars est un beau jour : après avoir cherché longtemps un problème, tout devient enfin fluide sur les rails parallèles. Je partage d'ailleurs la méthode qui m'a débloqué. Puis je documente plein d'astuces : fixation des blocs et supports moteur, attention à la qualité de surface des impressions 3D, mise à niveau des quatre côtés de la machine.

Le 13 mars : « Partie mécanique finalisée. » Une étape majeure.

Aussitôt, le 14 mars, j'enchaîne sur le boîtier électrique : découpe des goulottes, première « connerie » assumée avec humour, positionnement des perçages à la CNC, et début du câblage. L'atelier n'est pas aussi rangé que dans les vidéos YouTube — « Moi c'est... Moi » — mais ça avance.

PrintNC - Montage du boîtier électrique
PrintNC - Montage du boîtier électrique

Le 30 mars, grande satisfaction : « Enfin mes moteurs tournent ! » Et le lendemain, les capteurs de fin de course fonctionnent. Ça sent la fin.

PrintNC - Arrière Nema23
PrintNC - Arrière Nema23

Avril 2026 — Mise en route, et un coup dur

Le mois d'avril s'ouvre sur de belles réussites : boîtier électrique terminé, première mise en route de la broche, activation du RS485 pour contrôler la vitesse de broche. Je commence à explorer LinuxCNC avec le firmware remora-flexi et l'interface QtDragon HD sur Raspberry Pi 4.

Le 8 avril, c'est la « VICTOIRE » : les moteurs tournent enfin sous LinuxCNC (avec un remerciement à Jean-François). Je réalise une longue démo de QtDragon.

Puis viennent les détails sans fin du montage final : modification de l'axe Z pour y passer un capteur, réflexion sur les capteurs, fabrication de boîtiers de connectique imprimés en 3D pour les moteurs Nema 23, supports de chemins de câbles. « Quand on croit que l'on a terminé... il y a toujours une petite chose qu'on oublie. »

Le 23 avril : « Premier démarrage de la PrintNC ! » La machine fonctionne, avec une démo de mouvement à 6000 mm/min — même s'il reste un problème de câble USB-C à régler. Le liquide de refroidissement de la broche est mis en place, la broche est rodée et monte à 24 000 tr/min.

Mais le 28 avril, coup dur : « Mauvaise nouvelle, carte grillée. » Le lendemain, je trouve la cause — une extension qui a fait griller la carte FlexiHAL. Un moment difficile dans un projet de cette ampleur.

Mai 2026 — La renaissance et les réglages fins

Mai commence avec la PrintNC déclarée « terminée », en attendant la nouvelle carte FlexiHAL. Je tente même un sauvetage de la carte grillée. Le 6 mai, la nouvelle carte arrive et le premier test est un usinage tout simple : un carré, pour vérifier que c'est bien carré. « Et ouiii c'est bien carré ! »

S'ensuit une longue période de réglages minutieux qui montre tout le sérieux du travail : passage à 3200 step, patins caoutchouc et TPU sous les tubes acier, fixation du plateau (56 trous, 56 taraudages, 56 vis !), préparation des planches martyres. Le premier petit usinage prudent — un simple positionnement de perçage — est vécu comme « fantastique ».

Le réglage de la broche devient une quête à part entière : perpendicularité, parallélisme, équerrage, plans de référence. Je refais les réglages plusieurs fois, j'imprime des pièces dédiées, je documente longuement mon raisonnement. « C'est en répétant les gestes que l'on s'améliore. » Et le résultat est là : précision au centième.

Le 15 mai est une date charnière : « Ma PrintNC est fonctionnelle. 4 mois de réalisation. Au poil ! » Les copeaux volent, le surfaçage du chêne en bois de bout est un plaisir, et après tant de travail, voir la machine en action est une vraie satisfaction. Détail qu'on oublie toujours : l'évacuation des poussières.

La fin du mois est consacrée à l'optimisation et aux fonctions avancées : réglage fin des drivers CL57T v4.1, un bond spectaculaire de vitesse (de 6500 à 20 000 mm/min en pointe), impression d'un sabot d'aspiration. Puis la reprise de LinuxCNC après des mois sans pratique — « j'ai tout oublié ! » — et l'apprentissage de ses subtilités par rapport à GRBL (les histoires de limites à décaler).

Le palpeur de hauteur d'outil devient le grand chantier logiciel : après des essais infructueux, le 26 mai mon système de changement d'outil avec palpeur fonctionne enfin. Mieux : le 27 mai, plus aucun zéro manuel — je pose les outils et le reste est automatique. Un fichier unique « pour les gouverner tous ».

Juin 2026 — ATC, relais et interface

Début juin, je me laisse tenter par un changeur d'outil automatique (ATC), moi qui ne voulais pourtant pas m'y attaquer tout de suite. L'essai est instructif mais le verdict tombe le 3 juin : « Pas convaincu du système, pas assez costaud. » Je reviens donc à mon script de changement d'outil semi-automatique manuel avec palpage auto, en l'améliorant et en corrigeant ses bugs.

Les derniers jours sont consacrés à l'intégration d'accessoires et à l'interface : mise en service de relais pour piloter aspirateur, lumière et pompe, avec des boutons dédiés ajoutés directement dans QtDragon. Le 8 juin, je personnalise l'interface LinuxCNC pour y placer mes boutons.

PrintNC -Relais
PrintNC -Relais

Bilan

Quatre à cinq mois de travail, des dizaines de pièces imprimées et réimprimées, une carte grillée puis remplacée, d'innombrables réglages d'équerrage et de perpendicularité, et une montée en compétence continue sur la mécanique, l'électronique et le logiciel LinuxCNC.

Ce qui ressort de ce parcours, ce n'est pas la perfection du premier coup — c'est exactement l'inverse. C'est la capacité à recommencer une plaque d'axe Z autant de fois que nécessaire, à transformer un « gros fail » en leçon, et à avancer « doucement mais sûrement ». La PrintNC de l'Atelier du Verdier est le fruit de cette persévérance.

« Après tant de travail pour réaliser cette CNC, c'est un plaisir de la voir en action. »

Document reconstitué à partir du journal de bord Instagram @atelierduverdier. Les citations en italique et entre guillemets sont des extraits des légendes d'origine.

5 août 2026 — LaserAtelier v2.44 → v2.80 : écrire à la plume, et se faire démentir par le sapin

Trois semaines sur LaserAtelier (doc complète), de la v2.44 à la v2.80.2. Le fil de ces semaines : faire écrire la machine — calligraphie, polices, pleins et déliés — et, en chemin, se faire contredire trois fois par le bois.

Le sapin a démenti le hêtre

La planche qui alimente le nuancier gravait les mêmes nombres pour tout le monde : S200 → S1000 à F2000, défocus 15. Des nombres de hêtre. Sur du sapin, sept cases sur dix sont sorties vierges — une planche entière gravée pour trois tons, dont le plus fort était un pâté.

Le plus gênant : les planches de calibration le disaient avant la gravure. Elles offrent les mêmes cases à tous les matériaux, et sur le sapin celles du coin le moins énergique étaient restées vides — non par oubli, mais parce qu'il n'y avait rien à mesurer. Au foyer, S200 s'arrête après F400 quand le hêtre tient jusqu'à F3000. Personne ne lisait ces cases vides.

Et sur hêtre, la même planche gaspillait déjà trois cases sur dix : le nuancier de l'atelier en garde la trace, S195 → 0, S235 → 0, S275 → 2. Rien avant ~S300. L'atelier lit désormais les cases vides et en tire deux choses : la vitesse, ramenée dans la plage où ce bois-là a été vu marquer, et le plancher de puissance, pour que la case la plus claire marque encore. Sur un matériau jamais mesuré, rien n'est recalé — et c'est annoncé : cette première planche est un repérage, ses cases vierges sont elles aussi une mesure.

L'avance s'applique au vecteur, pas au trait

Dix-sept pâtés entourés au feutre rouge sur un « Atelier du Verdier » gravé à la plume. Diagnostic proposé : trop de puissance, ou pas assez de vitesse. Les deux, et une seule cause.

En G94, F s'applique au déplacement programmé, axe Z compris. Là où le fuseau monte à sa pente maximale — c'est-à-dire au début et à la fin de chaque geste — la tête avance en XY 7,57 fois moins vite qu'annoncé, à faisceau constant. Le bois reçoit l'énergie de 7,57 mm de course étalée sur 1 mm de trait visible.

L'atelier connaissait ce rapport et s'en servait pour la mauvaise question : depuis des semaines il expliquait la durée d'un job. Personne ne l'avait relié à la brûlure. Mesuré sur le fichier qui avait produit les pâtés, en énergie par millimètre de trait visible :

avantaprès
segments au-delà de 2× la médiane20,6 %0,2 %
segments au-delà de 5×7,5 %0 %
pire cas12,4×2,1×
durée du job4,6 min2,3 min

Compenser remet aussi la machine dans le régime où la table des largeurs a été mesurée. Ce n'est pas un réglage de goût.

Écrire, pas graver

Le mode Calligraphie lit une vraie police calligraphique (.otf/.ttf), en extrait le squelette — la ligne que la plume a parcourue — et la largeur locale, puis confie la largeur à la hauteur Z : la tête se lève pour élargir dans les pleins, redescend pour les déliés. Rien n'est rempli ni repassé.

Il a fallu six versions pour que le geste ressemble à un geste. Le squelette est maintenant parcouru comme un graphe : à un croisement on traverse tout droit, comme le ferait une main, au lieu de ramasser les morceaux — 130 gestes deviennent 58 sur une police, 239 deviennent 68 sur une autre. Chaque geste en trop, ce sont deux terminaisons franches, et une terminaison au milieu d'un plein se grave en pâté.

Puis le sens : un plein se tire vers le bas, on écrit de gauche à droite. Les gestes sont orientés puis ordonnés — 9 gestes descendants sur 20 sont devenus 20 sur 20, pour moins d'une seconde de trajet à vide en plus sur un job de deux minutes.

Deux modes complètent l'ensemble : Texte gravé (contour), qui trace le pourtour exact des lettres d'une police classique (une police classique n'a pas de plume — son contour *est* son dessin, et en extraire un axe réduit les empattements à de petites barres), et Texte (trait simple), qui compte désormais 45 polices mono-trait.

Une police dessinée pour l'atelier

Les quarante-quatre premières sont converties de fontes libres. La quarante-cinquième, Verdier, n'est convertie de rien : chaque lettre y est tracée trait par trait dans le script qui la produit. Aucune fonte tierce, donc aucune licence à respecter, et elle porte le chapeau melon de l'atelier en glyphe.

Chaque trait y est écrit dans le sens où une main le tracerait — les fûts descendent, les barres vont de gauche à droite. Ça ne se voit pas sur le papier et ça se voit sur la machine.

Quatre relectures visuelles ont été nécessaires : on ne juge pas un dessin sur une liste de coordonnées. Treize glyphes ont été redessinés après les avoir regardés rendus, dont l'esperluette, qui a demandé trois essais — en une seule polyligne elle se lit « b ».

Deux plumes, et ce n'est pas la même chose

Une police mono-trait *est* un squelette : elle ne porte aucune épaisseur. Mais il y reste une information exacte — la direction de chaque trait — et c'est tout ce dont une plume a besoin.

- Bec plat (italique, gothique) : une lame de largeur fixe, tenue à un angle fixe. L'épaisseur ne dépend que de la direction ; un trait qui monte est aussi plein que le même qui descend. - Plume pointue (anglaise, toutes les cursives) : une pointe souple qui s'écarte sous la pression, et on n'appuie qu'en descendant — pousser une pointe vers le haut l'accroche dans le papier.

Le premier jet n'offrait que le bec plat, sur une cursive : il mettait des pleins dans les remontées, là où aucune main n'en met. Ça se voit tout de suite sans qu'on sache dire pourquoi.

Et la première plume était trop timide — 6 % de la hauteur pour le plein, contraste 5:1, verdict d'usage : « c'est une police un peu plus épaisse quoi ». À raison : les polices calligraphiques du commerce demandent 26:1 et 31:1. Le défaut est passé à 16 %, et le réglage qui décide de tout — l'épaisseur — est maintenant à l'écran, avec un schéma qui se redessine à chaque molette.

Ce que la mesure a refusé

Dernière demande de la série : lisser aussi les largeurs des polices extraites, puisque le lissage marchait sur la plume. L'idée se tenait — ces largeurs viennent d'une transformée de distance sur une image tramée, donc quantifiées au pixel.

Branché, puis mesuré : l'ondulation du bord contre le contraste.

fenêtre de lissageondulationcontraste
aucune0,08284,2:1
étroite0,0763 (−8 %)3,5:1 (−17 %)
large0,0479 (−42 %)2,7:1 (−36 %)

Chaque fenêtre coûte plus de contraste qu'elle ne gagne en régularité. Ce n'est donc pas du bruit qu'on peut moyenner : c'est le dessin de la lettre, qui change vite aux empattements et aux raccords. Retiré, et le tableau écrit dans le code à l'endroit exact où le lissage aurait été branché — pour que celui qui y reviendra rouvre ce chiffre-là d'abord.

Et la documentation disait le contraire du dépôt

Une relecture complète a trouvé, entre autres, deux documents annonçant des polices commerciales embarquées dans l'atelier. Elles avaient été écartées à la source dès le premier jour, pour cette raison précise. La doc laissait croire que le dépôt redistribuait des fontes payantes.

Dans la foulée : deux modes complets absents des trois listes d'interface du manuel, deux chapitres sans capture d'écran, un compte de tramages faux, et un numéro de version dans les consignes du dépôt qui avait 44 livraisons de retard. Le manuel a aussi été coupé en deux : le mode d'emploi d'un côté (−29 %), et un journal à part de l'autre — 87 entrées de développement qui s'étaient accumulées au milieu des explications, dont quarante-cinq dans une seule section.

2 août 2026 — LaserAtelier v2.31 → v2.44 : lire le bois sur photo

Suite (et fin de chapitre) du chantier mesure de LaserAtelier (doc). L'objectif de ces deux jours : que la planche gravée se lise toute seule sur une photo — largeurs de traits comme nuances de gris — au lieu de se mesurer case par case au pied à coulisse ou de se juger à l'œil.

Un tableau inventé est pire qu'un tableau vide

En remesurant la planche du foyer avec le nouvel outil, comparaison faite avec la sauvegarde du matin : trois colonnes de l'ancienne table étaient identiques, 0,10 à 0,30 mm par pas de 0,05 exactement. Un pied à coulisse ne produit pas trois rampes parfaites. Cette partie de la table n'avait jamais été mesurée — et deux recettes photo bâties dessus laissaient 40 % de bois nu entre leurs lignes : elles gravaient des rayures. Vide, une table refuse et renvoie à l'établi ; inventée, elle répond, de façon plausible, pour toujours.

Le bois a tranché : F200 carbonise, F1000 noircit

Le même dégradé gravé deux fois côte à côte. Le régime que le raisonnement désignait comme « le plus sûr » (F200, la plus grosse marge au-dessus du plancher de *mesure*) est sorti carbonisé ; F1000 est sorti noir franc, deux fois plus vite. Une marge de mesure n'est pas une marge de gravure : un trait large à basse vitesse est large surtout parce que le temps de pose est long, et c'est ce temps qui brûle. L'indice d'énergie qui le prédisait existait déjà — il n'était affiché nulle part sur ce tramage. Il l'est désormais, avec les deux repères gravés cités dans le message : 2,8× = noir franc, 5,7× = carbonisé.

La noirceur se lit d'un coup, sur toute la grille

La Grille de test peut graver sa mire (croix, réglette, et maintenant le régime : FOYER ou DEFOCUS 15.34 PT1.18 — le fichier ne suit pas le bois, c'est le bois qui survit). Une fiche déposée à côté du G-code donne la position de chaque case dans le repère de la mire. La photo redressée se lit alors d'un coup : le gris moyen de chaque case, converti en noirceur relative entre deux repères pris dans la même photo — un bout de bois nu, la case la plus noire — donc insensible à l'éclairage. Les deux repères sont proposés, dessinés, et se déplacent à la souris : une ancre posée sur un reflet décalerait tout le nuancier en rendant des pourcentages parfaitement crédibles.

Le plancher de bruit n'est pas choisi, il est mesuré : les écarts entre cases sont du bois intact, leur dispersion donne le grain (0 à 9,8 % sur la planche d'essai). Une case qui se lit sous ce bruit n'est pas un ton clair, elle est vide — vérifié sur le bois : les dix cases rejetées par le calcul sont exactement les dix vues vides à l'œil. Les tons versés au nuancier emportent leur régime (défocus, pas), sans quoi deux familles se mélangeraient dans une même courbe sans que rien ne le signale.

Les traits ne s'encadrent plus, ils se valident

La mesure des largeurs à la ligne (deux lignes posées sur le profil moyenné du trait — l'incertitude divisée par ~7) gagne le cadrage automatique : la mise en page des planches est rejouée depuis le code qui les a gravées, et le rectangle de lecture se pose tout seul sur le bon trait, y compris sur les planches défocus où le même couple puissance/vitesse existe à chaque niveau. Il ne reste qu'à juger où s'arrête la brûlure, et valider. Un bouton « pas de valeur » écarte une case illisible — distincte d'un trait vierge, qui est une mesure (zéro : le seuil du matériau).

Ce que l'utilisateur a trouvé et qu'aucun test n'a vu

La série continue, et elle mérite d'être dite : un bouton Générer cassé au premier clic, trois aperçus qui décrivaient une planche plus petite que celle qui allait sortir, des réglages neufs nés derrière des sections repliées, un accordéon qui refermait la section portant l'action principale, une réglette « volée » par les hachures de la grille (une voix d'écart entre 111 et 112 transitions), une fenêtre qui restait noire sans un mot. Tous trouvés en se servant du logiciel, aucun par un test — les tests sont venus après, pour que chacun ne revienne pas.

Et un panneau qui mettait 14 secondes à s'ouvrir, ventilateur hurlant : ~26 000 relectures du même fichier JSON par ouverture. 0,12 s après correctif. C'est l'oreille qui l'a trouvé.

1er août 2026 — LaserAtelier v1.1 → v2.31 : la photo, la mesure, et dix jours à se faire contredire par le bois

Dix jours de travail intense sur LaserAtelier (doc complète), passé de la v1.1.0 à la v2.31.1. Plutôt qu'une liste de versions, voici ce qui a changé — et surtout ce que le bois a démenti en chemin.

Graver une photo : sept façons de faire du gris

Un laser ne sait faire que du brûlé ou du bois nu. Tout le gris est une illusion, et il y a plusieurs manières de la fabriquer. Le mode Photo en propose désormais sept, avec aperçu réaliste de chacune :

- Diffusion (Floyd-Steinberg) et Diffusion en lignes — la densité de points identiques fait le gris ; - Durée variable et Gros points Z — c'est la taille du point qui varie, par le temps d'exposition ou par la hauteur du bec ; - Lignes calibrées (nuancier) — la puissance est modulée pixel par pixel, à partir d'un nuancier réellement gravé et jugé à l'œil ; - Similigravure — une trame à 45° façon journal : chaque point brûle à fond, c'est sa *surface* qui porte le ton. Aucune calibration nécessaire ; - Lignes gravées — un trait continu dont l'*épaisseur* fait le gris, lu dans la table des largeurs brûlées. Aucun bois nu, aucune calibration de teinte.

Les deux derniers gravent au foyer et rendent le gris par une géométrie, jamais en demandant au bois de produire une teinte. C'est le chemin qui a fini par gagner.

La leçon la plus coûteuse : la noirceur n'est pas une affaire d'énergie

Quatre bandes gravées à énergie rigoureusement identique par millimètre — S ajusté avec F pour que le rapport reste constant — sont ressorties visiblement différentes. Plus lent = plus foncé. Le temps de séjour compte, et aucune formule fondée sur la seule fluence ne pouvait le rattraper.

Corollaire désagréable : une courbe de noirceur bâtie sur des tons mesurés à des vitesses différentes est incohérente par construction. Le panneau vérifie maintenant les deux axes du régime — défocus et vitesse — et propose la correction d'un clic.

Au-delà de 92 %, on creuse sans noircir

Deux mesures indépendantes le disent. D'abord deux portraits jumeaux, même image, l'un à 100 % et l'autre plafonné à S900 : noirceur globale identique (0,710 contre 0,702), mais les noirs profonds plus denses au plafond. Ensuite une planche de dix pavés classés à l'œil, où S925 a été jugé plus foncé que S950, S975 et S1000.

Conclusion retenue sur hêtre à F800 : plafond à 92 %. Au-dessus, le trait se creuse et la surface ressort striée — et la table des largeurs, qui ne connaît que la largeur, ne pouvait pas le prédire.

Mesurer sur photo, au centième

Le vrai goulot d'étranglement n'était pas le calcul mais la mesure : lire au pied à coulisse une brûlure de 0,10 mm, des dizaines de fois. La chaîne a été refaite de bout en bout.

Chaque planche de calibration porte maintenant une mire gravée — une réglette au millimètre et quatre repères en croix — gravée *en même temps* que la planche, donc dans le même repère machine. Une photo tenue à la main n'est jamais perpendiculaire, et FreeCAD ne sait pas corriger une perspective ; les quatre croix donnent l'homographie complète. Un outil OpenCV redresse la photo à une échelle exacte, la range et la pose directement dans le document à sa taille en millimètres. Il ne reste qu'à mesurer à l'écran, en zoomant.

Résultat mesuré sur une planche réelle : échelle juste à 0,00 %, uniforme d'un bord à l'autre à 0,51 %, dispersion 0,013 mm.

Et la planche se vérifie elle-même. Après redressement, l'outil mesure le pas de la réglette gravée et le compare à l'échelle annoncée. Cette mesure n'entre pas dans le calcul : elle est indépendante, donc elle contrôle vraiment quelque chose. Au-delà de 1,5 % d'écart, le fichier n'est même pas écrit. Ce garde-fou est né d'un défaut réel — une cote saisie de travers avait produit une image 6 % trop large et 23 % trop haute, sans le moindre avertissement.

La planche porte son identité

Une planche vit des années, un fichier est réécrit à chaque évolution. Deux jours après avoir gravé les planches, la mise en page avait changé et le .ngc régénéré ne décrivait plus le bois posé sur l'établi — une cote périmée donne une échelle fausse en silence.

D'où : les cotes de la mire sont gravées sur la planche, et depuis peu le nom du laser aussi. Ce n'est pas de l'étiquetage : une largeur brûlée n'a de valeur que pour le module qui l'a produite, et à l'inverse, quelqu'un possédant le même laser peut reprendre ces mesures sans refaire une heure d'établi.

Import SVG natif

Le détour par le DXF émiettait un dessin de 23 tracés en plus de 210 fragments. Un parseur SVG maison lit le fichier directement et crée un objet par tracé d'origine, sélectionnable séparément, avec sa couleur de remplissage reportée pour les distinguer à l'œil.

Deux gains de temps machine, dont un décevant

Ordonnancement des trajets : sur un crâne gravé de 9 268 chaînes, les déplacements à vide sont passés de 56 m à 5,1 m (−91 %), pour une longueur gravée identique au millimètre près.

M67 (puissance synchronisée au mouvement) : sur cette machine, un S isolé entre deux G1 vide la file d'attente et arrête le mouvement — prouvé par deux fichiers jumeaux. M67 E0 Q… est censé l'éviter. Implémenté, puis mesuré sur bois : +2 % seulement sur 64 869 changements de puissance. Honnête à dire : le gain espéré n'était pas là.

Ce que les tests ne peuvent pas voir

Presque tous les défauts corrigés ces dix jours ont été trouvés en regardant le bois, ou en écoutant la tête bouger — jamais par un test. Un aller-retour inutile dans les trames de points a été entendu à l'oreille avant d'être mesuré, et il avait survécu un mois entier à sa propre correction, dans un générateur voisin.

Deux exemples parmi d'autres : un verrou « ne pas modifier les résultats » bloquait le clavier mais pas l'outil de mesure, qui écrasait donc sans un mot une valeur protégée ; et une grille de saisie affichait un tableau entièrement vide, né d'une mesure qu'elle ne savait pas montrer.

☕ LaserAtelier vous est utile ? Vous pouvez soutenir son développement sur ko-fi.com/atelierduverdier.

22 juillet 2026 — LaserAtelier passe en v1.1.0 : dialectes GRBL/grblHAL, largeurs brûlées mesurées

LaserAtelier est taggé v1.1.0 (doc complète), sous licence LGPL-2.1-or-later. Au menu de cette version :

Compatibilité GRBL et grblHAL (non testée)

Nouveau réglage « Dialecte G-code » dans les Préférences, par profil laser : en plus de LinuxCNC, l'atelier génère du GRBL 1.1 pur (armement M4 en mode laser $32=1, pas de sélecteur de broche, pas de G64 — le lissage de trajectoire est natif chez GRBL) et du grblHAL (idem, mais avec le changement d'outil T/M6 + G43 H si le firmware embarque la table d'outils). Aucun palpeur requis : le zéro Z se pose sur la surface à la cale ou au réglet. Attention : ces deux dialectes ne sont pas encore testés sur machine réelle — la PrintNC de l'atelier tourne sous LinuxCNC. Retours bienvenus.

Remplissage : hachures resserrées à la largeur réellement brûlée

La planche de calibration matériau a montré qu'au défocus, la brûlure réelle est plus étroite que le point optique aux faibles puissances (0,50 mm à S200 contre 1,18 mm optique sur MDF) — d'où des lignes visibles sur les tons clairs. La Gravure remplie resserre désormais automatiquement l'espacement de ses hachures à la largeur brûlée mesurée. Les mesures se saisissent via le bouton « Saisir les mesures de la planche » du panneau Grille de test.

Et aussi

Signature de l'atelier (le petit chapeau) sur chaque icône et chaque panneau, numéro de version affiché partout (y compris en tête de chaque G-code généré), métadonnées package.xml pour le gestionnaire d'extensions FreeCAD, et nouveau logo du site de documentation.

☕ LaserAtelier vous est utile ? Vous pouvez soutenir son développement sur ko-fi.com/atelierduverdier.

18 juillet 2026 — Gravure « noir plein », calibration du défocus et puissance laser asservie à la vitesse

Grosse journée côté gravure. LaserAtelier, l'atelier FreeCAD maison, gagne deux modes majeurs, et le pilotage du laser côté machine règle enfin le défaut de sur-brûlure aux départs de trait.

Gravure « noir plein » : remplissage en défocus + contour au foyer

Au foyer, le point laser est étroit — parfait pour un trait fin, inutilisable pour noircir une surface sans laisser des dizaines de bandes claires. La solution : éloigner le bec du foyer pour élargir le point, et espacer les hachures d'à peine moins que ce point élargi. Nouveau mode Gravure remplie (noir) : il grave un texte/forme 2D en noir plein en deux temps — d'abord le remplissage en défocus (point élargi), puis le contour repassé net au foyer par-dessus pour une arête propre.

Deux finitions ont demandé quelques allers-retours sur des essais réels (une lettre « A » sur MDF). D'abord, la brûlure débordait du contour d'environ un rayon de point : le remplissage est désormais automatiquement rentré du rayon de point (offset 2D vers l'intérieur), pour que la brûlure s'arrête pile au bord. Ensuite, les hachures parallèles laissaient une fine bande blanche le long des bords obliques : un liseré trace maintenant le pourtour de la zone remplie et la comble. L'épaisseur du trait de contour est réglable — on saisit une largeur en millimètres, l'atelier calcule le défocus correspondant.

Une bande de calibration pour le défocus

Tout le mode remplissage repose sur un modèle de divergence du faisceau, calibré à partir de deux mesures réelles du point (au foyer, puis à un défocus connu) plutôt que sur une valeur devinée. Nouveau mode Bande de calibration défocus : il grave d'un seul job une rangée de courts traits à hauteurs de bec croissantes, chacun étiqueté à gauche par sa hauteur et à droite par sa puissance. On mesure l'épaisseur de chaque trait : le plus fin donne le foyer, un trait bien défocalisé donne la divergence.

Deux détails découverts à l'usage et corrigés : à puissance constante les traits très défocalisés s'effacent (le point étalé dépose moins d'énergie) — d'où une rampe de puissance optionnelle qui monte le S avec la hauteur pour garder tous les traits mesurables ; et la police vectorielle maison ne faisait que les chiffres — elle gère maintenant le point décimal, pour des étiquettes de pas fin (0,25 mm) non ambiguës.

Résultat sur ce laser : foyer à ~8 mm sous le nez, point au foyer ~0,1 mm, faisceau à divergence lente (1,2 mm de large seulement à 27 mm de hauteur). La profondeur de foyer est large, la hauteur de gravure n'est donc pas critique.

Puissance laser asservie à la vitesse réelle (fin de la sur-brûlure aux départs)

La Flexi-HAL sort un PWM à puissance fixe : quand la machine ralentit — accélération en début de trait, coins — elle brûle plus longtemps au même endroit, d'où un début de trait plus épais que le reste, bien visible sur les remplissages. Correctif dans le HAL (remora-flexi.hal) : un étage multiplie la consigne S par le rapport vitesse réelle / vitesse demandée (motion.current-vel / motion.requested-vel) avant laser_scale. La puissance suit désormais la vitesse — 0 à l'arrêt, pleine à vitesse de croisière — pour une énergie déposée constante par millimètre. C'est l'équivalent du mode « dynamic power » des contrôleurs laser dédiés, mais côté LinuxCNC. Contrepartie à connaître : la puissance moyenne baisse (surtout sur les traits courts), il faut donc re-régler un peu à la hausse.

Corrections et confort dans LaserAtelier

- Ordre de gravure de la grille de test : l'optimisation par proximité entrelaçait les cellules (trajet dans tous les sens). Chaque carré est désormais gravé en entier, en partant du bas à gauche, rangée par rangée. - Parenthèses imbriquées et accents qui bloquaient l'interpréteur RS274 de LinuxCNC (« passe(s) », « Étiquettes »...) : un assainisseur nettoie la sortie de tous les générateurs (parenthèses internes en crochets, accents translittérés). - Préréglages matériau enregistrables/rechargeables (grille de test, gravure remplie), avec résumé. - Réglages centralisés dans un panneau Préférences (dossier G-code, vitesse rapide pour l'estimation, marge de survol, faisceau de visée pour le cadrage, garde-fous de découpe, profil du bec). - Refonte de l'interface : barre d'outils et menu regroupés par thème avec des séparateurs, et dans les panneaux un bandeau d'en-tête (icône + nom du mode) et des titres de section pour ne plus se perdre dans les options.

---

17 juillet 2026 — Le laser est opérationnel : PWM direct et workflows de gravure

Bascule en PWM direct (fin des convertisseurs grillés)

Le laser LaserTree est désormais piloté en PWM direct depuis la sortie SPINDLE_PWM de la Flexi-HAL (optocoupleur → LM358 → fil jaune), sans aucun convertisseur externe. Les deux modules 0-10 V vers PWM qui avaient grillé (juin, puis 16 juillet) étaient très probablement défectueux d'origine — d'autres acheteurs rapportent la même panne. L'architecture PWM directe supprime le maillon fragile.

Réglage critique des jumpers : P6 sur 5 V (et non 12 V) et P7 vertical (mode PWM). P6 fixe l'alimentation de l'ampli op donc l'amplitude du signal : sur 12 V, le PWM monterait à ~10.5 V dans l'entrée TTL 5 V du laser. Mesures au multimètre : linéarité parfaite de S0 (0.67 V) à S1000 (3.44 V), le plafond à 3.44 V étant simplement la limite de sortie du LM358 (V+ moins 1.5 V), largement au-dessus du seuil TTL. Au passage, correction d'un diagnostic erroné : le plancher de ~0.7 V à S0 n'était pas un « clampage firmware » mais la limite basse du LM358 — et en PWM c'est un niveau logique bas que le laser lit comme « éteint ».

Correctif du gel des jobs laser (piège multi-broche)

Un job laser seul gelait au premier G1, laser allumé : après un démarrage de broche, LinuxCNC attend spindle.0.at-speed même si seule la broche laser (spindle.1) a été commandée, et le VFD à l'arrêt répond FALSE indéfiniment. Corrigé dans le HAL : at-speed est désormais vrai si le VFD est à vitesse OU si la broche 0 est arrêtée. La sécurité fraisage est conservée (le spin-up du VFD reste attendu quand la broche 0 est commandée).

Workflows de gravure documentés

Nouveau guide pas-à-pas WORKFLOW_LASER.md dans le dépôt de configuration, et nouvelle section « Gravure laser » dans l'onglet Documentation du site. La découverte clé : le palpage du laser (T100 M6) se fait par contact mécanique du nez alu sur la pastille du palpeur fixe, donc le nez est la référence Z du laser dans toute la chaîne d'offsets. Conséquence : le laser se suffit à lui-même dans les deux modes — T100 M6 seul en mode martyre, et en mode pièce le zéro se prend au papier à cigarette entre le nez alu et la pièce, comme avec une fraise. Le zéro XY se fait au tir à faible puissance (M3 $1 S20). Les jobs mixtes (usinage puis gravure, ou l'inverse) partagent le même zéro sans manipulation supplémentaire.

Le message bloquant du toolchange quand le laser crée la référence de session a aussi été rendu non bloquant (même famille de problème que les M1 enchaînés qui bloquaient la reprise dans QtDragon).

Deux G-codes de calibration

Nouveau dossier gcode_tests dans le dépôt de configuration :

- test_focale_laser.ngc : rampe de 15 traits gravés à hauteur Z croissante (3 à 10 mm par pas de 0.5), puissance et vitesse constantes. Le trait le plus fin donne la distance focale, à reporter dans le post CAM.

- test_offset_laser_xy.ngc : job mixte minimal, croix fraisée puis croix laser au même X0 Y0 programmé. L'écart entre les croix corrige les offsets X/Y de T100 dans tool.tbl. La convention LinuxCNC laisse soupçonner un signe Y inversé dans la table actuelle — à valider avant le premier vrai job mixte.

LaserAtelier : compensation d'outil ajoutée à l'en-tête des G-codes

LaserAtelier, l'atelier FreeCAD maison qui génère les G-codes laser (gravure, découpe, grille de test puissance/vitesse, cadrage), produisait des fichiers sans G43 H100 : ils n'étaient corrects que si la compensation d'outil du laser était encore active dans LinuxCNC au moment du lancement. Lancés après un redémarrage ou un changement de fraise, le Z de foyer et les X/Y étaient interprétés en coordonnées broche et non nez laser — soit ~90 mm d'écart en Y et un focus faux.

Corrigé dans les quatre générateurs : l'en-tête de tout G-code produit contient désormais G43 H100 avec, en commentaire dans le fichier même, le prérequis (avoir fait T100 M6 dans la session). Le parseur d'aperçu interne ignore la nouvelle ligne, l'aperçu de trajet et l'estimation de durée sont inchangés. Les fichiers déjà générés avant le correctif ont été patchés à la main.

Documentation du site remise à niveau

La table des sorties AUX de l'onglet Documentation était périmée : AUX2 pilote les ventilateurs de broche (la pompe à eau est sur la sortie dédiée FLOOD), et AUX3 est devenue l'interlock laser, pilotée directement par spindle.1.on (elle suit M3 $1 / M5 $1, plus de M64 P3 ni de bouton).

2 juillet 2026 — Corrections, liens de partage, vote et glossaire

Corrections de bugs dans generer_site.py

Trois bugs bloquants corrigés dans le script de génération :

Page d'accueil invisible au démarrage : toutes les sections (#accueil, #tl, etc.) sont masquées par défaut en CSS. La fonction switchTab n'était jamais appelée au chargement, donc rien ne s'affichait. Ajout de switchTab(initHash || 'accueil') à la fin du script, avec gestion du hash d'URL pour le deep linking.

Timeline qui ne s'affichait pas : switchTab utilisait sections.tl.style.display = '' pour afficher la timeline, mais le CSS définit #tl { display: none } — retirer le style inline laissait le CSS reprendre le dessus. Corrigé en utilisant classList.add('show') / classList.remove('show') comme pour les autres sections.

Liens de partage non fonctionnels : découle du bug précédent — ouvrir une URL avec un hash (#all, #2026-06) n'activait aucun onglet car switchTab n'était pas appelée au chargement. Résolu par l'initialisation au démarrage et un listener hashchange.

Bonus : suppression d'un <div id="tabs-mois"> vide généré en doublon dans le HTML (vestige du template).

Liens de partage par ancre (🔗)

Ajout de boutons de partage discrets sur l'ensemble du site, visibles au survol :

- Chaque étape vidéo reçoit un identifiant unique (id="v-nomfichier") et un bouton 🔗 dans la ligne de méta-données. - Chaque en-tête de mois dispose d'un bouton 🔗 pour partager directement une période. - Chaque section de documentation et de glossaire reçoit un identifiant slugifié (id="doc-lubrification" etc.) et un bouton 🔗 positionné dans l'accordéon.

Un clic copie l'URL directe dans le presse-papier et affiche un toast "Lien copié !". Au chargement, le script détecte le hash et navigue automatiquement : #v-nomfichier ouvre la timeline et scrolle vers l'étape, #doc-nom-section ouvre l'onglet Documentation et déplie la section concernée.

Widget vote repensé

Nouvelle question : "Vous construisez (ou envisagez) une PrintNC ?" avec bouton "Oui, je me lance !" au lieu de "Ce contenu vous a-t-il été utile ?" / "Utile". La question mesure l'intention plutôt que la satisfaction — plus engageante et plus informative.

Compteur affiché : au chargement, le widget lit le compteur GoatCounter via l'API publique /counter/%2Fvote-utile.json et affiche le nombre de votants ("42 personnes se lancent aussi !"). Les messages s'adaptent selon le contexte : déjà voté, premier votant, juste après le clic. Aucun backend supplémentaire requis.

Glossaire complété

Correction d'un bug : data/glossaire.md était enveloppé dans des balises `markdown ... ` , ce qui affichait tout le contenu comme un bloc de code brut. Suppression des balises parasites.

Nouveaux termes : environ 20 entrées ajoutées (Backlash, BF12/BK12, Boucle fermée, CL57T, Encodeur, ER20, FreeCAD, G54/WCS, GrblHAL, HGR20/HGW20CC, LinuxCNC, MDI, Modbus RTU, Portique, PPR/CPR, PrintNC, Rail linéaire, Remora, SFU1204/SFU1610, SPI, Surfaçage, Touch off, Vis à billes) en plus des 22 existantes.

Nouvelle section G-code : référence complète en français — déplacements (G0/G1/G2/G3), espaces de travail (G54–G59/G53), positionnement (G90/G91), broche (M3/M4/M5), changement d'outil (M6), refroidissement (M7/M8/M9), cycles de perçage (G81/G83/G80), offsets outil (G43/G49), pause et fin (M0/M2/M30), temporisation (G4). Tableau de 29 codes + deux exemples complets commentés (contour sur bois, perçage alu avec débourrage).

30 juin 2026 — Évolution majeure du site web (Recherche, jalons, glossaire, durées)

Recherche en temps réel et Deep Linking

Ajout d'une barre de recherche sur la timeline. L'input filtre les 246+ vidéos instantanément par titre, légende ou contenu, sans rechargement de page. Ajout du Deep Linking (modification du hash de l'URL via history.replaceState) : cliquer sur un mois ou un onglet met à jour l'URL (ex: #2026-06), ce qui permet de copier/coller un lien direct vers une période spécifique. Au chargement, le script JS vérifie window.location.hash et active l'onglet correspondant. Ajout d'un bouton "Remonter" (back-to-top) flottant en bas à droite, visible après 600 px de scroll.

Jalons visuels et durées des vidéos

Deux nouvelles colonnes duree et jalon dans videos.csv. Si jalon est à oui, l'étape apparaît avec un fond orange subtil et une bordure gauche distincte dans la timeline pour mettre en valeur les moments forts (premier montage, premiers copeaux, carte grillée...). Si duree est renseignée (format MM:SS), un badge noir est affiché en bas à droite de la miniature.

Pour éviter de remplir les durées à la main, création du script remplir_durees.py. Il parcourt le CSV, localise chaque vidéo dans videos_sources/, extrait la durée via ffprobe (requête format=duration), et l'inscrit dans le CSV. Il ne réécrit le fichier que si des modifications ont été détectées.

Glossaire et données externalisées

Ajout d'un onglet "Glossaire" dans la navigation, généré automatiquement à partir de data/glossaire.md (converti en blocs dépliants <details> comme la documentation). Les titres et descriptions des mois (ex: "La saga de l'axe Z") ont été sortis du code Python de generer_site.py et déplacés dans data/mois.json. L'ajout d'un nouveau mois ou la modification d'un titre ne nécessite plus de toucher au script Python.

Refonte du système de vote

Remplacement du système d'étoiles (qui affichait 5/5 par défaut, bloquant l'interaction des visiteurs) par un bouton unique "Utile". Le clic est enregistré comme un événement GoatCounter (path: '/vote-utile') visible dans l'onglet "Events" du tableau de bord. Le bouton se grise localement après le clic (localStorage) pour éviter les doublons.

Compatibilité gestion_site.py

Mise à jour des fonctions _ligne_csv et ecrire_videos_csv dans l'interface graphique PySide6 pour prendre en charge les deux nouvelles colonnes sans casser l'ajout de vidéos existant. Le lecteur CSV ignore désormais silencieusement les clés None (piège Python 3.14 avec les virgules en fin de ligne).

28 juin 2026 — Interface graphique de gestion du site (gestion_site.py)

Nouvelle interface graphique Qt6

Ajout d'une interface graphique (gestion_site.py, PySide6/Qt6) qui regroupe toutes les opérations de maintenance du site dans une seule fenêtre : tableau de bord (statistiques, répartition par phase, état Git), génération du site, ajout de vidéo (avec aperçu miniature et chaîne automatique archive → miniature → CSV → regen), génération de miniatures en lot, synchronisation Git (status / pull / commit + push) et édition des fichiers de données. Remplace l'ancien goup_site.sh absent. Console intégrée affichant les commandes et leur sortie en temps réel. Thème dark/orange cohérent avec le site, favicon intégré en barre latérale.

Script d'installation multi-distribution

Ajout de installer_dependances.sh qui détecte la distribution (Arch/CachyOS/Manjaro, Debian/Ubuntu/Mint, Fedora) et installe automatiquement toutes les dépendances : Python, PySide6, pyserial, ffmpeg, git et les librairies runtime Qt (Wayland/X11). Si PySide6 n'est pas dans les dépôts, le script crée un virtualenv et un lanceur lancer_gestion_site.sh. Vérification finale des 5 dépendances.

Licences

Le kit adopte un modèle à deux licences : MIT pour le code source (scripts Python et shell), CC BY-SA 4.0 pour la documentation et les designs (Markdown, HTML, CSS, favicon, photos, textes). Le détail figure dans le fichier LICENSE et le README.md du kit.

PrintNC - Orange Mécanique - Gestion du site
PrintNC - Orange Mécanique - Gestion du site
26 juin 2026 — Référence caméra de positionnement ajoutée à la BOM

Caméra référencée (27 €)

Ajout de la référence d'achat de la caméra de positionnement (vue CAMVIEW) dans la BOM : caméra USB 2k Redeagle + objectif C-mount 5-50 mm, achetée 27 € sur AliExpress (https://fr.aliexpress.com/item/1005008742183752.html). La ligne caméra de la section « Électronique — Interface » passe de « — » à 27 € avec lien produit cliquable. Sous-total Interface : 118.98 € → 145.98 €. Total général : articles 3781.33 € → 3808.33 €, total final 4045.75 € → 4072.75 €.

24 juin 2026 — Bouton CAM VERS OUTIL (décalage caméra/broche)

Bouton de décalage caméra ajouté

Bouton "CAM VERS OUTIL" qui amène la caméra à la place de la fraise par un déplacement relatif de l'offset caméra/broche, depuis n'importe quelle position. Workflow : poser la fraise sur le point visé → clic (la caméra vient au-dessus du point) → ajustement fin au jog en regardant l'image → REF CAMERA pour poser le zéro pièce. Le bouton et REF CAMERA lisent les mêmes champs (lineEdit_camera_x / camera_y), donc le décalage et la compensation sont cohérents par construction. Avant, la méthode consistait à mettre d'abord le XY à zéro, puis à se déplacer en absolu de l'offset (par exemple G0 X-76 Y-85) ; désormais, plus besoin de passer par X0 Y0 — le handler envoie simplement un saut relatif G91 G0 X[-cam_x] Y[-cam_y] puis G90, depuis la position courante, via deux CALL_MDI_WAIT.

Bug : la fraise traversait la table au lieu du petit saut (RÉSOLU)

Symptôme déroutant : en MDI manuel, G91 G0 X-76 Y-85 allait direct en 2 s ; lancé depuis le bouton, la fraise traversait toute la table vers l'origine. Le handler Python était pourtant correct (le status bar affichait bien la bonne commande).

Cause racine : le bouton avait été créé dans Qt Designer en RÉUTILISANT un bouton existant, qui gardait sa connexion d'origine dans le .ui vers le slot btn_goto_location_clicked() (lequel fait un G53 G0 Z0 puis G53 G0 X.. Y.. en coordonnées MACHINE). À chaque clic, DEUX actions partaient en parallèle : la connexion Python ajoutée à la main (bon déplacement relatif) ET la connexion parasite du .ui (G53 absolu machine → traversée vers l'origine). En MDI manuel ce parasite n'existe pas, d'où la différence.

Diagnostic par grep sur le .ui :

<sender>btn_camera_to_tool</sender>
<signal>clicked()</signal>
<slot>btn_goto_location_clicked()</slot>

Correction : suppression du bloc <connection> parasite dans le .ui. Le bouton ne garde que la connexion Python définie dans initialized__ (self.w.btn_camera_to_tool.clicked.connect(self.btn_camera_to_tool_clicked)). Vérification : grep btn_camera_to_tool sur le .ui ne doit laisser que la définition du widget, plus aucune ligne <sender>.

Leçon : réutiliser un bouton dans Designer conserve ses connexions signal/slot du .ui, invisibles côté handler. Toujours vérifier (F4 dans Designer, ou grep sur le .ui) et supprimer l'ancienne connexion avant d'en câbler une nouvelle — ou tout gérer côté Python en laissant le bouton non connecté dans le .ui. Quand un widget réagit "en double" alors que le code semble correct, le diagnostic est dans le .ui, pas dans le handler. Le sous-programme externe cam_to_tool.ngc, d'abord envisagé, est abandonné : tout passe par le handler.

Bouton "Afficher le bureau"

Ajout d'un bouton (objectName btn_bureau) qui masque toutes les fenêtres pour accéder au bureau, via wmctrl -k on lancé en subprocess.Popen depuis la méthode show_desktop du handler. Dépendance : paquet wmctrl (sudo apt install wmctrl) ; si absent, le handler logue un avertissement sans planter. Spécifique XFCE/X11. Connexion défensive dans initialized__ (hasattr) comme les autres boutons lanceurs (terminal, geany, navigateur, fichiers).

23 juin 2026 — Caméra de positionnement (vue CAMVIEW QtDragon)

Caméra installée et fonctionnelle

Caméra USB "2k usb Camera Redeagle" (capteur HD 16:9) avec objectif C-mount varifocal 5-50 mm, utilisée pour le positionnement (touch off X/Y à la caméra). Vue intégrée dans l'onglet CAMVIEW de QtDragon (widget camview de qtvcp, basé sur OpenCV). Périphérique : /dev/video0 (vérifié avec v4l2-ctl --list-devices ; les /dev/video19-37 sont l'électronique interne du Pi 5, à ignorer). Outil v4l2-ctl installé via le paquet v4l-utils.

Image ovale (rapport d'aspect) : corrigé par les échelles

L'image arrivait déformée (cercle = ovale vertical, aplati sur les côtés) : le capteur 16:9 était affiché dans un cadre carré. Réglages dans qtdragon.pref, section [CUSTOM_FORM_ENTRIES] :

Camview xscale = 165
Camview yscale = 100
Camview cam number = 0
Camview cam api = V4L2
Camview cam resolution = 1280,720

Points clés appris :

- Forcer une résolution 16:9 native (1280,720) au lieu de DEFAULT (OpenCV tombe sinon sur du 640x480 4:3). Modes natifs de la caméra listés avec v4l2-ctl --list-formats-ext : 2560x1440, 1920x1080, 1280x720 et 640x360 sont du 16:9.

- La ligne Camview cam api = V4L2 était absente au départ ; sans elle l'API par défaut (ANY) ignorait la demande de résolution.

- Les échelles xscale/yscale sont en pourcentage. C'est le xscale (axe X) qu'il faut augmenter pour réétirer une image comprimée horizontalement, pas le yscale. Ajuster à l'œil sur une rondelle (~165).

- Édition à faire LinuxCNC fermé : QtDragon réécrit qtdragon.pref à la fermeture et écrase toute modif faite à chaud.

Scintillement (bandes noires) sous éclairage LED 230V

Sous l'éclairage LED 230V/50Hz (papillotement à 100 Hz), des bandes noires défilantes apparaissent ; image nickel en lumière du jour. Pistes testées sur /dev/video0 :

- power_line_frequency était déjà sur 1 (50 Hz) : ce n'était pas le coupable.

- Exposition manuelle calée sur un multiple de 10 ms (100 Hz) : auto_exposure=1 (Manual Mode, valeur contre-intuitive : 1=manuel, 3=auto) puis exposure_time_absolute=100 (unités de 100 us, donc 100 = 10 ms). MAIS le firmware de la caméra ignore l'exposition manuelle (10 ou 100 donnent la même image) — piste abandonnée.

- Constat important : QtDragon/OpenCV reprend la main sur la caméra à l'ouverture du flux et écrase les réglages v4l2 poussés à la main. Tout réglage v4l2 doit être réappliqué APRÈS l'ouverture du flux.

- Solution de fond retenue : remplacer l'éclairage par une LED en courant continu (anneau USB 5V ou bandeau 12/24V sur l'alim continue de la machine), qui ne scintille pas du tout. À faire.

Offset caméra / broche et touch off

L'offset entre l'axe de la caméra et l'axe de la broche se règle via les champs Camera X / Camera Y (onglet SETTINGS, ou section [CUSTOM_FORM_ENTRIES] de qtdragon.pref, LinuxCNC fermé). Mesure : graver un point avec la broche (noter X/Y machine), amener le réticule caméra sur ce même point (noter X/Y), l'offset = position caméra − position broche. Utilisation : amener le réticule sur le point d'origine voulu, puis bouton REF CAMERA (bloc OFFSETS, sous TOUCH PLATE) — QtDragon pose le G54 à l'aplomb de la broche en tenant compte de l'offset. Vérification de sécurité : après REF CAMERA, G0 X0 Y0 en MDI à vide ; la broche doit tomber pile sur le point visé. Si décalé du déport → signe de l'offset à inverser. Le cercle et le réticule réglables (molette = zoom, clic droit = rotation) aident à centrer précisément.

Support caméra déporté (à fabriquer)

Support pour fixer la caméra sur la face verticale droite du porte-broche (face 18x80 mm, 2 vis M6 entraxe 45 mm, vis à rallonger) avec un déport de ~12 mm vers la droite. Plaque ~48x73x12 mm : 2 trous M6 lamés côté face, poche de centrage 20x20 mm pour le pied de la caméra + trou central. Conçu via une macro FreeCAD paramétrique (support_camera.FCMacro). À imprimer en proto PLA/PETG puis usiner en alu (rigidité = stabilité de l'offset). Attention orientation : pour tourner la caméra de 180°, faire pivoter le corps caméra par rapport à son pied (la poche de centrage bloque le pied en rotation).

16 juin 2026 — VFD HuangYang en HYComm et refroidissement broche

Lecture des paramètres du VFD via le protocole HYComm

Le VFD HuangYang 2.2 kW n'utilise pas le Modbus RTU standard mais son propre protocole série, le HYComm. Un script Modbus classique (minimalmodbus) reste muet : le VFD ne répond pas. Après analyse des trames échangées, le format de lecture d'un paramètre PD a été identifié :

Requete  : [adresse][0x01][0x03][numero_PD][0x00][0x00][CRC16]
Reponse  : [adresse][0x01][longueur][numero_PD][valeur...][CRC16]

La longueur vaut 0x03 (PD + 2 octets de valeur) ou 0x02 (PD + 1 octet). La validation se fait par le CRC16 et par l'écho du numéro de PD dans la réponse. Un script Python (lire_vfd.py) lit ainsi les paramètres PD000 à PD189 et les enregistre dans un fichier texte. Lecture seule, LinuxCNC doit être arrêté (le composant hy_vfd occupe sinon le port /dev/ttyAMA2). Outil publié sur GitHub : github.com/atelierduverdier/huanyang-vfd-reader.

Paramètres VFD relevés et documentés

Valeurs principales lues sur la machine : fréquence max 400 Hz (PD005), tension max 220 V (PD008), moteur 220 V / 9 A / 2 pôles / 3000 tr/min à 50 Hz (PD141-144), communication adresse 1, 9600 bauds, 8N1 RTU (PD163-165). Documentés dans la section "Paramètres du VFD" du site.

Accélération / décélération VFD portées à 3 s

PD014 (accélération) et PD015 (décélération) étaient à 1.5 s. Passés à 3 s pour ménager la broche : une décélération trop rapide renvoie de l'énergie sur le bus DC du VFD (risque de défaut surtension OU) et sollicite les roulements. 3 s élimine ce risque tout en restant confortable.

Refroidissement broche : pompe (flood) + ventilateurs (AUX2) liés, avec post-refroidissement

La pompe à eau (sortie FLOOD / COOLANT, M8) et les ventilateurs (AUX2) sont désormais pilotés ensemble par un signal commun, avec maintien après l'arrêt de la broche pour évacuer la chaleur résiduelle.

Comportement :

- M3 (broche ON) ou M8 : pompe + ventilateurs démarrent immédiatement.

- M5 (broche OFF) ou M9 : pompe + ventilateurs restent actifs encore 30 s, puis s'arrêtent ensemble.

- Bouton AUX2 et M64 P2 / M65 P2 : commande manuelle des ventilateurs (inchangé).

Réalisation avec un composant timedelay (post-refroidissement) et deux or2 en cascade. Dans remora-flexi.hal :

loadrt or2 names=aux0_or,aux1_or,aux2_or,aux3_or,cool_or1,cool_or2
loadrt timedelay names=spindle_cooldown
addf cool_or1 servo-thread
addf cool_or2 servo-thread
addf spindle_cooldown servo-thread

setp spindle_cooldown.on-delay 0
setp spindle_cooldown.off-delay 30
net spindle-on => spindle_cooldown.in

# FLOOD = M8 OU post-refroidissement broche
net coolant-m8 iocontrol.0.coolant-flood => cool_or1.in0
net spindle-cooldown spindle_cooldown.out => cool_or1.in1
net cooling-active cool_or1.out => flexi.output.COOLANT

Dans custom_postgui.hal :

# AUX2 (ventilateurs) = (bouton OU M64) OU refroidissement actif
net aux2-or-out aux2_or.out => cool_or2.in0
net cooling-active => cool_or2.in1
net aux2-out cool_or2.out => flexi.output.AUX2

Le délai se règle avec setp spindle_cooldown.off-delay (en secondes). Piège rencontré : on ne peut pas relier deux fois le pin iocontrol.0.coolant-flood (déjà lié au signal flood) ; il faut réutiliser le signal existant, pas le pin.

Correction affectation AUX2

Le tableau d'affectation indiquait AUX2 = pompe à eau. En réalité AUX2 = ventilateurs broche, et la pompe est sur la sortie FLOOD (COOLANT). Documents AFFECTATION_AUX.md et tableau corrigés.

13 juin 2026 — Télécommande RJ45 et bugs HAL CYCLE_START / HOLD

Bug CYCLE_START : le programme redémarrait en boucle, Stop ne tenait pas

La logique utilisait flexi.input.CYCLE_START.not alors que cette entrée est active HAUTE (FALSE au repos, TRUE en appui). Le .not restait donc TRUE en permanence au repos, et combine a program-is-idle, relançait halui.program.run en boucle dès que la machine redevenait idle. Corrigé en retirant le .not et en supprimant l'ancien mecanisme de single-step automatique (qui n'était plus nécessaire et participait au bug) :

net cycle-start-button flexi.input.CYCLE_START => run_and.in0
net program-is-idle halui.program.is-idle => run_and.in1
net program-run run_and.out => halui.program.run

Bug HOLD : program.pause bloqué en permanence, GO HOME impossible

Même type de bug sur le Hold : flexi.input.FEED_HOLD.not était utilise alors que FEED_HOLD est FALSE au repos (vérifié via halshow). Le .not restait donc TRUE au démarrage, déclenchant une seule fois le toggle et bloquant hold_toggle.on / halui.program.pause a TRUE de façon permanente. Conséquence inattendue : GO HOME refusait avec "Linear move on line 0 would exceed joint 0's negative limit" car la machine se croyait en pause. Corrigé en retirant le .not :

net hold_button flexi.input.FEED_HOLD => hold_button_toggle.in

Déblocage immediat effectué via Resume avant correction du fichier.

Conflit de câblage : carte de boutons locale vs télécommande RJ45

La carte de boutons (CYC/ST, HOLD, HALT, DOOR avec LEDs témoins) était câblée en parallele de la télécommande RJ45 sur les mêmes entrées FlexiHAL. Résultat : niveaux logiques perturbés sur SYS/ST et HOLD. Solution retenue : déconnexion des sorties SYS/ST et HOLD de la carte de boutons, RJ45 seul conservé sur ces deux lignes. HALT reste fonctionnel sur la carte de boutons (vérifié au multimetre, diode de protection MOSFET 2N7000 RAS). A faire si réutilisation future de la carte boutons sur ces 2 lignes : ajouter une logique de découplage (diodes OU or2 comme déjà fait pour les sorties AUX0-3) pour éviter le conflit entre les deux sources de signal.

8 juin 2026

Environnement de développement PC + simulation

Mise en place d'un PC de développement (x86_64, Debian) en complément du Raspberry Pi de production, synchronisés par git. Config de simulation créée pour travailler l'interface sans le matériel : remora-flexi-sim.ini/.hal, postgui_call_list_sim.hal, qtdragon_hd_sim.hal, custom_postgui_sim.hal. Remplace le composant flexi (SPI) et le VFD série par des équivalents simulés. Lancement : linuxcnc ~/linuxcnc/configs/flexi-hal/remora-flexi-sim.ini. Affichage fenêtre : retirer l'option -f (fullscreen) de la ligne DISPLAY.

Qt Designer sur PC (x86_64)

Paquet qttools5-dev-tools (binaire "designer"). Alias PC avec x86_64-linux-gnu au lieu de aarch64-linux-gnu sur le Pi.

Boutons lanceurs d'applications

Ajout dans le handler de 4 fonctions lançant des applications externes sans bloquer l'interface (subprocess.Popen) : terminal (xfce4-terminal), geany, navigateur, explorateur de fichiers. Connexions défensives (hasattr).

Timings d'impulsion harmonisés

Le moteur Y2 (JOINT_3) était règle a STEPLEN/STEPSPACE = 5000 (reste d'un test sur un bruit moteur dont la vraie cause était les DIP switches du driver). Harmonisé a 2500 sur tous les axes : son nettement meilleur.

Vitesse X/Y portée a 8000 mm/min

Après avoir testé 10000 mm/min (166.67 mm/s) sans perte de pas, la vitesse a finalement été ramenée a 8000 mm/min (133.33 mm/s) pour le confort sonore et thermique des moteurs (perte de couple a haute vitesse rattrapée par les drivers en boucle fermee, accentuee par la temperature). Modifications dans [AXIS_X], [JOINT_0], [AXIS_Y], [JOINT_1], [JOINT_3], [DISPLAY] et [TRAJ]. Latence du Pi vérifiée avec latency-test : excellente (jitter servo ~28 us).

Bug bouton GO HOME a haute vitesse (RÉSOLU)

A haute vitesse, en fin de déplacement GO HOME : message "EMC_TASK_PLAN_PAUSE cannot be executed". Le bouton utilise CALL_MDI_WAIT avec un delai = distance / vitesse + marge, qui ignore le temps d'accélération/décélération. Avec une marge de 1 s, le WAIT expirait avant la fin du mouvement. Correction dans qtdragon_hd_handler.py, fonction calc_mdi_move_wait_time :

avant : def calc_mdi_move_wait_time(self, dest_x, dest_y, wait_buffer_secs=1)
apres : def calc_mdi_move_wait_time(self, dest_x, dest_y, wait_buffer_secs=4)

Widget web (QtWebEngine) supprimé (RÉSOLU)

Au démarrage : erreurs "page_allocator Invalid argument (22)" + gel de la boucle (~0.18 s). Le widget QtWebEngine (page HTML de l'onglet SETUP, non utilisée) plante au démarrage. Widget web_view supprimé dans Qt Designer (onglets PDF et PROPERTIES conserves). Handler protégé par hasattr(self.w,'web_view') and hasattr(self.w,'layout_HTML').

Message EMC_TASK_PLAN_PAUSE au démarrage (RÉSOLU)

Popup au déverrouillage E-stop, présent "depuis toujours". La carte lit ses entrées en logique active basse (FEED_HOLD = TRUE au repos), donc halui.program.pause était forcé a TRUE en permanence. Correction dans remora-flexi.hal :

avant : net hold_button flexi.input.FEED_HOLD     => hold_button_toggle.in
apres : net hold_button flexi.input.FEED_HOLD.not => hold_button_toggle.in

Sujet connexe non resolu : la télécommande 3 boutons RJ45 ne répond physiquement que sur HALT ; CYCLE_START et HOLD ne changent pas d'état (câblage/brochage a vérifier).

7 juin 2026

Logique bouton OU G-code (or2)

Chaque sortie AUX est pilotee par un or2 : relais actif si le bouton OU le G-code le demandé.

loadrt or2 names=aux0_or,aux1_or,aux2_or,aux3_or
addf aux0_or servo-thread
net aux0-gcode motion.digital-out-00 => aux0_or.in0

Dans custom_postgui.hal (charge apres le GUI) :

net aux0-btn qtdragon.aux0 => aux0_or.in1
net aux0-out aux0_or.out => flexi.output.AUX0

Important : le prefixe reel des pins de boutons est "qtdragon" (et non "qtvcp"). Verifier avec halcmd show pin | grep -i aux.

Creation des boutons dans QtDragon_hd

Ecran copie avec qtvcp copy (ne jamais modifier l'ecran système). Boutons : PushButton de la categorie "linuxcnc - hal", objectName aux0..aux3, checkable coche. Le PushButton HAL créé automatiquement la pin qtdragon.<objectName>.

Incident : boutons perdus dans Designer

Erreur "Pin qtdragon.aux0 does not exist" apres manipulations. Procedure de secours : commenter les lignes aux?-btn du postgui pour démarrer, recreer les boutons, vérifier avec halcmd, decommenter. Lecon : faire fonctionner d'abord, faire joli ensuite. Une modif a la fois.

6 juin 2026

Sorties auxiliaires (relais) FlexiHAL

Piloter les relais (lumiere, arrosage, aspiration) via les sorties AUX de la FlexiHAL, commandables depuis QtDragon et le G-code (M64/M65). Configuration HAL directe, sans inversion (modules câbles en active HIGH) :

net aux0-sig motion.digital-out-00 => flexi.output.AUX0
net aux1-sig motion.digital-out-01 => flexi.output.AUX1
net aux2-sig motion.digital-out-02 => flexi.output.AUX2
net aux3-sig motion.digital-out-03 => flexi.output.AUX3

Prerequis INI (sinon M64/M65 ignores silencieusement) :

[EMCMOT]
NUM_DIO = 4

Câblage matériel valide

Alimentation ET signal pris sur le bornier AUX 2 fils. Par module : borne + du bornier vers DC+, pont court DC+ <-> IN sur le module, borne - vers DC-. Le rail AUX doit être alimente (jumper P17 = MAIN = 24V). Limites : 1000 mA combines pour les 4 AUX, bobine >= 150 Ohm.

Journal de resolution

La cause racine d'un long debogage était un jumper P17 defectueux (pas de contact) : le rail AUX n'était pas alimente (borne + a 0V au lieu de 24V). Pistes ecartees avant : NUM_DIO absent de l'INI, jumpers de modules incoherents, tentative d'inversion HAL (composant not) abandonnee. La config HAL et le câblage étaient corrects ; seul defaut matériel : le jumper.

5 juin 2026 — Debug toolchange

Recursion M6 cassant la preview

Le script toolchange.ngc appele par REMAP=M6 contenait lui-même un M6, creant une recursion infinie : la preview G-code de QtDragon ne se chargeait plus. Correction : suppression du M6 parasite.

Utilisation de #<_selected_tool>

Le script utilisait #5400 (outil courant) au lieu de #<_selected_tool> (outil demandé par T_ M6). Au premier M6 sans outil en broche, #5400 = 0 et le script sortait sans palper. Corrigé.

Gestion d'erreur incompatible avec la preview

Les blocs IF...M2...ENDIF cassaient la preview QtDragon. Supprimes : G38.2 declenche déjà automatiquement une erreur en cas d'echec de palpage, la vérification de #5070 était redondante.

TOOLSET_X incohérent

[PROBE] TOOLSET_X = -25.0 ne correspondait pas a [VERSA_TOOLSETTER] X = -50.0. Corrigé a -50.0.

Mai 2026 — Changement d'outil manuel avec palpage auto

Mise en service

Un OpenATC (changement semi-automatique) avait été tente puis abandonne. Solution retenue : changement d'outil MANUEL avec palpage AUTOMATIQUE de la longueur d'outil au palpeur fixe (X-50 Y60). Script toolchange.ngc via REMAP=M6 : double palpage (rapide + lent), mode 0 (Z zero sur martyre auto) ou mode 1 (Z zero sur piece manuel), gestion du premier outil de référence via #1000 et #1002. Subroutines MDI associees : reset_ref, set_mode_martyre, set_mode_piece.

Bonnes pratiques REMAP apprises

Ne jamais rappeler le code M qui a declenche le REMAP dans son propre script. Utiliser #<_selected_tool> et non #5400. Eviter les IF contenant M2/M30 (cassent la preview). G38.2 gere ses propres erreurs.

Liste du matériel (BOM)

Liste complète du matériel pour la construction de la PrintNC, avec les prix payés à l'achat en 2026. Articles cliquables = lien direct vers la page produit. Prix indicatifs — les tarifs Aliexpress/Amazon fluctuent.

Mécanique — Structure

ArticleQtéDétailsPrix unit.Total
Bois1180€180.00 €
Roulette Table CNC132.79€32.79 €
OSB Plateau 22mm Table CNC424.1875€96.75 €
Tube rectangulaire 100x50x4mm4Structure plateau — 1600 mm59.52€238.08 €
Tube rectangulaire 100x50x4mm2Axe Y — 1550 mm57.66€115.32 €
Tube rectangulaire 100x50x4mm6Supports — 100 mm3.72€22.32 €
Tube rectangulaire 100x50x4mm1Axe X — 1650 mm61.38€61.38 €
Sous-total746.64 €

Mécanique — Transmission

ArticleQtéDétailsPrix unit.Total
Ball Screw SFU1610 Ball Screw1X-Axis Movement — 1500108.14€108.14 €
SFU1610 Ball Screw2Axes Y — 1500 mm (rails à recouper en 1400 mm)108.39€216.78 €
SFU1204 Ball Screw1Axe Z — 300 mm18.89€18.89 €
Sous-total352.86 €

Mécanique — Guidage

ArticleQtéDétailsPrix unit.Total
Linear Rails HGR20 Linear Rail(x2)1Axe X — 1500 mm100.39€100.39 €
Linear Rails HGR20 Linear Rail(x2)1Axe Y — 1500 mm (recoupé à 1400 mm)100.39€100.39 €
Linear Rails HGR20 Linear Rail(x2)1Axe Z — 400 mm46.39€46.39 €
Sous-total247.17 €

Mécanique — Motorisation

ArticleQtéDétailsPrix unit.Total
Support moteur HM10-57 angular bearing119.29€19.29 €
Support moteur HM12-57 angular bearing318.99€56.97 €
Sous-total76.26 €

Mécanique — Broche

ArticleQtéDétailsPrix unit.Total
Spindle 2.2kw Water Cooled Spindle1Cutting249.58€249.58 €
Tuyau Orange 8x5112.1€12.10 €
Acrylic Meter G1/414.85€4.85 €
PC Water Cooling120.79€20.79 €
Pneumatique Elbow14.56€4.56 €
Sous-total291.88 €

Mécanique — Outillage

ArticleQtéDétailsPrix unit.Total
Equerre 90 Degrée Flat Edge Square 200x130119.59€19.59 €
Pointau Starrett 117B1Avant trou7.94€7.94 €
Pince à sertir122.98€22.98 €
Comparateurs à cadran217.45€34.91 €
Sous-total85.42 €

Électronique — Contrôle

ArticleQtéDétailsPrix unit.Total
Controller FlexiHAL1Controller122.59€122.59 €
Dissipateur Raspberry pi 5 8go19€9.00 €
SSD 500Go1104.99€104.99 €
Ordinateur Raspberry pi 5 8go1173.99€173.99 €
Hat Pimoroni Hat m.2122€22.00 €
Sous-total432.57 €

Électronique — Motorisation

ArticleQtéDétailsPrix unit.Total
Nema 23 Nema 23 23HS40-5004-ME1K432.8€131.20 €
Pilote CL57T-V41442.44€169.76 €
Sous-total300.96 €

Électronique — Alimentation

ArticleQtéDétailsPrix unit.Total
Contacteur 24v138.87€38.87 €
Disjoncteur fusible 2Ampére12.61€2.61 €
Module filtre de puissance117.99€17.99 €
Alimentation 24v128.81€28.81 €
Alimentation Alim 350W 48v 7.3A LE-350-48221.49€42.98 €
Alimentation Alim 350W 24v 4.5A111.05€11.05 €
Sous-total142.31 €

Électronique — Interface

ArticleQtéDétailsPrix unit.Total
Bouton13.89€3.89 €
Prise HDMI/usb Prise boîtier113.26€13.26 €
Prise coude usb Prise boîtier17.01€7.01 €
Boutons128.75€28.75 €
Ventilateurs130.03€30.03 €
Ventilateurs 2x 24v120.05€20.05 €
Bouton ON/OFF115.99€15.99 €
Caméra USB 2k Redeagle + objectif C-mount 5-50 mm1Positionnement (vue CAMVIEW)27€27.00 €
Sous-total145.98 €

Électronique — Capteurs

ArticleQtéDétailsPrix unit.Total
Probe128.78€28.78 €
Capteur LJ8A3-2-Z/AX4Alimentation 24V — NPN NC7.12€28.48 €
Sous-total57.26 €

Câblage

ArticleQtéDétailsPrix unit.Total
Nappe 2x10pin13.17€3.17 €
DB9 male110.07€10.07 €
Câblé Chain 1m 30x1031114.87€114.87 €
Câblé Chain 1m 30x103138.59€38.59 €
Câblé 6 couleurs117.36€17.36 €
Câblé 16awg vert bleu rouge111.48€11.48 €
Câblé 16awg vert bleu rouge122.27€22.27 €
Goulotte 40x40218.89€37.78 €
DIN Rail15.59€5.59 €
Prises GX2017.49€7.49 €
Prises GX1623.39€6.78 €
Boîtier Vevor 60x60x201103.9€103.90 €
Terminal Bloc 3,81115.58€15.58 €
Terminal Bloc 3,8117.29€7.29 €
Câblé VFD134.95€34.95 €
Câblé Kit de câble d’extension d’encodeur427.28€109.12 €
Câblé 3 Brins130.99€30.99 €
Sous-total577.28 €

Visserie

ArticleQtéDétailsPrix unit.Total
Visserie182.09€82.09 €
Sous-total82.09 €

Divers

ArticleQtéDétailsPrix unit.Total
Filament 3D Sunlu Blanc Osseux218.99€37.98 €
Capteur flux d’eau115.07€15.07 €
Peinture Orange pur RAL 2004418.9€75.60 €
Peinture Sous couche59.3€46.50 €
peinture Orange pur RAL 2004518.9€94.50 €
Sous-total269.65 €

Total général

Montant
Articles3808.33 €
Frais de port311.95 €
Remises-47.53 €
Total final4072.75 €
Prix payés au moment de l'achat début 2026. Prévoir une marge de ±20% selon les promotions et les fluctuations de change.
Fiche technique

Vue d'ensemble

PrintNC - Orange Mécanique
PrintNC - Orange Mécanique

La PrintNC est un routeur CNC DIY haute performance base sur un châssis acier, conçu pour être rigide tout en restant constructible avec un simple imprimante 3D (les pièces imprimées servent surtout de gabarits et de supports non structurels). Cet exemplaire est un format standard, surface de travail utile environ 1275 x 1275 mm.

Caractéristiques principales :

  • Châssis en tubes acier rectangulaires 100 x 50 mm, épaisseur 4 mm (plus massif et rigide que les recommandations standard du wiki, pour limiter les vibrations).
  • Pilotage par carte Flexi-HAL (Expatria) sous firmware Remora, sur Raspberry Pi 5.
  • LinuxCNC 2.9.8, interface QtDragon HD.
  • 4 axes mécaniques : X, Y (en tandem, 2 moteurs Y1 et Y2), Z.

Motorisation

Nema23 en boucle fermée
Nema23 en boucle fermée
Connectiques Nema23
Connectiques Nema23
  • 4 moteurs pas a pas Nema 23 en boucle fermée, couple 3.00 Nm (424.83 oz.in), encodeur magnétique 1000 PPR (4000 CPR). Référence 23HS40-5004-ME1K (OMC-StepperOnline).
  • 4 drivers CL57T v4.1, plage 0 a 8.0 A, alimentation 24 a 48 VDC. Réglage du courant et du micro-pas par DIP switches sur le driver.
  • Alimentations a découpage 350 W 48 V 7.3 A (LE-350-48). Le 48 V aide a conserver le couple a haute vitesse.
  • Câblage blinde AWG20, longueur 4.7 m (CE5-M5-20) pour la puissance et les encodeurs.

La boucle fermee permet aux drivers de rattraper un éventuel décalage grâce a l'encodeur : la machine signale une erreur plutôt que de perdre des pas silencieusement.

Alimentations, une alimentation pour 2 moteurs
Alimentations, une alimentation pour 2 moteurs
Arriere Nema23 axe Z
Arriere Nema23 axe Z
Boitier centralisateur pour les capteurs
Boitier centralisateur pour les capteurs

Transmission

  • Axes X et Y : vis à billes SFU1610 (diamètre 16 mm, pas 10 mm par tour) sur rails de guidage linéaires HGR20.
  • Axe Z : vis a billes SFU1204 (diamètre 12 mm, pas 4 mm par tour). Le pas fin augmente le couple de maintien vertical et contre la gravite sur la broche.
  • Paliers : BK/BF aux extrémités des vis.

Le pas plus fin en Z est un choix classique : il ralentit l'axe mais lui donne plus de poussée et de tenue, ce qui est souhaitable pour porter le poids de la broche.

Transimission vis à billes
Transimission vis à billes

Broche et refroidissement

Broche 2.2kW, pince ER20, refroidie à eau
Broche 2.2kW, pince ER20, refroidie à eau
  • Broche G-Penny 2.2 kW, pince ER20, refroidie par eau (corps 80 x 230 mm, 220 V), 4 roulements céramiques série 7, déviation max annoncée 0.01 mm.
  • Variateur de fréquence (VFD) HuangYang (HY) 2.2 kW 220 VAC, pilote en vitesse par LinuxCNC via liaison série RS485 (Modbus).
  • Refroidissement : pompe a eau 220 V 75 W (débit max 3200 L/H), circuit ferme rempli de liquide de refroidissement automobile (protège de l'oxydation interne et empêche la prolifération d'algues).
  • Vitesse broche : jusqu'à 24000 tr/min.
VFD HY et drivers moteur
VFD HY et drivers moteur

Sécurité électrique

  • Contacteur ABB AF09-30-10-11 avec bobine 24 V pour la coupure générale de l'armoire.
  • Chaîne d'arrêt d'urgence câblée sur la carte.
  • Capteurs de fin de course de proximité inductifs, type NPN NC (normalement ferme), alimentes en 24 V.
Capteur LJ8A3-2-Z/AX
Capteur LJ8A3-2-Z/AX
Alimentation 5V, Contacteur 24V/230V, Filtre anti-parasite
Alimentation 5V, Contacteur 24V/230V, Filtre anti-parasite
Choix de conception

Quelques décisions de conception du projet PrintNC qui peuvent surprendre au premier abord, mais qui sont issues de nombreuses itérations de la communauté.

Un seul patin par rail (et non deux)

Les premières versions de la PrintNC utilisaient deux patins par rail. Le passage à un seul patin a été un choix réfléchi, validé par des centaines de machines construites :

  • Pas de perte de performance : les rails HGR20 sont surdimensionnés pour le poids du portique et les forces d'usinage d'un routeur DIY. La flexion ne vient pas des rails.
  • Coût réduit : 6 patins HGW20 au lieu de 12.
  • Plus grande surface de travail : chaque patin supplémentaire réduit la course utile du rail d'environ 80 mm (avec son graisseur).
  • Construction simplifiée : moins de trous percés/taraudés, moins de risques de blocage par défaut d'alignement.

Sur le très long terme, deux patins augmenteraient la durée de vie des rails — mais l'usage en routeur hobbyiste reste très en deçà du régime nominal des HGR20, prévus pour de la machine industrielle en service continu.

Châssis acier (pas aluminium)

L'acier est environ 3 fois plus rigide que l'aluminium à section égale. Pour un routeur CNC de cette taille, c'est la rigidité du châssis qui détermine la qualité d'usinage en métaux (alu, acier doux). L'épaisseur recommandée par le wiki est 2.5 mm pour les tubes ; cet exemplaire utilise du 4 mm, encore plus massif, pour ménager une marge sur les vibrations en usinage acier.

Pièces imprimées 3D non structurelles

Malgré son nom, la PrintNC ne repose pas sur des pièces plastique en charge. Les éléments imprimés en 3D servent principalement de :

  • Gabarits de perçage temporaires (jetés ou réutilisés selon les pièces).
  • Supports de chemins de câbles, boîtiers de connectique.
  • Quelques platines secondaires (souvent remplacées par de l'aluminium usiné plus tard).

L'idée initiale était de pouvoir construire une CNC sans avoir besoin d'une CNC, juste avec une imprimante 3D et des outils manuels de base.

Tandem Y (deux moteurs pour l'axe Y)

L'axe Y est entraîné par deux moteurs Nema 23 synchronisés, un de chaque côté du portique. Cette configuration en tandem évite tout problème de rattrapage mécanique (pas d'arbre de liaison ni d'engrenages), et garde le portique parfaitement parallèle. Les deux moteurs sont homés ensemble pour garantir l'orthogonalité au démarrage. Le scale négatif sur JOINT_3 compense simplement le sens de rotation inverse du moteur (les deux vis tournent dans le même sens mécanique).

---

Comparaison des options de broche

La PrintNC peut être équipée de différentes broches selon le budget et les usages prévus. Voici les options principales pour situer le choix retenu sur cet exemplaire.

Vue d'ensemble

TypePuissance typiqueRefroidissementUsage principal
Routeur (Makita RT0701C, DeWalt DWP611)~700 WAir (ventilateur interne)Bois, occasionnel
Broche air-cooled0.5 à 2.2 kWAir (ventilateur intégré)Polyvalent
Broche water-cooled (choix retenu)1.5 à 2.2 kWEau (pompe externe)Travail intensif, silencieux

Broches refroidies (air ou eau) — détails techniques

PuissanceCouplePinceCourant en 230V
0.5 kW0.5 N·mER112.25 A
0.8 kW0.3 N·mER11/163.6 A
1.5 kW0.6 N·mER11/166.8 A
2.2 kW (cet exemplaire)0.875 N·mER2010 A

Tailles de pinces (collets)

La taille de pince détermine le diamètre maximum de queue d'outil utilisable.

PinceLongueurDiamètre
ER1118 mm11.5 mm
ER1627.5 mm17 mm
ER20 (cet exemplaire)31.5 mm21 mm

L'ER20 accepte des outils jusqu'à 13 mm de queue, ce qui permet d'utiliser une large gamme de fraises industrielles. Pour l'usinage bois et alu sur cette machine, des queues de 6 mm, 8 mm et 12 mm sont les plus courantes.

Pourquoi une broche water-cooled ER20 de 2.2 kW ?

Le choix retenu (G-Penny 2.2 kW ER20) combine plusieurs avantages :

  • Silencieuse : nettement plus discrète qu'une broche air-cooled ou qu'un routeur de défonçage, ce qui change la vie en atelier.
  • Couple à basse vitesse : 0.875 N·m permet d'usiner correctement à 6000-12000 tr/min sans perdre toute la puissance (les routeurs perdent énormément de couple en dessous de leur régime nominal).
  • Pilotage par VFD via RS485 : la vitesse de broche se commande depuis LinuxCNC en G-code (M3 S12000), pas avec une molette manuelle. Contrôle précis et reproductible.
  • Durée de vie : roulements et bobinages conçus pour un usage continu, pas pour des sessions courtes comme un défonçeur grand public.
  • Précision : runout (faux-rond) très inférieur à un routeur défonçeur standard.

Le wiki PrintNC déconseille fortement les broches Vevor car certains modèles utilisent des roulements inadaptés à un montage CNC. Les G-Penny "metal cutting" sont parmi les modèles recommandés par la communauté.

---

Câblage et électronique
Chemin de cables
Chemin de cables
Arriere du boitier élèctrique
Arriere du boitier élèctrique

Carte Flexi-HAL

Carte d'interface conçue par Expatria, exécutant le firmware Remora. Elle communique avec le Raspberry Pi par bus SPI et généré les impulsions de pas en matériel (plus stable qu'une génération logicielle). Le firmware se flashe via DFU avec l'outil dfu-util.

Point important — logique active basse : la carte lit ses entrées en logique active basse. Une entrée au repos est à l'état TRUE et passe à FALSE quand elle est activée. Chaque entrée dispose aussi de sa version inversée (.not) directement utilisable dans le HAL. C'est essentiel pour câbler correctement la logique (voir la section Dépannage).

Carte FlexiHal avec le Raspberry pi 5 branché dessus
Carte FlexiHal avec le Raspberry pi 5 branché dessus

Alimentations et tensions

  • 48 V : moteurs (via les drivers CL57T).
  • 24 V : logique, contacteur, rail des sorties auxiliaires (relais), capteurs de fin de course inductifs.

Point important — liaison des masses : le GND (masse) des deux alimentations 48 V est relié ensemble par un fil, afin d'établir une référence commune pour les drivers CL57T. Sans cette liaison, les niveaux logiques des signaux de pas entre la carte FlexiHAL (alimentée en 24 V) et les drivers (alimentés en 48 V) peuvent être instables ou mal interprétés. Un seul fil entre les deux bornes GND suffit.

Respecter les masses communes.

Boitier electique
Boitier electique
face avant du boitier électrique, avec affichage vitesse
face avant du boitier électrique, avec affichage vitesse

Sorties auxiliaires (relais)

Boitier relais en cours de montage
Boitier relais en cours de montage

Quatre sorties AUX pilotent des relais 24 V. Chaque relais est commandable de DEUX façons, combinées par un composant logique or2 (OU) : par le G-code (M64/M65) ET par un bouton dans QtDragon. Le relais est actif si l'une OU l'autre source le demande.

SortiePin G-codeBouton QtDragonAffectation
AUX0motion.digital-out-00qtdragon.aux0Aspirateur
AUX1motion.digital-out-01qtdragon.aux1Lumière
AUX2motion.digital-out-02qtdragon.aux2Ventilateurs broche
AUX3aucun (suit M3/M5 $1)aucunInterlock laser

Exception AUX3 : depuis l'arrivée du laser, cette sortie est pilotée directement par spindle.1.on (elle suit M3 $1 / M5 $1), sans composant or2. Son pilotage par M64 P3 et par bouton a été retiré pour éviter un double pilotage de la même pin. La pompe a eau du circuit broche est sur la sortie dédiée FLOOD (M8), pas sur une AUX.

Câblage retenu (modules relais en activé HIGH, jumper sur H) :

  • Borne + du bornier AUX vers DC+ du module.
  • Pont court DC+ vers IN sur le module (c'est ce pont qui commande le relais).
  • Borne - du bornier AUX vers DC- du module.

Le rail AUX qui fournit le + est alimente par le jumper P17 positionne sur MAIN (= 24 V). Sans cette alimentation, la borne + sort 0 V et rien ne fonctionne. Ne jamais peupler P17 ET une alimentation externe en même temps. Limites : 1000 mA combines pour les 4 AUX, résistance de bobine des relais >= 150 Ohm.

Point important — NUM_DIO obligatoire : la ligne NUM_DIO = 4 doit être présente dans la section [EMCMOT] de l'INI. Sans elle, les pins motion.digital-out sont ignorées silencieusement et le G-code M64/M65 reste sans effet.

Arrosage et brouillard

Sorties dédiées du firmware (indépendantes des AUX) :

  • M8 : arrosage (COOLANT) ON
  • M7 : brouillard (MIST) ON
  • M9 : coupe les deux

Palpeur d'outil

Palpeur fixe (tool setter) monte sur la table, aux coordonnées machine G53 X-50 Y60. Gere via l'interface VersaProbe de QtDragon. Sert a mesurer automatiquement la longueur des outils lors d'un changement.

Télécommande filaire (en cours de mise au point)

Télécommande 3 boutons sur connecteur RJ45 : CYCLE START, HOLD (feed hold), HALT (arrêt). A ce jour seul HALT répond physiquement ; CYCLE START et HOLD ne changent pas d'etat a l'appui (câblage / brochage RJ45 a vérifier). A documenter une fois résolu.

Paramètres du VFD (HuangYang)

Le variateur de fréquence (VFD) HuangYang 2.2 kW pilote la broche G-Penny ER20. Il est contrôlé par LinuxCNC via une liaison série RS485 (protocole HYComm propriétaire HuangYang, pas du Modbus standard) avec le composant hy_vfd. Les paramètres ci-dessous sont ceux configurés sur cette machine, lus directement depuis le VFD.

Paramètres moteur (plaque signalétique de la broche)

ParamètreValeurDescription
PD141220 VTension nominale moteur
PD1429 ACourant nominal moteur
PD1432Nombre de pôles moteur
PD1443000 tr/minVitesse nominale à 50 Hz

Avec 2 pôles et une fréquence max de 400 Hz, la broche atteint 24000 tr/min (400 × 60 / 1 paire de pôles).

Paramètres de fréquence et tension

ParamètreValeurDescription
PD004400 HzFréquence de base
PD005400 HzFréquence max
PD0062.5 HzFréquence intermédiaire
PD00720 HzFréquence min (torque boost)
PD008220 VTension max
PD00924 VTension intermédiaire
PD0109 VTension min
PD0110 HzFréquence min de fonctionnement

Rampes et porteuse

ParamètreValeurDescription
PD0143 sTemps d'accélération
PD0153 sTemps de décélération
PD0724 kHzFréquence porteuse PWM

Paramètres de communication RS485

ParamètreValeurDescription
PD0022Source de la fréquence (2 = RS485)
PD0032Source des commandes run (2 = RS485)
PD1631Adresse de communication (esclave Modbus)
PD1641Baud rate (9600 bps)
PD1653Format des données (8N1 RTU)

Point important — communication HuangYang : pour piloter le VFD depuis LinuxCNC, PD002 et PD003 doivent être à 2 (commande par le port série). Le câble RS485 doit relier les bornes A+ et B- du VFD à l'adaptateur RS485 du Raspberry Pi. Le protocole est le HYComm propriétaire HuangYang (géré par le composant hy_vfd), pas du Modbus RTU standard — un script Modbus classique ne communiquera pas avec ce VFD.

Connexion HAL

Le VFD est chargé dans remora-flexi.hal par le composant hy_vfd :

loadusr -Wn vfd hy_vfd -n vfd -d /dev/ttyAMA2 -p none -r 9600 -s 1
setp vfd.enable 1
net spindle-speed-cmd vfd.speed-command <= spindle.0.speed-out
net spindle-speed-fb spindle_fb_scale.out => spindle.0.speed-in
net spindle-at-speed vfd.spindle-at-speed => spindle.0.at-speed
net spindle-forward vfd.spindle-forward => spindle.0.forward
net spindle-on vfd.spindle-on => spindle.0.on

Note : le port est /dev/ttyAMA2 sur Raspberry Pi 5 (et /dev/ttyAMA3 sur Pi 4).

Outil de lecture des paramètres (open source)

Pour lire tous les paramètres du VFD sans les recopier un par un sur le petit écran, j'ai développé un script Python qui communique directement en HYComm sur le port RS485 : il interroge les paramètres PD000 à PD189, valide chaque réponse (CRC16 + écho du numéro de paramètre) et enregistre le tout dans un fichier texte.

Le script est disponible librement sur GitHub : github.com/atelierduverdier/huanyang-vfd-reader

Point important : il faut arrêter LinuxCNC avant de lancer le script, car le composant hy_vfd occupe le port série tant que LinuxCNC tourne. Le script est en lecture seule et ne modifie aucun paramètre du VFD. C'est cet outil qui a servi à relever les valeurs documentées ci-dessus.

Configuration LinuxCNC

Organisation des fichiers

La configuration vit dans ~/linuxcnc/configs/flexi-hal/ et est versionnée sur GitHub : github.com/atelierduverdier/printnc-config. Fichiers principaux :

  • remora-flexi.ini : configuration générale (axes, vitesses, broche, palpeur).
  • remora-flexi.hal : chargement des composants et câblage logique (HAL principal).
  • custom_postgui.hal : câblage des éléments qui n'existent qu'après le chargement de l'interface (boutons).
  • postgui_call_list.hal : liste des fichiers postgui a charger.
  • qtvcp/screens/qtdragon_hd/ : copie locale de l'écran (fichier .ui + handler Python), pour personnaliser l'interface sans toucher l'ecran système.
  • subroutines/ : macros G-code (toolchange.ngc, reset_ref, set_mode_martyre, set_mode_piece, etc.).

Cinematique

JOINTS = 4, KINEMATICS = trivkins coordinates=XYZY. L'axe Y est en tandem : deux moteurs (JOINT_1 = Y1 et JOINT_3 = Y2), homes ensemble pour garder le portique parallèle. Le scale négatif de Y2 compense le sens de rotation inverse du moteur (pas un montage en miroir mécanique : les deux vis tournent dans le même sens, les deux patins avancent dans le même sens).

Résolution (scale, pas/mm)

  • X (JOINT_0) : -160.0 (1600 pas/tour, vis pas 10 mm, signe négatif = sens inverse)
  • Y1 (JOINT_1) : 160.0
  • Y2 (JOINT_3) : -160.0 (négatif pour inverser le sens de rotation du moteur, afin que les deux patins Y avancent dans le même sens quand les vis tournent dans le même sens)
  • Z (JOINT_2) : 400.0 (1600 pas/tour, vis pas 4 mm)

Vitesses

  • X et Y : 8000 mm/min (133.33 mm/s), STEPGEN_MAXVEL 160.
  • Z : 33.33 mm/s, STEPGEN_MAXVEL 100.

La vitesse X/Y a été poussée a 10000 mm/min lors des essais (sans perte de pas, latence du Pi excellente) mais ramenée a 8000 pour le confort sonore et thermique : a haute vitesse les moteurs perdent du couple (rattrape par la boucle fermée) et chauffent. Facteur limitant théorique pour aller plus haut : la vitesse critique de fouettement des vis SFU1610 sur ~1.3 m.

Timings d'impulsion

STEPLEN = STEPSPACE = 2500 ns sur tous les axes. C'est la durée de l'impulsion de pas et le repos minimum entré deux impulsions. 2500 ns est une valeur sûre pour les drivers CL57T. Point important — timings Y identiques : les deux moteurs Y (Y1 et Y2) doivent avoir des timings STEPLEN/STEPSPACE identiques, indispensable pour un portique tandem synchrone. Un écart provoquerait une désynchronisation progressive du portique.

Limites de course logicielles

  • X : -50 a 1240 mm
  • Y : -2 a 1286 mm (position HOME a 1275)
  • Z : -185 a 5 mm (HOME de sécurité a 0)

Homing (référencement)

Point important — séquence de homing : Z monte EN PREMIER (HOME_SEQUENCE 0) pour dégager l'outil, puis X et Y se référencent ensemble (HOME_SEQUENCE -1). Ne jamais inverser cet ordre. Capteurs inductifs NPN NC.

Environnement de developpement et simulation

Un PC x86_64 sous Debian sert au développement de l'interface en simulation, synchronise au Pi par git. Une configuration de simulation (remora-flexi-sim.ini et fichiers associes) remplace la carte Flexi-HAL (SPI) et le VFD par des équivalents simules : on peut travailler l'interface QtDragon sans la machine réelle. Le fichier d'interface .ui est partage entré les deux machines.

Sauvegarde et synchronisation (git)

Règle d'or git : git pull en arrivant sur une machine, push en partant. Un script push-config (range hors dépôt) demande un message puis fait add + commit + push. L'authentification GitHub se fait par token personnel (le mot de passe n'est plus accepte). Un .gitignore exclut les fichiers propres a chaque machine (linuxcnc.var, qtdragon.pref, fichiers temporaires).

Caméra de positionnement (CAMVIEW)

Caméra USB 2k Redeagle (capteur HD 16:9) + objectif C-mount varifocal 5-50 mm, affichée dans l'onglet CAMVIEW de QtDragon (widget camview de qtvcp, OpenCV). Sert au touch off X/Y visuel : on positionne le réticule sur un point de la pièce, le bouton REF CAMERA pose le zéro à l'aplomb de la broche. Référence d'achat : caméra 2k Redeagle sur AliExpress (27 €).

Réglages dans qtdragon.pref, section [CUSTOM_FORM_ENTRIES] (éditer LinuxCNC fermé, sinon QtDragon réécrit le fichier a la fermeture) :

Camview xscale = 165
Camview yscale = 100
Camview cam number = 0
Camview cam api = V4L2
Camview cam resolution = 1280,720
Camera X = <offset mesuré>
Camera Y = <offset mesuré>
  • Résolution : forcer un mode 16:9 natif (1280,720) et non DEFAULT, sinon OpenCV capture en 640x480 (4:3) et l'image est écrasée (cercle = ovale). Modes natifs listés avec v4l2-ctl --list-formats-ext.
  • API : V4L2 (sans cette ligne, l'API par défaut ANY ignore la demande de résolution).
  • xscale / yscale : correction d'aspect en pourcentage (plage 100-200). Augmenter le xscale pour réétirer une image comprimée horizontalement. Une valeur négative retourne l'image sur l'axe (montage caméra a l'envers, ou image en miroir du mouvement table).
  • Offset caméra/broche (Camera X / Camera Y) : distance entre l'axe optique et l'axe broche. Mesure : graver un point avec la broche (noter X/Y), amener le réticule caméra sur ce point (noter X/Y) ; offset = position caméra − position broche. Réglable aussi via l'onglet SETTINGS.
  • Périphérique : /dev/video0 (paquet v4l-utils pour v4l2-ctl). Les /dev/video19-37 sont l'électronique interne du Pi 5.

Procédure de touch off : ouvrir CAMVIEW, amener le réticule sur le point d'origine voulu (molette = zoom, clic droit = rotation, cercle réglable pour centrer), puis bouton REF CAMERA (bloc OFFSETS). Vérifier la 1re fois sur une chute : G0 X0 Y0 en MDI a vide, la broche doit tomber pile sur le point visé.

Utilisation

Procédure de démarrage

1. Mettre la machine sous tension (armoire, contacteur). 2. Lancer LinuxCNC avec la configuration remora-flexi.ini. 3. Déverrouiller l'arrêt d'urgence, puis mettre la machine sous puissance (bouton MACHINE ON). 4. Lancer le homing : le Z monte d'abord, puis X et Y se référencent ensemble. 5. La machine est prête : on peut charger un programme ou passer des commandes MDI.

Procédure d'arrêt

1. Ramener la broche en position haute et sûre si besoin. 2. Couper la broche (M5) et l'arrosage (M9). 3. Mettre la machine hors puissance, enclencher l'arrêt d'urgence. 4. Fermer LinuxCNC, couper l'alimentation générale.

Commandes MDI predefinies (onglet MAIN)

  • Goto User Zero : monte le Z en sécurité puis va au zero pièce (G0 Z25 ; X0 Y0 ; Z0).
  • Goto Machn Zero : retourne a l'origine machine (G53).
  • Reset Ref : remet les variables #1000 et #1002 a zero avant un nouveau job.
  • Mode Martyre : sélectionne le mode Z zéro sur le martyre (#1001 = 0).
  • Mode Pièce : sélectionne le mode Z zéro sur la pièce (#1001 = 1).

Changement d'outil

Changement MANUEL avec palpage AUTOMATIQUE de la longueur d'outil. Déclenche par M6 (REMAP vers le script toolchange.ngc). Deux modes :

  • Mode martyre (#1001 = 0) : le Z se met a zero automatiquement sur le martyre.
  • Mode pièce (#1001 = 1) : le Z se met a zero sur le dessus de la pièce.

Le premier outil de la session sert de référence (variables #1000 et #1002). Le palpage se fait au palpeur fixe (G53 X-50 Y60), avec un double passage (rapide puis lent) pour la précision.

Boutons utiles de l'interface

  • Tool Sensor : lance la mesure de longueur d'outil au palpeur fixe.
  • Touch Plate : zero Z manuel sur la pièce a l'aide d'une plaque de touche conductrice.
  • Go to Sensor : amène la broche au-dessus du palpeur.
  • Ref Camera : pose le zéro pièce (G54) à partir de la position du réticule caméra, en appliquant l'offset Camera X/Y (touch off visuel). Ouvrir CAMVIEW et centrer le réticule sur le point d'origine avant de cliquer.
  • Aspirateur / Lumière / Ventilateurs : commandent les relais AUX correspondants.

Codes utiles

  • M3 S<vitesse> : broche en marche (sens horaire) a la vitesse donnée. M5 : arrêt broche.
  • M64 P0..P3 / M65 P0..P3 : activé / désactivé une sortie AUX par G-code.
  • M7 / M8 / M9 : brouillard / arrosage / arrêt des deux.
  • OPT STOP : arrêt optionnel sur M1. OPT BLOCK : saut des lignes commençant par /.
Gravure laser

Le module et son pilotage

Module LaserTree LT-80W-AA-PRO (10 W optique, 450 nm, entrée PWM TTL 5 V) monté sur une glissière amovible à l'avant du porte-broche. Il est piloté comme une deuxième broche LinuxCNC (spindle.1) : le mot S est une consigne de puissance de 0 a 1000, pas une vitesse.

  • M3 $1 S500 : laser en marche a 50 % de puissance.
  • S0 $1 : puissance a zéro (sur les déplacements rapides), mais laser toujours ARMÉ.
  • M5 $1 : arrêt réel — c'est la seule commande qui ouvre le relais AUX3 et coupe le +24 V du laser.

La chaîne de puissance est en PWM direct : spindle.1 → composant HAL laser_scale (gain 0.1) → sortie SPINDLE_PWM de la Flexi-HAL → optocoupleur → ampli LM358 → fil jaune du laser. Aucun convertisseur externe (les modules 0-10 V vers PWM utilises auparavant ont grillé deux fois — défaut du produit).

Point important — jumpers P6/P7 de la Flexi-HAL : P6 sur 5 V et P7 en position verticale (mode PWM). P6 fixe l'alimentation de l'ampli op, donc l'amplitude du signal : sur 12 V, le PWM monterait a ~10.5 V droit dans l'entrée TTL 5 V du laser. P6 sur 5 V est ce qui protège le laser.

Puissance asservie à la vitesse réelle : le PWM sort à puissance fixe, or quand la machine ralentit (accélération en début de trait, coins) elle brûle plus longtemps au même endroit — début de trait plus épais. Le HAL insère avant laser_scale un étage qui multiplie la consigne S par le rapport vitesse réelle / vitesse demandée (motion.current-vel / motion.requested-vel) : la puissance suit la vitesse (0 à l'arrêt, pleine à vitesse de croisière), pour une énergie déposée constante par millimètre. Équivalent du « dynamic power » des contrôleurs laser dédiés. La puissance moyenne en est un peu réduite : re-régler à la hausse.

L'outil T100 et son palpage

Les numéros d'outil ≥ 100 sont réservés aux lasers. Le laser est déclaré T100 dans la table d'outils : offsets X/Y saisis une fois (position du nez par rapport a l'axe broche, environ X+2 / Y-90), offset Z re-palpé automatiquement a chaque T100 M6.

Le palpage du laser est MÉCANIQUE : le script toolchange.ngc décale automatiquement la broche de l'inverse de l'offset laser pour que ce soit le nez alu du laser qui vienne toucher la pastille du palpeur fixe. Le nez est donc la référence Z du laser dans toute la chaîne d'offsets — c'est ce qui rend les workflows ci-dessous cohérents.

La règle d'or des modes

Le premier outil palpé de la session devient la référence (#1000), les suivants reçoivent un offset relatif. Ce qui change entre les modes, c'est ou vit le zéro Z :

  • Mode martyre (#1001 = 0) : zéro Z défini automatiquement au palpage (la distance palpeur-martyre est mécanique, 50.525 mm). N'importe quel outil peut être la référence, Y COMPRIS le laser : T100 M6 seul suffit.
  • Mode pièce (#1001 = 1) : zéro Z pris manuellement sur le dessus de la pièce. La référence doit être l'outil qui a physiquement pris ce zéro — le laser qualifie aussi, en touchant la pièce avec son nez alu (papier a cigarette), exactement comme il touche la pastille du palpeur au M6.

Le laser se suffit donc a lui-même dans les deux modes, et on peut librement mélanger fraisage et gravure dans une même session : chaque outil hérite du même zéro via son offset relatif.

Workflow — gravure seule, zéro sur le martyre

1. Poser la pièce ou la chute sur le martyre.

2. Boutons Reset Ref puis Mode Martyre.

3. MDI : T100 M6 — le laser se palpe et définit la référence et le zéro martyre.

4. Zéro XY au tir a faible puissance (voir plus bas).

5. Lancer la gravure : le dessus de la pièce est a Z = épaisseur, le point focal a Z = épaisseur + focale.

Workflow — gravure seule, zéro sur le dessus de la pièce

1. Reset Ref puis Mode Pièce.

2. MDI : T100 M6 — le laser devient la référence de session.

3. Zéro Z au papier a cigarette entre le NEZ ALU du laser et la pièce, puis touch off Z0. Approche douce au petit incrément : ne pas forcer (lentille et air assist juste derrière).

4. Zéro XY au tir a faible puissance.

5. Graver : le point focal est a Z = focale (comptée depuis le nez).

Workflow — job mixte, usinage puis gravure

C'est le flux naturel du système, rien de spécial a faire : Reset Ref, zéros comme pour un usinage normal, T2 M6 et usinage (la fraise est la référence), puis T100 M6 (monter la glissière pendant la pause) et gravure. Le laser reçoit son offset relatif a la fraise et connaît exactement le zéro de l'usinage. L'ordre inverse (graver puis usiner) marche aussi dans les deux modes, a condition qu'en mode pièce le zéro ait été pris au nez du laser.

Zéro XY au tir a faible puissance

Avec T100 M6 fait et G43 H100 actif (les offsets XY du laser s'appliquent, le touch off est donc directement valable) :

1. Lunettes laser.

2. MDI : M3 $1 S20 (2 %, point visible sans marquer).

3. Jog pour amener le point sur le coin ou le repère de la pièce.

4. MDI : M5 $1, puis touch off X0 Y0.

En-tête type d'un G-code de gravure

T100 M6
G43 H100
M3 $1 S0        ; arme le laser (relais AUX3), faisceau a 0
S500 $1         ; puissance pendant les G1 (500 = 50 %)
G1 X.. Y.. F1500
S0 $1           ; faisceau a 0 sur les déplacements
M5 $1           ; fin : coupe réellement le faisceau

Génération des G-codes : LaserAtelier (FreeCAD)

Les G-codes laser sont générés par LaserAtelier, un atelier FreeCAD maison — documentation complète · code source. Modes disponibles :

  • Photo (8 tramages) : convertit une image en gravure. Diffusion (Floyd-Steinberg), Durée variable, Lignes calibrées (nuancier), Diffusion en lignes, Gros points Z, Similigravure (trame 45° façon journal : le gris est une *surface*), Lignes gravées (un trait continu dont l'*épaisseur* fait le gris) et Spirale (la même épaisseur, enroulée du centre au bord, sans un seul demi-tour). Les trois derniers rendent le gris par une géométrie, au foyer, sans aucune calibration de teinte. Sur la spirale, l'épaisseur peut venir de la hauteur Z plutôt que de la puissance : celle-ci ne donne qu'une valeur par palier, donc des marches visibles au pas large, là où le Z fait un fuseau continu. Aperçu réaliste par tramage, et mire de comparaison sur chute.
  • Gravure remplie (noir) : grave un texte/forme en noir plein — remplissage par hachures en défocus (point élargi, rentré du rayon de point pour rester dans le bord, liseré de fermeture) puis contour repassé net au foyer, épaisseur de trait réglable.
  • Importer un dessin SVG : lit le .svg directement et crée un objet par tracé d'origine, sélectionnable séparément — sans le détour par le DXF, qui émiettait un dessin de 23 tracés en plus de 210 fragments.
  • Texte (trait simple) : 45 polices mono-trait (Hershey en domaine public, EMS et Relief SingleLine en licence libre), chaque lettre dessinée d'un seul trait par branche, comme un traceur à plume. La quarante-cinquième, Verdier, est dessinée pour l'atelier — trait par trait, sans fonte tierce — et porte le chapeau de la maison en glyphe.
  • Calligraphie (pleins et déliés) : grave un texte dans une vraie police calligraphique (.otf/.ttf) en un seul passage. On en extrait le squelette — la ligne que la plume a parcourue — et la largeur locale, puis la largeur devient une hauteur Z : la tête se lève pour élargir dans les pleins, redescend pour les déliés. Rien n'est rempli ni repassé. Les pleins peuvent aussi être calculés sur une police mono-trait, avec une plume simulée : bec plat (l'épaisseur suit la direction — italique, gothique) ou plume pointue (elle suit la pression, et on n'appuie qu'en descendant — anglaise, cursives).
  • Texte gravé (contour) : le pendant du précédent pour les polices classiques. Une police classique n'a pas de plume : son contour *est* son dessin, et en extraire un axe réduirait les empattements à de petites barres. Ce mode trace donc le pourtour exact du glyphe, pris sur les vraies courbes de la police, à graver ensuite en creux (Marquage) ou en plein (Gravure remplie).
  • Hachures 2D, Marquage sur surface courbe (suit le relief d'un modèle 3D), Projection sur surface 3D.
  • Découpe multi-passes, à plat ou sur surface courbée (compensation de kerf, passes progressives, rampe de puissance).
  • Nuancier (table des teintes jugées à l'œil) et Assistant matériau (caractérise un matériau du début à la fin).
  • Planches de calibration 1, 2, 2b et 3 : largeurs au foyer, en défocus (15/36 mm), en défocus profond (40/55/60 mm) et largeur du point. Chacune porte une mire gravée — réglette au millimètre, quatre repères en croix, cotes et nom du laser gravés sur le bois. Générables en un seul fichier.
  • Grille de test puissance/vitesse et Bande de calibration défocus : deux mires de réglage gravées en un seul job (voir Calibrations). La bande de tons du nuancier se cale sur le matériau : l'atelier lit les cases restées vides des planches de calibration — une case vide veut dire qu'il n'y avait rien à mesurer — et en tire la vitesse et le plancher de puissance, pour ne pas graver une case dont les mesures disent déjà qu'elle sortira vierge. Sur un matériau jamais mesuré, rien n'est recalé et c'est annoncé : cette première planche est un repérage, ses cases vierges sont elles aussi une mesure.
  • Job combiné (plusieurs opérations, un seul armement) et fichier de cadrage (tracé de l'enveloppe, laser éteint ou faisceau de visée à très faible puissance, à lancer avant le vrai job pour vérifier le positionnement).

Mesurer sur photo plutôt qu'au pied à coulisse. Les planches portant une mire, une photo prise à main levée peut être redressée (perspective corrigée par homographie sur les quatre croix) à une échelle exacte, puis posée telle quelle dans le document FreeCAD à sa taille en millimètres. On mesure alors à l'écran, en zoomant — c'est l'utilisateur qui décide où s'arrête la brûlure, ce qu'aucun seuil automatique ne sait faire à sa place. L'atelier vérifie ensuite l'échelle sur le pas de la réglette gravée, mesure indépendante des quatre croix : au-delà de 1,5 % d'écart, le fichier est refusé.

Les fichiers produits respectent les conventions de la machine : G43 H100 en en-tête (compensation d'outil — prérequis : T100 M6 fait dans la session), armement unique M3 $1 en début de job, puissance par segment S… $1, S0 $1 sur les rapides et M5 $1 final. Le Z de travail est calé sur la distance focale (~8,5 mm sous le nez sur ce laser) : la mesurer d'abord (voir Calibrations) avant de générer.

Depuis la v1.1.0, LaserAtelier sait aussi générer du G-code GRBL et grblHAL (réglage « Dialecte G-code » des Préférences, par profil laser) : armement M4 en mode laser ($32=1), pas de sélecteur de broche ni de G64, et pour grblHAL le T/M6 + G43 H si le firmware embarque la table d'outils. Ces deux dialectes ne sont pas encore testés sur machine réelle — la PrintNC de l'atelier tourne sous LinuxCNC ; retours bienvenus.

Sécurité laser

Point important — une pause ne coupe pas le faisceau : un feed hold ou un M1 ne coupe PAS les broches. Un job laser en pause continue d'émettre au point fixe (risque d'inflammation sur bois). S0 laisse le laser armé ; seul M5 $1 ouvre le relais AUX3. Lunettes de protection adaptées au 450 nm obligatoires, extincteur a portée de main, et JAMAIS de gravure sans surveillance.

Calibrations a faire une fois

Deux programmes de test sont dans le dossier gcode_tests du dépôt de configuration (instructions détaillées en tête de chaque fichier) :

  • test_focale_laser.ngc : rampe de traits gravés a hauteur Z croissante, a puissance et vitesse constantes. Le trait le plus fin donne la distance focale (comptée depuis le nez), a reporter dans le post CAM. LaserAtelier propose désormais l'équivalent en plus complet (mode Bande de calibration défocus : hauteurs et puissances réglables, étiquettes gravées, rampe de puissance) : au-delà du foyer, il sert aussi à mesurer la divergence du point pour le remplissage « noir plein ».
  • test_offset_laser_xy.ngc : job mixte minimal — croix fraisée puis croix laser au même X0 Y0 programme. L'écart entre les deux croix corrige les offsets X/Y de T100 dans la table d'outils. Indispensable avant le premier vrai job mixte.
Maintenance

Avant chaque utilisation

  • Vérifier qu'il n'y a pas de copeaux ou d'obstacle sur les rails et le palpeur.
  • Contrôler visuellement les chaînes de câbles et le circuit de refroidissement.
  • Faire le homing pour repartir d'une référence connue.

Periodiquement

  • Graissage des vis a billes et des rails linéaires (voir section Lubrification pour les quantités et le type de graisse).
  • Vérifier le serrage des vis de structure, SANS toucher aux réglages d'équerrage une fois etablis.
  • Contrôler le niveau et l'état du liquide de refroidissement de la broche.
  • Nettoyer le palpeur fixe (copeaux, poussière) pour garder des mesures fiables.
  • Vérifier la température des moteurs et des drivers après un usinage intensif.

Après un usinage long ou intensif

  • Laisser refroidir broche et moteurs.
  • Dépoussiérer l'armoire électrique et vérifier la ventilation.
  • Inspecter l'usure des outils et de la pince ER20.

Réglé d'or de l'équerrage

Point important — équerrage avant serrage : ne jamais serrer définitivement les vis de structure avant d'avoir réglé l'équerrage. La mise en butée et les réglages se font avant le serrage final.

Lubrification

Type de graisse

Vis a billes et rails linéaires (copies de HIWIN) : graisse blanche au lithium tout usage, consistance NLGI 2. Point important : elle ne doit PAS contenir de particules solides (bisulfure de molybdène MOS2, graphite). Ces additifs endommagent les billes des rails et des vis. Selon la norme DIN51502, chercher une référence type KP2K ou K2K : K initial = graisse pour roulements (obligatoire), 2 = consistance NLGI 2, et surtout aucune lettre F (qui indiquerait des particules solides).

Quantites par relubrification

  • Rails linéaires : 0.5 cm3 par patin.
  • Vis a billes SFU1204 (axe Z) : 0.2 cm3.
  • Vis a billes SFU1610 (axes X/Y) : environ 0.8 cm3 (valeur donnée pour 1604, très proche).

En général, un coup de pompe par roulement suffit.

Première lubrification et fréquence

Lubrification initiale : graisser, déplacer le chariot au moins 2 fois sa longueur, répéter 2 fois (ou plus tant qu'aucune trace de graisse n'apparaît sur le rail). Les rails HIWIN se re-lubrifient en principe tous les 100 km parcourus, a adapter selon l'intensité d'usage.

Précautions

Les graisseurs (zerk) se cassent facilement : ne pas forcer avec une pompe a levier. Un coupleur a verrou rapide facilite la mise en place. Sous 60 m/min la graisse convient ; au-delà il faudrait une huile haute viscosité (32 a 150 cSt).

Équerrage (squaring)

L'équerrage garantit que les axes X et Y sont perpendiculaires. Plusieurs méthodes existent.

Méthode 3-4-5

Utilise un triangle rectangle 3-4-5. Choisir une unité donnant le plus grand triangle possible sans dépasser les dimensions de la machine. Depuis un point de départ (zéro X/Y), avancer de 3 unités sur un axe (point 2), puis de 4 unités sur l'autre (point 3). Mesurer les cotes : A et B confirment que les pas/mm sont corrects, l'hypoténuse C (doit valoir 5 unités) confirme l'équerrage. Si C ne correspond pas, ajuster les butées de l'axe Y et recommencer.

Methode des 3 pins

Attention — couper l'alimentation des drivers avant de débrancher ou rebrancher un moteur. Percer 3 trous en triangle dans une planche posee sur le martyre. Mettre 2 forets comme pions de centrage, retourner la planche selon l'axe X, la reposer sur les pions. Revenir a la position notee : si le portique n'est pas d'equerre, le 3e foret ne s'aligne pas. Debrancher le moteur Y2 (droit), déplacer le côté gauche du portique jusqu'a l'alignement parfait. La différence de position vaut 2 fois le défaut : diviser par 2 et entrer cette valeur comme offset Y1.

Tramming (perpendicularite Z et broche)

Point important — Z ET broche : il faut à la fois mettre le Z d'équerre ET trammer la broche. Une broche parfaite par rapport à la pièce ne suffit pas : si le Z est de travers, un perçage donnera un ovale (mouvement latéral pendant la plongée).

Surface de référence

Partir d'une surface bien plane (verre float, par exemple une vitre de plateau d'imprimante 3D). Fixer un comparateur sur le chariot Z, descendre au contact, déplacer la machine sur le verre et caler avec des shims jusqu'a ce que la surface soit de niveau.

Z autour de X (le nod, hochement)

Comparateur parallele au plan et a l'axe Y, equerre sur la surface de référence. Monter lentement le Z le long de l'equerre, observer la variation. Pour ajuster : desserrer les 4 boulons reliant l'equerre alu au chariot X inférieur, utiliser la vis centrale pour pousser la plaque, resserrer une fois le Z parallele.

Z autour de Y

Desserrer les 4 vis serrant la plaque alu sur le rouleau X supérieur et les 4 boulons sur l'equerre inferieure. La plaque pivote autour de la tête de boulon centrale. Utiliser les vis de la barre de tram a l'arriere pour faire pivoter la plaque jusqu'au parallelisme, puis resserrer.

Broche

A refaire a chaque tramming du Z. Monter une barre de tram dans la pince, tenant un comparateur. Centrer la broche au-dessus du verre, faire tourner le comparateur en cercle : la broche est bien trammee quand la valeur est identique avant/arriere et gauche/droite. Ajuster avec les vis de la pince (M5 pour pousser, M6 pour serrer) et les vis d'epaulement de la plaque de tram.

Depannage

CYCLE_START en boucle : le programme redemarre seul, Stop ne tient pas

Vérifier la polarite de l'entrée dans halshow. Si flexi.input.CYCLE_START est FALSE au repos / TRUE en appui (actif HAUT), ne PAS utiliser .not dans le HAL. Le .not resterait TRUE en permanence et relancerait halui.program.run en boucle dès que la machine repasse idle.

GO HOME refuse avec "would exceed joint 0's negative limit" alors que les limites sont correctes

Vérifier halui.program.pause dans halshow : si elle est bloquee a TRUE, la machine se croit en pause et refuse les mouvements. Faire Resume pour debloquer. Cause possible : même bug de polarite que CYCLE_START sur l'entrée FEED_HOLD/HOLD (vérifier si .not est utilise alors que l'entrée est FALSE au repos).

Cette erreur GO HOME peut aussi venir d'un offset G54 incoherent

Si program.pause est normal mais que GO HOME (ou le debut d'un G-code) sort des limites des la ligne X0/Y0, vérifier l'offset G54 actuel (onglet Offsets). Refaire un touch off X/Y sur la pièce si l'offset ne correspond plus a la position reelle.

Télécommande RJ45 et carte de boutons locale en conflit

Si une carte de boutons locale (avec LEDs) est cablee en parallele d'une télécommande RJ45 sur les mêmes entrées, les niveaux logiques peuvent être perturbes (SYS/ST, HOLD concernes ici). Solution rapide : deconnecter les sorties concernees de la carte locale, garder uniquement le RJ45. Pour faire coexister les deux proprement, ajouter une logique or2 de decouplage comme pour les sorties AUX0-3.

M64/M65 sans effet sur les relais

Vérifier que NUM_DIO = 4 est présent dans [EMCMOT] de l'INI, sinon les pins motion.digital-out sont ignorees silencieusement.

Relais qui ne reagissent pas

Vérifier que le rail AUX est alimente (jumper P17 sur MAIN = 24 V). Un jumper P17 defectueux fait que la borne + sort 0 V. Vérifier aussi la coherence des jumpers de modules (tous sur H pour de l'activé HIGH).

Message EMC_TASK_PLAN_PAUSE au démarrage

La carte lit ses entrées en logique activé basse. Utiliser flexi.input.FEED_HOLD.not (et non FEED_HOLD direct) dans la logique Hold du HAL, sinon halui.program.pause est force a TRUE en permanence et une pause est demandee au démarrage. Vérifier avec : halcmd show pin halui.program.pause (doit être FALSE au repos).

Bouton GO HOME : erreur a haute vitesse

Le calcul du delai d'attente (calc_mdi_move_wait_time dans le handler) ignore le temps d'accélération/décélération. A haute vitesse, le WAIT expire avant la fin du mouvement. Solution : augmenter wait_buffer_secs (de 1 a 4) dans le handler.

Bouton QtDragon qui déclenche deux actions / mouvement parasite

Si un bouton fait deux choses à la fois (ex. le bon déplacement ET un retour parasite vers l'origine), alors que la méthode du handler est correcte : le bouton a probablement été créé en réutilisant un bouton existant dans Qt Designer, qui conserve son ancienne connexion signal/slot dans le .ui. Cette connexion s'ajoute à celle faite côté Python (.clicked.connect(...)), et les deux partent à chaque clic. Diagnostic : grep "nom_du_bouton" fichier.ui — il ne doit rester que la ligne <widget class="QPushButton" name="...">, aucune ligne <sender>. Correction : supprimer le bloc <connection>...</connection> du bouton dans le .ui (F4 dans Designer → Edit Signals/Slots, ou suppression directe du bloc), ou laisser le bouton non connecté dans le .ui et tout gérer côté Python. Indice clé : si la commande fonctionne en MDI manuel mais pas depuis le bouton, le problème n'est pas dans le G-code ni le handler, mais dans une connexion .ui cachée.

Erreurs page_allocator et gel au démarrage

Le widget web QtWebEngine de QtDragon (page HTML de l'onglet SETUP, non utilisee) plante au démarrage. Le supprimer dans Designer (garder PDF et PROPERTIES) et proteger son initialisation dans le handler avec hasattr.

Preview G-code qui ne chargé plus

Vérifier que le script toolchange.ngc ne contient pas de M6 (recursion infinie), ni de M2/M30 dans un bloc IF (casse la preview). Utiliser #<_selected_tool> et non #5400 pour récupérer l'outil demande.

Bruit moteur et perte de couple a haute vitesse

Symptome de la limite physique du couple a haute vitesse (rattrapee par la boucle fermee, accentuee par la chaleur). Redescendre la vitesse (ici 8000 mm/min) ameliore le confort et la fiabilite. Vérifier aussi le réglage des DIP switches de courant sur les drivers.

Perte de pas

Avec des moteurs en boucle fermee, une vraie perte de pas est rare (le driver corrige). En cas de décalage : vérifier l'accouplement vis/moteur, les timings STEPLEN/STEPSPACE, et que la vitesse/accélération ne depasse pas les capacites mecaniques.

Image caméra ovale / déformée (cercle = ovale)

Le capteur 16:9 est affiché dans un cadre carré, ou la capture est en 4:3. Forcer un mode 16:9 natif : Camview cam resolution = 1280,720 et ajouter Camview cam api = V4L2 (sans elle, ANY ignore la résolution). Affiner avec Camview xscale (augmenter pour réétirer l'horizontale) en regardant une rondelle. Éditer qtdragon.pref LinuxCNC fermé (réécrit a la fermeture sinon). Image a l'envers : mettre xscale et/ou yscale en négatif.

Bandes noires défilantes sur l'image caméra

Scintillement de l'éclairage LED 230V/50Hz (papillote a 100 Hz) non synchronisé avec la caméra. Le firmware de la caméra Redeagle ignore l'exposition manuelle (réglage v4l2 sans effet), et QtDragon/OpenCV écrase de toute façon les réglages v4l2 a l'ouverture du flux. Solution de fond : éclairer en courant continu (LED USB 5V ou bandeau 12/24V sur l'alim continue), qui ne scintille pas.

Touch off caméra décalé (REF CAMERA)

Si après REF CAMERA un G0 X0 Y0 ne tombe pas sur le point visé : décalage d'environ le déport = offset Camera X/Y non appliqué ou de signe inversé (essayer l'opposé). Décalage dans une direction franchement fausse = orientation d'image incohérente avec le mouvement table : retourner l'image avec un xscale/yscale négatif, ou réorienter la caméra physiquement.

Bouton CAM VERS OUTIL (amener la caméra à la place de la fraise)

Pour pointer un repère à l'écran sans déplacer le zéro : un bouton custom envoie un déplacement RELATIF de l'offset caméra/broche (G91 G0 X[-cam_x] Y[-cam_y] puis G90), depuis la position courante quelle qu'elle soit. La caméra vient alors au-dessus du point que visait la fraise. Workflow complet : poser la fraise sur le point → clic CAM VERS OUTIL → ajuster finement au jog en regardant l'image → REF CAMERA pour poser le zéro pièce. Le bouton et REF CAMERA doivent lire les MÊMES champs Camera X / Camera Y, sinon le zéro est décalé de l'écart entre les deux. Le déplacement étant relatif (G91), inutile de passer par X0 Y0 d'abord. Auparavant, la méthode consistait à mettre d'abord le XY à zéro, puis à se déplacer en absolu de l'offset (par exemple G0 X-76 Y-85) ; désormais le bouton effectue directement un saut relatif en G91 depuis la position courante, ce qui évite cette double étape. Si le sens du décalage est inversé (la caméra part du mauvais côté), retirer les signes négatifs dans la commande.

Précision attendue (PrintNC)

La précision typique d'une PrintNC se situe entre 0.03 et 0.1 mm. Elle dépend du matériau usiné, de la qualité de l'équerrage et de l'alignement, et du temps investi sur chaque pièce. C'est une machine de type routeur a portique, orientée bois et aluminium (et acier a l'occasion), idéale pour des profils plats de grande surface (environ 110 mm de dégagement en Z). Pour des petites pièces a très haute précision, une autre architecture serait plus adaptée.

Glossaire

LinuxCNC et HAL

  • HAL (Hardware Abstraction Layer) : couche logicielle qui connecte les composants logiciels entre eux et avec le matériel. On y définit les connexions via des fichiers .hal.
  • REMAP : mécanisme LinuxCNC permettant de remplacer un code G ou M standard par un script personnalisé. Exemple : REMAP=M6 redirige le changement d'outil vers toolchange.ngc.
  • MDI (Manual Data Input) : mode de saisie manuelle de commandes G-code, ligne par ligne, sans charger de programme.
  • Feed Hold : mise en pause de l'avance (pas de la broche). Le programme peut reprendre exactement où il s'est arrêté.
  • Homing : procédure de référencement — la machine se déplace vers ses capteurs de fin de course pour établir une position d'origine connue.
  • G53 : coordonnées machine absolues (indépendantes du zéro pièce). Utilisées pour les positions fixes comme le palpeur ou l'ATC.
  • G54 : premier système de coordonnées pièce (Work Coordinate System). C'est le zéro pièce que tu définis avec le touch off.
  • Touch off : opération qui définit le zéro pièce (G54) à la position actuelle de la machine.
  • QtDragon HD : interface graphique (écran de contrôle) de LinuxCNC utilisée sur cette machine. Basée sur Qt/PyQt5.
  • postgui HAL : fichier HAL chargé après l'interface graphique, nécessaire pour connecter les boutons de l'interface aux signaux HAL.

Mécanique

  • SFU : désignation des vis à billes à écrou simple (Single Fixed Unit). Ex : SFU1610 = 16 mm de diamètre, 10 mm de pas.
  • HGR20 : rail de guidage linéaire de 20 mm de largeur, avec patins HGH ou HGW.
  • BK / BF : supports de palier pour vis à billes. BK = côté motorisé (fixe), BF = côté libre (flottant).
  • Tandem Y : configuration avec deux moteurs pilotant le même axe Y en parallèle, pour entraîner les deux côtés du portique simultanément.
  • Martyre : planche sacrificielle posée sur le plateau de la machine, sur laquelle on fixe les pièces à usiner. Elle absorbe les passes trop profondes.
  • Tramming : opération de mise à l'équerre de la broche par rapport au plateau — vérification que la broche est bien perpendiculaire à la surface d'usinage.

Électronique

  • FlexiHAL : carte d'interface CNC conçue par Expatria, exécutant le firmware Remora. Elle communique avec le Raspberry Pi via SPI.
  • Remora : firmware open source pour microcontrôleur qui transforme une carte comme la FlexiHAL en interface temps réel pour LinuxCNC.
  • CL57T : driver de moteur pas à pas en boucle fermée. Reçoit les impulsions de pas de la carte et corrige la position grâce à l'encodeur du moteur.
  • NPN NC : type de capteur inductif. NPN = transistor NPN (sortie vers la masse), NC = Normalement Fermé (le circuit est fermé au repos, s'ouvre à la détection).
  • VFD (Variable Frequency Drive) : variateur de fréquence, aussi appelé variateur de vitesse. Contrôle la vitesse de rotation de la broche en faisant varier la fréquence du courant alternatif.
  • RS485 : protocole de communication série différentiel, utilisé ici pour contrôler le VFD depuis LinuxCNC (protocole Modbus RTU).
  • or2 : composant HAL qui réalise un OU logique à deux entrées. Utilisé pour combiner deux sources de commande (bouton ET G-code) sur une même sortie.
  • AUX : sorties auxiliaires de la FlexiHAL (AUX0 à AUX3), utilisées pour piloter des relais (aspirateur, lumière, pompe...).
  • camview : widget de qtvcp (basé sur OpenCV) affichant le flux d'une caméra USB dans QtDragon, avec réticule, cercle et lecture d'angle réglables. Utilisé ici pour le touch off X/Y visuel.
  • C-mount : standard de monture d'objectif (filetage 1 pouce, tirage 17.5 mm) des caméras industrielles. L'objectif varifocal 5-50 mm de la caméra de positionnement est en monture C.

G-code

  • M6 : code de changement d'outil. Sur cette machine, redirigé par REMAP vers toolchange.ngc qui gère le palpage automatique.
  • M64 / M65 : active / désactive une sortie numérique (digital output). Ex : M64 P0 active AUX0.
  • M7 / M8 / M9 : brouillard / arrosage / arrêt des deux.
  • G38.2 : cycle de palpage — déplace l'outil jusqu'au contact d'une surface et enregistre la position. Déclenche une erreur si pas de contact.
  • G43 Hx : active la compensation de longueur d'outil numéro x. Sur cette machine, géré automatiquement par toolchange.ngc après palpage.
  • G90 / G91 : mode de coordonnées absolues / relatives (incrémentales).
  • G64 P0.03 : mode de suivi de trajectoire avec tolérance de 0.03 mm. Lisse les angles pour maintenir la vitesse d'avance.
A - B - C

ATC (Changeur d'outil automatique)

Système mécanique et logiciel permettant à la machine de changer d'outil seule. Sur cette PrintNC, un ATC a été testé mais jugé "pas assez costaud". La solution retenue est un changement manuel couplé à un palpage automatique de la longueur (semi-automatique).

Backlash (Jeu mécanique)

Jeu résiduel dans une transmission (entre la vis à billes et son écrou, ou dans un couplage). Se traduit par une imprécision lors des inversions de sens. Sur cette PrintNC, il est minimisé par la qualité des vis à billes et peut être compensé dans la configuration LinuxCNC via le paramètre BACKLASH.

BF12 / BK12

Supports d'extrémité pour vis à billes. BK12 = support fixe (côté moteur, palier rigide), BF12 = support flottant (côté opposé, palier qui peut glisser légèrement pour compenser la dilatation thermique de la vis).

BOM (Bill of Materials)

Nomenclature ou liste des matériaux. Désigne le tableau récapitulatif de toutes les pièces, visserie et composants nécessaires à la construction de la machine, avec leur prix.

Boucle fermée (Closed loop)

Mode de fonctionnement d'un moteur pas à pas équipé d'un encodeur. Contrairement à la boucle ouverte (où les pas perdus ne sont pas détectés), le driver vérifie en permanence que la position réelle correspond à la position commandée. Sur cette PrintNC, les drivers CL57T v4.1 fonctionnent en boucle fermée avec les Nema 23.

Brûlure (largeur brûlée)

Largeur réellement noircie par le laser, mesurée au pied à coulisse ou sur photo redressée. Elle n'est pas le diamètre optique du point : au foyer, seule la partie centrale du faisceau dépasse le seuil de combustion du bois, donc la brûlure est plus étroite (0,10 mm à S200 contre 0,30 à S1000 sur hêtre). C'est elle, et non le point optique, qui doit régler l'espacement des hachures.

Broche (Spindle)

Moteur électrique dédié à la rotation de l'outil de coupe. Ici, une G-Penny 2.2 kW refroidie par eau, avec une pince ER20, pouvant monter jusqu'à 24 000 tr/min. Pilotée par un VFD.

CAM (Computer-Aided Manufacturing)

Logiciel de génération de parcours d'outils à partir d'un modèle 3D. Produit le G-code envoyé à LinuxCNC. Sur cette PrintNC, FreeCAD (avec l'atelier Path) est utilisé.

Défocus

Distance dont on éloigne le bec laser de sa distance focale, pour élargir volontairement le point. Sert à noircir une surface : au foyer, il faudrait des centaines de passes serrées. Le point s'élargit selon un cône de divergence calibré sur deux mesures réelles (diamètre au foyer, diamètre à une hauteur connue).

Capteur inductif

Capteur de proximité sans contact (ici LJ8A3-2-Z/AX) utilisé pour les fins de course. Il détecte la présence d'un métal à proximité. Configuré en NPN NC (Normalement Fermé, logique active basse).

CL57T

Référence du driver utilisé sur cette PrintNC (CL57T v4.1, omc-stepperonline). Driver hybride en boucle fermée pour moteurs Nema 23. Alimentation 24-48 V, courant 0.8-7 A. Quatre exemplaires sur la machine (X, Y1, Y2, Z).

D - E - F

Driver (Pilote de moteur)

Composant électronique qui convertit les signaux de pas/direction (provenant de la carte FlexiHAL) en courant suffisant pour faire tourner les moteurs pas à pas. Ici, des CL57T v4.1 en boucle fermée.

Dialecte G-code

Variante du langage attendue par le contrôleur. LaserAtelier en génère trois : LinuxCNC (sélecteur de broche $1, G64, table d'outils), GRBL 1.1 (armement M4 en mode laser, lissage natif) et grblHAL. Le réglage est mémorisé par profil laser.

Encodeur

Capteur magnétique ou optique fixé sur l'arbre du moteur qui mesure la rotation réelle. Permet le fonctionnement en boucle fermée. Sur cette PrintNC, chaque moteur Nema 23 dispose d'un encodeur magnétique 1000 PPR (4000 CPR en quadrature). Le driver CL57T lit l'encodeur et peut détecter une perte de pas.

ER20 (Pince / Collet)

Système de serrage d'outil à cône élastique. "ER" = système standardisé, "20" = diamètre extérieur de la pince en mm. L'ER20 accepte des queues d'outil de 1 à 13 mm. C'est le type de pince monté sur la broche G-Penny de cette machine.

Équerrage (Squaring)

Réglage visant à rendre les axes X et Y parfaitement perpendiculaires (à 90°). Réalisé avant le serrage définitif des vis de structure, souvent via la méthode du triangle 3-4-5 ou des pins.

Fluence

Énergie déposée par unité de surface — en pratique S / (espacement × vitesse). C'est elle qui gouverne la teinte, pas la puissance seule : un trait deux fois plus large reçoit deux fois moins d'énergie par millimètre carré à puissance égale. À nuancer toutefois : à fluence rigoureusement identique, un passage plus lent grave plus foncé — le temps de séjour compte aussi.

Foyer (distance focale)

Hauteur du bec où le point laser est le plus fin. Se mesure en gravant une rampe de traits à hauteurs croissantes : le plus fin donne le foyer. Sur ce laser, ~8 mm sous le nez.

FlexiHAL

Carte de contrôle CNC conçue par Expatria, exécutant le firmware Remora. Communique avec le Raspberry Pi par bus SPI et génère les impulsions des moteurs en matériel.

FreeCAD

Logiciel open source de CAO (Conception Assistée par Ordinateur) et CAM. Utilisé sur cette PrintNC pour dessiner les pièces à usiner et générer les parcours d'outils (atelier Path) qui produisent le G-code.

G - H - L

Fuseau (largeur portée par la hauteur)

Trait dont l'épaisseur varie continûment parce que la tête monte et descend : plus le bec s'éloigne du foyer, plus le point s'élargit. C'est ce qui permet à un laser de faire des pleins et des déliés sans repasser ni remplir. L'alternative — moduler la puissance — ne donne qu'une valeur par palier mesuré, donc des marches visibles dès que le pas est large. Le prix du fuseau est la course : sur hêtre, aller de 0,18 à 3,43 mm demande une cinquantaine de millimètres de Z, et l'axe a une vitesse limite, donc un geste trop court ne montrera pas le fuseau entier.

G-code

Langage de programmation numérique standard utilisé pour piloter les machines CNC (ex: G0 X10 Y20 pour un déplacement rapide, M3 S12000 pour lancer la broche à 12000 tr/min).

Homographie (redressement de photo)

Transformation qui corrige la perspective d'une photo, et pas seulement son échelle. Une photo tenue à la main n'est jamais perpendiculaire au bois ; quatre repères en croix gravés aux coins d'un rectangle de cotes connues fournissent les quatre correspondances nécessaires. Le résultat est une image où 1 mm vaut un nombre exact de pixels, partout.

G54 (Système de coordonnées pièce)

L'un des systèmes de coordonnées de travail (WCS) de LinuxCNC. Définit le zéro pièce par rapport à l'origine machine. Activé par défaut au démarrage. Le "touch off" définit ce zéro. G53 permet de se déplacer en coordonnées machine absolues, indépendamment de G54.

GrblHAL

Firmware open source pour machines CNC, dérivé de GRBL. La FlexiHAL supporte à la fois GrblHAL et LinuxCNC (via Remora). Cette PrintNC utilise LinuxCNC/Remora.

HAL (Hardware Abstraction Layer)

Système propre à LinuxCNC. C'est un langage de câblage logique (fichiers .hal) qui permet de connecter les signaux physiques (boutons, capteurs) aux fonctions logicielles (mouvements, pauses) via des composants comme and2, or2 ou not.

Kerf (saignée)

Largeur de matière effectivement enlevée par le faisceau lors d'une découpe. Une pièce découpée sans compensation de kerf est trop petite de la moitié de cette largeur sur chaque bord.

HGR20 / HGW20CC

Rail linéaire de guidage de type HIWIN (ou copie). "HGR20" = référence du rail (largeur 20 mm), "HGW20CC" = référence du chariot (patin) qui glisse dessus, modèle large à bride. Utilisés sur les trois axes de la PrintNC.

Homing (Référencement)

Procédure de démarrage qui permet à la machine de trouver ses origines physiques (capteurs de fin de course) pour connaître sa position exacte. Sur cette machine, le Z monte en premier pour éviter les collisions.

HYComm

Protocole de communication série propriétaire utilisé par les variateurs Huanyang (VFD). Ce n'est pas du Modbus RTU standard, bien qu'il utilise la même liaison physique (RS485).

LinuxCNC

Logiciel open source de contrôle CNC tournant sur Linux temps-réel (PREEMPT_RT ou RTAI). C'est le "cerveau" de la machine : il interprète le G-code, calcule les trajectoires, gère les axes et communique avec la FlexiHAL via Remora/SPI. Ici utilisé sur Raspberry Pi 5.

M - N - P

MDI (Manual Data Input)

Mode de LinuxCNC permettant d'entrer et d'exécuter des commandes G-code manuellement, une ligne à la fois, sans charger de fichier programme. Utile pour les déplacements ponctuels ou les tests.

M67 (puissance synchronisée)

Commande LinuxCNC qui programme une sortie analogique synchronisée avec le mouvement, au lieu de l'appliquer immédiatement. Sur cette machine, un S isolé entre deux G1 vide la file d'attente et arrête le mouvement ; M67 E0 Q… l'évite. Mesuré sur bois : le gain de temps réel n'est que de 2 %.

Micro-trait

Point gravé sous forme d'un G1 très court plutôt que d'une pause faisceau allumé. Indispensable ici : la puissance étant asservie à la vitesse réelle, elle tombe à zéro à l'arrêt — un point fait au G4 ne grave donc rien du tout.

Mono-trait (police)

Police dont chaque lettre est dessinée d'un seul trait par branche, comme un traceur à plume — par opposition à une police ordinaire, qui est un contour rempli. Une police ordinaire gravée telle quelle fait donc le tour de chaque lettre ; une mono-trait l'écrit. Elle ne porte en revanche aucune épaisseur : c'est un squelette, et les pleins et déliés doivent y être calculés (voir Plume) plutôt qu'extraits.

Mire de mesure

Réglette graduée au millimètre et quatre repères en croix, gravés en même temps que la planche de calibration, donc dans le même repère machine. Gravée et non posée : une règle d'acier repose 0,5 à 1 mm au-dessus de la surface, donc vue sous un autre angle que le trait qu'on mesure — parallaxe. Les cotes du rectangle sont gravées sur le bois, ainsi que le nom du laser.

Nuancier

Table des teintes réellement obtenues, gravée puis jugée à l'œil, pour un matériau et un laser donnés. Sert à convertir une noirceur demandée en couple puissance/vitesse. Un nuancier riche n'est pas une garantie : seuls comptent les tons portant à la fois une noirceur jugée et une largeur mesurée.

Modbus RTU

Protocole de communication industriel standard sur liaison RS485. Le VFD Huanyang de cette machine utilise HYComm, qui ressemble à Modbus RTU mais n'est pas compatible avec lui.

Nema 23

Standard de taille définissant l'interface de fixation d'un moteur pas à pas (front de 57.15 x 57.15 mm). Ici, modèles 23HS40-5004-ME1K en boucle fermée (3.00 Nm).

Palpeur (Tool Setter)

Dispositif de mesure fixe monté sur la table de la machine. Lors d'un changement d'outil, la broche descend lentement, touche le palpeur, et LinuxCNC calcule la longueur exacte du nouvel outil par différence.

Pleins et déliés

L'alternance d'épaisseur qui fait une écriture calligraphique : le plein est le trait large, le délié le trait fin. Sur une machine, l'épaisseur ne vient ni de l'encre ni de l'appui mais de la hauteur du bec (voir Fuseau). Deux sources possibles : les extraire d'une police calligraphique — le squelette et la largeur locale se lisent dans le dessin de la lettre — ou les calculer sur une police mono-trait, à partir de la direction de chaque trait (voir Plume).

Plume (bec plat, plume pointue)

Les deux instruments de la calligraphie, et ils ne font pas la même chose.

Le bec plat (italique, gothique, onciale) est une lame de largeur fixe tenue à un angle fixe : l'épaisseur ne dépend que de la direction du trait — celui qui traverse la lame est plein, celui qui court dans son axe est délié. Un trait qui monte y est aussi plein que le même qui descend.

La plume pointue (anglaise, et toutes les cursives) est une pointe souple qui s'écarte sous la pression, et on n'appuie qu'en descendant : pousser une pointe vers le haut l'accroche dans le papier. D'où les pleins sur les descentes et les déliés filiformes partout ailleurs. Prendre un bec plat sur une cursive met des pleins dans les remontées, là où aucune main n'en met — ça se voit tout de suite sans qu'on sache dire pourquoi.

Portique (Gantry)

Structure en pont mobile portant l'axe X et la broche. Sur une PrintNC, le portique se déplace sur l'axe Y via deux rails linéaires et deux vis à billes (configuration Tandem Y).

PPR / CPR

Pulses Per Revolution / Counts Per Revolution. Mesure de la résolution d'un encodeur. Un encodeur 1000 PPR donne 4000 CPR en mode quadrature (4 fronts détectés par impulsion mécanique). Les Nema 23 de cette machine ont des encodeurs 1000 PPR / 4000 CPR.

PrintNC

Fraiseuse CNC open source conçue pour être construite avec des profils acier standards, des rails linéaires HGR et des vis à billes SFU. "Print" réfère aux pièces de liaison imprimées en 3D, "NC" à "Numerical Control". Projet communautaire, documentation sur wiki.printnc.info.

PySide6

Ensemble de bibliothèques Python permettant de créer des interfaces graphiques (GUI). Utilisé ici pour l'outil gestion_site.py qui génère et gère le site web.

Q - R - S

QtDragon

Interface graphique (GUI) complète pour LinuxCNC, écrite en Python (PyQt/PySide). Ici, la version "HD" est utilisée et personnalisée pour ajouter des boutons personnalisés (relais, caméra, etc.).

Rail linéaire (HGR20)

Guidage linéaire de précision à billes recirculantes. Composé d'un rail fixe (HGR20) et d'un ou plusieurs chariots (HGW20CC) qui glissent dessus avec très peu de jeu. Sur cette PrintNC, un seul patin par rail a été choisi (contre deux habituellement) pour simplifier le montage.

Remora

Firmware open source installé sur la FlexiHAL (microcontrôleur RP2040). Il reçoit les ordres du Raspberry Pi via bus SPI et génère les impulsions de pas en matériel à haute fréquence, déchargeant le Pi de cette tâche temps-réel critique.

REMAP

Fonctionnalité de LinuxCNC permettant de redéfinir le comportement d'un code M standard (comme M6 pour le changement d'outil) pour lui faire exécuter un script personnalisé (fichier .ngc).

RS485

Norme de communication série différentielle utilisée pour connecter le Raspberry Pi au VFD sur de longues distances sans parasite. Nécessite un adaptateur USB-RS485.

Runout (Faux-rond)

Défaut de perpendicularité de l'axe de la broche par rapport à son corps. Un runout élevé provoque des vibrations et des usures prématurées de l'outil. Mesuré avec un comparateur.

SFU1204 / SFU1610

Références de vis à billes. "SFU" = ball screw à brides, "16" = diamètre 16 mm, "10" = pas de 10 mm/tour. Le SFU1204 (axe Z) a un diamètre de 12 mm et un pas de 4 mm pour plus de précision et d'auto-freinage. Le SFU1610 (axes X et Y) offre plus de rigidité.

SPI (Serial Peripheral Interface)

Bus de communication série rapide reliant le Raspberry Pi à la FlexiHAL. Synchrone, jusqu'à plusieurs dizaines de MHz. Permet l'échange en temps-réel des consignes de position et des états des entrées/sorties entre le Pi et la carte de contrôle.

StepGen

Générateur de pas (composant LinuxCNC/HAL). Il génère la fréquence exacte d'impulsions pour faire tourner les moteurs à la vitesse demandée par le G-code.

Surfaçage (Facing / Surfacing)

Opération d'usinage consistant à passer la fraise sur toute la surface d'une pièce pour obtenir une surface plane et de référence. Sur cette PrintNC, utilisé pour mettre la table à niveau et préparer les pièces en aluminium.

T - V

Tramage

Manière de fabriquer un gris avec un outil qui ne sait faire que brûlé ou pas brûlé : par densité de points, par taille de point, par surface (similigravure) ou par épaisseur de trait. LaserAtelier en propose sept, chacun avec son régime de vitesse et de défocus.

Tandem Y

Configuration mécanique où l'axe Y est entraîné par deux moteurs distincts (Y1 et Y2), un de chaque côté du portique. Cela évite les problèmes de désynchronisation des courroies ou des arbres de liaison.

Touch off

Opération qui définit le zéro pièce (G54) à la position actuelle de l'outil ou de la machine. Se fait manuellement en approchant l'outil d'un coin de pièce (papier cigarette), ou automatiquement via le palpeur pour la longueur d'outil.

Tramming

Opération de réglage consistant à rendre l'axe de la broche parfaitement perpendiculaire à la table de la machine (réglage autour de X et Y). Indispensable pour faire des perçages ronds et non ovales.

VFD (Variateur de Fréquence)

Appareil électronique (ici Huanyang 2.2 kW) qui convertit le courant secteur (230V 50Hz) en courant de fréquence variable pour contrôler la vitesse de rotation d'un moteur alternatif (la broche).

Vis à billes (Ball screw)

Mécanisme de transmission convertissant un mouvement rotatif (moteur) en mouvement linéaire (axe). Composé d'une vis hélicoïdale et d'un écrou contenant des billes recirculantes. Bien plus précis et efficace qu'une vis trapézoïdale : rendement ~90% contre ~30-40%, et jeu quasi nul.

W - Z

WCS (Work Coordinate System)

Système de coordonnées de travail. Dans LinuxCNC, G54 à G59 définissent jusqu'à 6 WCS différents, permettant de mémoriser plusieurs origines pièce sans avoir à refaire le touch off. G53 désigne les coordonnées machine absolues.

G-code — Guide de référence (FR)
Cette section est une référence pratique en français. Les exemples sont concrets et adaptés à l'utilisation d'une fraiseuse CNC comme cette PrintNC (bois, aluminium).

Les déplacements : G0, G1, G2, G3

G0 — Déplacement rapide (sans usinage, vitesse maximale de la machine)

G0 Z5          ; Monter l'outil à Z=5 mm (dégagement sécurité)
G0 X0 Y0       ; Aller en X0 Y0 en rapide
G0 X50 Y30 Z2  ; Aller à cette position en rapide (les 3 axes bougent en même temps)

G1 — Déplacement en travail (usinage, vitesse contrôlée par F en mm/min)

G1 Z-3 F300    ; Plonger à -3 mm à 300 mm/min
G1 X100 F800   ; Avancer de X=100 à 800 mm/min en fraisant
G1 X100 Y50 F600  ; Déplacement diagonal en fraisage

G2 — Arc de cercle sens horaire (vu de dessus) G3 — Arc de cercle sens anti-horaire

Deux façons de définir un arc :

Avec I et J (coordonnées du centre, relatives au point de départ) :

; Cercle complet de rayon 20 mm (départ et arrivée au même point)
G0 X20 Y0
G1 Z-2 F300
G2 X20 Y0 I-20 J0 F500   ; I=-20 = le centre est à X-20 par rapport au départ

Avec R (rayon, plus simple pour les demi-cercles) :

G0 X0 Y0
G1 Z-2 F300
G2 X40 Y0 R20 F500   ; Arc CW de rayon 20 passant de X0 à X40
**Astuce PrintNC** : toujours faire un G0 Z5 avant de se déplacer en rapide vers un nouveau point, pour ne pas raser la pièce ou les brides.

Les espaces de travail : G54–G59 et G53

La machine a deux types de coordonnées :

  • Coordonnées machine (G53) : origine physique fixe, définie par le homing. Ne change jamais.
  • Coordonnées pièce (G54 à G59) : origine que tu choisis sur ta pièce (le "zéro pièce"). C'est là que tu travailles.

G54 à G59 — Six origines pièce mémorisables

G54   ; Activer le système de coordonnées 1 (par défaut au démarrage)
G55   ; Activer le système 2 (pratique pour une 2ème pièce sur la table)
G56   ; Système 3 — etc.

Concrètement : tu poses ta pièce, tu fais un touch off pour dire "ici c'est X0 Y0 Z0", et LinuxCNC mémorise ça dans G54. La prochaine fois que tu charges la même pièce au même endroit, tu rappelles juste G54.

G53 — Se déplacer en coordonnées machine (utile pour aller à un point fixe quelle que soit l'origine pièce)

G53 G0 Z0      ; Monter l'axe Z à son maximum physique (Z=0 machine = en haut)
G53 G0 X0 Y0   ; Aller à l'origine machine en X et Y
**Attention** : G53 est une action unique (non-modale). La ligne suivante revient automatiquement au WCS actif (G54 ou autre).

G10 — Définir un WCS par G-code (sans passer par l'interface)

G10 L2 P1 X0 Y0 Z0   ; Réinitialiser G54 (P1) à la position actuelle
G10 L2 P2 X100 Y0    ; Décaler l'origine de G55 de 100 mm en X

L2 = modifier le WCS, P1 = G54, P2 = G55, etc.

Positionnement absolu / relatif : G90 et G91

G90 — Mode absolu (par défaut, toujours recommandé) : les coordonnées sont relatives à l'origine pièce.

G90
G0 X10   ; Aller à X=10 mm depuis l'origine
G0 X50   ; Aller à X=50 mm depuis l'origine

G91 — Mode relatif : les coordonnées sont des déplacements depuis la position courante.

G91
G0 X10   ; Avancer de 10 mm depuis où on est
G0 X10   ; Avancer encore de 10 mm (on est maintenant à X=20)
G90      ; Toujours revenir en absolu après !
**Conseil** : travailler en G90 autant que possible. G91 est utile pour des répétitions ou des mouvements relatifs rapides (ex: `G91 G1 Z-1 F200` pour plonger de 1 mm supplémentaire), mais oublier de remettre G90 est une source classique d'erreurs.

Unités et plan de travail : G20, G21, G17

G21   ; Unités en millimètres (toujours utiliser ça en Europe)
G20   ; Unités en pouces (pour les fichiers G-code américains)

G17   ; Plan de travail XY (fraisage standard, broche sur Z — c'est le défaut)
G18   ; Plan XZ (utilisé pour des arcs dans le plan vertical X/Z)
G19   ; Plan YZ

Contrôle de la broche : M3, M4, M5

M3 S12000   ; Lancer la broche sens horaire à 12000 tr/min
M4 S8000    ; Lancer la broche sens anti-horaire à 8000 tr/min (rare)
M5          ; Arrêter la broche
**Sur cette PrintNC** : la vitesse mini utile est ~6000 tr/min (en dessous, le VFD Huanyang n'a plus de couple), et le maxi est 24000 tr/min. Pour l'aluminium, 12000–18000 tr/min est typique. Pour le bois, 18000–24000 tr/min.

Changement d'outil : M6, T

T2 M6    ; Demander l'outil n°2 et effectuer le changement

Sur cette PrintNC, M6 est remappé (REMAP) pour déclencher une procédure automatique : l'opérateur change l'outil manuellement, puis la machine palpe automatiquement la longueur. Le programme attend que tu confirmes avant de reprendre.

T1 M6    ; Outil 1 (fraise de 6 mm)
M3 S18000
G43 H1   ; Appliquer l'offset de longueur de l'outil 1

Refroidissement : M7, M8, M9

M7   ; Brouillard (mist coolant) — petit jet d'air + gouttelettes
M8   ; Arrosage (flood coolant) — jet d'eau/huile continu
M9   ; Arrêter le refroidissement
Sur cette PrintNC, M7 et M8 contrôlent des relais câblés sur la carte FlexiHAL. M8 peut être branché sur un souffleur d'air pour évacuer les copeaux sans mouiller la pièce.

Offsets de longueur d'outil : G43, G49

Quand tu changes d'outil, le nouvel outil n'a pas la même longueur. G43 dit à la machine de tenir compte de cette différence pour que Z0 reste au même endroit sur ta pièce.

G43 H1   ; Appliquer l'offset de longueur mémorisé dans le slot H1
G43 H0   ; Offset nul (outil de référence)
G49      ; Annuler l'offset de longueur
Sur cette PrintNC, le palpeur automatique met à jour H automatiquement après chaque M6. Tu n'as donc jamais à écrire G43 manuellement si tu utilises le changement d'outil standard.

Cycles de perçage : G81, G83, G80

G81 — Perçage simple (descente d'un coup, remontée)

G81 X10 Y10 Z-15 R2 F150   ; Percer à X10 Y10, profondeur -15 mm, plan de dégagement R=2 mm
G81 X30 Y10                  ; Percer un 2ème trou (même profondeur et F)
G80                           ; Annuler le cycle de perçage

G83 — Perçage par débourrage (descend par paliers, remonte pour évacuer les copeaux — essentiel pour l'aluminium)

G83 X10 Y10 Z-20 R2 Q3 F100
; Z-20 = profondeur finale
; R2   = plan de dégagement (remonte à Z=2 entre chaque passe)
; Q3   = profondeur de chaque passe (3 mm à la fois)
; F100 = avance en mm/min
G83 X40 Y10   ; Idem sur un 2ème point
G80           ; Annuler

Pause et fin de programme : M0, M1, M2, M30

M0    ; Pause inconditionnelle — le programme s'arrête, attend CYCLE START
M1    ; Pause optionnelle (active seulement si "OPT STOP" est coché dans l'interface)
M2    ; Fin de programme (réinitialise les modes G-code)
M30   ; Fin de programme + retour au début du fichier (équivalent à M2 en pratique)
**Astuce** : mettre un `M0` avant un changement d'outil manuel pour avoir le temps de changer la fraise calmement. `M0` avec un commentaire c'est encore mieux :
```
M0 (Changer pour fraise 3mm et reprendre)
```

Temporisation : G4

G4 P2.5   ; Attendre 2.5 secondes (utile après M3 pour laisser la broche monter en vitesse)

Divers utiles

G28 — Retour à la position de référence (définie dans la config LinuxCNC, souvent X0 Y0 Z0 machine)

G28 Z0   ; Monter Z à sa position de référence avant tout (sécurité)

F et S — Changer vitesse d'avance et de broche en cours de programme

F1200      ; Changer l'avance à 1200 mm/min (sans autre mouvement)
S20000     ; Changer la vitesse broche à 20000 tr/min (sans la relancer)
M3 S20000  ; Relancer la broche à la nouvelle vitesse

Commentaires : entre parenthèses, ignorés par la machine

G0 X0 Y0   (retour à l'origine pièce)
M5         (arrêt broche — on a fini)

Tableau récapitulatif

CodeRôleExemple
G0Déplacement rapideG0 X0 Y0 Z5
G1Déplacement en travailG1 X50 F800
G2Arc sens horaireG2 X20 Y0 R10 F400
G3Arc sens anti-horaireG3 X0 Y20 R10 F400
G4TemporisationG4 P1.5
G10Définir WCSG10 L2 P1 X0 Y0 Z0
G17Plan XY (défaut)G17
G20Unités poucesG20
G21Unités mmG21
G28Retour référenceG28 Z0
G43Offset longueur outilG43 H1
G49Annuler offset outilG49
G53Coordonnées machineG53 G0 Z0
G54–G59Origines pièceG54
G80Annuler cycle perçageG80
G81Perçage simpleG81 X10 Y10 Z-15 R2 F150
G83Perçage débourrageG83 Z-20 R2 Q3 F100
G90Mode absolu (défaut)G90
G91Mode relatifG91
M0Pause programmeM0
M2 / M30Fin de programmeM30
M3Broche sens horaireM3 S18000
M4Broche sens anti-horaireM4 S8000
M5Arrêt brocheM5
M6Changement d'outilT2 M6
M7BrouillardM7
M8ArrosageM8
M9Arrêt refroidissementM9

Exemple complet : début de programme type PrintNC

%
; Fraisage d'un contour sur bois — fraise 6mm 2 dents
G21 G90 G17       ; mm, mode absolu, plan XY
G54               ; Utiliser l'origine pièce 1
G53 G0 Z0         ; Monter Z au maximum machine (sécurité)
T1 M6             ; Outil 1 : fraise 6mm
G43 H1            ; Appliquer l'offset de longueur
M3 S20000         ; Broche à 20000 tr/min
G4 P3             ; Attendre 3s que la broche monte en vitesse
G0 X0 Y0          ; Aller à l'origine pièce
G0 Z2             ; Descendre à 2mm au-dessus de la pièce
G1 Z-3 F300       ; Plonger à -3mm à 300 mm/min
G1 X100 F1200     ; Usiner le premier côté
G1 Y50            ; Deuxième côté
G1 X0             ; Troisième côté
G1 Y0             ; Retour au départ
G0 Z10            ; Dégagement
M5                ; Arrêt broche
G53 G0 Z0         ; Z au maximum
G53 G0 X0 Y0      ; Retour origine machine
M30               ; Fin de programme
%

Exemple complet : perçage de 3 trous dans l'aluminium

%
G21 G90 G17
G54
G53 G0 Z0
T2 M6             ; Foret 5mm
G43 H2
M3 S3000          ; Vitesse lente pour le perçage alu
G4 P2
G0 X10 Y10        ; Se positionner au-dessus du 1er trou
G0 Z2             ; Dégagement à 2mm
G83 Z-12 R2 Q2 F80  ; Perçage débourrage : profondeur 12mm, passes de 2mm
X30 Y10           ; 2ème trou (même paramètres)
X50 Y30           ; 3ème trou
G80               ; Fin du cycle de perçage
G0 Z10
M5
G53 G0 Z0
M30
%