Cronaca dei miei primi esperimenti di CNC

Da raspibo.
Versione del 9 mar 2014 alle 10:05 di Dancast78 (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
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 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).

Un variante della procedura per chi usa Ubuntu

Scaricare i sorgenti di mono da github ed entrare nella dir:

git clone https://github.com/mono/mono
cd mono/support

Utilizzare la patch prodotta inidcata al punto precedente:

 wget http://www.bononia.it/~renzo/keap/support_serial_c.patch

Rinominare il file per l'applicazione della patch:

mv support_serial_c.patch serial.patch
patch < serial.patch

Installare il pacchetto mono-gmcs

sudo apt-get install mono-gmcs libtool

Tornare nella dir mono

cd .. 

E lanciare la compilazione come indicato ndel README dell'archivio su github:

./autogen.sh --prefix=/usr/local
sudo make

Installare solo la libreria di supporto posix modificata

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

Eventualmente si può cancellare la dir mono come indicato sopra

Lanciare RepetierHost per vedere se è tutto ok

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

A questo punto si può creare un alias per automatizzare il lancio con la libreria ad hoc, che funzionerà al prossimo login

echo "alias repetierHost='LD_PRELOAD=/usr/local/lib/libMonoPosixHelper.so repetierHost'" >> ~/.bashrc

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).

M201 limita l'accelerazione massima. E' importante limitare le accelerazioni quando si usano degli strumenti meccanici che si possono rompere per con movimenti troppo repentini. Normalmente nella Wasp l'accelerazione e' di 9000mm/sec^2 per x e y mentre e' 50mm/sec^2 per z. Per la fresa io uso:

  M201 X450 Y450

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

Un plotter con una CNC

Il problema di usare una CNC come plotter e' che la penna deve essere fissata in modo stabile, con poche oscillazioni in x e y ma deve avere un appoggio elastico lungo l'asse Z (se no con "appoggio rigido" si incide il foglio e si rompe la punta).

Ho costruito una scatola col compensato con un foro quadrato di un cm di lato (vedi foto sopra). In questa foto:

Plotterbox.jpg

si vede la scatola portapenna montata come testina di stampa della Wasp.

All'interno si puo' infilare una penna da lucido Stabilo. Gia' col proprio peso la penna puo' funzionare, in alternativa si puo' mettere nel foro una molla (sempre presa da una penna) e un tappo in sughero o polistirolo compatto per fornire una maggiore pressione e un minor rischio di "incantarsi" nella discesa quando la macchina stacca la penna dal foglio. La penna da lucido puo' essere utile per stampare su un CD.

Ho anche trovato il modo di usare un refill delle penne Pilot G2. Questo e' un po' piu' elaborato. L'oggetto che metto nel foro del portapenna (lo vedete sempre nella foto sopra) e' costituito da un tubo per compressori (o per acqua, il mio e' un ricambio del filtro dell'acqua potabile), che ha un diametro esterno di 1cm e interno esatto per il refill della G2 6mm). Il tubo e' bloccato in basso da un tappo di una portamine bucato per far fuoriuscire la punta del refill, e inserito nel tubo a pressione (ho scaldato un po' il tubo). Nel tubo inserisco nell'ordine: il refill, una molla e un tassello fisher a espansione del 6 che fa da tappo! basta avvitare un po' una vite e il tassello fa il suo dovere, si espande bloccando il refill e la molla.

Sempre nella foto potete vedere alcune stampe. Quelle sul CD sono frutto di un primo esperimento con una penna che aveva maggiore gioco, ora riesco a farle meglio.

Per fare le scritte ho usato inkscape, al quale ho installato il plugin gcodetools. (Ci sono degli ottimi video che spiegano come generare il gcode).

Il gcode risultante deve essere editato a mano per togliere tutti i commenti. Infatti i gcodetools generano commenti fra parentesi tonde che fanno impazzire repetier host.

 sed 's/(.*)//' filein.gcode > fileout.gcode

fa il miracolo....

E' poi divertente ed istruttivo leggere comunque il gcode con un editor.

I giochi (pericolosi) con i Laser

Una precisazione importante e' d'obbligo all'inizio di questo paragrafo.

I laser sono pericolosi

Questi laser, sebbene siano non troppo potenti, possono rendere ciechi! Occorre sempre usare occhiali protettivi adatti (specifici! Gli occhiali da sole o plarizzati non servono a niente!).

Ho acquistato i Laser dalla ditta inglese OdicForce. In particolare sto facendo esperimenti con il laser OFL55 (200mW Red (650nm) Laser Diode Module with 5V Driver Board and TTL Control Cable (18mm)) e con il laser OFL351 (320mW Focusing 830nm Infrared (IR) Laser Module (16mm)).

Ho preso gli occhiali protettivi OFL52 e OFL149. Gli occhiali rossi servono per proteggere dai Laser infrarosso, verdi, blu. Gli occhiali blu proteggono dai laser rossi.

E' impressionante, quando indossate gli occhiali blu i led rossi appaiono tutti spenti anche quando sono accesi. Ho pensato che il mio alimentatore da laboratorio si fosse guastato perche' lo accendevo e il display rimaneva (per me) spento.

Nella foto che segue il modulo laser rosso da 200mW e' montato come testina di stampa.

Laserprint.jpg

Il laser brucia se messo a fuoco su una superficie che:

  • assorbe il colore emesso
  • non dissipa il calore rapidamente

Il metallo quindi e' difficile da bruciare, perche' e' un buon conduttore di calore, e un foglio bianco o di colore coerente con il laser (un foglio rosso per il laser rosso) riflette la luce e non si scalda.

Il compensato si puo' stampare/incidere (leggermente) con il laser rosso.

Per i laser occorre modificare i gcode perche' si muova rapidamente da un punto all'altro dove non si vuole "bruciare" e si deve fermare un attimo per far iniziare la combustione prima di muoversi. Per la scritta della foto in alto ho messo una pausa di 2 secondi dopo ogni spostamento e il movimento avviene con velocita' F50.

E' un processo lento. Aumentando la potenza del laser si puo' lavorare piu' velocemente (ma si aumentano anche i rischi).

Per mettere a fuoco (nel senso letterale in questo caso) il laser occorre agire sulla ghiera dell'emettitore e verificare la quota z di stampa.

Io uso un pezzetto di nastro isolante: allontano molto la testina da un foglio bianco (cosi' non si brucia) e controllo con il nastro isolante l'altezza alla quale brucia meglio... magari tengo un righello affianco per misurare l'altezza. A quel punto conoscendo la quota rilevata dalla CNC e la distanza del fuoco trovo la coordinata da mettere nel gcode (o per fare la quota 0 con G92).

Su un foglio nero si possono ritagliare sagome (in questo caso pero' i tempi devono essere piu' rapidi perche' l'assorbimento e' maggiore!). Sarebbe bello trovare fogli scuri da un lato e chiari dall'altro... oppure si puo' scurire con la matita un foglio prima di ritagliarlo.