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 lungo un arco. Sono due comandi gemelli, G2 descrive un arco in senso orario, G3 in senso antiorario. Il software della Wasp non riconosce il parametro R (raggio), occorre dare le coordinate del centro con i parametri i e j. (i e' la coordinata del centro lungo l'asse x, j lungo l'asse y) Fate attenzione a calcolare che l'arco di circonferenza non vada fuori dall'area stampabile! Es.

  G0 X0 Y0 Z0 F3000
  G2 X40 Y40 I40 J0 F500

il comando G2 si sposta da O,O,0 a 4cm,4cm,0 lungo un arco di circonferenza con centro 4cm,0,0 (un quarto di circonferenza).

G4 non fa nulla, aspetta, serve per mettere una pausa.

  G4 P2000

sta fermo per 2 secondi. Puo' servire per essere certi che la frea abbia espulso i trucioli da un foro o per aspettare dopo uno spostamento veloce che un laser inizi a bruciare...

G92 trasla il sistema logico di coordinate. E' utilissimo per fissare uno "zero logico" per operazioni di CNC. Per esempio con le frese si puo' porre la Z=0 come la superficie di partenza e dare coordinate negative per la profondita' di taglio.

  G92 X0 Y0 Z0

pone il punto attuale come origine logica

  G92 Z0

lascia invariate le coordinate X e Y e pone questa quota come Z=0. Cambiare le coordinate X e Y puo' servire per replicare una azione in punti diversi dell'area di stampa (e.g. per costruire piu' oggetti uguali).

Scrivere il C-Code con l'Editor

I miei primi pezzi con la fresa li ho fatti scrivendomi a mano il G-Code. Non e' difficile. Occorre sapere lo spessore della fresa (quella che ho usato e' 2.4mm) e fare un po' di conti su di un foglio.

Le mie prime realizzazioni sono state:

  • un supporto per penne, per poter usare la CNC come un plotter
  • un supporto per un emettitore laser, per poter scrivere (intagliare bruciando!) o tagliare con la CNC.

Ecco la foto: Pennaelaser.jpg

La scatola in alto a sinistra e' fatta con tre strati di compensato da 1cm che lasciano al centro un buco quadrato di 1cm x 1cm. (il compensato centrale si interrompe al centro per 1cm. E' esattamente il diametro di una penna da lucido Stabilo. In fondo una spiaggia di metallo ha un foro che lascia passare solo la punta.

In alto a sinistra nella foto c'e' il supporto per il laser, o meglio il supporto del supporto per il laser. Il supporto metallico aveva tre punti di fissaggio, Il compensato tagliato con la cnc lo rende compatibile con i punti di fissaggio della Wasp.

La testina di stampa di una wasp ha un ancoraggio largo 63mm e viene fissato con due viti metriche M4 (avvitate per meno di 1cm) centrate e porte a 46mm di distanza (i.e. i centri dei fori sono a 8.5mm dal bordo). Con queste indicazioni potete attaccare alla Wasp anche la siringa da dolci se volete farcire la torta.

Ho fatto un po' di prove, un po' di conti e mi sono scritto i file con il mio beneamato vi, e' molto divertente.

Questo e' un esperimento di "spizzo 45' a gradini di 1mm" (incastro aperto e chiuso).

Spizzo1.jpg Spizzo2.jpg