Costruire una stampante 3D – [PARTE 6] Taratura finale della stampante
In questa ultima fase sarà utile seguire i video di JG “Complete Initial Setup & Configuration – Step by Step” e ““, ed il di Tom’s 3D. Ovviamente andremo ad illustrare la procedura di taratura in maniera estremamente dettagliata, inserendo anche le parti non presenti all’interno dei sopracitati video. Ulteriori contenuti di approfondimento verranno segnalati all’interno dell’articolo.
In questa ultima parte utilizzeremo i seguenti software:
- Pronterface. E’ un software gratuito che servirà a controllare la stampante durante la fase di taratura. Da questo programma si può comandare la stampante, inviare comandi gcode, avere un terminale per la lettura di feedback dal microcontrollore, caricare file gcode da stampare. Molte cose possono essere fatte dal display LCD della stampante, tuttavia in questa fase è molto utile potersi interfacciare tramite questo software tramite una connessione USB al controllore Arduino (https://www.pronterface.com/).
- Software di slicing. Il software di slicing serve a convertire un modello 3D in formato STL in istruzioni per la stampante (file gcode). Pronterface include già un programma gratuito chiamato Slic3r, in alternativa potete scaricare l’altro famoso slicer gratuito Cura (https://ultimaker.com/it/software/ultimaker-cura).
Per quanto riguarda strumenti e materiali avremo bisogno di:
- Filamento in PLA
- Calibro digitale
- Righello metallico, possibilmente senza “margini”
- I soliti attrezzi: pinza, brugole, cutter, ecc.
Per scaricare Pronterface andate alla pagina download del sito e scegliete la versione “file bianario” per Windows e Mac OS.
Poi, in base al vostro sistema operativo, scegliete “Printrun Slic3r” se volete anche la versione con il software di slicing, altrimenti scegliete la versione semplice “Printrun 2017”.
Il file zip che scaricherete andrà decompresso e all’interno troverete l’eseguibile di Pronterface. Non è richiesta nessuna installazione.
Scaricate lo slicer Cura dalla pagina software, cliccando sul pulsante blu potrete scegliere la versione Windows, Mac OS e Linux.
L’installazione e configurazione potrà essere fatta con comodo al termine della configurazione della stampante.
Prima di procedere è consigliabile posizionare tutti i componenti della stampante nella loro posizione mediana: estrusore al centro dell’asse X, asse X a circa metà altezza dell’asse Z ed il piatto in posizione centrale. Per quanto riguarda il sensore di prossimità, inizialmente sarebbe preferibile montarlo in linea con l’ugello, in modo da evitare che quest’ultimo possa urtare il piatto causando dei danni, ci sarà modo di regolare la posizione del sensore più avanti.
Per prima cosa ricontrolliamo i cablaggi, sopratutto quelli di alimentazione, poi colleghiamo l’alimentazione generale ed accendiamo la stampante. Come visto al termine del 4° capitolo dovreste vedere accendersi: il display LCD, Arduino, la ventola estrusore, l’eventuale ventola sull’elettronica e azionando i finecorsa dovreste vedere accendersi i rispettivi led. Il led del sensore di prossimità dovrebbe essere acceso e avvicinando la punta di un cacciavite alla sua estremità dovreste vedere che si spegne.
A questo punto è possibile collegare anche il cavo USB della scheda Arduino al vostro computer ed avviare il software Pronterface. Vi consigliamo di tenere aperta anche la schermata dell’IDE Arduino per poter apportare modifiche e correzioni alle impostazioni del firmware.
Le aree principali dell’interfaccia di Pronterface sono, da sinistra a destra:
- Connessione alla scheda Arduino, il pannello di movimentazione degli assi, il controllo temperature ed il controllo dell’estrusore.
- La parte centrale in cui è possibile caricare file gcode per essere visualizzati e stampati.
- Il terminale con la riga di comando.
Colleghiamoci alla scheda elettronica scegliendo la porta COM corretta, lasciando invariato il valore della velocità di comunicazione (250000). Se avrete selezionato la porta corretta riceverete una serie di informazioni nel terminale (vedi figura precedente). La porta COM può essere ricavata tra le periferiche di sistema al momento della connessione USB.
Configurazione finecorsa
Inviando il comando M119 nel terminale è possibile leggere lo stato dei finecorsa.
SENDING:M119 Reporting endstop status x_min: open y_min: open z_min: open
Si dovrebbe leggere che tutti i 3 finecorsa sono “open”. Spostando il piatto e l’estrusore nella posizione in cui si attivano i finecorsa, dando nuovamente il comando M119 si dovrebbe leggere il seguente risultato.
SENDING:M119 Reporting endstop status x_min: TRIGGERED y_min: TRIGGERED z_min: TRIGGERED
Per attivare il finecorsa dell’asse Z (sensore induttivo) bisogna avvicinare alla punta blu qualcosa di metallico (es. cacciavite).
Se al primo tentativo i finecorsa non sono “open” bensì “TRIGGERED”, bisognerà tornare nel file configuration.h ad invertire la logica di funzionamento dei finecorsa. Nel nostro caso dovremmo cambiare solo i valori dei finecorsa X e Y.
#define X_MIN_ENDSTOP_INVERTING true // da modificare in FALSE o viceversa #define Y_MIN_ENDSTOP_INVERTING true // da modificare in FALSE o viceversa
Una volta effettuate le modifiche si può compilare e caricare il firmware modificato.
Attenzione: Arduino può essere collegato solo ad un software alla volta, quindi prima di caricare il nuovo firmware bisogna:
- scollegarsi da Pronterface,
- caricare il nuovo Firmware,
- ricollegarsi a Pronterface solo dopo che il caricamento è stato completato.
Direzione dei motori
In questa fase verificheremo che i motori si muovano nella direzione corretta, per farlo muoveremo gli assi con il pannello di movimentazione. In questa prima fase è bene capire come funziona il pannello evitando di inviare comandi che in questa fase potrebbero causare danneggiamenti di componenti.
In questa fase non bisogna attivare i pulsanti con l’icona con la casina che inviano i componenti nella posizione di Home. Ogni asse può essere spostato di scostamenti positivi e negativi di diversa entità:
- L’asse Z può essere spostato di 0,1 mm (1 decimo di millimetro), di 1 mm o di 10 mm.
- Gli assi X e Y si possono muovere di 0,1 mm , di 1 mm, di 10 mm o di 100 mm.
Per una migliore comprensione, ogni valore è contrassegnato da una gradazione di grigio diversa. Nell’immagine precedente, per una maggiore comprensione, abbiamo riportato in blu i valori negativi di spostamento. Ad esempio, se clicco la porzione bianca del settore -X mi sposterò di -0,1 mm, se clicco la porzione più scura del settore +Y mi sposterò di 100 mm.
Per iniziare è bene spostarsi di 0,1 mm, una verificata la corretta direzione di movimento si può eventualmente aumentare.
Partiamo con X ed Y posizionati manualmente a metà del loro range di spostamento, come riferimento consideriamo di guardare la stampante frontalmente:
- Asse X. Cliccando +X ci si sposta da sinistra verso destra, cliccando -X ci si sposta verso il finecorsa a sinistra.
- Asse Y. Cliccando +Y il piatto si sposta in avanti, cliccando -Y ci si sposta indietro verso il finecorsa.
Per quanto riguarda Z, è bene che l’estrusore sia sopra al piatto di qualche centimetro ed è bene ricontrollare che i connettori dei due motori Z siano collegati alla RAMPS nello stesso verso in modo da evitare che si muovano in direzioni opposte. Anche in questo caso muovetevi di piccoli scostamenti:
- Asse Z. Cliccando +Z ci si sposta verso l’alto, cliccando -Z ci si sposta verso il basso.
Se uno o più assi si muovono nella direzione sbagliata, le opzioni per correggerli sono due:
- invertire il connettore del motore che si muove nel verso sbagliato,
- modificare il verso di rotazione nel firmware.
Nel secondo caso si devono modificare i valori da FALSE a TRUE o viceversa, rispettivamente ai motori di cui si vuole invertire il verso di rotazione.
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way. #define INVERT_X_DIR false #define INVERT_Y_DIR false // true #define INVERT_Z_DIR false
Spostandosi poco sotto nel file configuration.h, verifichiamo che siano decommentati MIN_SOFTWARE_ENDSTOPS e MAX_SOFTWARE_ENDSTOPS, ovvero le funzioni che ci impediscono di spostarci oltre il limite minimo dei finecorsa e lo spostamento massimo impostato nel firmware. Probabilmente bisognerà tornare a disattivare MIN_SOFTWARE_ENDSTOPS per tarare il sensore induttivo dell’asse Z.
// Min software endstops curtail movement below minimum coordinate bounds #define MIN_SOFTWARE_ENDSTOPS [...] // Max software endstops curtail movement above maximum coordinate bounds #define MAX_SOFTWARE_ENDSTOPS
Calibrazione P.I.D.
Verso la fine del prossimo step ci sarà bisogno di iniziare a mettere in temperatura l’ugello ed il piatto di stampa, quindi è bene effettuare la taratura del controllo PID in questa fase. Nel capitolo precedente abbiamo velocemente accennato a cosa serve, ovvero a far si che le temperature di stampa impostate vengano mantenute costanti e senza oscillazioni. Il PID consiste in 3 costanti (Kp, Ki e Kd) che vengono ricavate con una procedura automatica di riscaldamento (PID autotune), l’operazione andrà effettuata separatamente per ugello e piatto (inizialmente a temperatura ambiente). Una taratura PID assente o non ben configurata potrebbe causare l’interruzione della fase di riscaldamento o l’interruzione di stampe con l’errore: “Heating failed PRINTER HALTED Please reset“.
Iniziamo la calibrazione del PID estrusore inserendo nel terminale di Pronterfece il seguente comando gcode M303 E0 C8 S220. Il significato del comando consiste in:
- Eseguire PID autotune (M303)
- E0 (l’estrusore principale)
- C8 (8 cicli di taratura)
- S220 (temperatura di taratura di 220°)
Abbiamo impostato la temperatura a 220° pensando di andrà principalmente a stampare filamenti in PLA o PETG, quindi sarebbe necessario dare il comando M106 s200 prima di avviare la calibrazione PID dell’estrusore. Questo comando serve ad attivare la ventola frontale che fa fluire aria nel fan duct allo scopo di raffreddare il materiale depositato durante la stampa, tipicamente utilizzata per stampe in PLA e talvolta in PETG, in questo caso il parametro S200 sta ad indicare la velocità della ventola al 75% (il massimo è 255). Nel caso si voglia stampare altri materiali tipo l’ABS sarà necessario ricalibrare il PID in condizioni diverse (es. a temperatura più alta e senza ventilazione sul pezzo). In linea generale la calibrazione PID andrebbe rifatta ogni volta che cambiano le condizioni di temperatura/ventilazione. La calibrazione PID per l’estrusore con ventola accesa consisterà quindi nell’invio sequenziale dei seguenti comandi gcode nel terminale.
M106 s200 M303 E0 C8 S220
Col il primo comando si sentirà partire la ventola, con il secondo inizierà una procedura che durerà qualche minuto, al termine del quale riceverete i 3 parametri da copiare ed incollare nel file configuration.h del firmware.
// PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h #define DEFAULT_Kp 32.53 #define DEFAULT_Ki 3.31 #define DEFAULT_Kd 79.95
La ventilazione frontale può essere spenta con il comando M107.
Per quanto riguarda la calibrazione PID del piatto di stampa la procedura è identica, il comando gcode da inviare in questo caso è M303 E-1 C8 S70 (piatto E-1, temperatura di 70°C). Al termine della procedura bisognerà copiare ed incollare i 3 parametri nel configuration.h del firmware, nell’apposita sezione riguardante il PID dell piatto.
// PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h #define DEFAULT_bedKp 1021.85 #define DEFAULT_bedKi 201.17 #define DEFAULT_bedKd 1297.62
Una volta terminate le modifiche al firmware ci si deve scollegare da Pronterface e caricare il nuovo firmware.
Configurazione dell’area di stampa
L’area di stampa è lo spazio in cui effettivamente è possibile stampare. Potete verificare facilmente che se posizionate X e Y nella posizione di Home (a contatto con i finecorsa), guardando la stampante frontalmente, l’ugello di stampa è fuori dal piatto. Questo significa che la posizione di Home non coincide con le origini del nostro spazio disponibile per la stampa, quindi bisogna andare a definire quanto sono distati dai finecorsa le coordinate di origine dell’area disponibile per la stampa. In questa fase bisogna anche considerare la leggera sporgenza delle 4 viti di fissaggio del piatto di stampa, bisogna fare in modo che l’ugello o la sonda induttiva non le vadano ad urtare in nessun modo. In questa fase potrebbe essere molto utile seguire anche il (minuto 16 circa).
Per iniziare bisogna collegarsi a Pronterface e disattivare i motori (motors off). Non potendo fare ancora l’operazione di homing (tutti gli assi a Home), dovremo spostare manualmente tutto l’asse Z verso il basso, in modo che l’ugello sia vicino al piatto. L’asse X e Y vanno a toccare i rispettivi finecorsa, considerando la vista frontale della stampante come riferimento, la nostra area di stampa (tratteggio blu dell’immagine che segue) deve avere origine nell’angolo in basso a sinistra del piatto di stampa. Fatte le dovute premesse, bisogna andare a misurare di quanto è sfasato l’ugello in X e Y rispetto l’origine dell’area di stampa (0,0), nonché origine del volume di stampa (0,0,0).
A sinistra dell’immagine è rappresentato l’intero piatto di stampa in cui il tratteggio blu indica l’area effettiva di stampa. A destra c’è il particolare dell’angolo del piatto in cui va misurato l’offset tra l’ugello nella posizione di Home e l’effettiva origine dell’area di stampa.
Fatte le misurazioni del caso andiamo a modificare il firmware alla voce Travel limits after homing.
// Travel limits (mm) after homing, corresponding to endstop positions. #define X_MIN_POS -5 #define Y_MIN_POS -10
I numeri sono negativi perché rispetto alla nostra origine di stampa (0,0,0), il finecorsa è ad X=-5 mm e ad Y=-10 mm.
Prima di procedere bisogna attivare la direttiva Z safe homing (per completezza inseriamo anche la descrizione), in questo modo l’homing dell’asse Z verrà fatto solo dopo aver effettuato l’homing di X ed Y.
// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area. // // With this feature enabled: // // - Allow Z homing only after X and Y homing AND stepper drivers still enabled. // - If stepper drivers time out, it will need X and Y homing again before Z homing. // - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28). // - Prevent Z homing when the Z probe is outside bed area. #define Z_SAFE_HOMING
A questo punto proviamo a mandare in Home l’asse X, poi Y con i comandi del pannello di Pronterface (pulsante giallo home X, pulsante viola home Y).
Attenzione: prima dell’homing di Z, assicuratevi che la sonda induttiva non sia troppo alta rispetto all’ugello, e tenete una mano sull’interruttore di alimentazione nel caso in cui qualcosa non funzioni e l’ugello vada ad urtare il piatto di stampa. Per stare sul sicuro vi consigliamo di posizionare la sonda induttiva allo stesso livello dell’ugello.
Fatte le opportune verifiche si può fare l’homing di Z (pulsante verde home Z), dopodiché si può provare a mandare tutti e 3 gli assi insieme in Home cliccando il pulsante bianco con l’icona della casa. L’operazione è visibile al (minuto 22 circa). Se l’homing viene effettuato correttamente potete provare a farlo anche da terminale con il comando gcode G28.
A questo punto, dopo aver effettuato l’homing degli assi, tramite il comando gcode G0 XYZ andremo a posizionare l’ugello all’origine dell’area di stampa che abbiamo appena configurato. Se l’ugello è nella posizione corretta e non ha urtato le viti di supporto del piatto possiamo procedere oltre.

Volendo verificare la posizione attuale dell’ugello si può inviare il comando gcode M114 che ce la fa visualizzare sul terminale.
SENDING:M114 X:0.00 Y:0.00 Z:0.00 E:0.00 Count X:0 Y:0 Z:0
A questo punto si può procedere con la configurazione dei limiti massimi dell’area di stampa.
Iniziamo dalla posizione di origine dell’area di stampa (0,0,0) appena trovata, e spostiamo l’asse X tramite Pronterface fino a quando l’ugello non raggiunge la posizione massima dal lato opposto del piatto (punto 2 dell’immagine precedente). Il primo spostamento potrà essere di 100 mm dopodiché sarà meglio spostarsi di 10 mm ed 1 mm per posizionarsi in maniera precisa. Per potersi spostare liberamente lungo gli assi è necessario che venga momentaneamente commentata (disattivata) la direttiva MAX_SOFTWARE_ENDSTOPS.
//#define MAX_SOFTWARE_ENDSTOPS
Con questa direttiva disattivata potremmo muoverci oltre il limite fisico e rischiare di danneggiare qualcosa, quindi è bene prestare attenzione.
Il valore di X massimo può essere letto dal display della stampante oppure dal terminale con il solito comando M114.
SENDING:M114 X:207.00 Y:0.00 Z:0.00
Nel nostro caso il valore di X_MAX_POS è di 207 mm.

Facciamo lo stesso per l’asse Y, quindi dalla posizione appena raggiunta di X massimo spostiamo il piatto in avanti (+Y) finché l’ugello non raggiunge l’angolo in alto a destra dell’area di stampa (punto 3 dell’immagine precedente).
Nel nostro caso Y_MAX_POS è di 195 mm
SENDING:M114 X:207.00 Y:195.00
Non ci resta che fare l’ultima misurazione per l’asse Z, terminata questa operazione avremo definito i limiti del volume di stampa. Da Pronterface muoviamoci con valori positivi di 10 mm alla volta fino a raggiungere la posizione massima, facendo attenzione che le chiocciole delle barre trapezie non urtino i supporti dell’asse Z.
Nel nostro caso Z_MAX_POS è di 190 mm.
Bisogna regolare anche lo Z_CLEARANCE_DEPLOY_PROBE, ovvero uno spazio di sicurezza affinché la sonda induttiva non urti il piatto o altri componenti della stampante. 4 mm sono sufficienti.
#define Z_CLEARANCE_DEPLOY_PROBE 4
A questo punto il valore di Z_MAX_POS deve essere decurtato del valore di 4 mm in modo che l’innalzamento di sicurezza impostato nello Z_CLEARANCE_DEPLOY_PROBE non causi un superamento del valore massimo raggiungibile dall’asse Z.
Il nuovo valore di Z_MAX_POS sarà di 186 mm.
Immaginiamo il caso limite di realizzare una stampa di 186 mm di altezza, riportando gli assi nella posizione di Home l’asse Z si alzerà di 4 mm per evitare che la sonda non possa in qualche modo urtare la stampa o altri componenti. Essendo lo spazio a disposizione lungo Z di 190 mm, ci sarà lo spazio sufficiente per muoversi di 4 mm sopra i 186 mm della stampa.
Ricavati tutti i valori massimi che delimitano il volume di stampa, torniamo a modificare il nostro file configuration.h per aggiornarlo.
Nella nostra versione di Marlin la X_MAX_POS corrisponde a X_BED_SIZE (dimenzione X del piatto), quindi impostiamo a 207 quest’ultimo parametro. Idem per Y_MAX_POS coincidente con Y_BED_SIZE (dimensione Y del piatto) che imposteremo a 195 mm. Infine impostiamo Z_MAX_POS a 186 mm.
// The size of the print bed
#define X_BED_SIZE 207
#define Y_BED_SIZE 195
// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS -5
#define Y_MIN_POS -10
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 186
A conclusione di questa parte ritorniamo alla direttiva MAX_SOFTWARE_ENDSTOPS per decommentarla (attivarla). In questo modo non sarà possibile muoversi oltre i limiti definiti sopra per i singoli assi.
#define MAX_SOFTWARE_ENDSTOPS
A questo punto si può compilare e ricaricare il firmware. Nel caso si verifichino degli errori di compilazione (come accade in questo al minuto 30 circa), verificate che i seguenti valori riguardanti l’area di lavoro della sonda induttiva siano inferiori limiti massimi di spostamento in X ed Y definiti poc’anzi.
#define LEFT_PROBE_BED_POSITION 23 #define RIGHT_PROBE_BED_POSITION 203 #define FRONT_PROBE_BED_POSITION 9 #define BACK_PROBE_BED_POSITION 184
Pote modificarli in caso di mancata compilazioni, verranno definiti più precisamente nella parte relativa all’autocalibrazione del piatto di stampa.
Importante da ricordare: ogni volta che si ricarica il firmware è necessario fare nuovamente l’homing di tutti gli assi.
Tornando a Pronterface, rifate l’homing, e verificate che gli assi non possano muoversi oltre i limiti impostati.
Livellamento automatico del piatto di stampa
La prima cosa da fare è quella di misurare accuratamente la posizione (offset) della sonda induttiva rispetto all’ugello all’interno dello spazio tridimensionale XYZ. Definire lo spazio di manovra del sensore è fondamentale per poter configurare il livellamento automatico del piatto di stampa. L’immagine che segue dovrebbe chiarire come vanno effettuate le misure: la vista da sopra mostra le distanze X e Y sul piano (immagine di sinistra), la vista laterale mostra la misura della distanza rispetto l’asse Z (immagine di destra).
Nel nostro caso il sensore è spostato a destra dell’ugello di 23 mm in X ed è arretrato di 9 mm in Y (si può misurare con un righello). Per quanto riguarda Z impostiamo nel firmware un valore conservativo di 2 mm, verrà affinato successivamente con una procedura specifica. Al momento la sonda è ancora posizionata a livello dell’ugello, come consigliato più volte precedentemente.

Tali valori vanno impostati nel file configuration.h nella parte in cui è visibile il seguente schema.
/** Z Probe to nozzle (X,Y) offset, relative to (0, 0). X and Y offsets must be integers. In the following example the X and Y offsets are both positive: #define X_PROBE_OFFSET_FROM_EXTRUDER 10 #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 +-- BACK ---+ | | L | (+) P | R <-- probe (20,20) E | | I F | (-) N (+) | G <-- nozzle (10,10) T | | H | (-) | T | | O-- FRONT --+ (0,0) */
La schematizzazione riportata nel firmware è molto spartana ma efficace: guardando la stampante frontalmente abbiamo la nostra origine dell’area di stampa (0,0) in basso a sinistra, al centro c’è l’ugello (N) e la sonda (P). Essendo la sonda spostata indietro (back) e a destra (right) dell’ugello, le due distanze misurate sopra (23 mm e 9 mm) avranno segno positivo (+).
Andiamo a scrivere i valori misurati nel firmware sotto il sopracitato schema.
#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // X offset: -left +right [of the nozzle] #define Y_PROBE_OFFSET_FROM_EXTRUDER 9 // Y offset: -front +behind [the nozzle] #define Z_PROBE_OFFSET_FROM_EXTRUDER 2 // offset: -below +above [the nozzle]
Come già anticipato, il valore Z_PROBE_OFFSET dovrà essere affinato successivamente, al fine di ottenere un offset che ci permetta di avere l’ugello nella giusta posizione rispetto al piatto di stampa (se l’offset scende avviciniamo l’ugello al piatto, se l’offset aumenta allontaniamo l’ugello dal piatto).
Il prossimo passo è quello di impostare la procedura di calibrazione del piatto. Questa operazione serve a far si che la sonda possa andare a misurare la distanza piatto-ugello in diversi punti del piano di stampa, allo scopo di raccogliere i dati necessari al firmware per poter “fare i suoi calcoli” e mantenere questa distanza sempre costante su tutta l’area di stampa. Il piatto della stampante è fisso, non è perfettamente livellato (anche se in fase di montaggio si fa a attenzione a metterlo in piano il più possibile), quindi sarà il risultato della procedura di autocalibrazione a far si che gli scostamenti della distanza ugello-piatto vengano compensati su tutta la superficie. Volendo fare un esempio pratico: durante la stampa sembra che i motori dell’asse Z siano fermi e si muovano solo per alzare l’estrusore all’inizio di ogni nuovo strato, in realtà non è così perché i motori dell’asse Z si muovono sempre di scostamenti quasi impercettibili, proprio per compensare le diverse distanze piatto-ugello su tutta la superficie di stampa.
Spostiamoci nella parte centrale del file configuration.h (sezione bed leveling) dove sono definite le posizioni della sonda sul piatto di stampa.
// Set the number of grid points per dimension. #define GRID_MAX_POINTS_X 4 // default = 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X // Set the boundaries for probing (where the probe can reach). #define LEFT_PROBE_BED_POSITION 23 //15 #define RIGHT_PROBE_BED_POSITION 187 //170 #define FRONT_PROBE_BED_POSITION 9 #define BACK_PROBE_BED_POSITION 186 //170
I quattro valori xxxx_PROBE_BED_POSITION (left, right, front, back) definiscono i limiti massimi in X ed Y in cui si può muovere la sonda. Precedentemente abbiamo definito i TRAVEL LIMITS dell’ugello sul piatto di stampa, la sonda non potrà raggiungere coordinate superiori a questi limiti, motivo per cui precedentemente abbiamo menzionato a potenziali errori di compilazione del firmware. Nel nostro caso abbiiamo scelto i seguenti valori:
- Il limite sinistro è di 23 mm (ugello in posizione X=0 e sonda spostata a destra del suo offset).
- Il limite destro è di è di 187 mm.
- Il limite frontale è di 9 mm (ugello in posizione Y=0 e sonda spostata dietro del suo offset).
- Il limite posteriore è di 186 mm.
Volendo approfondire il tema in maniera più “scientifica”, vi segnaliamo: un molto interessante su “Probe Bed Position e Min Probe Edge“, ed un link ad una discussione sullo stesso argomento.
L’ultimo valore da impostare è il GRID_MAX_POINTS_X, ovvero il numero di punti di rilevamento che la sonda deve compiere all’interno dell’area di misurazione che abbiamo definito. Impostando il valore a 4 otterremo una griglia di misurazione di 16 punti (4 in X * 4 in Y) su tutto il piatto di stampa.
Carichiamo le nuove modifiche su Arduino e torniamo a Pronterface, diamo il comando di homing con l’apposito pulsante o tramite il terminale con il comando gcode G28.
A questo punto siamo pronti per lanciare il Mesh Bed Leveling, ovvero la calibrazione automatica della distanza piatto-ugello su 16 punti all’interno dell’area di stampa. Il comando gcode per eseguirlo è il G29.
SENDING:G29 Bilinear Leveling Grid: 0 1 2 3 0 +0.093 -0.017 -0.056 -0.051 1 -0.094 -0.169 -0.200 -0.205 2 -0.159 -0.201 -0.210 -0.187 3 -0.149 -0.166 -0.106 -0.026
Il risultato sarà una griglia di 16 valori che ci dicono quali parti del piatto sono più alte o più basse, a causa di un montaggio non perfettamente livellato o a causa di un piatto non perfettamente piano (concavo o convesso). Eventualmente si può mudificare il fissaggio del piatto di stampa al fine di ridurre eventuali scostamenti grossolani rilevati dal livellamento.
Configurazione sonda induttiva asse Z
Questa fase è molto delicata perché una errata configurazione potrebbe causare la collisione dell’ugello sul piatto di stampa. La prima operazione è quella di posizionare la sonda nella posizione corretta: circa 1 mm sopra la punta dell’ugello. Questa misura è il limite massimo, è consigliabile stare al di sotto di 1 mm, l’importante è che la sonda sia più in alto rispetto all’estrema punta dell’ugello.

Per posizionare la sonda correttamente avremo bisogno di libertà di movimento lungo l’asse Z, in particolare avremo bisogno di poterci abbassare con l’asse Z al di sotto dello zero. Per potersi muovere sull’asse negativo dell’asse Z bisogna disattivare la direttiva MIN_SOFTWARE_ENDSTOPS commentandola nel firmware, questa funzione andrà riattivata al termine della configurazione. In questa fase può tornare utile il solito che stiamo tenendo come traccia (minuto 44 circa), in aggiunta vi consigliamo anche la visione di questo in cui vengono date molte più spiegazioni tecniche e la procedura viene eseguita passo passo con estrema chiarezza.
// Min software endstops curtail movement below minimum coordinate bounds //#define MIN_SOFTWARE_ENDSTOPS
Disattivata la protezione bisognerà: ricollegarsi a Pronterface, fare homing e fare il mesh bed leveling. Questa è la procedura da seguire ogni volta che si fanno modifiche alla configurazione della sonda induttiva. Fatto questo muoviamo verso il centro del piatto l’estrusore (tasto centrale rosso nei controlli di Pronterface) mettiamo sul piatto un comunissimo foglio di carta A4 e muoviamoci con valori di Z negativi (prima di 1 mm poi di 0,1 mm) fino a quando non sentiamo che, muovendo il foglio, la punta dell’ugello gratta su di esso. Controllate anche che in questa posizione la sonda stia rilevando il piatto, solitamente la sonda ha un led interno rosso che al rilevamento della superficie metallica si spegne, in questa situazione il led deve essere spento.



Adesso bisognerà definire il valore negativo di Z, per conoscerlo possiamo guardare il display della stampante oppure digitare il comando M114 nel terminale.
Il nostro terminale segna -2,24 mm, quindi tornando al file di configurazione e modifichiamo lo Z_PROBE_OFFSET_FROM_EXTRUDER che avevamo preimpostato a 2. Il nuovo valore sarà la somma tra 2 e (-2,24) che è uguale a -0,24. Per ogni iterazione successiva andremo a sottrarre o aggiungere (in base al segno della misurazione) il nuovo valore al precedente.
#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.24
Fatta questa prima impostazione torniamo in Pronterface, rifacciamo homing e mesh bed leveling, ed andiamo a verificare se l’impostazione è corretta.
Attenzione: al primo tentativo è consigliabile tenere la mano sull’interruttore dell’alimentazione perché una configurazione errata causerebbe una collisione potenzialmente dannosa tra ugello e piatto!
Dovremo abbassare Z fino a sentire l’ugello che gratta sul foglio senza bloccarlo. Il valore corretto può essere ricavato con qualche interazione.

Questa calibrazione dovrà essere affinata ulteriormente perché la sonda induttiva presenta una sensibilità diversa con il piatto freddo o caldo. La misurazione “a caldo” prevede il riscaldamento di piatto ed ugello a temperature di esercizio. Nel che abbiamo segnalato ad inizio capitolo si può vedere effettivamente che viene effettuata una seconda calibrazione con ugello e piatto in temperatura. Potete riscaldare il piatto a 50° e l’ugello a 200° da Pronterface o da dal menù della stampante (Prepare >Preheat PLA > Preheat PLA).
In Pronterface basta impostare la temperatura e cliccare sul pulsante Set per avviare il riscaldamento, con il pulsante Off si interrompe. A fianco è presente un grafico che mostra l’andamento delle temperature, in rosso il piatto ed in blu l’ugello.
Importante: ricordiamo ancora una volta l’importanza di effettuare homing e mesh bed leveling ogni volta che si va a calibrare lo Z_PROBE_OFFSET_FROM_EXTRUDER.
Ricordiamo anche che la protezione software per impedire spostamenti di Z sotto lo zero è ancora disattivata (commentata), per il momento la lasciamo disattiva perché potrebbero essere necessari ulteriori aggiustamenti.
// Min software endstops curtail movement below minimum coordinate bounds //#define MIN_SOFTWARE_ENDSTOPS
E’ consigliabile riattivare la funzionalità dopo aver effettuato le prime stampe di prova.
Calibrazione dell’estrusore
Come visto per i motori X, Y e Z, anche in questo caso, come prima cosa dobbiamo verificare il verso di rotazione del motore dell’estrusore. Per farlo possiamo premere il pulsante Extrude da Pronterface.
In realtà premendo il pulsante non succederà nulla perché nel firmware è presente una protezione che impedisce l’estrusione a freddo (cold extrusion). Riteniamo abbastanza inutile andare a disattivare questa funzione nel firmware visto che dobbiamo riscaldare l’ugello per calibrare il motore dell’estrusore. Per la calibrazione dell’estrusore è consigliabile utilizzare un filamento in PLA.
Per prima cosa bisogna inserire il filamento nell’estrusore e farlo scorrere fin dentro la gola, poi si potrà attivare il riscaldamento dell’ugello impostandolo ad una temperatura compresa tra i 200° ed i 210° C.

Una volta raggiunta la temperatura impostata possiamo verificare il verso di rotazione del motore, impostiamo la lunghezza di filo estruso (Lenght) ad un valore più basso per non sprecare filamento, vanno bene 20 mm, poi premiamo sul pulsante Extrude. Guardando frontalmente la stampante dovremmo vedere il pignone godronato che gira in verso orario, quindi il filamento che entra nell’estrusore e fuoriesce dall’ugello. Nel caso in cui il pignone giri nel verso sbagliato ed il filamento fuoriesca, bisognerà invertire il verso di connessione del motore dell’estrusore sulla scheda RAMPS (metodo consigliato), oppure in alternativa modificarlo via firmware (da False a True o viceversa).
// For direct drive extruder v9 set to true, for geared extruder set to false. #define INVERT_E0_DIR false
Procediamo ora con la calibrazione degli step/mm dell’estrusore, valore calcolato nel capitolo precedente ed impostato provvisoriamente a 339,54.
#define DEFAULT_AXIS_STEPS_PER_UNIT { 200, 200, 800, 339.54 }
Per affinare il valore teorico bisognerà:
- Impostare l’ugello ad una temperatura compresa tra i 200° ed i 210° in base alle specifiche del produttore del filamento in PLA.
- Misurare con un righello una certa lunghezza di filo (es. 150 mm) partendo dall’ingresso dell’estrusore e marcarla con un pennarello.
- Inviare alla stampante il comando per estrudere la quantità di filo desiderata (ovvero 150 mm). Si imposta Lenght = 150 (mm) e si clicca il pulsante Extrude.
- Infine misurare col calibro quanto scarto c’è con la quantità filamento effettivamente estruso.

Al termine dell’estrusione, ad esempio, potrei constatare che l’estrusore abbia effettivamente estruso 145 mm o 155 mm. Bisognerà misurare con righello o calibro l’eccedenza o la mancanza di filamento estruso, dopodiché si applica una formula per ricalcolare il nuovo valore di step/mm in base al risultato ottenuto nella prova. La procedura dovrà essere effettuata più volte per raggiungere un valore più accurato possibile. La formula da applicare è la seguente:
EStep nuovo = Valore teorico / Valore misurato * EStep iniziale
In base a questa formula, con un valore iniziale di 339,54 step/mm, impostando di estrudere 150 mm di filo, con una estrusione reale di 145 mm (ad esempio), il nuovo valore di step/mm si calcolerebbe in questo modo:
EStep nuovo = 150 / 145 * 339,54 = 351,25 step/mm
L’estrusione effettiva di 145 mm significa che la marcatura del filo effettuata inizialmente a contrassegnare i 150 mm di filamento è rimasta fuori dall’estrusore di 5 mm. Quindi il valore di 145 mm è ricavato dai 150 mm iniziali, sottratti dei 5 mm non estrusi che abbiamo misurato.

Fatta questa prima iterazione si va a modificare il firmware con il nuovo valore.
#define DEFAULT_AXIS_STEPS_PER_UNIT { 200, 200, 800, 351,25 }
Dopo aver ricaricato il firmware ci si ricollega a Pronterface e si fa una nuova estrusione della stessa misura di filamento, si verifica la misura effettiva dell’estrusione e si applica di nuovo la formula per calcolare il nuovo valore.
In questa fase potreste imbattervi anche in alcuni problemi imprevisti, come ad esempio il pignone godronato che “scatta” e non avanza in modo lineare. Le cause principali potrebbero essere due :
- il sistema cuscinetto-molla che spinge il filo contro il pignone è troppo tirato, quindi il motore fa fatica a trascinare dentro il filo. Fate attenzione a non allentare troppo le molle perché poi avreste il problema opposto, ovvero la mancanza di aderenza necessaria affinché il pignone possa spingere il filo nell’hot end. La giusta pressione si ha quando il pignone lascia i segni della sua zigrinatura sul filamento senza però grattarlo.
- Nel caso in cui le molle del meccanismo siano alla giusta tensione, in questo caso gli “scatti” saranno da imputare al motore che “perde passi”, ovvero non ha abbastanza corrente per compiere il lavoro richiesto. In questo caso sarà necessario munirsi di cacciavite (possibilmente ceramico) e aumentare gradualmente la Vref del suo driver (come spiegato nel 4° capitolo riguardante l’elettronica). Questo problema è visibile in di Tom’s 3D (min. 58 circa).
Escludiamo l’ipotetico terzo caso, ovvero quello dell’ugello otturato, in quanto si suppone che in questa situazione tutta la componentistica sia nuova ed ancora inutilizzata.
Configurazione dello slicer
Prima di fare la prima stampa di test, abbiamo bisogno di configurare opportunamente il software di slicing per convertire i modelli 3D (in formato STL) in istruzioni GCODE da inviare alla stampante.
Aprite il software Cura e configurate una nuova stampante basandovi sul preset Prusa i3 MK2 (nel nostro caso) assegnandogli un nome a vostra scelta. In alternativa si può optare per una Prusa i3 generica o per una stampante custom.
Per il momento non consideriamo i Printhead Settings e Gantry height, sono necessari solo se si vuole stampare in modalità “one at a time“, tema che non approfondiremo in questa guida.
Le cose importanti da configurare sono:
- Le coordinate massime del volume di stampa (X, Y e Z).
- Il piatto di stampa di forma rettangolare e la presenza del riscaldamento.
- La tipologia di firmware, Marlin nel nostro caso.
- le procedure G-code da eseguire all’inizio ed alla fine di ogni stampa.
Soffermiamoci un attimo su queste ultime. Ogni volta che si avvia la stampa di un pezzo, ad esempio, avremo bisogno di fare l’homing, impostare il riscaldamento, calibrare l’autolivellamento del piatto, ecc. Di seguito la lista di istruzioni che abbiamo configurato sulla nostra macchina con i relativi commenti.
G21 ; impostare unità di misura in millimetri M104 S{material_print_temperature_layer_0} ; impostare l'hot end alla temperatura configurata nel gcode M140 S{material_bed_temperature_layer_0} ; impostare il piatto alla temperatura configurata nel gcode M190 S{material_bed_temperature_layer_0} ; attendere che il piatto abbia terminato il riscaldamento M109 S{material_print_temperature_layer_0} ; attendere che l'hot end abbia terminato il riscaldamento G28 ; eseguire l'homing G29 ; eseguire il mesh bed leveling M117 Printing... ; scrivere sul display il testo "Printing..."
La stessa cosa andrà fatta per le istruzioni da eseguire al termine della stampa.
M117 Print finished! ; scrivere sul display il testo "Print finished!" M104 S0 ; spegnere il riscaldamento dell' hot end M140 S0 ; spegnere il riscaldamento del piatto M107 ; spegnere la ventola del fan duct G1 X0 Y195; fare l'homing dell'asse X e portare avanti l'asse Y con il piatto M84 ; spegnere tutti i motori M117 Print finished! ; scrivere sul display il testo "Print finished!"
Infine, molto importante, bisogna configurare i parametri alla scheda extruder.
Cura è un software Ultimaker, azienda che produce stampanti 3D che utilizzano il filamento da 2.85 mm di diametro. Per questa ragione dobbiamo andare a modificare quel valore a 1,75 mm, misura più diffusa tra altre tipologie di stampanti. Impostate anche la misura del foro dell’ugello, solitamente è 0,4 mm. Il corretto settaggio di questi parametri è fondamentale per poter stampare.
A questo punto siamo pronti per fare lo slicing di un modello 3D e fare la prima stampa di prova.
In questa guida non c’è spazio per approfondire il tema dello slicing, potete trovare alcune informazioni basilari al capitolo 5.2 del nostro articolo “Conoscere il mondo della stampa 3D ad uso hobbistico in 6 mosse!”
La prima stampa potrà essere il classico cubo di calibrazione o la famosa barchetta di test “3D Benchy”, un esempio di parametri di base per stampe veloci potrebbero essere:
- altezza layer 0,2 mm
- 2 pareti (shell)
- 3 strati “bottom” e 4 strati “top” (bottom/top thickness)
- riempimento al 10% (infill)
- skirt di un paio di linee
- velocità bassa, 30-40 mm/s (speed)
Calibrazione EStep motori X,Y e Z
Eravamo giunti al momento fatidico della prima stampa di prova, in realtà non abbiamo ancora impostato il numero corretto di EStep espressi in step/mm per i motori X, Y e Z. In realtà si potrebbe già stampare, la calibrazione degli Estep in X, Y e Z ci consente di produrre oggetti dimensionalmente accurati. Cosa vuol dire nella Pratica? Se devo stampare un cubo di lato 20 mm, mi aspetto che la mia stampante lo stampi di 20 mm, con al massimo uno 0,1 mm di errore.
Gli EStep di X, Y e Z erano stati calcolati nel precedente capitolo.
#define DEFAULT_AXIS_STEPS_PER_UNIT { 200, 200, 800, 339.54 }
Per calibrarli si procede in modo simile a quanto visto per la calibrazione degli EStep dell’estrusore. La procedura è la seguente:
- Si stampa un cubo di lato 20 mm.
- A fine della stampa si misurano le reali dimensioni lungo gli assi Z, Y e Z.
La formula per calcolare il nuovo valore di EStep è identica a quella vista per l’estrusore.
EStep nuovo = Valore teorico / Valore misurato * EStep iniziale
Ad esempio, se il nostro cubo risultasse di 20,15 mm in X e di 19.85 mm in Y, i rispettivi nuovi valori sarebbero i seguenti:
EStep X nuovo = 20 / 20,15 * 200 = 198,51 EStep Y nuovo = 20 / 19,85 * 200 = 201,51
Questa operazione va effettuata diverse volte, prima per X ed Y infine per Z, facendo attenzione a prendere accuratamente le misure con il calibro. In rete ci sono tantissimi video su come effettuare questa operazione. In generale è bene misurare la faccia evitando che il calibro poggi sulla linea di base e sugli spigoli verticali, in quanto presentano rigonfiamenti che falserebbero la misura.

Per chiudere questa lunghissima guida vi salutiamo con il nostro primo cubo di test sfornato dalla stampante appena configurata.

Conclusioni ed approfondimenti
La stampante ora è pronta e funzionante ma il lavoro non è finito! Molti parametri all’interno del firmware possono essere affinati, ed anche lo slicing necessita di molte personalizzazioni per ottenere risultati sempre migliori. Ora sta a voi trasformare questo oggetto in una macchina precisa e performante. Di seguito vi mostriamo un esempio della qualità ottenibile lavorando solo sullo slicing, lavori realizzati con una stampante autocostruita costata all’incirca 150 euro.

Nella nostra realizzazione abbiamo apportato successivamente alcune modifiche strutturali atte ad irrigidire il telaio: abbiamo fissato la stampante su una base e montato dei rinforzi al frame su cui è montato l’asse Z.


Per quanto riguarda i miglioramenti successivi a livello di firmware e slicing, tra le cose più importanti segnaliamo: settaggio accurato di velocità, accelerazioni e Jerk, calibrazione del flusso di stampa (thin wall test), calibrazione della ritrazione (retraction). Mano a mano che stamperete oggetti sempre diversi vi troverete di fronte a “questioni e problemi” a loro volta diversi, specifici di ogni lavorazione, affrontarli vi permetterà di acquisire nuove conoscenze e migliorare sempre di più la qualità delle stampe.
La rete è piena di buonissimi tutorial, anche in italiano, con cui apprendere nuove nozioni e trovare soluzioni ai più comuni problemi di stampa. Inoltre ci sono tantissimi gruppi Facebook e Telegram all’interno dei quali si possono chiedere informazioni, consigli ed anche essere aiutati a comprendere e risolvere i problemi che incontrerete.
Buone stampe a tutti!