main index Note: my NXT Pin-Plotter was released on March 5, 2007. I eventually worked out a new release: have a look!

Important: my LEGO® bricks index page is here!

La traduzione in italiano è più in basso in questa stessa pagina!

Disclaimer: yes, I've always been a LEGO® fan! LEGO, the brick configuration, and the minifigure are trademarks of the LEGO Group, which does not sponsor, authorize or endorse this Web site.


Meet the LEGO Mindstorms NXT pin-plotter! click to zoom
Photos? Full photo gallery is here. click to zoom
Concept? a plotter which "writes" by making holes (a needle instead of a pen). click to zoom
Hardware? Mindstorms NXT with its own motors, sensors, cables, and some extra LEGO Technic bricks (and some classic bricks and a Minifig). click to zoom
Time needed to refine the idea? a single "session" in my bathroom. click to zoom
First draft? ready in two evenings, but it was too unstable. click to zoom
First release? currently shown in this page. There is a fixed part (the big yellow rectangle with gray tracks), containing space for the paper sheet (on the right, with opening border; liftarms are joined with 3×3 bent beams with pins) and space for the "moving unit". Tracks are actually Technic gear racks 1×4. The moving unit contains the NXT brick, motors, sensors, cables, gears, etc. click to zoom
How does it work? the NXT moving unit can move along the "X" axis (on the fixed tracks of the base unit), and contains a track oriented on the "Y" axis, on which slides the "pen" group (a motor which moves up and down the needle). click to zoom
A needle? Yes, a steel needle. I got an old 2×4 brick (I don't want to modify my precious Technic bricks and axles) and glued the steel needle in one of the bottom holes. This blue 2×4 brick gets connected to two "dual perpendicular" pin joiners (LEGO part 32557). click to zoom
What's on the "pen group"? There is actually an NXT motor moving a block inside of a track. This means that the group "needle, motor, tracks" is (almost) free to move relatively to the NXT unit (which, can move itself along the "X" axis of the fixed base unit). Yep, the "plotter problem" is "moving a pen (free to move up/down) along an area (independent horizontal and vertical movement)". This is why I had to make the central unit as heavy as possible (two motors on the left of the NXT brick need to compensate oscillations from the sliding part containing the "pen group"). click to zoom
Could you use a true pen instead of a needle? Currently no, but minimum re-engineering is required. Anyways, I wanted to draw by making holes :-) click to zoom
What if batteries get low of juice? Well, the plotting stops there. You will have to manually align up the "pen" (using the three-wing propeller) and compile the program after defining the number of lines to skip plotting (that was shown on-screen before ending). Anyways, after each completed line, a battery check can stop plotting if the NXT is low on juice... Anyways, as you can see in one of the photos (where my left hand is shown), I left sufficient space to access the battery pack of the NXT brick (and I also didn't forget to disable, in NXT setup menu, the auto-shutdown). click to zoom
Moving precision? While we can trust motor tachometers (knowing at any moment how much way a motor did), I used two NXT sensors to get an absolute value for "end of axis" (I must admit that after working on this project, I began to think that tachometers are actually reliable).
When the moving unit does a "carriage return", the light sensor goes "higher than 60" when finds a yellow plate. The touch-sensor goes "pressed" when the pen group reaches its start border.
click to zoom
Pin precision? Well, I know I couldn't do a high-precision machine. But, at least, I had high demultiplication on motor outputs. A common needle can make holes of about 0.3-0.4 millimeters, thus maximum resolution on the paper should be a hole every 0.7-0.8 millimeters. Lesser resolution means that the needle could go in the previous line hole. click to zoom
Bitmap? I took a photo (JPEG image file), reduced it to required plotter resolution (about 80×90 pixels), applied "Floyd-Steinberg" black/white color reduction, then saved in PBM (Portable Bitmap) binary format, then sent it to NXT (it's less than two kilobytes). The controlling program on the NXT will decode the file (filename is hardcoded in the program) and plot it. click to zoom
Holes? An "1" (black) in the bitmap will mean "make a hole"; a "0" will mean "no hole", but this can be changed in the program (adding a negation sign will switch). click to zoom
Software? I wrote it in NXC (Not Exactly C). Commented source will be downloadable on this page in a few days. I think it can be done in NXT-G programming (that is, the software which came on the NXT Mindstorms original CD out of the box) but you will need some trickery to "memorize" the bitmap to be drawn. Anyways I am more pleased using C (and NXC) language.
Bitmap data could be saved (with minimum programming effort) as an external file (or even received on-the-fly via bluetooth messaging), but I didn't (yet) experiment such things.
click to zoom
Stability? This is the main issue because the LEGO bricks have some tolerance. click to zoom
How did you calculate spacing and fine-tuning of distances? Sorry, I did not "calculate"; I evaluated it by trial-and-error. I should instead do a precise calculation of gear reductions and rotations count... Will be fixed in next release! :-) I think that re-engineering a beast like this to get calculated precision values, will require some time. click to zoom
Speed? I had to put some extra pause at the end of every movement. I had always to use "braking" functions (motors never do "coast" stops - only "braking" -, to not to loose precision). Anyways, a full 64×100 printout could require hours!
Will your batteries last? I will investigate speed optimization after resolving all stability issues. The time to make a single hole is the critical parameter (you cannot just "shoot" the needle in the paper at the maximum speed; the needle needs some time - and decent speed - to "enter" in the paper).
click to zoom
How do you block the paper sheet? I needed -sigh!- some Scotch-tape. You cannot imagine forces around a needle hitting a piece of paper until you begin a project like this :-) Also, after a number of holes, the paper sheet becomes... "larger". click to zoom
Next version? I think I will use tires and/or other rubber LEGO stuff to lock out paper (this is actually the main issue), to not to use anymore Scotch-tape. click to zoom
Photo gallery? Have a look here! click to zoom
Instructions? Well, if you are really expert with Technic bricks, photos should be sufficient. I am not willing to create a detailed instructions file until I'll work out the final version. I am showing this first functional prototype only because I'm too happy to say "well, it was possible". click to zoom
Aren't you afraid of Technic bricks scratching? Yes, I am. Next version will use tyres and other LEGO rubber bricks. click to zoom
Why a minifig, there? D'oh... did you think the NXT could run without a pilot minifig moving some levers? ;-) click to zoom
I only have Technic parts from NXT original set... Well, it seems you don't have enough bricks (and NXT set comes without minifigures). click to zoom

More news on next weeks! Stay tuned!



NXT pin-plotter click to zoom
Beh, anche per un maniaco dei Technic ci vuole la ciliegina sulla torta col centro di controllo pilotato da minifig con elmetto e barba incolta :-) click to zoom
La rassegna fotografica è disponibile anche qui (forse ad una velocità maggiore di quella del caricamento da questo stesso sito). click to zoom
L'idea è questa: costruire un plotter che anziché la penna usi un ago per forare la carta. La penna deve avere due gradi di libertà (sull'asse X e sull'asse Y) e deve poter scendere (a forare il foglio) e risalire (in posizione di "riposo"). click to zoom
Nel realizzare il primo prototipo mi ero reso conto dei classici problemi della meccanica di precisione: ogni "gioco", ogni aggancio "elastico", va moltiplicato per tutto ciò che c'è intorno. Vi lascio immaginare i balletti della "penna" dopo il primo foro (è stato anche per questo che l'unità semovente doveva essere "pesante" per definizione... includendo perciò il brick NXT, con due motori alla sua sinistra che bilanciassero le pur piccole oscillazioni della parte scorrevole contenente il pennino sforacchiatore col suo motore messo verticalmente per necessità). click to zoom
La versione che presento qui è ancora lontanuccia dalla perfezione ma finalmente è in grado di "plottare" (sforacchiare) un po' di centimetri quadrati di carta. C'è una base con due binari a cremagliera, sulla quale scorre l'unità centrale con l'NXT, motori, sensori, cavi, ingranaggi e ponte di comando del minifig addetto alla guida :-) click to zoom
Per forare la carta ho usato un comune ago da sartoria, incollato con la colla delle scarpe (Bostik) in uno dei tubi di un vecchissimo e malridottissimo brick 2x4 blu (devo specificarlo per non farvi stracciare le vesti, del resto anch'io rabbrividirei alla sola idea di "taroccare" uno dei miei diecimila mattoncini acquistati uscendo dalle Dark Ages). click to zoom
L'ago non è saldo come il granito ma la soluzione va bene lo stesso; si incastra bene perché i fori Tecnich sono del diametro degli stud (che goduria!). click to zoom
Sì, si potrebbe usare un pennarello al posto dell'ago, ma io non volevo disegnare, volevo piuttosto sforacchiare. click to zoom
Il programma di controllo è scritto in NXC, non si può fare in NXT-G perché per quest'ultimo è impossibile infilarci dentro una bitmap e reagire caso per caso ai pixel neri e bianchi. click to zoom
Il gruppo mobile (che si sposta orizzontalmente sulla coppia di binari a cremagliera della base fissa) comprende l'NXT e i tre motori perché fin dall'inizio ho pensato di tenere ben pesante il gruppo che "scrive" (sforacchia). Infatti ho piazzato i due motori per il movimento orizzontale e verticale (verticale nel senso di profondità, gli assi XY sono sul piano della scrivania) sulla sinistra dell'NXT, per bilanciare il peso del binario scorrevole che contiene il terzo motore e l'ago. click to zoom
Per ottenere abbastanza precisione ho demoltiplicato parecchio i motori; purtroppo quello che scorre lungo l'asse delle Y è demoltiplicato solo di otto volte (dal motore al binario c'è solo una coppia 8:64) perché non avevo più spazio... ed infatti sono costretto a usare il motore con non più del 10-15% di potenza, pena probabili movimenti imprecisi (mezzo millimetro di movimento in più della punta dell'ago sarebbe un errore madornale). La prossima versione sarà più pulita (spero). Sull'asse X e sulla penna c'è invece la "vite infinita" che demoltiplica parecchio, e quindi posso applicare potenze del 60-80-100%. click to zoom
Sull'asse delle X il corretto "ritorno carrello" è garantito dal sensore alla luce, mentre sull'asse delle Y ho usato il sensore al tocco (sarebbe stato più comodo avere due touch-sensors, ma non ho ancora comprato il mio secondo set NXT): mi fido dei tachometers dei motori, ma in quel caso volevo la garanzia assoluta e la velocità massima nel riallineare gli assi. Sulla penna, invece, conto il numero di giri di tutta la "corsa" (700-750 unità di rotazione per poco meno di un centimetro e mezzo di corsa dell'ago). click to zoom
Con questi accorgimenti, data la dimensione dell'ago (circa 0,3mm di diametro) si possono ottenere buchi distanziati di 0,7-0,8mm circa (se si riduce la spaziatura si finisce per strappare il foglio, o si finisce con la punta dell'ago nei buchi adiacenti già fatti). click to zoom
Purtroppo la mia proverbiale pigrizia mi ha impedito di fare un calcolo serio del numero di giri rispetto alla distanza effettivamente percorsa "su carta", per cui ho ottenuto questi risultati provando e riprovando. click to zoom
Quanto alla bitmap da infilare nel programma già "esplosa" pixel per pixel: ho preso una foto, ridotta alle dimensioni 64x100 pixel (solo perché durante il plotting volevo vederla a video; la risoluzione teorica di questa macchina potrebbe sfiorare i 100x160, forse addirittura i 320x200 se non si affonda l'ago fino in fondo), ridotta in scala di grigi, modificata in modo da esaltare i contrasti, ridotta quindi in monocromatico (o bianco o nero), salvata in formato PPM (che produce un file ascii pieno di "0" e "1") e convertita con una macro in Ruby (ma basterebbe un text-editor) in formato sorgente NXC. Più difficile a descriverlo che a farlo. Il valore "1" (nero) significa "forare"; il valore "0" significa "non forare" (bianco). click to zoom
La velocità non è ovviamente granché: in un'ora aveva fatto appena una quindicina di linee delle 100 previste. Dopo ogni foro (e dopo ogni movimento dell'asse) avevo messo infatti piccole pause di 50-100-150 millisecondi per far "stabilizzare" i balletti degli ingranaggi e delle parti sospese (c'è pur sempre la tensione del cavo del motore della "penna", la torre della "penna" che balla, etc). click to zoom
Anche riducendo le pause, c'è comunque tutto il tempo necessario a mandar giù l'ago e a tirarlo di nuovo su (due accelerazioni e due frenate); non posso poi ovviamente spedire giù l'ago al 100% di potenza del motore per evitare che la punta dell'ago anziché piantarsi nella carta ci scivoli sopra vistosamente (solo all'inizio il foglio di carta è teso in tutte le direzioni. click to zoom
Le batterie NiMH da 2700mAh (dichiarate tali, ma non ci credo molto) sembrano non bastare a sforacchiare una bitmap complessa come la sopracitata foto (che ha più della metà dei pixel "neri"). Dopo ogni riga controllo comunque i millivolt rimasti, e se scendono troppo (BatteryLevel sotto i 6700, quando a occhio e croce il motore comincia a mostrare di essere "a corto di zuccheri") allora segnalo con un po' di bip-bip la situazione e fermo la "stampa". click to zoom
Il punto debole è tenere il foglio di carta perennemente in tensione. Ho dovuto incollare strisce di nastro adesivo su tre dei quattro lati (la chiusura "a scatola" e il peso del gruppo mobile non bastava neppure per il primo foro), ma già dopo una dozzina di fori il foglio comincia a diventare morbido; superati i 200-300 fori, il foglio, pur incollato, si è già piegato e diventato elastico (ecco perché tanta corsa dell'ago). Questo significa che l'immagine finale non sarà perfettamente allineata: per questo il plotter che presento non è ancora giudicabile come completo. click to zoom
Come si vede dalle prime foto, il foglio è tenuto sospeso sul marchingegno "apribile" formato da due quadrati, in modo che l'ago, nel punto più basso dopo aver fatto un foro, non tocchi mai la superficie della scrivania. click to zoom
Lo schermo, i tasti e il vano batterie dell'NXT sono stati deliberatamente lasciati scoperti. Tocco artistico, l'asse che va dal binario scorrevole della "penna" al suo motore passa poco sopra il display (e presso il motore avanza un ingranaggio in più per usi futuri). Ho usato qualche volante come "tappo" per imbullonare gli assi. click to zoom
Ho realizzato il tutto senza tracciare su carta neppure una linea, tutto realizzato a mente, secondo l'inventiva del momento. Tutto il lavoro sarà costato una trentina di ore, per lo più passate smontando le soluzioni non efficaci. Non è granché come eleganza, ma una volta in moto a sforacchiare fa il suo figurone. click to zoom
L'attrito dello scivolamento dei binari sugli assi (e sul blocco su cui è montato l'ago) fa fare di tanto in tanto qualche "salto" alla parte che dovrebbe scorrere. Tra attriti indesiderati (che producono detti "salti") ed elasticità indesiderate (il foglio che subisce non proprio passivamente le sforacchiature), mi sono convinto che la prossima versione dovrà essere totalmente rifatta usando qualcosa in gomma... e cioè le ruote dei Crane e Truck e gli occhielli in gomma. Ci dovrò riflettere. Magari con la carta che non è fissa ma viene trascinata, come nelle stampanti economiche per computer. Nel frattempo continuo a sforacchiare... click to zoom
Nota: continuerò a lavorare nei prossimi mesi a questo progettino, nell'attesa di trovare qualcun altro in rete che abbia saputo far meglio di me. click to zoom
Importante: non chiedetemi le spiegazioni dettagliate per la costruzione. Per i più bravi, le foto dovrebbero essere sufficienti; per gli altri... dovrete aspettare che io realizzi la versione definitiva (per la quale preparerò anche le istruzioni complete). Ovviamente le novità le troverete su questa stessa pagina. click to zoom