main index Meet NXT Pin-Plotter III...! Quick links:

NXT pin-plotter III click to zoom

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.
click to zoom
Technical specifications:
  • printable area: 91×70mm (3.6"x2.7")
  • maximum resolution: 1.3 holes/mm (33 dpi), using a 0.3mm needle
  • time to print a bitmap of about 1,500 holes: some 35-40 minutes
  • materials: only LEGO parts (one NXT brick, three NXT motors, three NXT touch-sensors, lots of Technic bricks) except the needle
  • software: 14k of NXC commented source
  • "printable" media: 105mm-wide paper sheets (best results using 80-100g/m² paper), plastic sheets (not too thick), kitchen "aluminium sheets"...
  • NXT brick batteries: 6× 1.2V NiMH AA batteries (rated "2300mAh") allow 100 to 150 minutes printing
  • instructions: sorry, I built it by trial-and-error, refining, adjusting, patching... no CAD, no instructions; I hope this page (and photos) may be sufficient to build some similar machine
click to zoom
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).
click to zoom
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".
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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).
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom


Si tratta di una stampante "ad ago". Data una bitmap, l'ago forerà un foglio di carta in corrispondenza dei punti colorati della bitmap.
click to zoom
Specifiche tecniche:
  • area stampabile: 91×70mm
  • risoluzione massima: 1.3 buchi/mm (33 dpi)
  • durata di una stampa di circa 1500 buchi: sui 35-40 minuti
  • materiale: solo parti LEGO (un'unità NXT e tre motori e tre touch-sensor, e molti mattoncini della serie Technic) eccetto l'ago
  • software: 14k di sorgente in linguaggio NXC
  • stampa su: fogli di carta larghi 105mm (i risultati migliori si ottengono con carta per fotocopie, cioè da 80 a 100 g/mq), fogli di plastica non troppo spessi, fogli di alluminio (di quelli che si usano in cucina)...
  • batterie utilizzate: 6× 1.2V NiMH AA (con rating di "2300mAh"); con una piena carica permettono dai 100 ai 150 minuti di stampa
  • istruzioni: mi dispiace, ma l'ho costruito senza progetto, senza CAD, solo aggiustando e modificando... per cui non posso pubblicare istruzioni per ricostruirla. Spero che le foto e le spiegazioni di questa pagina siano sufficienti a costruire una macchina che abbia la stessa funzionalità.
click to zoom
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.
click to zoom
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.
click to zoom
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".
click to zoom
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).
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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).
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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.
click to zoom
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...
click to zoom


High-resolution bitmap

Low-resolution bitmap

indietro (previous page) - send e-mail - continua (next page)