Difference between revisions of "Persistence of Vision Display"

From FabLabGenovaWiki
Jump to: navigation, search
(Primi test)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
Il progetto consta nella realizzazione di un display basato sul principio della [http://en.wikipedia.org/wiki/Persistence_of_vision Persistence of Vision]. In questo genere di display un array di led controllato da un microcontrollore viene mosso molto rapidamente, in modo che occupi successivamente nello spazio le posizioni di diverse colonne di una matrice virtuale di led. Variando la configurazione dei led in ogni posizione della matrice virtuale, se la velocità è sufficente perchè tutta l'immagine resti impressa sulla retina, si ottiene come effetto una matrice di led virtuali costituita da una sola colonna che viene utilizzata per rappresentare tutte le colonne della matrice in una sorta di multiplex fisico.
 
Il progetto consta nella realizzazione di un display basato sul principio della [http://en.wikipedia.org/wiki/Persistence_of_vision Persistence of Vision]. In questo genere di display un array di led controllato da un microcontrollore viene mosso molto rapidamente, in modo che occupi successivamente nello spazio le posizioni di diverse colonne di una matrice virtuale di led. Variando la configurazione dei led in ogni posizione della matrice virtuale, se la velocità è sufficente perchè tutta l'immagine resti impressa sulla retina, si ottiene come effetto una matrice di led virtuali costituita da una sola colonna che viene utilizzata per rappresentare tutte le colonne della matrice in una sorta di multiplex fisico.
 
I metodi per ottenere quest'effetto sono essenzialmente due: tramite una rotazione o tramite un oscillazione orizzontale. Noi ci siamo concentrati sul primo metodo in quanto un'oscillazione orizzontale è più complessa da realizzare meccanicamente e se eseguita in maniera non motorizzata necessita di dispositivi di controllo notevolmente più dispendiosi ( leggi accellerometri ) per poter dare una sincronizzazione accettabile, e quindi una buona leggibilità.
 
I metodi per ottenere quest'effetto sono essenzialmente due: tramite una rotazione o tramite un oscillazione orizzontale. Noi ci siamo concentrati sul primo metodo in quanto un'oscillazione orizzontale è più complessa da realizzare meccanicamente e se eseguita in maniera non motorizzata necessita di dispositivi di controllo notevolmente più dispendiosi ( leggi accellerometri ) per poter dare una sincronizzazione accettabile, e quindi una buona leggibilità.
 +
 
Il sistema che abbiamo intenzione di realizzare noi è invece più semplice sia da un punto di vista meccanico che elettronico/informatico. Meccanicamente è essenzialmente una bici in cui la ruota posteriore è stata distanziata ed elevata rispetto al suo originale asse ( quindi con una catena lunghissima ); su questa ruota così posizionata sono fissati i led e l'elettronica di controllo. Elettronicamente la problematica principale è legata al fatto che la ruota essendo azionata a pedali non avrà una velocità di rotazione fissa e costante, ma oscillerà intorno ad un valor medio, quindi è necessario che il microcontrollore conosca ( teoricamente ad ogni istante ) la velocità di rotazione effettiva.
 
Il sistema che abbiamo intenzione di realizzare noi è invece più semplice sia da un punto di vista meccanico che elettronico/informatico. Meccanicamente è essenzialmente una bici in cui la ruota posteriore è stata distanziata ed elevata rispetto al suo originale asse ( quindi con una catena lunghissima ); su questa ruota così posizionata sono fissati i led e l'elettronica di controllo. Elettronicamente la problematica principale è legata al fatto che la ruota essendo azionata a pedali non avrà una velocità di rotazione fissa e costante, ma oscillerà intorno ad un valor medio, quindi è necessario che il microcontrollore conosca ( teoricamente ad ogni istante ) la velocità di rotazione effettiva.
 
==Primi test==
 
==Primi test==
I primi test sono stati eseguiti utilizzando un PIC16F1519 che controllava direttamente 9 LED, alimentato cone due batterie ministilo. In questa prima versione realizzata solo come prototipo per testare le potenzialità del sistema non vi era integrato nessun sistema di controllo della velocità di rotazione ( o traslazione, a seconda di come si sceglieva di usarlo ). Il prototipo ha funzionato ragionevolmente bene, anche senza alcun tipo di sincronizzazione riuscire a 'beccare' la velocità di movimento giusta perchè la scritta resti ferma non è affatto facile, questo ci ha convinto dell'opportunità di inserire un dispositivo di controllo nella versione definitiva. Inoltre ci ha permesso di valutare a che velocità dovesse girare la ruota di bicicletta per ottenere l'effetto voluto.
+
[[File:Pov_testing1.jpg|thumb|left|La scheda di testing]][[File:Pov_testing2.jpg|300px|thumb|right|La scheda di testing]]
 +
I primi test sono stati eseguiti utilizzando un PIC16F1519 che controllava direttamente 9 LED, alimentato cone due batterie ministilo. La scheda prevedeva anche una eeprom I²C tipo 24AAxxx, che tuttavia non è mai stata montata, quindi quella parte del circuito risulta al momento non testata, anche se in linea di principio dovrebbe funzionare. In questa prima versione realizzata solo come prototipo per testare le potenzialità del sistema non vi era integrato nessun sistema di controllo della velocità di rotazione ( o traslazione, a seconda di come si sceglieva di usarlo ). Il prototipo ha funzionato ragionevolmente bene, anche senza alcun tipo di sincronizzazione riuscire a 'beccare' la velocità di movimento giusta perchè la scritta resti ferma non è affatto facile, questo ci ha convinto dell'opportunità di inserire un dispositivo di controllo nella versione definitiva. Inoltre ci ha permesso di valutare a che velocità dovesse girare la ruota di bicicletta per ottenere l'effetto voluto.
 +
 
 
Il progetto è disponibile anche se al momento non ha molto senso realizzarlo. In futuro sarebbe carino riprenderlo, inserendo un sensore a effetto Hall o un accellerometro per sincronizzarlo: sarebbe molto carino, ma al momento non è tra i programmi.
 
Il progetto è disponibile anche se al momento non ha molto senso realizzarlo. In futuro sarebbe carino riprenderlo, inserendo un sensore a effetto Hall o un accellerometro per sincronizzarlo: sarebbe molto carino, ma al momento non è tra i programmi.
[[File:Pov_testing1.jpg|thumb|left|La scheda di testing]][[File:Pov_testing2.jpg|thumb|right|La scheda di testing]]
+
I file eagle dello schema sono disponibili in questo zip: [[File: PoVDisplayTest.zip]]
 +
 
  
==Versione 0.1==
 
  
 +
 +
==Versione 0.1 - PoV Display "Big"==
 +
Questa invece è la parte attiva del progetto, descritta a grandi linee nella parte introduttiva. Attualmente la meccanica è sostanzialmente ultimata e necessita solo di qualche rinforzo. L'elettronica è in fase di sviluppo, il firmware ancora da progettare.
 
===Elettronica===
 
===Elettronica===
 +
[[File:Hall.jpg|300px|thumb|right|Il trigger ad effetto Hall. A sinistra si nota il piccolo sensore A1301.]]
 
Per rilevare la velocità angolare abbiamo scelto di utilizzare un sensore ad effetto Hall montato sulla parte in rotazione che invii un segnale ogni qual volta si passi vicino ad un determinato punto su cui è posizionato un magnete permanente. Si è preferito rispetto ad altre soluzioni ( ottiche, a IR o altro ) in quanto presentava meno interferenze ed era più stabile meccanicamente.
 
Per rilevare la velocità angolare abbiamo scelto di utilizzare un sensore ad effetto Hall montato sulla parte in rotazione che invii un segnale ogni qual volta si passi vicino ad un determinato punto su cui è posizionato un magnete permanente. Si è preferito rispetto ad altre soluzioni ( ottiche, a IR o altro ) in quanto presentava meno interferenze ed era più stabile meccanicamente.
Il sensore usato è un [http://www.google.it/url?sa=t&rct=j&q=a1301&source=web&cd=1&ved=0CDAQFjAA&url=http%3A%2F%2Fwww.allegromicro.com%2F~%2Fmedia%2FFiles%2FDatasheets%2FA1301-2-Datasheet.ashx&ei=g897Ut75K6mC4gSo24CIBA&usg=AFQjCNGP2x1z7lQNXyvXSqw9jJeZfRIxRg&bvm=bv.56146854,d.bGE A1301], che ha caratteristiche adeguate al progetto ed è reperibile ad un costo minimo sia su ebay che sui principali negozi di elettronica. Tale sensore avendo un uscita analogica non può generare direttamente un interrupt per il PIC. Pertanto si utilizza un µA741 come comparatore di tensione per generare un interrupt ( o un input ) digitale, confrontando la tensione in uscita dal sensore con un valore ottenuto da un trimmer, che permette la taratura rispetto al campo magnetico locale. Lo schema e il circuito stampato ( banalissimo ) è disponibile in formato eagle [[attachment: hall_effect_interrupter.sch]][[attachment: hall_effect_interrupter.brd]]; il led e la sua resistenza saranno omessi nella versione finale dato che servivano solo per debugging.
+
Il sensore usato è un [http://www.google.it/url?sa=t&rct=j&q=a1301&source=web&cd=1&ved=0CDAQFjAA&url=http%3A%2F%2Fwww.allegromicro.com%2F~%2Fmedia%2FFiles%2FDatasheets%2FA1301-2-Datasheet.ashx&ei=g897Ut75K6mC4gSo24CIBA&usg=AFQjCNGP2x1z7lQNXyvXSqw9jJeZfRIxRg&bvm=bv.56146854,d.bGE A1301], che ha caratteristiche adeguate al progetto ed è reperibile ad un costo minimo sia su ebay che sui principali negozi di elettronica. Tale sensore avendo un uscita analogica non può generare direttamente un interrupt per il PIC. Pertanto si utilizza un µA741 come comparatore di tensione per generare un interrupt ( o un input ) digitale, confrontando la tensione in uscita dal sensore con un valore ottenuto da un trimmer, che permette la taratura rispetto al campo magnetico locale. Lo schema e il circuito stampato ( banalissimo ) è disponibile in formato eagle, nello zip del progetto; il led e la sua resistenza saranno omessi nella versione finale dato che servivano solo per debugging.
 +
 
 +
Questo sistema andrà interfacciato con il pin di interrupt esterno del PIC RB0, e consentirà in combinazione con Timer0 di conoscere il periodo dell'ultima rotazione. Pur essendo ben lontani dalla situazione ideale in cui si conosce in ogni istante la velocità angolare del sistema, considerando che l'inerzia non faccia variare di troppo la velocità della ruota dovrebbe essere sufficiente a ottenere un'immagine ragionevolmente stabile.
 +
 
 +
Sono anche state realizzate 3 schede che consentono il controllo di 8 LED ad alta luminosità ciascuna tramite degli I/O del pic anche a bassa potenza. Ogni led infatti è controllato tramite un transistor NPN BC337 che permette di ridurre drasticamente la potenza dissipata sul PIC. Le schede saranno connesse alla madre tramite dei cavi a perforazione di isolante ( i cui header sono già montati ) a 10 poli ( uno per ogni LED + 2 di alimentazione ). Sono previste sia le resistenze di base dei transistor sia quelle di protezione dei LED. Nel caso si ritengano superflue le prime è sufficiente inserire dei ponticelli in rame al loro posto. Anche di queste schede è disponibile il progetto eagle, scaricabile e modificabile.
 +
 
 +
Il primo prototipo della scheda madre ha riportato gravi danni ed è in fase di riprogettazione integrale, quindi non viene allegato. Stiamo lavorando su una nuova scheda che utilizzi una nuova memoria EEPROM SPI anziche I²C, assai più rapida ( o forse addirittura una memoria FLASH ); il PIC16F1519 in QFNP inizialmente previsto verrà probabilmente sostituito da un vecchio ma affidabile 16F877A in PDIP e quindi l'alimentazione portata a 5.0V. Questo influenzerà anche il dimensionamento delle resistenze della scheda LED.
 +
Qua disponibile il dowload dei file:[[File: Hall_effect_interrupter+Leds.zip]]

Latest revision as of 19:11, 7 November 2013

Il progetto consta nella realizzazione di un display basato sul principio della Persistence of Vision. In questo genere di display un array di led controllato da un microcontrollore viene mosso molto rapidamente, in modo che occupi successivamente nello spazio le posizioni di diverse colonne di una matrice virtuale di led. Variando la configurazione dei led in ogni posizione della matrice virtuale, se la velocità è sufficente perchè tutta l'immagine resti impressa sulla retina, si ottiene come effetto una matrice di led virtuali costituita da una sola colonna che viene utilizzata per rappresentare tutte le colonne della matrice in una sorta di multiplex fisico. I metodi per ottenere quest'effetto sono essenzialmente due: tramite una rotazione o tramite un oscillazione orizzontale. Noi ci siamo concentrati sul primo metodo in quanto un'oscillazione orizzontale è più complessa da realizzare meccanicamente e se eseguita in maniera non motorizzata necessita di dispositivi di controllo notevolmente più dispendiosi ( leggi accellerometri ) per poter dare una sincronizzazione accettabile, e quindi una buona leggibilità.

Il sistema che abbiamo intenzione di realizzare noi è invece più semplice sia da un punto di vista meccanico che elettronico/informatico. Meccanicamente è essenzialmente una bici in cui la ruota posteriore è stata distanziata ed elevata rispetto al suo originale asse ( quindi con una catena lunghissima ); su questa ruota così posizionata sono fissati i led e l'elettronica di controllo. Elettronicamente la problematica principale è legata al fatto che la ruota essendo azionata a pedali non avrà una velocità di rotazione fissa e costante, ma oscillerà intorno ad un valor medio, quindi è necessario che il microcontrollore conosca ( teoricamente ad ogni istante ) la velocità di rotazione effettiva.

Primi test

La scheda di testing
La scheda di testing

I primi test sono stati eseguiti utilizzando un PIC16F1519 che controllava direttamente 9 LED, alimentato cone due batterie ministilo. La scheda prevedeva anche una eeprom I²C tipo 24AAxxx, che tuttavia non è mai stata montata, quindi quella parte del circuito risulta al momento non testata, anche se in linea di principio dovrebbe funzionare. In questa prima versione realizzata solo come prototipo per testare le potenzialità del sistema non vi era integrato nessun sistema di controllo della velocità di rotazione ( o traslazione, a seconda di come si sceglieva di usarlo ). Il prototipo ha funzionato ragionevolmente bene, anche senza alcun tipo di sincronizzazione riuscire a 'beccare' la velocità di movimento giusta perchè la scritta resti ferma non è affatto facile, questo ci ha convinto dell'opportunità di inserire un dispositivo di controllo nella versione definitiva. Inoltre ci ha permesso di valutare a che velocità dovesse girare la ruota di bicicletta per ottenere l'effetto voluto.

Il progetto è disponibile anche se al momento non ha molto senso realizzarlo. In futuro sarebbe carino riprenderlo, inserendo un sensore a effetto Hall o un accellerometro per sincronizzarlo: sarebbe molto carino, ma al momento non è tra i programmi. I file eagle dello schema sono disponibili in questo zip: File:PoVDisplayTest.zip



Versione 0.1 - PoV Display "Big"

Questa invece è la parte attiva del progetto, descritta a grandi linee nella parte introduttiva. Attualmente la meccanica è sostanzialmente ultimata e necessita solo di qualche rinforzo. L'elettronica è in fase di sviluppo, il firmware ancora da progettare.

Elettronica

Il trigger ad effetto Hall. A sinistra si nota il piccolo sensore A1301.

Per rilevare la velocità angolare abbiamo scelto di utilizzare un sensore ad effetto Hall montato sulla parte in rotazione che invii un segnale ogni qual volta si passi vicino ad un determinato punto su cui è posizionato un magnete permanente. Si è preferito rispetto ad altre soluzioni ( ottiche, a IR o altro ) in quanto presentava meno interferenze ed era più stabile meccanicamente. Il sensore usato è un A1301, che ha caratteristiche adeguate al progetto ed è reperibile ad un costo minimo sia su ebay che sui principali negozi di elettronica. Tale sensore avendo un uscita analogica non può generare direttamente un interrupt per il PIC. Pertanto si utilizza un µA741 come comparatore di tensione per generare un interrupt ( o un input ) digitale, confrontando la tensione in uscita dal sensore con un valore ottenuto da un trimmer, che permette la taratura rispetto al campo magnetico locale. Lo schema e il circuito stampato ( banalissimo ) è disponibile in formato eagle, nello zip del progetto; il led e la sua resistenza saranno omessi nella versione finale dato che servivano solo per debugging.

Questo sistema andrà interfacciato con il pin di interrupt esterno del PIC RB0, e consentirà in combinazione con Timer0 di conoscere il periodo dell'ultima rotazione. Pur essendo ben lontani dalla situazione ideale in cui si conosce in ogni istante la velocità angolare del sistema, considerando che l'inerzia non faccia variare di troppo la velocità della ruota dovrebbe essere sufficiente a ottenere un'immagine ragionevolmente stabile.

Sono anche state realizzate 3 schede che consentono il controllo di 8 LED ad alta luminosità ciascuna tramite degli I/O del pic anche a bassa potenza. Ogni led infatti è controllato tramite un transistor NPN BC337 che permette di ridurre drasticamente la potenza dissipata sul PIC. Le schede saranno connesse alla madre tramite dei cavi a perforazione di isolante ( i cui header sono già montati ) a 10 poli ( uno per ogni LED + 2 di alimentazione ). Sono previste sia le resistenze di base dei transistor sia quelle di protezione dei LED. Nel caso si ritengano superflue le prime è sufficiente inserire dei ponticelli in rame al loro posto. Anche di queste schede è disponibile il progetto eagle, scaricabile e modificabile.

Il primo prototipo della scheda madre ha riportato gravi danni ed è in fase di riprogettazione integrale, quindi non viene allegato. Stiamo lavorando su una nuova scheda che utilizzi una nuova memoria EEPROM SPI anziche I²C, assai più rapida ( o forse addirittura una memoria FLASH ); il PIC16F1519 in QFNP inizialmente previsto verrà probabilmente sostituito da un vecchio ma affidabile 16F877A in PDIP e quindi l'alimentazione portata a 5.0V. Questo influenzerà anche il dimensionamento delle resistenze della scheda LED. Qua disponibile il dowload dei file:File:Hall effect interrupter+Leds.zip