Pages: [1]   Go Down
Author Topic: Propeller Clock con Arduino  (Read 2162 times)
0 Members and 1 Guest are viewing this topic.
Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti, sono nuovi qui nel mondo di Arduino
premetto che ho basi e conoscenze a sufficienza di elettronica e informatica.

arriviamo al dunque: qualche giorno fa ho trovato su internet il cosiddetto "Propeller Clock". sono stato giorni interi a cercare discussioni/forum/topic riguardo l'utilizzo di arduino invece del PIC.
Ora non che voglia sapere tutto il progetto perchè sarebbe troppo da chiedere, ma voglio solo sapere gentilmente come funziona la sequenza di accensione dei led.
So che ci sono altri topic qui in giro ma nessuno è completo!

Grazie ancora e scusate il lungo discorso smiley-grin
Logged


Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5494
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

He he smiley
funziona con un encoder, in una data posizione si accendono tot led in un altra altri led e così via...
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

He he smiley
funziona con un encoder, in una data posizione si accendono tot led in un altra altri led e così via...

beh questo lo avevo notato anche io xD ma penso ci sia anche uno schema che ti dica quali led bisogna accendere e quali no
o mi sbaglio?
magari un pezzo di codice mi sarebbe anche di aiuto
HELPPPPP!!!! smiley-grin
Logged


0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5790
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se non sbaglio il propeller clock e' open source, quindi se vai sul sito dell'autore trovi tutto.
sta a te poi convertire hw e sw per arduino
http://www.bobblick.com/techref/projects/propclock/propclock.html
« Last Edit: December 30, 2011, 03:24:26 pm by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

se non sbaglio il propeller clock e' open source, quindi se vai sul sito dell'autore trovi tutto.
sta a te poi convertire hw e sw per arduino

ho visto il sito, ma i codici ce mette a disposizione sono solo per pic che nn ho mai usato :O infatti come da post chiedevo appunto se qualcuno aveva già provato a farlo e magari mi dava suggerimenti sulla sequenza di led tutto qui  smiley-mr-green
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quello che dice ratto; viene determinata la posizione angolare della striscia LED rotante e secondo della posizione vengono accesi i LED per fare una scritta o un disegno.

È una forma particolare del POV (persistence of vision, non il senso in ambite di intrattenimento maschile, come mi avevano fatto notare  smiley-wink smiley-wink ) dove il pilotaggio dei LED é legato alla posizione durante la rotazione.
Non é necessario avere un encoder, ma basta anche un unico sensore di posizione (ottico o hall) col quale si puó determinare la posizione di Home e la velocitá di rotazione e da quello sapere la posizione durante la rotazione.

L' unico problemino é l' alimentazione se non si vuole mettere delle batterie sulla parte rotante. La soluzione sono dei contatti (tipo spazole del motore DC) che portano la tensione sul rotore oppure un generatore che viene azionato dal motore che gira il braccio. L' elettronica puó essere autonoma oppure essere pilotata attraverso un xbee o un modulo di radiofrequenza.

esempi:
http://www.circuitlake.com/arduino-ceiling-fan-led-display.html e http://www.box.com/shared/h50r7ka65i

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1232186941 ( esemio come codificare i vari caratteri).

Ciao Uwe

« Last Edit: December 30, 2011, 03:09:09 pm by uwefed » Logged

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5790
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la cosa piu' interessante del progetto originale, che e' del 1996 quindi si puo' dirfe che ha inventato lui questo tipo di orologi, e' proprio la mancanza di sensori per la posizione, in quanto usa una delle fasi create con la modifica del motore
Code:
"There are three terminals inside most small DC motors,
and it acts a lot like three-phase alternating current,
so it must be rectified back to DC.
A nice side effect of this is that the position of the motor can be detected
 by taking one of the phases straight into the microprocessor."
« Last Edit: December 30, 2011, 03:23:18 pm by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quello che dice ratto; viene determinata la posizione angolare della striscia LED rotante e secondo della posizione vengono accesi i LED per fare una scritta o un disegno.

È una forma particolare del POV (persistence of vision, non il senso in ambite di intrattenimento maschile, come mi avevano fatto notare  smiley-wink smiley-wink ) dove il pilotaggio dei LED é legato alla posizione durante la rotazione.
Non é necessario avere un encoder, ma basta anche un unico sensore di posizione (ottico o hall) col quale si puó determinare la posizione di Home e la velocitá di rotazione e da quello sapere la posizione durante la rotazione.

L' unico problemino é l' alimentazione se non si vuole mettere delle batterie sulla parte rotante. La soluzione sono dei contatti (tipo spazole del motore DC) che portano la tensione sul rotore oppure un generatore che viene azionato dal motore che gira il braccio. L' elettronica puó essere autonoma oppure essere pilotata attraverso un xbee o un modulo di radiofrequenza.

esempi:
http://www.circuitlake.com/arduino-ceiling-fan-led-display.html e http://www.box.com/shared/h50r7ka65i

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1232186941 ( esemio come codificare i vari caratteri).

Ciao Uwe





grazie uwe sei grande smiley-grin ora mi metto subito all'opera per capire lo sketch e il funzionamento smiley-wink però un ultima domanda: xk usare un registro se bastano anke solo 7 led?
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi cogli perplesso; non so dove viene citato il "registro"
se Ti riferisci a questa frase:
Quote
also have another version where i use bitwise operatosr and the PORTs instead of digitalWrite and an interrupt to start the writing instead of the loop...
I vari Pin sono raguppati in 3 port. Scrivere direttamente il dato come byte nel port é molto piú veloce che scrivere 7 volte digitalWrite(),
leggi: http://www.arduino.cc/en/Reference/PortManipulation
Ciao Uwe
Logged

Marche
Offline Offline
Edison Member
*
Karma: 33
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In teoria il sensore che determina la fase di accensione dei led non servirebbe se la velocità del motore è costante; in questo caso si potrebbe impostare il delay attraverso un potenziometro per sincronizzare i led.
Supponiamo di voler visualizzare un cerchio: a velocità costante se il delay è troppo basso non vedrai una circonferenza completa ma una figura stile pacman perchè i led si spengono prima di finire un giro completo; se il delay è troppo alto invece otterrai una sovrapposizione dell'immagine o comunque vedrai una immagine "stirata".
Il potenziometro in questo caso sarebbe molto comodo per impostare il delay ma come dicevo all'inizio è fondamentale avere la velocità del motore costante.
Ciao
« Last Edit: December 30, 2011, 03:55:18 pm by Pelletta » Logged

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uwe : beh uwe scusa mi sn espresso male ora che ci penso >.< io mi riferisco a http://www.box.com/shared/h50r7ka65i...lo sketch prevede l'utilizzo di un registro
cmq hai ragione, non ci avevo mai pensato che fosse piu veloce mandare un byte al registro che scrivere 7 volte l'isruzione, come detto prima  sei un grande ;D
Ciao Igor;

Pelletta: grazie smiley-wink anke quello è un buon suggerimento smiley-grin
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema non é solo che devi chiamare 7 funzioni m anche che la manipulazione dei port é molto piú veloce del digitalWrite().
AL posto del potenziometro proposta da pelletta preferisco un sensore col quale si puó determinare la posizone e la velocitá senza dover regolare.

PS il link non funziona.
Ciao Uwe
Logged

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema non é solo che devi chiamare 7 funzioni m anche che la manipulazione dei port é molto piú veloce del digitalWrite().
AL posto del potenziometro proposta da pelletta preferisco un sensore col quale si puó determinare la posizone e la velocitá senza dover regolare.

PS il link non funziona.
Ciao Uwe

http://www.box.com/shared/h50r7ka65i
quello è il link, me lo hai postato tu prima smiley-grin
cmq ho fatto finalmente una specie di propeller clock con motore e tutto
il codice è qst:
#define WIDTH 5

//library
const byte font [][WIDTH] =
{
 {0x7e, 0x09, 0x09, 0x09, 0x7e}, //A
 {0x7f, 0x49, 0x49, 0x49, 0x36}, //B
 {0x3e, 0x41, 0x41, 0x41, 0x22}, //C
 {0x7f, 0x41, 0x41, 0x22, 0x1c}, //D
 {0x7f, 0x49, 0x49, 0x49, 0x49}, //E
 {0x7f, 0x09, 0x09, 0x09, 0x09}, //F
 {0x7e, 0x41, 0x49, 0x49, 0x38}, //G
 {0x7f, 0x08, 0x08, 0x08, 0x7f}, //H
 {0x00, 0x41, 0x7f, 0x41, 0x00}, //I
 {0x30, 0x40, 0x41, 0x7f, 0x01}, //J
 {0x7f, 0x08, 0x14, 0x22, 0x41}, //K
 {0x7f, 0x40, 0x40, 0x40, 0x40}, //L
 {0x7f, 0x02, 0x04, 0x02, 0x7f}, //M
 {0x7f, 0x02, 0x0c, 0x10, 0x7f}, //N
 {0x3e, 0x41, 0x41, 0x41, 0x3e}, //O
 {0x1e, 0x21, 0x21, 0x21, 0x5e}, //Q
 {0x7f, 0x09, 0x19, 0x29, 0x46}, //R
 {0x26, 0x49, 0x49, 0x49, 0x32}, //S
 {0x01, 0x01, 0x7f, 0x01, 0x01}, //T
 {0x3f, 0x40, 0x40, 0x40, 0x3f}, //U
 {0x07, 0x38, 0x40, 0x38, 0x07}, //V
 {0x3f, 0x40, 0x3f, 0x40, 0x3f}, //W
 {0x63, 0x14, 0x08, 0x14, 0x63}, //X
 {0x07, 0x08, 0x70, 0x08, 0x07}, //Y
 {0x61, 0x51, 0x49, 0x45, 0x43} //Z 
};
 
void setup()

 for (int k=0;k<=7;k++)
    pinMode(k,OUTPUT);
}


void display (char POVstring[])
{
 for (int i=(strlen(POVstring)-1); i>=0; i--)
   {  for (int j=(WIDTH-1); j>=0; j--)
       { PORTD = font[(int)POVstring-65][j]; delay(1); }
       PORTD = B00000000; delay(1);
   }
}

void loop()
{
if ( analogRead(5)==0 )
 { display("HELLO"); }
}


il problema innanzitutto è ke arduino invia sulla seriale dati in continuo e io devo ogni volta scollegare tutto il circuito e collegare arduino al pc per poter inviare u nuovo sketch :O sapresti aiutuarmi?

secondo: che ne pensi dello sketch? apparte l'errore ke ho spiegato?
Logged


Pages: [1]   Go Up
Jump to: