RepRap Prusa i3 #14: cominciamo con la calibrazione

Approfitto del fatto che la Prusa i3 sta stampando per scribacchiare qualcosa riguardo alla calibrazione della stampante stessa.

L’operazione di taratura è una cosa lunga, continua e molto spesso estenuante. Fatta di prove su prove.
Perchè uno può capire e arrivare a logica a tante cose, ma alla fine la macchina che si è costruito ci sorprenderà sempre! Si arriverà a volerla defenestrare.

Da dove cominciare?

La prima cosa che  ho dovuto fare è stata installare il firmware sulla scheda arduino clone.
Ci sono diverse scelte per quanto riguarda il firmware da installare. Io ho preso praticamente il primo  che ho trovato e cioè Sprinter. Ma ci sono tantissimi articoli sul web a riguardo. Con pro e contro di ogni firmware. Da quello che ho capito Sprinter rispetto a Marlin (altro firmware da poter usare) dovrebbe stampare meglio i perimetri (anche se non ho ma avuto modo di controllare la differenza).

Ci sono alcuni passi da seguire per installare il tutto sotto ambiente Windows (sotto Linux è un può più immediato), e per correttezza vi riporto la guida da cui ho preso i passi che ho seguito e che vi illustrerò.

NextDayReprap.co.uk

I passi che ho eseguito sono i seguenti:

  1. Scarichiamoci i driver per Arduino dal sito ufficiale
  2. Collegamento della scheda al pc tramite un cavo usb
  3. Il sistema operativo riconoscerà il nuovo dispositivo e tenterà di installarlo, ma senza riuscirci
  4. Arrivare a “Gestione dei dispositivi”, selezionare il dispositivo sconosciuto
  5. Aggiornare i Driver e cercare sul proprio pc i diver per l’installazione
  6. Selezionare Porta (com & LPT) come tipo di dispositivo e cercare su disco il file con i driver
  7. selezionare dalla cartella Drivers di Arduino il file Arduino Mega 2560 REV3.inf
  8. Dare sempre avanti fino al completamento dell’installazione
  9. Dopo l’installazione tornare in Gestione dei dispositivi e selezionare l’Arduino mega sotto la voce Porta (Com & LPT)
  10. Proprietà->Impostazioni della porta e nella voce bit per secondo selezionare 115200.

ok la parte base è fatta.

Ora dobbiamo installare tutto l’ambiente per poter lavorare con la scheda.
Il software per caricare il firmware sulla scheda è compreso nell’archivio che ci siamo scaricati dal sito ufficiale di Arduino (il file eseguibile chiamato appunto Arduino.exe).

Abbiamo bisogno di altro però, e cioè dell’Environment di Python.

  1. Prima di tutto ho installato Python 2.7.2
  2. Successivamente ho installato PYserial per Python (in questo caso la versione 2.5)
  3. Poi installazione di wxPython (la 2.8 unicode)
  4. Infine installazione di Pyreadline (versione 1.7)

Quello che ci serve ora è l’installazione di un Host Software per lanciare le nostre stampe e controllare la stampante. Ce ne sono diversi. Quello che ho scelto io e che uso tutt’ora è Repetier Host.

Ah mi ero dimenticato che si deve già aver scaricato il firmware, nel mio caso Sprinter.

Ok. Ora che si fa?

Si lancia Arduino.exe. Dal menù Tools/strumenti->Tipo di Arduino->Arduino Mega 2560.

Aprire il file Sprinter.ino  che altro non è che il file di progetto del firmware di Sprinter. il file che ci interessa è il Configuration.h. Questo file contiene tutti i dati che caratterizzano la macchina che stiamo andando a configurare.

I dati essenziali che ho impostato ve li riporto di seguito (naturalmente cambieranno se la macchina ha una configurazione diversa):

  • #define MOTHERBOARD 33 //indica che uso una ramps 1.4
  • #define THERMISTORHEATER 1 //indica il tipo di termoresistore (sensore per registrare la temperatura) che siamo usando per l’hotend. Da controllare che il tipo inserito sia corretto, altrimenti la temperatura letta sarà errata e rischiamo di fare casini!
  • #define _AXIS_STEP_PER_UNIT {80, 80, 4000,707} //indicano i passi per i motori. Nello specifico in ordine sono l’asse X, l’asse Y, l’asse Z e l’estrusore. Vi rimando a questo blog di Ivan Bortolin per spiegazioni più approfondite (e che non finirò mai di ringraziare! Il suo lavoro mi è stato utilissimo per riuscire ad essere operativo con la mia prusa i3!)
  • #define BAUDRATE 115200 //il valore che abbiamo impostato prima e che definirà la comunicazione tra pc e scheda Arduino.
  • i seguenti parametri definiscono se invertire la direzione di rotazione dei motori o meno
    • const bool INVERT_X_DIR = false;
    • const bool INVERT_Y_DIR = false;
    • const bool INVERT_Z_DIR = false;
    • const bool INVERT_E_DIR = true;
  • const bool min_software_endstops = true; //impedisce alla stampante di muoversi al di sotto dell’homing (meglio mettere true per evitare di danneggiare la struttura)
  • const bool max_software_endstops = true;  //come sopra, solo che impedisce i movimenti sopra le dimensioni massime specificate
  • Definizione delle dimensioni massime
    • const int X_MAX_LENGTH = 210;
    • const int Y_MAX_LENGTH = 210;
    • const int Z_MAX_LENGTH = 200;
  • #define MAXTEMP 210 //temperatura massima oltre il quale verrà staccata l’alimentazione alla resistenza dell’hotend
  • #define MINTEMP 5 //temperatura minima sotto la quale non si abilità l’hotend, in parole povere indica che il sensore è staccato e che quindi non registra la temperatura

E sinceramente ora non mi viene in mente altro.
Ora non resta altro da fare che salvare il configuration.h, compilarlo e fare l’upload sulla scheda.

Ripeto che questi parametri vanno bene per la mia macchina, ma per altre possono non essere corretti. Tutto dipende da come si monta la propria macchina.

Per esempio sto pensando di costruirne un’altra che invece delle cinghie utilizzare le barre filettate anche per l’asse X e l’asse Y. Ed in quel caso dovrei modificare il numero di passi per i motori.

All’apertura di Repetie Host prima di poterci collegare alla stampante dovremo definire la comunicazione con essa. Da impostazioni stampante dobbiamo selezionare la porta su cui è collegata la nostra scheda arduino (che per quando ne sa il pc è tutto ciò che rappresenta la stampante) e selezionare la frequenza di comunicazione (ricordate i bit per secondo che abbiamo impostato durante l’installazione dei driver e durante la compilazione del firmware?).
Se abbiamo fatto tutto a dovere, con il cavo usb collegato sia al pc che alla scheda, con il rate della comunicazione impostato a dovere, e con l’ambiente di esecuzione installato, quando premiamo su connetti il bottone dovrebbe cambiare (diventare verde e con la scritta Disconnetti).

Se ciò non dovesse accadere vuol dire che qualcosa non va, e per saperne di più dobbiamo consultare il log (che in Repetier-host è in basso alla schermata).

La prima parte, e ripeto LA PRIMA PARTE, della calibrazione è fatta.
Si tratta della prima parte perchè la definizione dei paramenti nel firmware della scheda, nel programma di esecuzione, sono solo il primo passo per cominciare a stampare.

Questi parametri ci dicono come è fatta la macchina, cosa ha e cosa non ha.

L’altra cosa importante da fare è la calibrazione fisica della stampante, della quale vedrete le mie [dis]avventure in un altro articolo, perchè da essa dipende una corretta stampa. Ma non dobbiamo dimenticare la configurazione di Slic3r, cioè del programma che preso un modello 3D (o in generale più modelli 3D) ci restituirà il gcode che il firmware è in grado di eseguire (sotto forma di movimenti dei motori). Una errata configurazione dei parametri di slicing produrrà un codice non correttamente eseguibile, che risulterà in una stampa errata.

Per oggi è tutto!

20 comments

Skip to comment form

  1. ciao ho seguito la tua guida per realizzare un prusa i3 ma quando la connetto al computer e usando pronterface (comandi manuali),i motori degli assi ricevono dei picccoli impulsi ma non si muovono puoi aiutarmi ?Grazie in anticipo

    1. Ti ho scritto per mail 🙂

      1. ciao credo di avere lo stesos problema, cioè a parte piccoli impulsi i motori non si muovono! come risolvere? io ho caricato marlin!

        1. Ciao
          così ad occhio potrei pensare alla regolazione del potenziometro sui pololu. Sicuro si aver impostato correttamente il valore sul potenziometro?

          Poi mi serve qualche info in più, magari anche il file di configurazione di marlin. Se vuoi contattami tramite FB, sia attraverso la pagina del sito sia attraverso il mio profilo (li trovi nella barra in alto nel sito).
          Fammi sapere 🙂

    2. mmm mi è impossibile inviarti una mail.
      contattami tu a info@indiegearlab.com
      intanto ti dico questo
      prima di tutto vorrei sapere che firmware stai usando e se hai fatto la corretta taratura dei pololu con il relativo potenziometro (la vitina sopra i pololu).
      Qualche altra persona mi ha detto per esempio che aveva problemi nell’usare Marlin (e altri sprinter).
      Inoltre una corretta taratura della tensione sui pololu tramite la regolazione dei pololu garantisce che i motori si muovano correttamente (all’inizio feci una prova e tarai pololu troppo bassi ed i motori non riuscivano a muoversi.

      Al momento queste sono le prime cose che mi vengono in mente 🙂
      Fammi sapere e vediamo se riesco a darti una mano 😉

  2. Ho (quasi) finito l’assemblaggio dalla mia I3 ed ero alla disperata ricerca di informazioni sulla fase di calibrazione…
    I tuoi post a riguardo sono certo mi saranno molto utili, Grazie.

    1. Grazie a te 🙂 mi fa piacere essere stato utile 🙂

  3. Ciao, anch’io ho eseguito il procedimento, perchè ho notato che le stampe non erano di dimensioni corrette.

    però quando provo a muovere manualmente la stampate, l’asse delle y si muove solo da un lato e cioè verso il fine corsa. però se faccio l’homing del y questo si muove solo di uno scatto alla volta, e se tocca il fine corsa non lo riconosce e continuerebbe ad andare avanti
    poi se carico il gcode, sul riquadro di repiter o anche pronterface dove si vede l’oggetto che deve essere stampato, si vede la partenza dell’estrusore dal angolo in basso a sinistra invece di alto a sinistra.
    Ti ringrazio in anticipo

    1. Ciao
      bè prima di tutto vorrei sapere che firmware stai usando.

      Anche io vedo il punto di partenza in basso a sinistra come si può vedere dall’immagine
      Magari c’è un’impostazione relativa agli endstop.
      Se puoi mandami il tuo file di configurazione per mail a questo indirizzo info@indiegearlab.com, o se vuoi ti allego il mio per mail 😉

  4. Ciao, davvero complimenti per tutte le spiegazioni precise e chiare che riesci a fornire. Volevo chiederti, quando carichi il firmware sull’arduino mega la ramps 1.4 con i relativi driver deve essere inserita nell’arduino mega o va inserita dopo aver caricato il firmware sprinter o marlin che sia ??
    Grazie mille sin da subito 🙂

    1. ciao
      il caricamento del FW è indipendente dalla presenza o meno dalla ramps inserita sull’arduino 🙂
      Io la tengo sempre attaccata 🙂

      1. Ok perfetto grazie mille, volevo anche chiederti un consiglio riguardo l’estrusore, io ho le plastiche per la i3 quelle classiche per l’estrusore che sono poi quelle che hai messo nella tua galleria:
        http://www.indiegearlab.com/reprap-prusa-i3-1-si-comincia/272/dsc01913
        e in più il greg adapter
        http://www.reprap.org/mediawiki/index.php?title=File:I3-Greg-adapter.png&limit=500
        Volevo gentilmente sapere vista la tua esperienza quale hot end posso abbinargli che faccia bene il suo dovere. Ti ringrazio davvero 🙂

        1. allora se le tue plastiche sono come quelle che avevo io inizialmente allora ti conviene un hotend che sia un j-head like.
          Una buona alternativa potrebbe essere il j-head che trovi su reprap world (anche se qualcuno se ne lamenta), oppure uno buono sembra l’estrusore che ha realizzato Balestrino, che si dovrebbe chiamare B-head. 🙂

  5. Ciao, ho fatto tutto quello che c’è scritto nella tua guida, dal punto 1 al 10.
    Ho installato Repetier Host.
    Scaricato Marlin e poi ho fatto anche tutto il resto da te descritto.
    Lancio Repetier faccio connetti è…. niente non mi da errore ma nella finestra in basso si vede che non carica il firmware.

    Nelle informazioni stampante(ALT-P) non riconosce la stampante non vede il firmware.

    Puoi aiutarmi? Grazie

  6. ciao ottima spiegazione allora il mio problema e questo io avevo un arduino cinese più ramps 1.4 caricato il fw tutto ok x 2 anni l altra settimana ho bruciato le schede x un corto circuito le ho comprate nuove ma made in italy solo che xp non me le riconosce e se provo con w7 a caricare il fw che avevo prima mi da errore e non me lo carica non so come fare

    1. Ciao
      le cause possono essere molteplici. Prima di tutto ti consiglio di controllare che la porta usb a cui colleghi arduino sia funzionante (magari prova con un altra periferica).
      Altra causa possibile è il chip di comunicazione USB usato sugli arduino. Può darsi che tu debba disinstallare i vecchi driver di arduino e reinstallare quelli nuovi (compresi nel nuovo arduino IDE). Se è un arduino ufficiale non ci dovrebbero essere problemi con i driver.
      Ma se comunque anche avendolo comprato in italia c’è la possibilità che l’arduino sia un clone cinese potresti aver bisogno di installare i driver per il chip usb di comunicazione. Mi pare che vadano cercati i driver CH430 o CH431 per arduino. Era successo anche a me quando avevo comprato un paio di arduino uno in italia (senza nota che fossero cloni) che non mi venivano riconosciuti dal pc. Installando i driver appositi ho risolto il problema. Win 8.1 e 10 dovrebbero riuscire a trovare i driver online mi pare.
      I driver dovrebbero essere questi nel caso citato.
      http://0xcf.com/2015/03/13/chinese-arduinos-with-ch340-ch341-serial-usb-chip-on-os-x-yosemite/
      Che errore ti da? Errore durante la compilazione o durante il caricamento?
      Il dispositivo ti viene visto nel panello di gestione dispositivi? La porta COM assegnata è corretta?
      PS: per annullare ogni altro dubbio prova ad avviare arduino in modalità amministratore. Con il nuovo IDE installato mi da dei problemi durante il caricamento del compilato sulla scheda per mancanza di permessi.
      Let me know 🙂

      1. Arduino:1.8.1 Hourly Build 2017/01/09 11:12 (Mac OS X), Scheda:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

        In file included from sketch/Marlin.h:23:0,

        from sketch/BlinkM.cpp:5:

        sketch/pins.h:2564:0: warning: “X_MAX_PIN” redefined

        #define X_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/BlinkM.cpp:5:

        sketch/pins.h:445:0: note: this is the location of the previous definition

        #define X_MAX_PIN 2

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/BlinkM.cpp:5:

        sketch/pins.h:2565:0: warning: “Y_MAX_PIN” redefined

        #define Y_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/BlinkM.cpp:5:

        sketch/pins.h:451:0: note: this is the location of the previous definition

        #define Y_MAX_PIN 15

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/BlinkM.cpp:5:

        sketch/pins.h:2566:0: warning: “Z_MAX_PIN” redefined

        #define Z_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/BlinkM.cpp:5:

        sketch/pins.h:457:0: note: this is the location of the previous definition

        #define Z_MAX_PIN 19

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/ConfigurationStore.cpp:1:

        sketch/pins.h:2564:0: warning: “X_MAX_PIN” redefined

        #define X_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/ConfigurationStore.cpp:1:

        sketch/pins.h:445:0: note: this is the location of the previous definition

        #define X_MAX_PIN 2

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/ConfigurationStore.cpp:1:

        sketch/pins.h:2565:0: warning: “Y_MAX_PIN” redefined

        #define Y_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/ConfigurationStore.cpp:1:

        sketch/pins.h:451:0: note: this is the location of the previous definition

        #define Y_MAX_PIN 15

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/ConfigurationStore.cpp:1:

        sketch/pins.h:2566:0: warning: “Z_MAX_PIN” redefined

        #define Z_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/ConfigurationStore.cpp:1:

        sketch/pins.h:457:0: note: this is the location of the previous definition

        #define Z_MAX_PIN 19

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/MarlinSerial.cpp:23:

        sketch/pins.h:2564:0: warning: “X_MAX_PIN” redefined

        #define X_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/MarlinSerial.cpp:23:

        sketch/pins.h:445:0: note: this is the location of the previous definition

        #define X_MAX_PIN 2

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/MarlinSerial.cpp:23:

        sketch/pins.h:2565:0: warning: “Y_MAX_PIN” redefined

        #define Y_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/MarlinSerial.cpp:23:

        sketch/pins.h:451:0: note: this is the location of the previous definition

        #define Y_MAX_PIN 15

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/MarlinSerial.cpp:23:

        sketch/pins.h:2566:0: warning: “Z_MAX_PIN” redefined

        #define Z_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/MarlinSerial.cpp:23:

        sketch/pins.h:457:0: note: this is the location of the previous definition

        #define Z_MAX_PIN 19

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/Marlin_main.cpp:30:

        sketch/pins.h:2564:0: warning: “X_MAX_PIN” redefined

        #define X_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/Marlin_main.cpp:30:

        sketch/pins.h:445:0: note: this is the location of the previous definition

        #define X_MAX_PIN 2

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/Marlin_main.cpp:30:

        sketch/pins.h:2565:0: warning: “Y_MAX_PIN” redefined

        #define Y_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/Marlin_main.cpp:30:

        sketch/pins.h:451:0: note: this is the location of the previous definition

        #define Y_MAX_PIN 15

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/Marlin_main.cpp:30:

        sketch/pins.h:2566:0: warning: “Z_MAX_PIN” redefined

        #define Z_MAX_PIN -1

        ^

        In file included from sketch/Marlin.h:23:0,

        from sketch/Marlin_main.cpp:30:

        sketch/pins.h:457:0: note: this is the location of the previous definition

        #define Z_MAX_PIN 19

        ^

        sketch/Marlin_main.cpp:2090:36: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]

        LCD_MESSAGEPGM(MACHINE_NAME” “MSG_OFF”.”);

        ^

        In file included from sketch/SdFile.h:27:0,

        from sketch/cardreader.h:8,

        from sketch/Marlin_main.cpp:44:

        SdBaseFile.h:38: error: using typedef-name ‘fpos_t’ after ‘struct’

        struct fpos_t {

        ^

        In file included from sketch/Marlin.h:10:0,

        from sketch/Marlin_main.cpp:30:

        /Users/apu83/Desktop/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/stdio.h:950:33: note: ‘fpos_t’ has a previous declaration here

        __extension__ typedef long long fpos_t;

        ^

        exit status 1

        using typedef-name ‘fpos_t’ after ‘struct’

        Questo report potrebbe essere più ricco di informazioni abilitando l’opzione

        “Mostra un output dettagliato durante la compilazione”

        in “File -> Impostazioni”

        1. Ho fatto una breve ricerca sul web. Questo errore lo hanno risolto usando un versione di arduino antecedente. Hanno usato una versione dalla 1.6.9 in giù. Dal log vedo che stai usando la versione 1.8.1. Prova con una versione più vecchia.
          Oppure scarica una versione del FW più recente e utilizza il nuovo arduino.
          Io ti consigliere la seconda, dato che così puoi sfruttare i miglioramenti delle nuove versioni.
          Fammi sapere 🙂

            • Simone Lenarduzzi on 14 gennaio 2017 at 16:37

            allora ho installato arduino 1.0.6 e sembra che lo legga ma al momento di caricarlo mi da questo errore avrdude: stk500v2_getsync(): can’t comunicate with device resp=0x01
            ma la porta seriale me la trova porca paletta sto diventando matto

            • odino87 on 14 gennaio 2017 at 21:13

            ti da lo stesso problema anche se provi a caricare uno sketch arduino vuoto o uno di quelli di prova?
            Intanto sto cercando possibili cause

Lascia un commento

We use cookies to ensure that we give you the best experience on our website.
Ok