Il y a quelques années, j’ai eu une Elegoo Neptune 3 Pro, une imprimante 3D abordable au bon rapport qualité/prix (pour son époque du moins). J’aime beaucoup cette machine pour sa construction propre et solide, ainsi que les fonctionnalités qu’elle embarque et qui améliorent l’expérience d’utilisation quotidienne. Elle a notamment un plateau PEI amovible chauffant, un capteur de proximité pour l’axe Z, un écran tactile en couleur, deux moteurs d’axe Z synchronisés par une courroie, et j’en passe. En gros, je trouve que les choix faits sur cette machine sont très bons. Ah, et tout est open source aussi !
Bref, le logiciel embarqué dans ce type de machines à bas prix fonctionne tout à fait convenablement. Cependant, il existe un autre système qui a vécu une grosse vague de démocratisation récemment : Klipper. Par exemple, la Neptune 4 Pro en est équipée. C’est une petite révolution qui permet d’aller bien plus loin dans la configuration, la calibration et l’utilisation des imprimantes 3D. Je parle plus en détail des différences de logiciel dans la première partie du post.
Pour les imprimantes qui n’ont pas la chance de tourner nativement sous Klipper, il est possible d’en faire la conversion soi-même ! C’est l’objet de cet article. Je vais vous présenter ici comment j’ai réalisé cette conversion pour ma Neptune 3 Pro, avec la configuration générale à tous les modèles et des éléments plus spécifiques aux imprimantes d’Elegoo. Si vous voulez voir le résultat directement, je vous invite à jeter un œil à la partie utilisation. C’est parti !
La promesse de Klipper
Comme promis, je vais commencer par parler un peu du contexte et de la motivation de cette conversion.
Le prédécesseur : Marlin
Pendant longtemps, les imprimantes 3D ont eu pour logiciel Marlin. C’est le programme qui est contenu dans la carte mère de l’imprimante et qui gère moteurs, capteurs, interfaces, exécution des fichiers, etc. La raison de son adoption massive est simple : Marlin est libre, et peut tourner sur des microcontrôleurs économiques.
Beaucoup de constructeurs ont donc repris ce logiciel en le configurant et en l’adaptant pour leur matériel. C’est le cas par exemple pour l’Anet A6 que j’avais avant ou les Neptune en génération 3.
Cependant, comme ce logiciel est conçu pour de petits microcontrôleurs, il ne peut pas tout faire. Et c’est là que Klipper entre en jeux.
L’avènement de Klipper
Klipper remplace Marlin et va bien plus loin dans les fonctionnalités proposées. C’est possible puisque Klipper s’installe sur du matériel plus performant. La liste des bénéfices de ce logiciel est longue, c’est pourquoi je ne vais vous présenter que celles qui m’impactent le plus personnellement.
Tout d’abord, l’expérience utilisateur est bien meilleure : au lieu de devoir faire transiter les fichiers d’impression par une carte SD, un simple clique depuis le logiciel de tranchage lance l’impression. Tout est contrôlable et configurable à distance depuis une interface web. Cette possibilité seule justifie à mon goût l’installation de Klipper, tant c’est pratique. De plus, ce logiciel propose des fonctions améliorant la qualité des impressions, comme la compensation de résonance.
Comme je l’ai dit dans l’introduction, la conversion à Klipper se fait plutôt bien. Pour cela, il est nécessaire d’installer un ordinateur à une carte, comme un Raspberry Pi. Aver Klipper, toute la logique est gérée par le Raspberry, et le microcontrôleur originel de l’imprimante ne devient plus qu’une interface qui exécute les ordres de l’ordinateur.
La mise à niveau est donc facile : en soi, il ne suffit que de brancher une carte sur le port USB de l’imprimante. Un élément qui est tout-de-même à considérer et qui m’a bloqué pendant un certain temps est le support de l’écran. Les Neptunes ont un écran tactile en couleur vraiment bien et je ne voulais pas le perdre, faute de compatibilité. Heureusement, vous le verrez plus tard, il y a une solution à cela !
Installation
Partons donc sur l’installation de Klipper sur la Neptune 3 Pro.
Préparatifs
Avant de tout démonter, il y a quelques petites choses à préparer pour ne pas se retrouver bloqué lors de la conversion.
Logiciel
Tout d’abord, il faut préparer l’ordinateur à une carte. Pour ma part, j’ai utilisé un Raspberry Pi 4B mais d’autres modèles fonctionneront aussi. Le système d’exploitation (Linux) est installé sur une carte SD avec le logiciel de Raspberry Pi. Attention : je recommande d’utiliser une bonne carte microSD pour qu’elle tienne dans le temps (c’est du vécu, croyez-moi…).
On peut directement choisir dans l’interface de Raspberry Pi Imager le système MainsailOS qui aura déjà tout ce qu’il faut d’installé pour l’imprimante (dont Klipper) ! Il faut bien configurer le Wi-Fi et activer l’accès à distance par ssh.
Impressions
Je vais profiter de l’installation de Klipper pour ajouter une caméra à l’imprimante. En l’occurrence, j’ai choisi une Logitech C270 qui est très populaire pour cet usage et que l’on peut trouver pour 10 € sur Leboncoin. Elle s’attache ensuite sur l’axe Y avec ce modèle.

Pour le plateau, j’ai conçu deux butées qui permettent de le remettre en place très facilement en le gardant aligné. Les détails sont disponibles sur Printables.
Aussi, j’ai modélisé et imprimé deux fixations pour le capteur d’accélération. Ils nous seront utiles pour plus tard lors de la calibration. Une fois encore, vous pouvez retrouver les fichiers sur Printables !

J’ai utilisé un capteur MPU-6050 que j’avais d’un kit d’électronique. Il faut aussi prévoir un câble pour brancher le capteur au Raspberry. Nous allons justement l’installer dans la partie qui vient.
Réalisation
Les modifications vont être incorporées dans l’imprimante pour garder son esthétique intacte. Ainsi, il sera plus facile de la déplacer en évitant de casser quelque chose. Il faut quand même noter que c’est moins pratique en cas de problème !
Mise en place du Raspberry Pi
L’électronique de l’imprimante est accessible par le dessous, il faut donc la retourner pour bricoler.

Une fois ouvert, on accède à la carte mère d’origine. Par chance, il y a de la place pour notre Raspberry Pi.

Après l’avoir positionné, on le raccorde de toutes parts :
- l’alimentation : j’utilise un convertisseur 24 V à 5 V qui a une sortie USB-C en angle. Je l’ai raccordé directement à l’alimentation de l’imprimante. Aussi, il faut veiller à ce que le convertisseur puisse supporter la puissance demandée par le Raspberry (3A si je ne m’abuse) ;


- la carte mère : comme le port USB donne vers l’extérieur, j’ai soudé un cable USB dénudé d’un côté sur la carte directement. Ça revient au même, mais c’est juste plus propre ;

- l’écran : une fois de plus, j’ai repris les pistes de la carte mère. La communication se fait en UART, il faut donc le raccorder aux broches UART du Raspberry (voir une documentation) ;


- la caméra : simplement branchée en USB ;
- le câble pour le capteur de résonance : j’ai juste un bout qui sort de l’imprimante avec un connecteur. De cette manière, je ne mets le capteur que quand j’en ai besoin. Pour le MPU-6050, la communication se fait en I2C donc on le connecte aux broches I2C du Raspberry (voir la documentation de Klipper).

Une fois le tout installé, je recommande tester la connexion avant de refermer complètement la base (juste en la reposant à plat). Par exemple pour moi, c’est mainsailos.local, car j’avais défini le nom d’hôte (hostname) à mainsailos dans l’écriture de l’OS. Pour ma part, ça n’a pas fonctionné du premier coup. J’ai dû connecter une première fois le Raspberry en Ethernet pour faire toutes les mises à jour (depuis l’interface) avant que le Wi-Fi fonctionne.

Configuration
Klipper (le cœur du système)
Mise à jour du firmware
Avant toute chose, il faut mettre à jour le logiciel de la carte mère. Pour le moment, il y a Marlin dedans. Le but est de le remplacer par un programme très simple qui ne fait qu’exécuter les ordres envoyés par le Raspberry.
C’est très simple :
- Se connecter à l’imprimante en ssh :
ssh pi@mainsailos.local(adapter à votre nom d’utilisateur et nom d’hôte) ; - Aller dans le répertoire de Klipper :
cd ~/klipper/; - Lancer le menu de sélection du microcontrôleur :
make menuconfig;

- Compiler le nouveau programme de la carte mère :
make; - Renommer le fichier de sortie :
cp out/klipper.bin out/ZNP_ROBIN_NANO.bin; - Récupérer le fichier
ZNP_ROBIN_NANO.binsur une carte SD ; - Insérer la carte SD dans l’imprimante (à l’avant) et redémarrer l’imprimante ;
- Attendre quelques minutes ;
- Et voilà !
Vous verrez dans l’interface (il faut peut-être déjà avoir une configuration fonctionnelle, voir ci-dessous) si la connexion est bien établie entre le Raspberry et le microcontrôleur.
Je vous recommande de configurer l’accès aux fichiers de l’imprimante depuis votre gestionnaire de fichiers, ce sera utile dans plusieurs cas. Pour cela, il faut suivre les instructions de votre système d’exploitation (connexion en SSH).
Fichiers de configuration
À ce stade, Klipper est installé, mais pas configuré. Il est nécessaire de lui dire quels composants l’imprimante utilise, quelles sont ses caractéristiques physiques (dimensions d’impression, etc.) pour pouvoir fonctionner.
Comme on n’a pas besoin de réinventer la roue à chaque fois, j’ai utilisé la configuration assez avancée mais accessible d’un internaute. Elle est disponible sur Printables. Pour l’installer, il faut copier les fichiers dans le répertoire ~/printer_data/config/. Ensuite, on suit les étapes du fichier printer.cfg.
Normalement, après cela, vous aurez une imprimante fonctionnelle ! Il ne devrait plus y avoir d’erreur de Klipper. En plus de cette configuration de base, j’ai modifié quelques fichiers pour ajuster le comportement de l’imprimante à mes besoins :
default_probe.cfg:- macro
START_PRINT:- au lancement d’une impression, la buse doit être chauffée à 120 °C pile par défaut. J’ai modifié le script pour que ce soit 120 °C minimum, afin que si la buse soit déjà chaude, elle ne refroidisse pas pour chauffer de nouveau après ;
- désactivation du nivelage du plateau à chaque impression (réutilise la calibration enregistrée) ;
- macro
END_PRINT:- rétraction si la température le permet avant de se déplacer au point de parking ;
- macro
Voir les macros modifiées
[gcode_macro START_PRINT]
description: Print start GCODE to use in the slicer (not directly).
gcode:
{% set BED_TEMP = params.BED|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER|default(240)|float %}
{% set speed_limit = printer.configfile.settings.printer.max_velocity|float %}
{% set accel_limit = printer.configfile.settings.printer.max_accel|float %}
# set purge line values
{% set PURGE_LINE_X = printer["gcode_macro VARIABLES"].purge_line_x %}
{% set PURGE_LINE_START_Y = printer["gcode_macro VARIABLES"].purge_line_start_y %}
{% set PURGE_LINE_END_Y = printer["gcode_macro VARIABLES"].purge_line_end_y %}
{% set PURGE_LINE_Z = printer["gcode_macro VARIABLES"].purge_line_z %}
{% set PURGE_LINE_EXTRUSION = printer["gcode_macro VARIABLES"].purge_line_extrusion %}
{% set PURGE_LINE_FEEDRATE = printer["gcode_macro VARIABLES"].purge_line_feedrate %}
# set calibration and travel speed
{% set XY_SPEED = printer["gcode_macro VARIABLES"].calibration_xy_speed * 60 %}
{% set Z_SPEED = printer["gcode_macro VARIABLES"].calibration_z_speed * 60 %}
{% set ACCEL = printer["gcode_macro VARIABLES"].calibration_accel %}
SET_VELOCITY_LIMIT VELOCITY={XY_SPEED} ACCEL={ACCEL}
# preheat extruder at a minimum temperature for homing and preventing from cooling down if already hot
{% set current_temp = printer.extruder.temperature %}
{% set preheat_temp = current_temp if current_temp >= 120 else 120 %}
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={preheat_temp}
# set bed temperature
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={BED_TEMP}
### deep clean nozzle ###
# --> Uncomment the line below to use nozzle cleaning during the START_PRINT procedure.
#CLEAN_NOZZLE_BRUSH CLEANING_TEMP={EXTRUDER_TEMP}
# wait for bed temperature
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={BED_TEMP - 1} MAXIMUM={BED_TEMP + 1}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={preheat_temp - 2} MAXIMUM={preheat_temp + 2}
G90 # set absolute coordinates
G28 # home all
### adjust bed ###
# Check Z_TILT macro located in the main_macro.cfg for more info.
# --> Uncomment the two lines below to use z_tilt during the START_PRINT procedure.
#Z_TILT_ADJUST
#G28 Z
# load bed mesh
BED_MESH_PROFILE LOAD=default
### clean nozzle ###
# --> Uncomment the line below to use nozzle cleaning during the START_PRINT procedure.
#HEATWIPE_NOZZLE_BRUSH CLEANING_TEMP={EXTRUDER_TEMP}
# move to starting position
G1 X{PURGE_LINE_X} Y{PURGE_LINE_START_Y} F{XY_SPEED}
G1 Z{PURGE_LINE_Z} F{Z_SPEED}
# heat up nozzle
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={EXTRUDER_TEMP}
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={EXTRUDER_TEMP - 2} MAXIMUM={EXTRUDER_TEMP + 2}
# priming line in y-direction
G1 Y{PURGE_LINE_END_Y} E{PURGE_LINE_EXTRUSION} F{PURGE_LINE_FEEDRATE}
G92 E0 # extruder reset
G1 Z2.0 F{Z_SPEED} # raise z to travel to print-start-point
# set limits to printer limits
SET_VELOCITY_LIMIT VELOCITY={speed_limit} ACCEL={accel_limit}
[gcode_macro END_PRINT]
description: Print end GCODE to use in the slicer (not directly).
gcode:
# set park positon for x and y
{% set X_PARK = printer["gcode_macro VARIABLES"].end_print_x_park %}
{% set Y_PARK = printer["gcode_macro VARIABLES"].end_print_y_park %}
# calculate save lift position
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set current_z = printer.toolhead.position.z|float %}
{% if current_z < (max_z - 30.0) %}
{% set z_safe = 30.0 %}
{% else %}
{% set z_safe = max_z - current_z %}
{% endif %}
# set calibration and travel speed
{% set XY_SPEED = printer["gcode_macro VARIABLES"].xy_speed * 60 %}
{% set Z_SPEED = printer["gcode_macro VARIABLES"].z_speed * 60 %}
{% set ACCEL = printer["gcode_macro VARIABLES"].accel %}
SET_VELOCITY_LIMIT VELOCITY={XY_SPEED} ACCEL={ACCEL}
G91
# Retract if possible.
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E-2 F2100
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
# move z to safe position
G1 Z{z_safe} F{Z_SPEED}
# move to parking position
G90
G1 X{X_PARK} Y{Y_PARK} F{XY_SPEED}
M84 # turn off motors
M107 # turn off fan
M140 S0 # turn off bed heater
M104 S0 # turn off extruder heater
pause_resume_cancel.cfg:- macro
PAUSE:- désactivation du refroidissement de la buse (je n’utilise la pause presque que pour changer de filament donc je ne veux pas de refroidissement) : supprimer la ligne
M104 S{extruder_temp - 100};
- désactivation du refroidissement de la buse (je n’utilise la pause presque que pour changer de filament donc je ne veux pas de refroidissement) : supprimer la ligne
- macro
variables.cfg:park positions:variable_end_print_x_parkmise à0pour que la tête d’impression n’obstrue pas la vue de la caméra à la fin des impressions.
Calibrations
Configuré ne veut pas dire calibré ! L’imprimante devrait déjà fonctionner correctement à ce stade, mais Klipper nous offre bien plus. Je vais revenir ici sur quelques calibrations qui permettent d’aller à un niveau de précision supérieur.
Pour cette partie, j’ai suivi plusieurs tutoriels de référence, et notamment le fameux Elli’s print tuning guide. Pendant longtemps, je n’ai pas voulu m’en approcher en pensant que c’était un guide pour détraqués de la perfection. Ce n’est pas le cas. Ce tutoriel est en réalité très accessible et explique bien chaque étape pas à pas. Je vous recommande donc d’aller y jeter un œil. Je vais en reprendre quelques éléments ici, mais ce n’est que complémentaire.
Ajustements sur l’imprimante
La première étape avant de calibrer quoi que ce soit est de s’assurer que l’imprimante est en bonne condition physique. Pour cela, il y a quelques vérifications à faire : resserrer toutes les vis, régler les excentriques, graisser les vis sans fin, vérifier le parallélisme de l’axe X, nettoyer le plateau au liquide vaisselle (rien de mieux !).
Compensation de résonance
Le principe de la compensation de résonance est simple : mesurer comment l’imprimante vibre selon toutes les fréquences, pour que lors des impressions, l’imprimante les compensent. Cela permet d’obtenir de plus belles surfaces.

On mesure la résonance avec un accéléromètre fixé aux axes X et Y. L’installation physique est décrite dans la préparation. Il ne reste plus que la partie logicielle. Pour cela, il faut que le Raspberry Pi se comporte comme un microcontrôleur qui communique avec Klipper (oui, vous avez bien lu) puisque le capteur est branché en I2C dessus. Il suffit de suivre les étapes de la documentation de Klipper.
Ensuite, on modifie le fichier adxl.cfg pour y mettre :
[mcu rpi]
serial: /tmp/klipper_host_mcu
[mpu9250]
i2c_mcu: rpi
i2c_bus: i2c.1
[resonance_tester]
accel_chip: mpu9250
probe_points: 114, 117.5, 40Bien sûr, adaptez en fonction de cotre capteur avec l’aide de la documentation de Klipper. Il ne reste plus qu’à inclure ce fichier en décommentant (enlever le #) de la ligne [include adxl.cfg] dans printer.cfg.
Finalement, on peut effectuer la calibration avec les macros fournies : SHAPER_X et SHAPER_Y.
Une dernière chose : je ne laisse pas le capteur en place en permanence, donc je désactive sa configuration le reste du temps (dans printer.cfg : #[include adxl.cfg]).
Mainsail (l’interface)
Mainsail est l’interface web de l’imprimante. Elle est fournie avec MainsailOS (logique), mais il est à noter qu’il en existe d’autres. L’intérêt est de pouvoir contrôler l’imprimante depuis une interface graphique simple d’utilisation et depuis n’importe où.

Par défaut, Mainsail fonctionne très bien, mais je vous recommande de jeter un œil aux paramètres pour ajuster l’interface à vos envies. On peut notamment y configurer la webcam pour la remettre dans le bon sens. Vous pouvez aussi explorer ses pages pour en découvrir les possibilités.
Je n’ai pas grand-chose de plus à ajouter dessus, si ce n’est la page historique. Elle liste les impressions effectuées et fournit des statistiques que j’aime beaucoup, mais il est aussi possible de tenir un carnet de bord des maintenances. Plus particulièrement, on peut en programmer à des intervalles de temps ou d’heures d’impression. C’est pratique pour assurer un suivi et pas oublier de la bichoner !

OrcaSlicer (le trancheur)
Le trancheur est une étape à ne pas négliger puisque ses paramètres influent directement sur la qualité des impressions. Le meilleur trancheur à cette heure (dans mon cas en tout cas) est OrcaSlicer. Il est basé sur BambuStudio, lui-même basé sur PrusaSlicer (et lui-même basé sur Slic3r, oui ça fait beaucoup). Orca est donc construit sur du solide.
J’apprécie OrcaSlicer pour sa simplicité d’utilisation, entre les paramètres d’impression et la préparation des plateaux. Il dispose de plein de fonctionnalités qui simplifient la vie.
Pour en tirer le plein potentiel, je dois d’abord vous expliquer comment sont organisés les paramètres d’impression. En premier, il y a l’imprimante qui contient les informations de base (dimensions, etc.), les paramètres de l’extruder et d’autres éléments. À une imprimante, on associe une buse et un plateau.
Ensuite, il y a les traitements (ou process). Ceux-ci sont liés à l’imprimante et il y en a généralement un par hauteur de couche. Les traitements gèrent la qualité (nombre de parois, remplissage), les vitesses, les supports et d’autres détails. C’est vraiment ce qui va déterminer la construction du modèle 3D.
Enfin, il y a les filaments. OrcaSlicer contient une bibliothèque de filaments de plusieurs marques et de plusieurs matières dont les paramètres sont optimisés (en principe). Ils ne dépendent donc pas d’une imprimante directement. Cependant, il est bon de calibrer chaque filament pour sa machine avec quelques tests que nous allons voir.

Voilà, j’espère que vous aurez compris cette partie de théorie ; il est temps de passer à la configuration !
Profil d’imprimante et de process
Je me suis basé sur plusieurs sources : profil système d’OrcaSlicer, d’ElegooSlicer (basé sur Orca) et d’internautes pour trouver mes paramètres. Vous pouvez télécharger et importer les profils ici.
Libre à vous de les utiliser, de vous en inspirer ou de les modifier. Il y a tellement de paramètres que c’est difficile d’obtenir une combinaison parfaite ! Je serais heureux d’avoir vos retours dessus.
C’est dans la section imprimante aussi qu’il faut configurer la connexion à la machine. Pour cela, cliquez sur le bouton de wifi, et mettez l’IP de votre imprimante (elle est trouvable dans la page Machine de Mainsail, à la dernière ligne des infos de Charge Système).

Profil de filament
Ce sont pour les profils de filaments qu’il y a un peu plus de travail. Ici, on sélectionne un filament parmi la liste système pour le calibrer. OrcaSlicer propose des calibrations prêtes à l’emploi pour ne pas perdre de temps.

Personnellement, je ne teste que l’avance à la pression et le rapport de débit. La température devrait déjà être ajustée pour le filament choisi, et d’autres comme la rétraction ne sont nécessaires qu’en cas de défauts constatés. Allez voir la documentation d’OrcaSlicer pour plus d’informations.
Pour l’avance à la pression, on choisit le type motif PA. Il suffit d’imprimer le modèle généré (des paramètres spéciaux sont appliqués en arrière-plan) et voir le résultat. L’angle le plus pointu sans interstice entre les couches est le bon réglage (voir la doc. Orca). Le réglage est à enregistrer dans le profil du filament. Pour ma part, je renomme mon profil modifié avec Perso à la fin pour distinguer.

Le principe est un peu le même pour le facteur d’extrusion. Cette fois, on cherche le résultat qui donne la surface la plus lisse.
Ces calibrations sont à faire pour chaque matériau de chaque marque afin d’avoir une qualité tip-top. Après ça, c’est terminé ! Je vous invite à aller voir la partie utilisation si vous voulez en voir plus sur le sujet d’Orca.
Remise en place de l’écran d’origine
Je l’ai dit plus tôt : la compatibilité de l’écran était une condition indispensable à la migration de mon imprimante vers Klipper. Heureusement, la force de la communauté est là pour nous sauver.
Dans un premier temps, j’ai installé KlipperLCD qui permet d’utiliser son écran de Neptune 3 avec Klipper. Tout est bien expliqué quant à l’installation et ça fonctionne, mais dans ma quête du toujours mieux, je ne me suis pas arrêté là. Notamment, je savais que les écrans des Neptunes 3 et 4 étaient exactement les mêmes physiquement. Simplement, le logiciel de la série 4 est plus poussé pour les besoins de Klipper. L’idéal serait donc d’utiliser le logiciel de la 4 pour ma 3 sous Klipper.
C’est là que j’ai trouvé OpenNept4une qui modifie le logiciel des séries 4 pour en reprendre le contrôle total. Ils ont dû refaire eux-mêmes la connexion à l’écran… comme ce que j’ai besoin. J’ai donc modifié et installé ce programme sur ma série 3. Une adaptation a été nécessaire pour faire fonctionner certains éléments cassés, et pour avoir des traductions sur des personnalisations qui n’étaient qu’en anglais.
Pour l’installation, le câblage physique est le même qu’avec KlipperLCD. Il faut ensuite suivre les instructions du dépôt que j’ai publié. Tout ne fonctionne pas, mais ce qui l’est est propre.

Autres configurations notables
Home Assistant
Home Assistant peut ouvrir de nouvelles perspectives d’intégration de l’imprimante avec l’environnement. Grâce à une intégration externe, il est possible de surveiller et de contrôler l’imprimante depuis HA. Je vais vous présenter ici comment j’en tire parti.
Tout d’abord, j’ai un petit tableau de bord de surveillance dont je peux accéder à distance. Il est redondant avec Mainsail mais peut toujours servir.

Voilà la configuration de mon tableau qui est à adapter avec vos entités (attention, c’est long).
type: sections
max_columns: 4
title: Imprimante 3D
path: imprimante-3d
subview: true
sections:
- type: grid
cards:
- type: heading
heading_style: title
heading: Alimentation
icon: mdi:ethernet-cable
- type: shortcut
tap_action:
action: url
url_path: http://mainsailos.local
vertical: true
label: Mainsail
description: Accéder à l'interface
icon: mdi:tune-vertical-variant
- type: tile
entity: automation.arret_de_l_imprimante_a_la_fin_de_l_impression
name: Arrêt automatique
vertical: true
features_position: bottom
- type: grid
cards:
- type: heading
heading: Aperçu
heading_style: title
icon: mdi:eye-outline
- type: tile
entity: sensor.imprimante_3d_printer_message
name: État
vertical: false
features_position: bottom
grid_options:
columns: 12
rows: 1
- camera_view: live
fit_mode: cover
type: picture-glance
entities:
- entity: light.imprimante_3d_led_led_light
icon: mdi:lightbulb-outline
show_state: false
camera_image: camera.imprimante_3d_camera
title: Caméra
aspect_ratio: "4:3"
card_mod:
style: |
hui-image{
transform: rotate(-180deg);
}
- type: history-graph
entities:
- entity: sensor.imprimante_3d_bed_temperature
name: Lit
- entity: sensor.imprimante_3d_extruder_temperature
name: Extrudeur
title: Températures
hours_to_show: 6
max_y_axis: 250
fit_y_data: true
- type: tile
entity: button.imprimante_3d_home_all_axes
name: Maison
hide_state: true
vertical: true
features_position: bottom
grid_options:
columns: full
visibility:
- condition: state
entity: sensor.imprimante_3d_printer_message
state_not: unknown
- condition: state
entity: sensor.imprimante_3d_printer_message
state_not: unavailable
- type: grid
cards:
- type: heading
heading: Impression en cours
heading_style: title
icon: mdi:printer-3d-nozzle-outline
- type: tile
entity: sensor.imprimante_3d_filename
name: Fichier
icon: mdi:file-outline
vertical: false
features_position: bottom
grid_options:
columns: 6
rows: 1
- type: tile
entity: sensor.imprimante_3d_current_print_state
name: État
vertical: false
features_position: bottom
- camera_view: auto
fit_mode: cover
type: picture-glance
title: Aperçu
image:
media_content_id: https://demo.home-assistant.io/stub_config/kitchen.png
entities: []
camera_image: camera.imprimante_3d_thumbnail
- type: tile
entity: sensor.imprimante_3d_print_duration
name: Temps écoulé
icon: mdi:clock-outline
vertical: false
features_position: bottom
- type: tile
entity: sensor.imprimante_3d_progress
name: Avancement
vertical: false
features_position: bottom
- type: tile
entity: sensor.imprimante_3d_print_projected_total_duration
name: Durée totale
icon: mdi:flag-variant-outline
vertical: false
features_position: bottom
- type: tile
entity: sensor.imprimante_3d_print_eta
name: Heure de fin
icon: mdi:alarm
vertical: false
features_position: bottom
- type: tile
grid_options:
columns: 4
rows: 2
entity: button.imprimante_3d_pause_print
name: Pause
show_entity_picture: false
hide_state: true
vertical: true
features_position: bottom
- type: tile
entity: button.imprimante_3d_resume_print
name: Relancer
hide_state: true
vertical: true
features_position: bottom
grid_options:
columns: 4
rows: 2
- type: tile
entity: button.imprimante_3d_cancel_print
name: Annuler
hide_state: true
vertical: true
features_position: bottom
grid_options:
columns: 4
rows: 2
- type: tile
grid_options:
columns: full
entity: number.imprimante_3d_speed_factor
name: Vitesse d'impression
vertical: false
features:
- style: slider
type: numeric-input
features_position: bottom
visibility:
- condition: or
conditions:
- condition: state
entity: sensor.imprimante_3d_current_print_state
state: paused
- condition: state
entity: sensor.imprimante_3d_current_print_state
state: printing
- type: grid
cards:
- type: heading
heading: Statistiques
heading_style: title
icon: mdi:database-outline
- type: tile
entity: sensor.imprimante_3d_longest_print
name: Impr. plus longue
vertical: false
features_position: bottom
- type: tile
entity: sensor.imprimante_3d_totals_print_time
name: Temps total
icon: mdi:clock-star-four-points-outline
vertical: false
features_position: bottom
- type: tile
entity: sensor.imprimante_3d_totals_filament_used
name: Longueur de filament total
icon: mdi:radiobox-marked
vertical: false
features_position: bottom
- type: tile
entity: sensor.imprimante_3d_totals_jobs
name: Nb. d'impressions total
vertical: false
features_position: bottom
visibility:
- condition: or
conditions:
- condition: state
entity: sensor.imprimante_3d_current_print_state
state: paused
- condition: state
entity: sensor.imprimante_3d_current_print_state
state: printing
badges:
- type: shortcut
tap_action:
action: perform-action
perform_action: switch.turn_on
target:
entity_id: switch.alimentation_de_l_imprimante_3d
data: {}
icon: mdi:power-on
color: green
text: Allumer
- type: shortcut
tap_action:
action: perform-action
perform_action: script.arret_de_l_imprimante_3d
target: {}
icon: mdi:power-off
color: red
text: Éteindre
- type: shortcut
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.imprimante_3d_firmware_restart
data: {}
text: Redémarrage du firmware
color: blue
icon: mdi:restart
- type: shortcut
tap_action:
action: perform-action
perform_action: button.press
target:
entity_id: button.imprimante_3d_emergency_stop
data: {}
text: Arrêt d'urgence
icon: mdi:car-brake-alert
color: deep-orange
header:
card:
type: markdown
text_only: true
content: "# Imprimante 3D"
Là où Home Assistant est réellement intéressant, c’est pour le contrôle de l’alimentation. L’imprimante est branchée sur une prise connectée Ikea à 8 €. Comme c’est un ordinateur dedans, on ne peut pas couper le courant l’importe quand. Donc, grâce à HA, j’ai créé un script d’arrêt qui attend l’arrêt du Raspberry pour éteindre la prise. À cela, j’ai couplé une automatisation qui appelle ce script lorsque la connexion est perdue et que l’imprimante n’imprime pas (on n’est pas à l’abri d’une déconnexion wifi). Ainsi, je peux éteindre en un clic l’imprimante depuis son écran.
Importer le script :
L’automatisation de coupure du courant est très simple :

Toujours dans ce domaine de l’alimentation, j’ai créé une automatisation d’arrêt automatique de l’imprimante à la fin de l’impression en cours et après refroidissement. C’est très pratique par exemple si l’impression se termine la nuit ou lorsque je suis absent. J’ai un bouton sur l’interface pour activer ou désactiver cette automatisation.
Rapidement, j’ai aussi des automatisations qui annoncent à l’enceinte connectée lorsqu’une impression se termine ou lorsqu’elle est mise en pause parce que le capteur de filament a changé d’état (donc qu’il n’y a plus de filament).
Enfin, je pose juste ça ici, mais j’ai une automatisation qui désactive l’intégration Moonraker lorsque la prise connectée est éteinte (nécessite une extension). Cela évite des erreurs de Moonraker qui essaie de se connecter en permanence à l’imprimante éteinte.

Timelapse
Le timelapse est la dernière pépite en date que j’ai découverte. J’ai voulu tester ce que ça donnait avec la caméra fraichement installée.
J’utilise Crowsnest pour gérer toute la chaîne. Il suffit de suivre le tuto d’installation. J’ai été particulièrement surpris par l’intégration dans l’interface et la facilité d’utilisation. C’en est presque ridicule : au lancement d’une impression, on peut indiquer si l’on veut un timelapse de l’impression ou non. C’est tout : à la fin, on peut récupérer la vidéo.
Dans ma configuration, j’ai mis que l’imprimante devait s’arrêter à chaque couche au centre du plateau pour prendre la photo. Il est à noter que le timelapse cause quelques imperfections (des cheveux d’ange notamment) que l’on peut enlever.
Et voilà, je vous ai tout partagé des grandes lignes de Klipper pour la Neptune 3 Pro. Il ne reste plus qu’à voir l’utilisation quotidienne et vous saurez tout !
Utilisation
Tranchage
On part d’un fichier 3D, comme un STL. Dans OrcaSlicer, on l’importe et la première étape est de tout bien positionner sur le plateau. Il y a plusieurs outils très pratiques en haut de la vue pour faire des ajustements, et le clic droit ouvre aussi un menu très fourni. Après le positionnement, il y a trois grandes étapes à bien suivre à chaque fois :
- vérifier l’imprimante, la buse, le plateau ;
- le type de filament (éventuellement plusieurs si on change de couleur à une couche). J’aime bien aussi mettre la couleur du filament que je vais utiliser pour l’aperçu sur l’imprimante ;
- le profil de traitement. Ici, il faut éventuellement modifier quelques paramètres comme le remplissage, le nombre de parois ou encore la génération de supports.

Avec ces trois vérifications, on peut aller à l’aperçu et observer le résultat. Il faut toujours jeter un œil et penser aux problèmes qui pourraient subvenir (surplombs, risque de décollement, etc.). Enfin, on clique sur imprimer en haut à droite si le bon filament est déjà chargé.
C’est simple !
Impression
Je n’ai pas grand-chose à dire dans cette partie puisque tout se fait depuis le trancheur ! Simplement, l’interface de l’imprimante permet de surveiller que tout se déroule bien.

Conclusion
Pour conclure, je dirais cette conversion à Klipper est largement faisable, mais qu’elle prend du temps à réaliser pour obtenir un résultat propre.
Personnellement, j’en suis pleinement satisfait. J’ai toujours trouvé que la qualité d’impression de la Neptune 3 Pro était appréciable, mais Klipper m’apporte cette praticité d’usage qui est la bienvenue dans la réalisation de projets.
Cet article aura été long, mais comme d’habitude, je n’ai dit qu’une fraction de ce qu’il y a à dire sur le sujet. Je vous recommande vraiment de lire les documentations des divers modules pour tout comprendre en détail. N’hésitez pas à me demander des précisions ou quoi que ce soit d’autres en commentaires, j’y répondrai !

Laisser un commentaire