3d python led cube
Rieccomi con un progettino che stavo continuando da alcuni giorni e ora vengo a pubblicare.
Molti avranno sentito parlare e avranno visto i famosi “Cubi di led”, essi sono dei mucchi di led saldati insieme in modo da formare un cubo e che vengono accesi in modo alternato per fare delle animazioni.
Qualche giorno fa mi sono arrivati 500 led blu che avevo ordinato su un sito cinese, così ho sfruttato l’abbondanza di risorse per provare anche io a fare un piccolo cubo di led.
Solitamente per questi lavoretti si usa un bel microcontrollore e qualche multiplexer, però io non avevo voglia di usare nè l’uno nè l’altro. Ho quindi pensato di sfruttare dei contatori.
In elettronica i contatori sono degli integrati con un funzionamento abbastanza semplice: si alimentano hanno 10 pin di uscita, che possono avere un valore digitale, ovvero 0 o 1, che corrispondono a 0V e 5v. Appena alimentato l’integrato si accende solo la prima delle 10 uscite, che sono numerate a partire da 0, quindi in realtà si dice che l’ultima è la nona.
Sull’ integrato c’è un pin in ingresso, su cui puoi mandare un segnale ancora digitale a 5v e poi rilasciarlo. Così facendo il contatore “incrementerà di 1”, quindi l’uscita numero 0 si spegnerà e si accenderà invece l’uscita numero 1.
Dunque continuando a mandare inpulsi su questo pin in ingresso, chiamato “Clock”, è possibile accendere una ad una tutte le uscite. Se mettiamo 10 led, uno per ogni uscita, potremo accenderli in successione uno dopo l’altro. Arrivati al nono si ricomincia da 0.
Cosa dovrebbe centrare tutto questo con un cubo di led?
Beh questo può aiutare ad avere ulteriori pin di output, se come nel mio caso vogliamo usare la porta PARALLELA per comandare il tutto, ed evitare di utilizzare microcontrollori.
Prima di parlare di questo però bisogna parlare della struttura del cubo.
Come tutti sappiamo i led sono dei diodi che emettono luce; hanno due estremità o pin: un catodo e un anodo, ovverosia il + e il – . Alimentando inversamente o da entrambe le parti con lo stesso segno il led resta spento.
Ora quindi dobbiamo fare un cubo; nel mio caso ho voluto farlo 4x4x4, ovvero di 64 led: 4 livelli di 16 led l’uno.
Il primo passo è stato prendere un supporto di plastica che avevo in casa e farci 16 buchi con un trpano, perfettamente allineati tra loro. Ho sfruttato questo per tenere i led ben allineati e distaziati mentre li saldavo. Così ho iniziato mettendo i catodi( il – ) di ogni led in comune con quello vicino, in modo da unire tutti i catodi dei led.
A questo punto avevo 16 anodi rivolti verso di me e un unico pin di catodo. Così ho iniziato a lavorare a livelli e a fare 4 di questi livelli. Poi ho messo questi vari “livelli” uno sopra l’altro per formare fattualmente il cubo,ho saldato assieme tutti gli anodi in verticale, ossia che guardando il cubo dall’ alto ci fosse un unico anodo per ogni colonna
A questo punto ho messo il tutto su una vecchia basetta millefori che avevo in casa, che ho riciclato per questo progetto. Ora mi trovavo davanti a un bel cubo, con sotto 16 pin di ingresso e sul lato 4 masse , una per ogni “piano” del cubo.
Ora entra in gioco l’ingengno: ho trovato questo metodo buono per far funzionare tutto:
la porta parallela del computer ha 8 pin in uscita digitali, come quelli di cui ho parlato prima del contatore, con la differenza che questi possono essere accesi contemporaneamente.
Per controllare tutti i led ho fatto così: usando 2 contatori accendo uno dopo l’altro i 16 pin alla base. Dato che il contatore ( i hcf4017be che ho usato io ) ha solo 10 uscite ne ho usati 2: il primo lo ho collegato dal pin 0 al pin 7 ai primi anodi alla base, poi l’8 pin lo ho lasciato scollegato( per poter avere un pin che teneva tutti quelli del primo contatore spenti per vedere quelli del secondo ),il pin 9, l’ultimo, lo ho collegato al clock dell’ altro contatore, che andava poi a sua volta a collegarsi ai rimanenti led dal pin 0 al pin 7, poi ho lasciato vuoto il pin 8 e 9 per avere anche qui dei pin che tenevano tutti i led del contatore 2 spenti per tenere accesi solo quelli del contatore 1. Ho quindi collegato tutto e poi ho collegato anche le alimentazioni dei contatori e i pin di reset( come dice il nome resettano il valore del contatore) alla parallela. Quindi la parallela aveva collegato l’alimentazione dei contatori, il clock del contatore 1, i 2 reset e i 4 pin dei catodi dei “piani”.
Finito di collegare tutto ho iniziato a fare il software in python.
Per fare il software ho usato la libreria PyParallel, che per non sò qualche motivo sotto linux non funziona se non si esegue prima
sudo modprobe -r lp
sudo modprobe ppdev
e si esegue successivamente python da root.
Il programma appena partito accende i contatori e li resetta. Poi è possibile richiedere tramite una funzione di accendere un certo led, dando le coordinate x,y,z, il programma al suo interno inizia un ciclo con cui dà al contatore il clock fino a quando non arriva ad accendere il led desiderato; mentre lo sta facendo tiene tutti i catodi dei piani a 1, cioè che la parallela invia il + su tutti i piani, così mentre si accendono i led intermedi prima di arrivare a quello desiderato non si veda nulla. Appena il contatore arriva al led desiderato viene acceso il piano che interessa mandando 0 e lasciando gli altri piani a 1.
Sembra che funzioni abbastanza bene il sistema, se non che non è ultraveloce e soprattutto non è il massimo se si vogliono accendere tanti led assieme, perchè non essendo possibile accendere 2 led di una diversa fila contemporaneamente è necessario allora accendere uno e poi l’altro velocissimamente, così da non mostrare il tempo che separa lo spegnimento del primo dall’ accensione del seguente.
il codice sorgente è sull’ svn , qui, però non sò se possa essere molto utilizzabile dato che per settare i pin di uscita della parallela ho tenuto conto dell’ ordine in cui avevo collegato ai vari pin, quindi bisognerebbe fare tutto identico a me… comqunque almeno per avere una consulatazione il sorgente è lì. Ho fatto una foto che vi posto di seguito e un breve video messo su youtube.
Filed under: Programmazione | 1 Comment
Tag:3d, cube, cubo, led, parallel, Programmazione, programming, python
bello ma sarebbe meglio al buio e magari dal vivo.
ma questi 500 led cinesi come vanno ? convengono ?