Meet NXT Pin-Plotter III...! Quick links:
| NXT pin-plotter III | |
|
Abstract
My Own Creation (MOC): a "needle plotter", which prints a bitmap by making holes on paper. This way, the printout will appear as a drawing made by holes. | |
Technical specifications:
| |
|
The first release was built between January and March
2007, a very few months after I bought my first NXT (sadly I had to
dismantle it before getting photos of its printouts). This version
is much improved.
There is a fixed base, onto which a sheet of paper gets stretched and firmly stopped. There is then a moving tool, able to move horizontally on the base. On the moving tool there is a smaller moving tool, able to move vertically on the main tool, on which the "pen" is mounted. The "pen" is actually an axis ending with a needle (the needle is the only non-LEGO part of this MOC). | |
|
The needle was glued in an old 1×2 brick (yes, I had to do it; and
yes, I hate modifying/gluing LEGO bricks; and yes, I won't ever
glue again anything to a LEGO brick).
NXT motors are very good for projects like this, because: 1) an NXT motor can be programmed to rotate forward or reverse at any speed up to 170rpm 2) an NXT motor can be "braked" (and keeping it in such a state), blocking what it had just moved; this will reduce gears inaccuracies; 3) an NXT motor has an accurate rotation counter (1-degree resolution), allowing you to program something like "brake after rotating for 44 degrees". | |
|
The maximum print density depends on two factors: thickness of the
needle and thickness of the medium (paper sheet): in fact, if the
distance between two holes is too little, the second hole will just
enlarge the first. Using common paper (80 grams per square meter)
and a thin needle (not a sewing needle! those are generally thicker)
I was able to get something like 13 holes in 10 millimeters, that
is 33 dots per inch (33dpi).
Main issue in this project was accuracy of movements (and "brakes"), against "gears tolerance" ("backlash"), incorrect direction, and friction. NXT motors can be programmed to rotate in either direction and can be braked at any moment, as of rotation counters values. | |
|
Because of gearing tolerance, the moving tools have to work in
"safe" and "unidirectional" mode (a moving tool will not print while
going back, and will add some margin at the beginning of its axis)
to not to accumulate/propagate move errors. Also, movement from NXT
motors must be trasmitted along a minimum gearing: too many gears
means accumulation of errors.
To achieve precise horizontal and vertical movements (instead of a bit diagonal), some axis has to be placed in the inner part of the tracks so that movement gets continuously corrected. | |
|
To reduce friction, weight cannot be concentrated on a single axis;
movement of the tools shall be only on "wheels" (the wheels, in
this project, are actually gears moving on geartracks). I found
that 12 and 20 teeth gears have far more friction than 8, 16 and
24 ones: this is because teeth of 12 and 20 ones are wider, and
thus should not be mounted near liftarms.
In order to begin printing at any moment (without needing to have a pre-print tuning session), I used three touch-sensors, one per motor, to safely recognize the end range at inizialization time. Soon after, they will rely on their rotation counters, which are more accurate than getting on the touch-sensor again. | |
|
When building a machine like this, beware of small oscillations in
any direction and tensions against "presumably braked" parts: keep
center of gravity at "center" (and low), and remember that every
action has a corresponding reaction (if the needle cannot make a
hole, the rest of its run will drag up the entire moving tool).
Another possible problem: structures are large and heavy because of the motors (and, in my case, also because of the NXT brick); they should have their moving motor aboard, because if they were "dragged" by some external motor/gearing, more friction is to be expected. | |
|
Having 4-wheels drive is also needed to reduce friction and non-linear
movement (in my first release of 2007, I had only 2 wheels out of
4 connected to the motor: I was lucky to have decent precision
because the moving tool was lighter than the current one). In the
smaller moving tool I had to use a chain (somewhat "in tension")
because a geartrain would have had less precision.
I am sure that overall precision would be better if using bigger "wheels", that is, using 24-teeth gears instead of 16, and some extra demultiplication on gears. | |
|
Another non-trivial issue: the (physical) tension of NXT cables.
Using longer cables and mounting motors and sensors with all plugs
on the same size would reduce the cables drag, but it may not be
very effective (this machine has sub-millimeter precision and moves
things around a 90x70mm area). So I preferred to mount the "dead
weight" NXT on the main moving tool, to reduce the number of "moving"
cables: lower battery life, but more precision and no need to
"calibrate" position of the NXT brick before printing. And nicer
to watch while working.
You cannot try to work out some "nice" detail after starting a project, because patches will accumulate! A previous draft had the "pen" part in the center, so that the printing area began to be visible only after some 50% was printed. I thus rebuilt it placing again the needle structure out of the moving tools (NXT "dead" weight helps balancing). | |
|
The ugliest last-minute patch was the black dead weight bricks
structure (where the piloting minifig sits on), needed to get more
speed (having a lower print speed means that oscillations are not
that high and do not require dead weights to keep low the center
of mass).
Some nice patch: two useless yellow "4-teeth" gears, placed on the rotating part of two motors... to visually verify how much and when the pen motor and the smaller tool motor were rotating. The moving tools should have their center of mass as low as possible, to not to need very slow movements. | |
|
The paper sheet has to resist to the "shock" of a needle making an hole.
In the first version, I had to literally tape it on the
base (and I experienced how much difficult is cleaning tape glue from a
LEGO liftarm!). Even after some fine-tuning, I found that 70g/m²
paper cannot hold that "shock" (so I have to "pixelate 50%" the areas
containing only black pixels... conceptually similar to reduction
of resolution).
So I had to build a press-based cage. Four pistons lock the paper sheet in a rectangle area delimited by rubber joints at the top, without obstacles in the printing area. | |
|
The software on the NXT is in NXC language ("Not Exactly C"). It
loads and expands a bitmap.pbm in memory, then "parks" all motors
and zeroes their rotation counters, then begins "printing".
Printing loop works a column at a time, letting users to see partial drawing. The "slider" (main moving tool) is moved (and braked) to the first printable dot of the column. The program identifies the nearest dot to be "holed" (no need to stop in places where there will be no holes), moves the smaller moving tool in position, makes a hole, recalls the needle and goes on until the end of the column, and until the end of all columns. | |
|
To reduce vibrations, some long pause (500-1000msec) could be added
in critical points (for example, after the needle has reached its
lowest point, after braking moving tools, etc). I preferred slowing
a bit the print speed.
Design idea came after looking a number of NXT plotter projects (moving a true pen/pencil onto paper) and NXT printing projects (pens/pencils used to draw single dots on paper). Instead of paper sheets, other materials can be used, provided they resist to the "shock" of getting holes by a needle. I tried (without considerable success) plastic sheets, cellophane, aluminium, etc. | |
|
I also prototyped a version which featured LEGO truck
wheels to drive paper, but I had to abandon it because of inaccurate
movement. Other prototypes had friction problems and were dismantled.
Building such a machine demonstrates that you can achieve precision movement using LEGO parts only (it only has to be slowed as much as needed). I am now waiting to get some acupuncture needle (some 0.18mm diameter) to try to get some more resolution without ripping paper sheets. Maybe next project could be a CNC-Mill machine. |
|
Presentazione
Si tratta di una stampante "ad ago". Data una bitmap, l'ago forerà un foglio di carta in corrispondenza dei punti colorati della bitmap. | |
Specifiche tecniche:
| |
|
La mia prima vera MOC: una macchina capace di "stampare" su carta
una bitmap utilizzando un ago anziché una penna.
In tal modo, la stampa apparirà come un disegno fatto di buchi. La realizzai per la prima volta tra gennaio e marzo 2007, pochissimi mesi dopo aver acquistato l'NXT; ora ne ho costruita una versione migliorata. C'è una base fissa, su cui viene incastrato il foglio di carta da "stampare", in modo che risulti ben teso. | |
|
Poi c'è un "carrello" che si muove orizzontalmente su questa base.
Su tale carrello, c'è un carrellino che si muove avanti e indietro, in modo perpendicolare alla base. Sul carrellino è montata la "penna" con l'ago. L'ago è l'unico pezzo non LEGO (forse che L'AGO potesse mai essere L'EGO?) L'ago è incollato all'interno di un vecchissimo mattoncino 1x2 che era troppo graffiato e ammaccato per essere degno di essere usato in una MOC seria: desidero precisarlo perché io non mi sognerei mai di modificare o incollare mattoncini. Stavolta, purtroppo, non potevo evitare di fare un'eccezione. | |
|
I motori NXT si prestano veramente bene ad un progetto come questo,
per tre ragioni:
1) un motore NXT si può far girare avanti o indietro e a diverse velocità, permettendo perciò di regolare accuratamente i movimenti; 2) un motore NXT si può fermare "frenando" e mantenendolo poi frenato: ciò permette di trattenere (stabilizzare) parti che prima erano in movimento, riducendo il "gioco" degli ingranaggi, a vantaggio della precisione; 3) un motore NXT ha un contagiri alquanto accurato, che permette di sapere fino a che punto ha girato un motore, e permette perciò di programmare cose del tipo: "frena quando hai girato per 44 gradi". | |
|
La "densità" massima di stampa dipende anzitutto da due fattori:
lo spessore dell'ago e quello della carta: la carta, infatti,
potrebbe non resistere a due buchi troppo vicini (il buco successivo
allargherebbe il precedente). Con carta comune (80gr/mq) e un ago
per imbastire (non per cucire: questi ultimi sono generalmente più
spessi) si possono fare anche 13 buchi ogni 10 millimetri (cioè
33 punti per pollice, ossia 33dpi).
Dunque il problema principale per un progetto del genere è la precisione nei movimenti: cioè occorre dosare bene movimenti e "frenate". I nemici principali sono il "gioco" degli ingranaggi, la coerenza nei movimenti, gli attriti. Per i movimenti e le "frenate" bastano le caratteristiche dei motori NXT; l'asse che porta il movimento deve essere "ingabbiata" tra almeno due occhielli (non deve cioè avere troppo gioco quando è sotto sforzo). | |
|
Contro il gioco degli ingranaggi la prima necessità è che il
movimento sia unidirezionale: quando il carrello torna indietro
accumula infatti parecchio "errore", per cui alla successiva partenza
basta aggiungere un po' di margine per annullare il "gioco" presente
nell'andare e nel tornare (stimabile in almeno un paio di "denti"
di distanza totale). Occorre inoltre evitare di trasmettere il
movimento attraverso troppi ingranaggi (poiché il "gioco" di
ciascuno si sommerebbe agli altri).
Per evitare che un carrello si muova in diagonale, è necessario che oltre a "muoversi" sui suoi binari, sia anche costretto ad una direzione precisa dai binari stessi. Basta cioè aggiungere un asse parallelo ai binari, interno ai binari stessi, in modo che la direzione resti uguale a quella dei binari. | |
|
Contro gli attriti occorre evitare che troppo peso sia concentrato
su qualche parte strisciante (dunque gli assi che regolano la
direzione non devono poggiare sul fondo), ed occorre evitare
combinazioni che generano attrito (principalmente quelle dove sono
concentrati troppi ingranaggi in poco spazio, e quelle dove le
giunzioni sono troppo strette).
Una di queste combinazioni è l'uso di un ingranaggio da 12 o 20 denti accostato a degli assi sovrapposti: "gratterà" molto di più di un ingranaggio da 8 o da 16 posto nello stesso punto. Questo è evidente perché gli ingranaggi da 12 e da 20 hanno la dentatura più larga che quelli da 8-16-24. | |
|
Per evitare che la macchina abbia bisogno di regolazione iniziale
manuale, si possono usare dei sensori al tocco per indicare il "fine
corsa", uno per ogni motore. Dato che i motori NXT hanno un contagiri
che a conti fatti è più preciso del rilevamento del tasto di fine
corsa, allora tali sensori vanno usati solo per il primo "parcheggio"
di carrelli e pennino: dopodiché è bene contare solo sulla distanza
che i motori NXT affermano di aver percorso.
La costruzione deve tener conto che i vari movimenti (e specialmente quello della penna con l'ago) generano parecchie piccole oscillazioni in direzioni imprevedibili, aggravando perciò il problema del "gioco" degli ingranaggi e delle tensioni contro le parti che si supponevano frenate. | |
|
Un altro problema di cui tener conto è che le strutture (in
particolare il carrello e il carrellino) sono grandi e pesanti a
causa dei motori (e, vedremo dopo, anche dell'NXT). Perciò è bene
che siano entrambi dotati di ruote proprie ed entrambi abbiano il
proprio motore "a bordo". Se infatti si muovessero trascinati da
una ruota che sta su un altro supporto, dato il peso la ruota si
muoverebbe "a scatti" (poiché ad un solo ingranaggio sarebbe stato
affidato il trascinamento di tutta la struttura).
Inoltre tutte e quattro le ruote devono essere "motrici", sempre per ridurre e attutire i piccoli "scatti" durante il movimento (nella prima versione del 2007, nonostante le "sole due ruote motrici", la stampa era ragionevolmente precisa proprio perché il peso del carrello e del carrellino era ridotto all'osso). La trasmissione del movimento deve avvenire o su entrambi gli assi contemporaneamente (pertanto occorre lasciare un minimo di "gioco" sulle serpentine, per evitare che su una si concentri molta più potenza che sull'altra), oppure su un asse dal quale si trasmette il movimento poi all'altro (per esempio attraverso una catena). Per eliminare del tutto il movimento a scatti avrei probabilmente dovuto usare ruote più grandi (24 denti) e minor velocità (cioè maggior demoltiplicazione). | |
|
Un altro problema di cui tener conto è l'effetto che avrà la
tensione esercitata dai cavi che vanno dai motori e sensori all'NXT.
Si potrebbero utilizzare i cavi più lunghi e montare motori e
sensori in modo che tutti abbiano il connettore sullo stesso lato,
ma può non bastare per ridurre tale tensione a livelli trascurabili.
Ho scelto perciò di montare sul carrello anche l'NXT: un enorme
"peso morto" che però mi pare più gestibile (meglio consumare
più velocemente le batterie piuttosto che dover posizionare
accuratamente l'NXT prima di avviare la stampa). Inoltre, con l'NXT
sul carrello, la macchina è più bella da vedere durante il
funzionamento.
L'idea che debba essere bello da vedere non si può maturare quando il progetto è già in corso, poiché durante la costruzione vengono sempre fuori piccole (e spesso delicate) correzioni che non si possono evitare. Affinché un progetto Technic e NXT sia bello, è sufficiente che i motori e la "produzione" (in questo caso la stampa) siano sempre visibili durante il funzionamento. Un prototipo poi abbandonato "copriva" per necessità strutturali l'area della sforacchiatura, sicché il disegno (e le eventuali imperfezioni, come ad esempio la carta che si strappa per l'eccessiva densità di buchi) non si poteva vedere se non dopo più di metà della stampa. | |
|
Alcuni elementi li ho dovuti aggiungere più per necessità che per
bellezza. Per capire se e quanto un motore girava, vi ho aggiunto
un ingranaggio o un volante, che poi si sono rivelati utili anche
per "tarare" il numero di giri e provare se il movimento produceva
attriti.
Il carrello e il carrellino devono essere costruiti in modo equilibrato, poiché l'asse della penna ha dei movimenti bruschi (se non fossero alquanto bruschi la stampa sarebbe lentissima e probabilmente nello sforacchiare la carta risentirebbe troppo dell'elasticità di quest'ultima). All'ultimo momento, anche stavolta, stato costretto ad aggiungere un grosso contrappeso per tener fermo il carrellino nei suoi binari. Il contrappeso è costituito da mattoncini-zavorra. Se in qualsiasi momento appare consigliabile una zavorra, significa che qualcosa è stato progettato male: i centri di massa dei motori NXT del carrellino sono infatti quasi oltre l'asse più esterno. | |
|
La carta, dovendo "resistere" alla tensione della sforacchiatura,
deve essere ben tesa e bloccata. Tenerla perfettamente tesa è
davvero arduo, perfino incollandola ai mattoncini LEGO con del
nastro adesivo (come feci nella prima versione del 2007... pentendomene
parecchio poiché per toglier via i residui di colla del nastro
adesivo ho dovuto lavare e strofinare molte volte, ed ancora non
è bastato).
Ho perciò costruito una "pressa" con quattro pistoni e aria compressa (tutto originale LEGO, ovviamente). Inserisco la carta, schiaccio più volte lo stantuffo che dà aria ai pistoni, i quali spingono su un rettangolo di assi Technic su cui è poggiata la carta. Il rettangolo incontra il suo fine corsa in un rettangolo di identiche dimensioni realizzato con i giunti in gomma neri (anche questi sono mattoncini Technic), senza incontrare altri mattoncini intermedi. | |
|
La pressa parte dal basso, spingendo verso l'alto, in modo che al
di sopra del foglio non vi siano altri ostacoli dal lato dei carrelli
e della penna. La struttura che contiene la pressa è sufficientemente
rigida da non deformarsi sensibilmente quando la carta è ben
trattenuta dalla pressa.
Se anche il rettangolo della pressa fosse stato costituito da giunti in gomma, data la forma di questi ultimi il foglio di carta non sarebbe risultato teso in modo piano ma ondulato. La carta ha una sua elasticità e i giunti in gomma non la possono trattenere alla perfezione, per cui durante il funzionamento il piano della carta diventa una sezione di sfera (una "bolla"). Questo avviene in particolare quando la grammatura è scarsa (70g/mq o meno): in tal caso tende più facilmente a strapparsi durante il funzionamento. "Pixellando" al 50% le grosse aree nere del disegno (cioè facendone il filling con un pattern a scacchiera, dunque di fatto dimezzando la risoluzione) si ottiene comunque un ottimo risultato. | |
|
Il programma sull'NXT deve anzitutto caricarsi in memoria la bitmap
(espandendola in formato più facilmente interpretabile) e portare
i carrelli e la penna nei punti di "riposo" (fine corsa), dopodiché
può cominciare la stampa.
La stampa procede per ogni colonna (movimento di precisione del carrello sulla base principale). Prima di stampare una colonna, il carrello deve essere portato al punto giusto e frenato lì, e il carrellino dev'essere portato al primo punto stampabile di tutta la colonna. Nella stampa di una colonna, il programma identifica quale è il prossimo punto da stampare, e vi trascina lì (e poi frena) il carrellino (infatti non è necessario fermarsi in un punto in cui non c'è bisogno di affondare l'ago). Quindi, affonda l'ago a sufficienza per forare la carta, e tira di nuovo su l'ago e frena. Continua così fino al termine dei punti della colonna, e fino al completamento delle colonne. | |
|
Per "stabilizzare" la frenata si potrebbero mettere delle lunghe
pause (500-1000 millisecondi) in alcuni punti critici (per esempio
dopo aver affondato l'ago e dopo aver frenato il carrello o il
carrellino) in modo da "assorbire" le oscillazioni. Può però
essere più efficace ridurre un poco la velocità di stampa. Meglio
ancora agire preventivamente costruendo il tutto in modo da dare
poche oscillazioni e poco gioco.
L'idea di costruire una stampante "sforacchia-carta" mi è venuta guardando altri progetti NXT di gente che aveva costruito plotter (movimento continuo di un pennarello) e stampanti (pennarelli o matite usati per creare punti). Al posto della carta si possono usare altri materiali, purché siano perforabili come la carta. | |
|
La prima versione la realizzai nel 2007, quando ahimé ero sul punto
di traslocare, e pertanto fui costretto a smontare tutto. Produsse
solo cinque o sei stampe, ad una velocità non proprio entusiasmante
(parecchie ore per ogni singola stampa). Quelle stampe sono
tragicamente andate perdute durante il trasloco, e non ebbi neppure
il tempo di fotografarne una da mettere in rete.
Una seconda versione utilizzava ruote da 61mm (incluso il copertone; erano quelle dei camion Technic) per convogliare il foglio di carta sotto la testina di stampa (in modo da non avere un carrello su un carrellino), ma ho dovuto abbandonare il progetto perché era impossibile avere una precisione ragionevole. Ho poi allestito vari prototipi che ho dovuto smontare per problemi di precisione e di attriti. La terza versione che sto presentando adesso è più precisa ma ancora non perfetta e con ampi margini di miglioramento. Anche questa, come le altre, mi è purtroppo più facile da ricostruire che da modificare. Costruire e migliorare questa macchina mi ha dimostrato che con i mattoncini LEGO e con l'NXT si possono creare macchine che facciano lavori di precisione, al solo costo del tempo di funzionamento (per le frenate, per ridurre attriti, etc). Sono in attesa di procurarmi degli aghi da agopuntura (solo 0.18mm di spessore), per tentare di aumentare la risoluzione senza provocare strappi sul foglio in fase di "stampa". Ed il prossimo passo potrebbe essere la costruzione di una CNC-Mill... |
indietro (previous page) - send e-mail - continua (next page)