martedì 17 marzo 2015

HOW TO: Una CNC laser per incidere e tagliare (Arduino + GRBL + Pololu A4988 + 1 Watt laser diode)

Dopo circa un anno dalla realizzazione di una piccola cnc finalmente mi sono deciso a dargli uno scopo montandogli un laser per bruciare e tagliare materiali di piccolo spessore come carta, balsa, plastica, ecc...




Premessa importante:
maneggiare i laser è molto pericoloso per la propria vista e quella degli altri; un fascio laser se puntato negli occhi potrebbe accecarvi all'istante in modo irreversibile. Non sopravvalutate questo aspetto e munitevi di appositi occhiali di protezione. Indossateli ogni volta che il laser è acceso e considerate sempre il fatto che anche il rimbalzo del fascio è dannoso per la vista.
Non mi ritengo responsabile di danni che provocherete a voi stessi e/o agli altri.


Cercherò di affrontare diversi aspetti, problematiche e soluzioni adottate nel corso di questa mia nuova esperienza.

Pensavo sarebbe stato molto più semplice, nel mondo del laser le cose sono ben diverse rispetto alla semplice fresatura un pezzo di legno.

Progetto CNC laser, modelli 3D, tavole quotate e foto dei particolari

Per chi fosse interessato a questo progetto ed avere modelli 3D e tavole quotate può cliccare su questo link


Questo è l'aspetto attuale della mia cnc laser

Quale tipo di laser

Su questo argomento lascio solo qualche accenno su quello che ho potuto apprendere, mi rendo conto che ancora non so praticamente nulla.
I laser si differenziano in base alla loro lunghezza d'onda emettendo luce di colore differente a seconda di essa.
Il laser che ho comprato io è sui 445nm ed emette luce di colore blu.

Non chiedetemi quale lunghezza d'onda sia meglio perchè non saprei rispondervi, avevo letto da qualche parte che i laser migliori sono quelli verdi ma non so in quale contesto.
Io ho scelto quello blu senza un particolare motivo.




Potete anche recuperare il diodo laser da un masterizzatore DVD o Blu-ray.
Le potenze non vanno oltre i 200 / 300 mW ma per tagliare carta e bruciacchiare il legno vanno benissimo. Non basta avere il diodo, dovete anche procurarvi delle lenti di collimazione e un paio di occhiali appositi per la lunghezza d'onda del laser del quale dovete conoscerne le caratteristiche.





Proteggi i tuoi occhi (prima la sicurezza)

Non è certo un aspetto da sottovalutare, perdere la vista per sempre potrebbe creare qualche problema nella vita.
E' necessario indossare sempre degli occhiali protettivi, non pensate di usare la maschera da saldare, non funzionerebbe.
Non pensate neanche di comprare un qualsiasi paio di occhiali protettivi contro il laser, dovete scegliere il tipo giusto in base alla lunghezza d'onda del vostro laser.

Il mio laser ha una lunghezza d'onda sui 445nm per cui su prezioso consiglio di Dimio (vi consiglio di leggere il suo articolo) ho comprato questi occhiali su ebay perchè hanno una protezione che va dai 400nm ai 450nm.



Alcune considerazioni

Prima considerazione è che il laser potrebbe essere paragonato ad una fresa con una punta sottilissima ma con una lunghezza infinita per cui mentre con le fresatrici basta muovere l'asse Z per staccare la fresa dal pezzo con il laser l'approccio è diverso, bisogna spegnerlo.

Questo fa intuire che nel gcode il comando Z va eliminato o sostituito con un altro.
Per risolvere questo problema la soluzione è mettere mano ai post-processor modificandone il codice di programmazione affinchè scriva un GCODE ottimale.

L'altro aspetto da tenere presente è che il fascio laser lavora bene solo quando i raggi sono collimati per cui è necessario dotarsi di apposite lenti che fanno convergere la luce in un unico punto.
Da quello che ho potuto capire per ogni tipologia di laser vanno utilizzate lenti di collimazione dedicate.

I diodi laser si possono trovare di diverse potenze e di diverse lunghezze d'onda.
La potenza dei diodi può variare da pochi mW (milliwatt) a centinaia di Watt fino a quelli per uso industriale utilizzati per il taglio dei metalli, ma non sono qui per parlare di quest'ultimi.
Considerate che un laser di appena 5mW è già dannoso per la vista...

Alimentazione dei vari componenti

Sia il laser che i motori stepper gli ho alimentati con un vecchio alimentatore ATX da computer da quale è possibile prelevare diverse tensioni 3.3V, 5V, 12V poi ho scoperto che è possibile prelevare anche i 7V dai poli positivi dei 5V e 12V.

Per accendere l'alimentatore ATX è sufficiente fare un ponte tra due fili.
Per chi fosse interessato qui ci sono le istruzioni.

Come alimentare un diodo laser

I diodi laser non vanno mai collegati direttamente ad un alimentatore/pila perché si brucerebbero dopo pochi secondi. Essi sono affamati di corrente fino al punto di surriscaldarsi e cuocersi.

E' quindi necessario alimentare il diodo con un circuito regolatore di corrente che in parole povere decide quanta corrente deve passare nel diodo. Il circuito integrato che svolge questo compito è l' LM-317. Attenzione che anche lui necessita di un dissipatore di calore!

Un altro aspetto da non sottovalutare è il dissipamento del calore che il diodo emette quando è in funzione. Senza dissipare il calore un diodo alla sua massima potenza si brucerebbe ed è quello che purtroppo è capitato a me.

Inizialmente avevo comprato su ebay un laser da 2000mW (2Watt) su ebay senza driver ma già con la lente di collimazione montata.

Per alimentarlo ho trovato su internet questo semplice schema con l'integrato LM-317.

L'ho prima testato sulla breadboard per verificarne il funzionamento poi l'ho saldato su una millefori

(se state pensando che sono un sprecone in termini di spazio avete perfettamente ragione, potevo assemblare il driver in meno di un quarto dello spazio..)

A parte l'inestetismo del circuito il suo lavoro lo faceva molto bene, il laser da 2W alla massima potenza bucava all'istante carta, nastro isolante, ecc...
Inizialmente lo tenevo acceso per pochissimi secondi senza dissipatore e già non riuscivo a tenerlo in mano per quanto scottava. Così mi sono deciso di realizzare un dissipatore partendo da pezzi di riciclo.

Ho sacrificato il dissipatore di un processore perchè mi sembrava molto adatto allo scopo visto che aveva un'anima di rame pieno che poteva contenere in toto il diodo.
Così l'ho forata con una punta da 12mm e gli ho inserito all'interno il modulo laser.

 

 

Dopo ore di lavoro il dissipatore era pronto così prima ho acceso la ventola poi ho iniziato ad alimentare il laser con il mio (bel) driverino.

Con grande sorpresa mi accorgo che il laser emetteva luce ma non bruciava più nemmeno la carta. Pensando di aver cotto l'LM-317 ho ordinato dalla Cina un driver già pronto (lo potete vedere nell'ultima foto qui in alto) ma il laser non ne voleva sapere di bruciare.
Ho così ho realizzato che i pochi secondi nei quali l'avevo tenuto acceso senza dissipatore (bruciandomi le mani) erano stati fatali.

Non vi dico quanto mi sono odiato per non aver avuto voglia di aspettare di concludere il dissipatore..

In teoria il laser era pronto per essere utilizzato con l'unico inconveniente che la potenza andava regolata manualmente con un potenziometro.

Dato che l'idea di regolare l'intensità del laser a mano non mi convinceva perché mi precludeva il fatto di fare lavorazioni miste ho preso una decisione drastica. Buttare via tutto e ripartire da zero.

Essendo a conoscenza del fatto che Arduino ha uscite PWM ho pensato che sarebbe bello gestire l'intensità del laser con tale segnale. Dopo giornate passsate a fare ricerche ho trovato sempre su ebay un modulo laser da 1 Watt con la possibilità di modularlo con un segnale PWM.


A questo punto il problema laser + alimentazione + dissipatore era risolto.
Adesso viene la parte difficile o meglio come "dire" ad Arduino di accendere e spegnere il laser con il controllo dell'intensità.

Controllare l'intensità del laser con Arduino

Sempre da ricerche su internet ho capito che era necessario cambiare alcuni parametri nel file config.h delle librerie GRBL.

Facciamo un passo indietro e  analizziamo per un attimo i pin di Arduino:


Per spegnere e accendere il laser si potrebbe banalmente utilizzare il pin n.12 che nelle cnc tradizionali pilota un relè per accendere/spegnere la fresa. Il pin 12 può assumere solo due valori 0 Volt e 5 Volt.

Per controllare l'intensità del fascio luminoso non bastano 2 valori ma molti di più.

Qui ci vengono in aiuto i segnali PWM che su Arduino possono avere 256 valori intermedi tra 0 e 5 Volt. Per maggiori informazioni leggete questo articolo.



I segnali PWM di Arduino sono contrassegnati con un simbolo (~) a fianco al numero e più precisamente sono i pin n. 3, 5, 6, 9, 10, 11

Il pin n.12 attualmente adibito alla gestione dello spindle (mandrino) però non è un segnale PWM ma solo 0 - 5 Volt.

Nella configurazione delle librerie GRBL è possibile abilitare un parametro per "invertire" il pin 11 con il 12 ottenendo il risultato voluto.

file config.h: configurazione librerie GRBL. 

Il parametro in questione si chiama: VARIABLE_SPINDLE
Di default tale parametro è commentato per cui basta eliminare il commento.

Per comodità ho variato anche il parametro SPINDLE_MAX_RPM impostandolo a 1000 in modo da avere una corrispondenza tra i mW ed il numero dei giri/min.

SPINDLE_MAX_RPM indica il massimo valore accettato per il numero massimo dei giri della fresa.
Impostandolo a 1000 e avendo un laser da 1000mW quando lo voglio fa funzionare a metà potenza (500mW) basta che imposto il numero di giri della fresa a 500 e quando lo voglio mandare al massimo per convenzione imposto 1000. E' più una comodità ma non è fondamentale.
Se si lasciasse il valore originale 12000  (se ricordo bene) per avere la massima potenza del laser sarebbe necessario impostare il numero di giri a 12000 e per la metà della potenza 6000 giri/min.

Ho salvato il file e ricaricato su Arduino le librerie GRBL.

Era ora di testarne il funzionamento....

Per evitare di bruciare anche il secondo diodo ho provato prima con un multimetro collegando il puntale rosso al segnale PWM (pin 11) e la massa (GND) al puntale nero.

Ho aperto il programma  Universal GCode Sender e lanciato manualmente il comando standard Gcode "M3 S1000" (che significa: accedi la fresa a 1000 giri/min)

Il multimetro ha segnato correttamente questi valori
M3 S1000 --> 5 Volt
M3 S500 --> 2.5 Volt
M3 S250 --> 1.25 Volt
M3 S0 --> 0 Volt

La configurazione adesso è corretta.

La prova definitiva andava comunque fatta con il laser così armato di coraggio l'ho collegato ed ho lanciato il primo comando "M3 S50", il laser si era acceso ma molto debole.
Poi ho lanciato comandi intermedi M3 S100 ... fino a S1000 ed il laser si comportava di conseguenza. Con M3 S0 il laser si spegneva.

Il primo sospiro di sollievo: l'obiettivo era stato raggiunto

Come pilotare i motori passo passo

Incoraggiato dai risultati ottenuti con il laser ho deciso di non utilizzare la scheda TB6560 (già bella e pronta) sostituendola con dei driver Pololu.

Mi sono quindi costruito una specie di shield (ma non montato su arduino) per l'alloggiamento dei 3 driver necessari aa azionare i motori stepper.

Ho deciso di utilizzare Pololu A4988 perchè i motori (recuperati da delle Epson Stylus) che avevo in possesso avevano caratteristiche compatibili.

Premesso che di elettronica ci capisco molto poco (anzi niente) mi sono dovuto arrangiare cercando in giro per la rete le varie documentazioni.

Così su una piastra millefori ho assemblato il mio primo circuito, ammetto che lascia un pò a desiderare, ma prima d'ora non ne avevo saldato neanche uno.

 


           

Questi piccoli (anzi microscopici) driver sembrano perfetti per pilotare i motori passo passo delle stampanti.
Lo schema di collegamento è anche molto semplice:




Di seguito potete vedere lo shield in funzione



Come produrre un Gcode adatto allo scopo

Come avevo detto all'inizio di questo articolo il laser non è una fresa a lunghezza fissa per cui ci si deve inventare qualcosa per fare in modo che durante gli spostamenti non vada a bruciare parti del pezzo che non devono essere toccate.

Abbiamo anche visto che che con i comandi M3 e M5 possiamo rispettivamente accendere e spegnere il laser e che con il comando Sxxx possiamo variare l'intensità del laser.

Ma come si fa a produrre un file gcode che non abbia il movimento dell'asse Z e che abbia la gestione dell'accensione del laser?
la risposta è: editando il post-processor!

Io sono appassionato alla suite dei software Vectric per cui vi mostrerò come ho realizzato il mio post-processor (per Aspire) per un utilizzo con il laser.

Come editare il post-processor di Aspire

Prima cosa bisogna individuare in quale cartella sono depositati i vari  post-processor del CAM che state utilizzando.


Ne prendete uno a caso e lo duplicate dandogli il nome che preferite.

Aprite il file con un semplice editor di testo, vi accorgerete subito che ci sono tutte le istruzioni per produrre il gcode finale.

Prima cosa cambiate il nome del post-processor che il CAM vi presenterà come utilizzabile


A questo punto potete modificare tutto il comportamento della vostra cnc semplicemente aggiungendo/modificando/eliminando istruzioni in tale file.

In pratica:
sotto all'istruzione "begin HEADER" vengono elencati tutti i comandi da eseguire all'inizio prima che parta la lavorazione.

La modifica che ho fatto è stata quella di sostituire il comando "[N]M3" con quello evidenziato aggiungendo anche un commento messo tra parentesi.
In questo caso ho espressamente detto ad Arduino di mantenere il laser spento fino a che non parte la prima lavorazione.

Nella sezione "begin RAPID_MOVE" invece ho specificato che tutte le volte in cui è richiesto uno spostamento rapido per passare ad esempio da una fresata all'altra il laser si deve spegnere (M5), inoltre ho anche eliminato ovunque le istruzioni dell'asse z [Z] e [ZH] (homing).




Nella sezione "begin FIRST_FEED_MOVE" che indica ogni volta che inizia una nuova fresata ho eliminato l'istruzione [Z] e aggiunto le istruzioni [S] (num giri/min) e M03 che indicano che il laser si deve accendere alla potenza definita dal numero dei giri della fresa.























Per scaricare il mio post processor potete cliccare qui


Come impostare l'utensile per la lavorazione

a questo punto vi mostro come ho definito l'utensile in Aspire per poterlo usare nelle mie lavorazioni.

Nella sezione "Tool Database" ho creato un nuovo utensile chiamato Laser con le caratteristiche che vedete evidenziate qui sotto.
In particolare notate che il valore di default dei giri al minuto l'ho impostato su 300 rpm, questo significa che se il valore massimo che avevo precedentemente impostato nel file config.h era 1000 con 300 rpm il laser dovrebbe funzionare circa sui 300mW.


Infine quando è il momento di generare il Gcode dovete selezionare il vostro post-processor ed il gioco è fatto.




Questo è il gcode generato utilizzando il post-processor appena creato.
Noterete che le istruzioni aggiunte ed i commenti che avevo inserito sono presenti nel file generato.






Alcuni immagini del funzionamento








Conclusioni

Non ho scritto tutto questo per scoraggiare le persone ad intraprendere questa impresa anzi l'ho fatto per raccogliere ed organizzare tutte le ricerche eseguite in 4 mesi che alla fine mi hanno portato a questo risultato. Mi auguro troviate esaustive le informazioni che vi ho lasciato.

Apprezzo se qualcuno di voi mi fa notare eventuali imprecisioni lasciandomi un commento.

Grazie per la lettura.