Guida al piatto autolivellante della Stampante 3D

Modificare il firmware e la meccanica di una stampante 3D per rendere il piatto autolivellante è una procedura abbastanza semplice e ci toglie il problema di dover controllare (o livellare) il piatto ogni volta che togliamo il vetro e lo rimettiamo. La procedura che segue è valida per una stampante che lavori con un firmware Marlin o derivati. L’occorrente per eseguire la modifica: un piccolo mini-interruttore come quello per l’end-stop dell’asse z, al limite potete smontare e usare quello (tanto non servirà più), un piccolo servomotore che faccia almeno 90° di spostamento, un piccolo cavallotto (jumper) per schede elettroniche, qualche cavetto elettrico lungo come quelli dell’hot-end, qualche piccola vite.

Prima di cominciare è necessario sapere come e dove fissare il nostro tastatore (composto da servo e mini-interruttore) ed eventualmente stampare o costruirci il supporto per esso; degli ottimi progetti con modelli 3D scaricabili li possiamo trovare su thingiverse. Fatto questo tiriamo i cavi elettrici e facciamo i collegamenti. autoBedLevelLo schema nell’immagine si riferisce ad una scheda elettronica Ramps 1.4 ; il servo andarà attaccato sulla porta servo della vostra scheda, per la ramps il primo servo va attaccato sul connettore servo più a sinistra se guardate la scheda come in figura. Per alimentare i servo (tutti) con i 5 v necessari dovete fare il ponticello con il cavallotto (jumper) tra il pin VCC e 5v vicino al pin PS, si trova alla sinistra dei connettori servo. Lo switch invece dovrà essere attaccato sempre su Z-MIN come lo switch classico, quindi disconnettete quello originale e connettete quello del tastatore auto costruito.

Passiamo al firmware, con l’editor di Arduino caricate il firmware Marlin ed andate alla scheda Configuration.h, tutto quello che dovete modificare si trova qui. cercate queste due righe:

//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
//#define Z_PROBE_REPEATABILITY_TEST  // Delete the comment to enable (remove // at the start of the line)

Decommentate la prima e se volete anche la seconda servirà poi per testare la meccanica dell’auto bed level e anche della vostra stampante. Cercate poi questa riga nella sezione degli end stop:

#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.

e mettete false al posto di true, vi tornerà utile per tarare il tastatore, ma alla fine di tutta la procedura non scordatevi di rimettere true, altrimenti rischiate di rompere il piatto durante il normale utilizzo della stampante. Più avanti spiegherò nel dettaglio a cosa serve. A questo punto dovete solo settare il servo per il movimento del tastatore, andate in fondo alla schermata di Configuration.h  e troverete la sezione servo:

//#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command
.
.
.
//#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
//#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0} // X,Y,Z Axis Extend and Retract angles

Per ora limitatevi a decommentare le tre linee che vedete qui sopra, lasciate i valori come sono. A questo punto caricate il FW nella stampante (sempre con l’editor di arduino) e andiamo a iniziare il setting. Per il setting potete usare un software di slicing come per esempio Repetier-host, che nella sezione “Controllo manuale”, consente di inviare comandi G-code direttamente alla stampante. Se di solito usate un altro software l’importante è che possiate inviare i comandi in modo diretto. La prima cosa da fare è provare se funziona il servo con il comando M280 P0 S{angle}
Esempio M280 P0 S90
M280 è il comando per muovere un servo, P0 è la porta alla quale abbiamo collegato il servo sulla Ramps, ce ne sono quattro ma la numerazione parte da 0 quindi, P0 – P1 – P2 – P3, infine S è l’angolazione alla quale vogliamo far posizionare il nostro servo. A questo punto dovete trovare per tentativi l’angolo in cui il tastatore è retratto e quello in cui la probe può toccare il piano. Diciamo solo per esempio che con 10° è retratto e 105° è esteso. Segnatevi questi valori che poi dovrete mettere nel FW. Ritraete il tastatore con il comando M280 P0 S10 (se 10° è il vostro angolo per la posizione retratta). Date il comando G28 X0 Y0, cosi farete solo la home di X e Y, poi spostatevi in un punto del piano (magari quello centrale) segnandolo con un pennarello. Scendete lentamente di Z fino a far toccare il nozzle al piano, utilizzate sempre il metodo del foglio di carta. Ecco che in questo caso vi tornerà utile il fatto che avete messo in false l’end-stop nel firmware, la stampante andrà anche in Z negativo fate molta attenzione.
Una volta che avrete trovato il punto esatto del contatto del nozzle con il piano (il foglio è bloccato) alzatevi di 0.1 (foglio libero), dopo di che date il comando G92 X0 Y0 Z0. Questo comando azzera gli assi in quel punto, infatti su Repetier vedrete i valori 0 su tutti e tre gli assi. Ora alzate in Z abbastanza da poter permettere al tastatore di poter scendere senza sbattere contro il piano e avendo ancora circa 5 mm di distanza da quest’ultimo, scrivetevi di quanto avete dovuto alzarvi, date il comando M280 P0 S105 e il tastatore scende. Ora spostate di X e Y in modo che il tastatore coincida sul punto evidenziato precedentemente con il pennarello e cominciate a scendere con la Z. Appena siete vicini al piano, cominciate a scendere di 0,1 alla volta fino a quando non sentirete il click dello switch, date il comando M119 per verificare l’avvenuta chiusura di quest’ultimo. Ora date il comando M114 che vi restituirà le coordinate X Y Z tipo: X:1.1 Y:-20 Z:3.8, segnatevi questi valori e torniamo al firmware. La prima cosa da fare è mettere i due valori per il servo che abbiamo trovato all’inizio, quindi nella riga:

#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0}

andremo a metter i due valori

#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 105,10}

Bene ora torniamo alla sezione autobed level. Mettiamo in queste righe i tre valori di X Y e Z, ma invertiti di segno, mi raccomando invertite il segno. Per X 1 diventa -1 e cosi via…. Questi sono comunemente chiamati valori di offsets, i valori di X e Y devono essere numeri interi, senza virgola, mentre quello della Z (ovviamente) no.

// Offsets to the probe relative to the extruder tip (Hotend - Probe)
  // X and Y offsets MUST be INTEGERS
  #define X_PROBE_OFFSET_FROM_EXTRUDER -1      // Probe on: -left  +right
  #define Y_PROBE_OFFSET_FROM_EXTRUDER 20      // Probe on: -front +behind
  #define Z_PROBE_OFFSET_FROM_EXTRUDER -3.8     // -below (always!)

Questi valori diranno al firmware l’offset il tastatore e il nozzle…
Ora dobbiamo definire il modo di sondare il piano, con una griglia o con dei punti prefissati, io preferisco la griglia ma potete fare come meglio credete. La griglia è definita da questa riga:

#define AUTO_BED_LEVELING_GRID

Se questa riga non è commentata allora significa che dovremmo dirgli come è composta la nostra griglia. Innanzitutto diamo i valori dei quattro angoli della griglia.

// set the rectangle in which to probe
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 185
#define BACK_PROBE_BED_POSITION 185
#define FRONT_PROBE_BED_POSITION 15

Il punto più a sinistra, quello più a destra, quello più dietro e per finire quello più avanti. Poi di quante righe e colonne è formata la griglia:

#define AUTO_BED_LEVELING_GRID_POINTS 2

In questo caso sono due righe e due colonne, quindi i 4 punti sono esattamente i 4 angoli della nostra griglia. Se invece mettiamo 3, allora avremmo tre righe e tre colonne quindi 9 punti in tutto. Nel caso invece che non volgiamo la griglia e vogliamo definire dei punti a caso nel piano allora commenteremo la riga:

//#define AUTO_BED_LEVELING_GRID

A questo punto definiamo i punti:

#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20

Come vedete sono le coordinate di tre punti nel piano, possono essere ovunque, purché nel piano. I valori di questi punti cosi come quelli della griglia sono valori in cui il nozzle è nel piano, non vi preoccupate perché poi il fw terrà conto dell’offset. Quello che dovete tener conto è che se, per esempio, il tastatore è a destra del nozzle di 30 mm e voi volete fare il probe in un punto a 5 mm, il carrello dovrà andare a -25 (30-5) cosa impossibile, quindi state attenti ai valori che date. Per essere più sicuri potete con Repetier far scendere il tastatore spostarlo manualmente sul piano e segnarvi le coordinate delle quattro posizioni massime raggiungibili da inserire poi nella griglia.

Andiamo avanti:

#define Z_RAISE_BEFORE_HOMING 20       // (in mm) Raise Z before homing (G28) for Probe Clearance

Questa riga definisce di quanto si deve alzare in Z il nozzle per essere sicuri che il tastatore possa scendere, mettiamo il valore che avevamo trovato quando ci siamo alzati per permettere al tastatore di scendere… Immaginiamo il caso limite, ci troviamo con il nozzle proprio sul piatto quando diamo il G28 dovrà alzarsi di quel tanto che basta per far scendere il tastatore tamite il servo.

#define XY_TRAVEL_SPEED 8000         // X and Y axis travel speed between probes, in mm/min

Questo valore imposta la velocità di spostamento tra un probe e l’altro, espresso in mm al minuto, però in nessun caso supererà mai la vostra velocità massima impostata nel Firmware. Se per esempio avrete impostato per X e Y un feedrate di 100, visto che questo è un valore espresso in mm al secondo, la massima velocità sarà 100 * 60 quindi 6000 mm/min, anche se impostato a 8000 più di 6000 non andrà.

#define Z_RAISE_BEFORE_PROBING 20    //How much the extruder will be raised before traveling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS 8  //How much the extruder will be raised when traveling from between next probing points

Questi due valori invece impostano di quanto si deve alzare la Z prima del primo probe e poi tra un probe e il successivo. Come il precedente, il primo valore serve a far si che il nozzle, nel caso limite, dal piatto si alzi per permettere al tastatore di scendere con facilità, quindi impostatelo sempre di qualche mm in più. Il secondo invece è tra il primo e gli altri, visto che già con il primo sa a che altezza ci troviamo basta quel poco a far si che la sonda si possa ritrarre e riscendere.

#define PROBE_SERVO_DEACTIVATION_DELAY 300

Questo valore imposta dopo quanto tempo il servo non viene più alimentato, in modo da rimanere rigido durante la fase di probing (espresso in millisecondi).

#define Z_SAFE_HOMING

Questo serve a far si che il fw sappia che non si può iniziare l’auto bed level se non si è fatto prima la home di X e Y, in più tramite una formula successiva viene calcolato il centro del piatto per fare il probe appunto al centro, nel caso si faccia solo G28.

Fatto tutto ciò rimettiamo a posto la linea dove avevamo messo false e rimettiamo true:

#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.

Carichiamo nuovamente il firmware nella stampante e verifichiamo il tutto.
Prima di tutto proviamo il comando G28. Se tutto è stato fatto alla perfezione, la stampante farà prima la home di X e Y, poi si sposterà al centro del piatto, si alzerà di 20 (il valore impostato in: #define Z_RAISE_BEFORE_HOMING 20) abbasserà il tastatore e scenderà fino al click dello switch, dopo di che ritrarrà di nuovo la sonda. Ora proviamo a vedere se è tutto ok diamo il comando G1 Z10 F3000 e il nozzle andarà a 10 mm dal piatto. Scendiamo fino al raggiungimento del piano se lo raggiunge, sempre con il metodo del foglio, esattamente a zero allora abbiamo fatto tutto bene. Se invece lo raggiunge prima dello zero o dopo dovremmo fare delle piccole modifiche al fw. Se lo raggiunge prima, per esempio già a 0,2 è sul piatto significa che l’offest di Z è troppo alto di 0,2 quindi dobbiamo togliere 0,2 al valore che avevamo impostato:

#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.8

Se invece a 0 non raggiunge il piatto significa che l’offset di Z è troppo basso dovremmo aggiungere qualcosina… Se è tutto ok passiamo alla seconda fase. Prima di tutto diamo il comando G28 X0 Y0 e poi il comando G29, a questo punto dopo la home di X e Y la sonda comincerà a fare il suo lavoro o nella griglia o nei punti decisi. Bene ora nel profilo di stampa del nostro slicer non ci resta che aggiungere il comando G29 allo script del codice iniziale per fare in modo che prima dell’inizio di ogni stampa venga livellato il piatto.

PS ricordate che l’autolivellamento del piatto va bene per piccole correzioni, se il piatto è molto storto la stampa verrà comunque perché il livellamento funziona anche con un grande errore, ma le geometrie del pezzo stampato non saranno più in squadra.

19 Risposte a “Guida al piatto autolivellante della Stampante 3D”

  1. Ciao Diego, sto seguendo la tua Guida per usare un endstop come autolivellamento del piatto, io ho una scheda Mks gen 2z v1.1 volevo chiederti se anche su questa scheda devo fare lo stesso il cavallotto tra 5v e vcc.
    T faccio questa domanda perché memtre nella ramps 1.4 basta mettere il jumper, nella mia scheda dovrei mettere un filo più lungo. Spero ad una tua risposta e per il momento T tingrazzio tantissimo.

    1. Ciao, scusa per il ritardo nel risponderti.
      Mi dispiace molto ma ho un po’ di esperienza solo con la scheda ramps, ti consiglio di cercare in qualche forum dove si discutono le caratteristiche tecniche della scheda che utilizzi tu.
      Anche il firmware Marlin ormai è molto più aggiornato della versione che utilizzavo io, in elettronica e informatica il tempo è tiranno e io sinceramente non ho più tempo di star dietro a tutti i miei impegni.
      Ti auguro di risolvere il problema.

  2. ciao diego, sono qui a disturbarti nuovamente

    la stampante era ok, poi un giorno l’ho smontata per montare un nuovo frame.
    dopo averla riassemblata mi sono trovato il carrello scorrere a sx durante la home, mentre io ho l’endstop a dx
    cosi in DIR ho messo -1 e di conseguenza x min
    ora fa la home bene, ma mi stampa i pezzi al contrario , in effetto mirror
    all inizio quando tutto funzionava DIR era 1 e l’end stop su x max
    ho invertito qualcosa nel rimontare il tutto?

    altra cosa quando il carrello andava a sx non si fermava ma continuava a sbattere a fine corsa, un mio amico mi ha detto che probabilmente le dimensionio del piatto in marlin sono sbagliate

    grazie

    1. Ciao,
      dopo il riassemblaggio, sempre se non hai cambiato anche il motore passo-passo o il suo orientamento; l’unica cosa che mi viene in mente è che hai collegato al contrario il cablaggio, ma non sono sicuro che uno stepper funzioni anche con polarità invertita. Non ho tempo in questi giorni di controllare le specifiche di uno stepper, ma se cerchi su internet sicuramente in qualche forum di elettronica trovi se uno stepper funziona o no anche collegato al contrario. Per quanto riguarda il fatto che sbatte:
      1) se c’è il microinterruttore di finecorsa, deve fermarsi contro il microinterruttore, altrimenti c’è qualcosa che non va
      2) se la stampante non è collegata al PC, quasi sicuramente ha ragione il tuo amico, nel firmware è stata impostata una misura più lunga di quanto in realtà sia il piatto, tieni conto anche dell’offset tra tastatore ed estrusore
      3) se la stampante è collegata al PC, e stai facendo degli spostamenti in manuale o stampi da PC; sia con CURA che con REPETIER, anche in questi software devi impostare il tipo di macchina collegata e le dimensioni del piatto

      1. ciao, risolto l’inghippo dei pezzi speculari, era il motore x che andava al contrario, invece di invertire i cavi , ho cambiato una impostazione in marlin che cambia la polarità ora funziona tutto
        grazie mille e scusa x il disturbo

  3. ho visto ora non è il piede che si blocca, tocca nel letto quindi non si alza abbastanza dal piano, ma allora xche se resetto si alza il giusto?
    provero ad alzarlo piu del dovuto x vedere se cosi risolvo

  4. ciao proverò a spegnere

    altro problema quando lancio una stampa il piedino scende e invece di arrivare dritto a 90gradi si ferma a 75, questo succede al lancio di ogni stampa , i dati in marlin sono esatti infatti se uso il gcode m280 va alla perfezione il bello è che se premo il reset sull’arduino rilancio la stampa e allora il piede scende a 90 gradi.

  5. ciao diego, ho smontato la stampante per mettere un nuovo telaio e ora dopo averla montata ho questo problema:

    se stampo un pezzo alto per es 10cm a fine stampa l’estrusore rimane all’altezza 10.e fin qui ok
    se lancio una nuova stampa la stampante fa la home , poi si alza di x e manda giu il piedino, poi inizia a scendere,
    in teoria deve scendere fin a quanto lo switch del piedino non arriva al piatto
    e qui arriva il problema, infatti dopo essere sceso di circa 5/6cm il piedino si ritrae come se fosse arrivato al piatto
    x adesso risolvo facenbdo scendere l’estruoisore in manuale per poi lanciare la stampa
    sai cosa può essere?
    grazie mille in anticipo

    1. Ciao,
      hai ragione anche a me succede la stessa cosa se lancio più stampe consecutivamente, e non rifà neanche il livellamento del piatto probabilmente perché tiene in memoria i valori del primo livellamento (ma se io ho tolto il vetro per rimuovere il pezzo che aveva stampato prima sarebbe il caso di rifarlo). Purtroppo non ho trovato soluzioni, credo sia un problema del firmaware a cui nessuno ha mai messo mano. Io ho risolto con un trucco semplicissimo: dato che stampo praticamente sempre da scheda SD, tra una stampa e l’altra spengo la stampante per qualche minuto (in modo che memoria e correnti parassite se ne vadano), poi riaccendo e lancio la nuova stampa. Mi spiace non poterti aiutare di più, puoi fare una ricerca su qualche forum dedicato, se trovi una soluzione fammelo sapere.
      Cordiali saluti.

  6. ciao. allora sto facendo il test del g28 solo che:
    appena accendo la stampante il tastatore scende
    poi faccio g28, si sposta verso il centro scende ma il tastatore siccome è gia giu si ritrae e l estrusore chiaramente arriva al piatto e devo staccare .
    quindi ho provato ad accendere, il tastatore scende ,lo rimando su, poi g28, l’estrusore si sposta al centro, il tastatore scende e al click si ferma, pero poi non si ritrae

    come mai quando accendo la stampane o la connetto al pc il tastatore scende?

      1. No, se il servo funziona il collegamento è giusto altrimenti non si muoverebbe proprio. Quando accendi la stampante il tastatore deve posizionarsi in orizzontale o più in alto, quando dai il G28 si sposta al centro del piatto e il tastatore scende in posizione verticale.
        Penso che potresti aver invertito i valori di angolazione nella linea del firmware:
        #define SERVO_ENDSTOPS_ANGLES {0,0 0,0 170,80}
        Nel mio caso il valore 170 è tastatore esteso in verticale, e 80 tastatore ritratto.

        1. ok grazie ora ci siamo, ho solo altre due piccole domande :

          1 )quando faccio g28 si sposta al centro del piatto all altezza che gli ho dato per fare scendere il tastatore, il tastatore scende fa click poi risale un po e riscende per il secondo click, poi si ritrae, ma si sritare senza salire quindi sforza perche è a contatto con il piatto, nopn dobrebbe risalire di un po prima di ritrarsi? spero di essermi spiegato

          2) non ho capito come definire i 4 punti del testatore, tu hai scritto 15 185 185 15, non ho capito x dare un angolo non deve avere x e y?

          grazie

          1. no, il tastatore non si solleva, si ritrae subito, purtroppo nel firmware non è previsto. Io uso un microinterruttore che come terminale ha una linguetta con una rotellina all’estremità per ovviare a questo problema. I 4 punti se fai il livellamento automatico con il metodo a griglia non servono, i valori 15 185 185 15 sono le distanze dai bordi del piatto, i primi due sull’asse X, i secondi sull’asse Y, in pratica definisci un quadrato con la massima misura dove sarà tastato il piano, questo sarà suddiviso in automatico in righe e colonne in base alla griglia che imposti (nell’esempio della guida 2).

  7. Ciao, mi sono bloccato, quando inviò il codice G92 x azzettare gli assi non succede niente, uso repetier .quando inviò g92 x0 y0 z0 gli assi nkn si azzerano, solo il g92 nkn funziona

    1. Ciao,
      anche a me è capitato una volta, non so se dipende dal firmware o da Repetier. La mia soluzione è stata annotarmi le quote vecchia maniera (su un foglietto di carta). Dovresti avere “0” scritto in rosso nella casella dell’asse Z (in Repetier), perché quando scendi in negativo dopo aver fatto gli zeri la quota negativa non viene segnata in Repetier. Quindi riepilogando sei con l’estrusore a contatto del piatto, alzati sull’asse Z quel tento che basta per far scendere il tastatore, vedrai che la quota nella casella dell’asse Z (in Repetier) comincia ad aumentare, fai scendere il tastatore con il comando M280, abbassati in Z (la quota nella casella diminuisce) fino a quando senti il clic del microinterruttore, verifica con il comando M119 la chiusura di quest’ultimo, nel log di Repetier (in basso) quando il microinterruttore è chiuso il feedback sarà “TRIGGERED” mentre quando è aperto il feedback è “OPEN”. Procedi per tentativi alzando e abbassando l’asse Z di un decimo alla volta, e verificando di volta in volta l’avvenuta chiusura del microinterruttore così da essere il più preciso possibile. Fatto questo quando sei nella condizione “TRIGGERED” segnati la quota visualizzata nella casella dell’asse Z di Repetier, questa è la quota da mettere nel firmware con il segno negativo davanti. Le quote di X e Y non sono altrettanto importanti, puoi procedere per differenza sempre prendendo nota delle quote che vedi nelle caselle di Repetier, ma puoi anche misurarle con un righello, come ho detto non sono così importanti, millimetro più millimetro meno vanno bene.
      Buon lavoro e fammi sapere

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.