Cronaca dei miei primi esperimenti di CNC

Da raspibo.
Jump to navigation Jump to search

I miei primi 10 giorni con una macchina CNC in casa.

Venerdi' 25 luglio mi hanno consegnato la mia Power Wasp. In questo diario vi racconto i primi esperimenti, grattacapi, fallimenti e, ovviamente, successi.

Primi esperimenti di Stampa 3D

Il primo problema e' stato l'interfacciamento. La Wasp comunica tramite una itnerfaccia seriale emulata su USB a 250Kbaud. E' una velocita' non standard! Per motivi storici le velocita' standard sono multipli di 1200. La velocita' piu' vicina e' 230400, ma ovviamente se il computer spedisce dati a 230400 e la Wasp si aspetta treni di impulsi a 250000 i due vedono solo schifezze.

Nel kernel Linux esiste la possibilita' di settare velocita' non standard per le seriali su USB tramite i tag di ioctl TCGETS2 e TCSETS2 ma purtroppo non sembra che gli sviluppatori della libreria C si siano ancora degnati di inserire tutti i tag nei file header opportuni.

Mi sono rimboccato le maniche e, un po' googlando in giro, un po' scrivendo codice, ho vinto le prime due battaglie con il codice.

Il primo programma che ho fatto funzionare e' printrun (il comando e' pronterface). E' software libero, rilasciato in GPL 3+).

Per farlo funzionare ho dovuto patchare la libreria python per l'accesso alle seriali. Ho applicato questa patch (che ho trovato su Sourceforge) al file /usr/share/pyshared/serial. (Se avete distribuzioni diverse da Debian pyserial potrebbe essere installato in altra dir.)

A questo punto pronterface e' felice e chiacchiera con la Wasp.

Con il programma Cura (GPL) e pronterface si possono ora stampare oggettini presi dalla rete. Thingiverse e' un catalogo di oggetti, molti con licenza CC.

Oggetti1.jpg Oggetti2.jpg

Si vedono gli errori che man mano ho fatto.... Lesbo (a sinistra in verde) ha gli strati troppo ravvicinati e magari temperatura un po' alta... ci sono quindi alcuni filamenti di troppo e la punta della testa e' un po' "colata". Il doppio Pegaso alato al centro ha spessore dell'involucro troppo sottile infatti si notano "falle". Il cane e' quello venuto meglio. Sono rimasto stupito che la stampante sia riuscita anche a stampare il muso che e' completamente a sbalzo.

Non solo stampe 3D

Poi mi sono divertito con la fresa...

Qui il problema della comunicazione seriale e' stato piu' duro da risolvere e ho messo a dura prova le mie doti di "debugger"... Il programma per il dialogo con la stampante che funziona bene per controllare la fresa o altri strumenti e' Repetier Host (software libero: licenza Apache).

Questi "bravi ragazzi" hanno scritto il software in Mono, e mi e' toccato patchare mono perche' potesse funzionare... Magari poi troviamo un modo piu' semplice per "convincere Mono" a usare le seriali a 250Kbaud, qui vi spiego come ho fatto io... e sta funzionando!

Passo 1: ho preso i sorgenti di mono, in Debian:

  apt-get source mono

Passo 2: ho patchato il file support/serial.c con [File:support_serial_c.patch questa patch] (che ho scritto io "portando" la patch che funziona in Python, traducendola in C per la gerarchia dei sorgenti mono).

Passo 3: compilare (senza installare) mono:

  ./configure
  make

andate a prendere un caffe', uno spuntino o guardate un intero film a seconda della potenza del vostro processore.

Passo 4: installare solo la libreria di supporto posix modificata

 cp support/.libs/libMonoPosixHelper.so /usr/local/lib/

(potete poi pulire (make clean) o anche "cestinare" i sorgenti di mono).

A questo punto se /usr/local/lib e' nel LD_LIBRARY_PATH (path di ricerca delle librerie), repetier host funziona gia'.

Se non volete cambiare il path di ricerca delle librerie potete lanciare repetier con un LD_PRELOAD

 LD_PRELOAD=/usr/local/lib/libMonoPosixHelper.so repetierHost

(potete fare un alias o uno script per lanciare repetier host).

il G-code

Ho trovato (e studiato) un manuale del G-code. E' semplice e si possono tranquillamente scrivere file a mano o usare il G-code come interfaccia "linea comando" (CLI per gli anglofili e acronimifili) per la macchina CNC.

Vi riassumo qui i comandi che ho usato di piu'. Nota: il G-code e' scritto normalmente in maiuscolo, nel tab "manual control" di Repetier Host potete scrivere in maiuscolo. Potete anche editare comandi precendenti andando su e giu' con i tasti con le frecce.

Nota importante: tenete sempre presente il bottone "Emergency Stop" presente in alto a destra. Se date un comando sbagliato e la macchina si inceppa perche' non puo' fare l'operazione richiesta, premetelo immediatamente.

G28: home sposta la macchina all'origine meccanica (quella determinata dai microswitch di fine corsa). Cancella ogni definizione di origine logica definita con G92. Questo comando e' equivalente a spigere il bottone home (la casina in basso a sx) presente in Repetier Host nel tab manual control.

G0: sposta la testina di stampa alla posizione indicata. G0 si usa per spostamenti "a vuoto"... senza lavorare. I parametri sono X Y Z F.

  G0 X0 Y0 Z0

sposta la testina nell'origine (logica attuale).

  G0 X100 F3000

sposta la testina a 10 cm dall'origine lungo l'asse x (y e z invariati). Tutte le misure sono in millimetri e si possono usare i decimali. (Per la wasp considerate che in x e y la macchina fa 85 passi dei motori per mm e in z 533 passi).

G1: sposta la testina al punto indicato compiendo un lavoro. In realta' g0 e g1 non sono molto diversi per il firmware. E' meglio sempre scrivere il parametro F di velocita' (altrimenti ricorda l'ultimo usato per G0 o G1) che potrebbe non essere quello giusto per lo strumento attuale. Il percorso e' a velocita' uniforme.

  G1 X10 Y10 F400

si sposta al punto di coordinate 1cm,1cm mantenendo la z invariata. La velocita' e' data in mm/minuto. Per le frese usate velocita' basse! (per esempio io ho usato 200 mm/minuto per fresare con punta 2.4mm 2mm di compensato). Attenzione anche a limitare le accelerazioni con le frese! (vedi M201 sotto)

G2/G3: sposta la testina