Orologio da parete esterno
-
- Senior User
- Messaggi: 300
- Iscritto il: sab set 22, 2018 8:30 am
- Località: AO
Orologio da parete esterno
Non è proprio un orologio da torre, semplicemente sulla facciata esterna di casa mia.
Due dettagli:
Diametro 1 metro circa
Quadrante: in ferro recuperato da un orologio da parete per interni e modificato con doppio quadrante tipo "regolatore".
Meccanismo: due motori passo passo comandati da piattaforma Arduino
Software: programmazione Arduino con riallineamento automatico delle lancette alle ore 6 ogni 12 ore.
Controllo del riallineamento automatico mediante crono termostato elettronico.
Sono circa due anni che cerco di risolvere le varie difficoltà che si presentavano mano a mano che il progetto prendeva forma, solo l'extra tempo dedicato a causa della clausura ha permesso di ultimare l'orologio.
Il passo decisivo è stato il bilanciamento della lancetta dei minuti con una leva torcente enorme.
Ovviamente rimango a disposizione per i dettagli se qualcuno fosse interessato.
PS: l'orologio è esattamente di fronte alla fermata del bus del paesino, se sgarra di un minuto c'è una sollevazione popolare
Due dettagli:
Diametro 1 metro circa
Quadrante: in ferro recuperato da un orologio da parete per interni e modificato con doppio quadrante tipo "regolatore".
Meccanismo: due motori passo passo comandati da piattaforma Arduino
Software: programmazione Arduino con riallineamento automatico delle lancette alle ore 6 ogni 12 ore.
Controllo del riallineamento automatico mediante crono termostato elettronico.
Sono circa due anni che cerco di risolvere le varie difficoltà che si presentavano mano a mano che il progetto prendeva forma, solo l'extra tempo dedicato a causa della clausura ha permesso di ultimare l'orologio.
Il passo decisivo è stato il bilanciamento della lancetta dei minuti con una leva torcente enorme.
Ovviamente rimango a disposizione per i dettagli se qualcuno fosse interessato.
PS: l'orologio è esattamente di fronte alla fermata del bus del paesino, se sgarra di un minuto c'è una sollevazione popolare
- Giacomo
- Site Admin
- Messaggi: 11503
- Iscritto il: mer feb 07, 2018 1:50 pm
- Località: Varallo (VC)
- Qualifica AISOR: Presidente
- Contatta:
Re: Orologio da parete esterno
E lo chiedi? Mi piace moltissimo il quadrante che hai usato.Ovviamente rimango a disposizione per i dettagli se qualcuno fosse interessato
Sono a tutt'occhi !!! Attendo e non solo io credo
questo invece è il mio. ha un diametro di circa 1,8 metri, ed è comandanto da un servo motore per orologio da campanile acquistato in Germania ed una scheda di comando 12 volt (ne abbiamo parlato nel forum) che doveva essere radicontrollata, ma non arriva più il segnale da un paio di anni.
- Calico
- Orologiaio
- Messaggi: 9211
- Iscritto il: sab feb 17, 2018 9:54 am
- Località: PI
- OROLOGIAIO: PROFESSIONISTA
- Maggior Contributore: 2018
- Maggior Contributore: 2019
- Maggior Contributore: 2020
Re: Orologio da parete esterno
Mi avete fatto venire voglia......
- milou
- Delegato AISOR
- Messaggi: 1630
- Iscritto il: sab feb 17, 2018 6:49 am
- Località: Francia
- Delegato AISOR: Germania e Svizzera T.
- Miglior Contributore: 2019
Re: Orologio da parete esterno
Complimenti!!!
Mi piacerebbe trovare un orologio da torre per installare un quadrante sulla facciata esterna del mio garage
Mi piacerebbe trovare un orologio da torre per installare un quadrante sulla facciata esterna del mio garage
-
- Senior User
- Messaggi: 300
- Iscritto il: sab set 22, 2018 8:30 am
- Località: AO
Re: Orologio da parete esterno
Buongiorno a tutti,
allego qualche dettaglio sulla costruzione dell'orologio da parete comandato da hardware "Arduino"
scheda arduino "uno" costo 10 euro
scheda di controllo CNC shield protoneer ver. 3.0 costo 5 euro compatibile ed installabile direttamente su arduino uno
2 stepper motor driver costo 2 euro cad (la scheda supporta fino a 4 motori) da installare direttamente sulla scheda
2 motori passo passo Nema 17 costo 10 euro cad
tutto il kit ,motori esclusi, si trova a 15 euro su ebay
2 microswitch magnetici magnetic glass reed costo 10 pz X 3 euro
funzionamento:
il sistema Arduino provvede, mediante un software adeguato, a far procedere il motore "minuti" di un passo pari a 1,8 gradi
ogni 18 sec. quindi giro completo di 360° in 3600 sec ( 1 ora).
il motore "ore" fa un passo di 1,8° ogni 12 impulsi del motore minuti facendo appunto 360° in 12 ore.
Arduino fornisce gli input ogni tot millisec ma rimane la necessità di comandare i motori ecco perchè la scheda cnc shield e
i motor drivers.
problema 1
è necessario forare il muro con una punta sufficientemente lunga (60 cm nel mio caso) ma in modo assolutamente perpendicolare
al muro stesso. Piccole variazioni dell'angolo a dx o sx, in su o giù provocano poi l'urto delle lancette con il quadrante.
Questo dettaglio mi ha fatto impazzire.
problema 2
non conoscendo la precisione del clock di arduino ed essendo l'orologio abbastanza irraggiungibile c'è la necessità di un
controllo remoto. ( piccoli ritardi dovuti al movimento motori si accumulano, cambio ora un paio di volte anno ecc)
ho installato all'interno dell'edificio rispettivamente di fronte ai motori due piccolissimi microswitch magnetici ad ore 12 dei minuti e ad ore 6 delle ore
due piccole lancette magnetiche inserite direttamente sull'albero motore fanno scattare gli interruttori quando ci passano davanti
Alle ore 6 e alle 18 un "preciso" cronotermostato al quarzo (modello da riscaldamento alloggio) chiude un contatto su arduino e i motori si azionano in continuo fino a quando il magnete non fa scattare il microswitch bloccando i motori a ore 6.00.
questo è il rifasamento ogni 12 ore di cui parlavo nel post precedente.
In realtà arduino è molto più preciso di quanto pensassi ma almeno al cambio ora stagionale non devo pigliare la scala e spostare le lancette!!!
problema 3
i motori passo passo sono regolabili ogni quando fare un passo ma l'accelerazione è fissa e molto elevata.
il sistema albero/lancetta ha un gioco di leve molto sfavorevole (ogni spostamento di 1,8 gradi sono cm alla punta della lancetta minuti).
Ho interposto un giunto elastico tra albero motore e albero passante il muro im modo da ammortizzare l'accelerazione del motore.
Fondamentale è stato poi il bilanciamento della lancetta dei minuti con una placchetta di piombo sulla coda altrimenti c'era un fastidioso tremolio al bloccaggio.
in aggiunta per dar "fiato" ai motori ho scelto di metterli in stand by tra un passo e l'altro quindi in pratica si disattivano e si sganciano. Se la lancetta è più pesante da un lato cade tristemente tra le 12 e le 6 e non risale tra le 6 e le 12!
Ad oggi (dopo 3 giorni) il sistema va ed è molto preciso. speriamo resista!
ps: il sito Aisor non mi permette di allegare files di testo, aggiungo qui sotto il file di programmazione.
se qualcuno è interessato può leggerselo o caricarlo direttamente da txt su un arduino.
ogni modifica o commento sono assolutamente bene accetti, anzi richiesti, se si vuole migliorare è indispensabile il contributo di tutti.
ciao, a presto
// Orologio con motori passo-passo By Andrea & Piero
//
int minuti;
int ore;
int totminuti;
int disrif; //disabilita lettura rifasamento per un'ora
int lettrif; //lettura consenso per continuare rifasamento
int pin9; //lettura input digitale switch minuti (attivo se =0)
int pin10; //lettura input digitale switch ore (attivo =0)
int pin11; // input per iniziare rifasamento
void setup () // inizializza le variabili
{
pinMode (5, OUTPUT); //inizializza pin 5 (direz. ore) come output
pinMode (6, OUTPUT); //inizializza pin 6 (direz. minuti) come output
pinMode (9, INPUT_PULLUP); //inizializza pin 7 come input dello switch
// motore dei minuti a ore 12 (va messo a massa
// per quota raggiunta)
pinMode (2, OUTPUT); //inizializza pin 2 (impulso ore)come output
pinMode (3, OUTPUT); //inizializza pin 3 (impulso minuti)come output
pinMode (10,INPUT_PULLUP);// inizializza pin 10 come input dello switch
//motore delle ore a ore 12 (va messo a massa per
// quota raggiunta)
pinMode (8, OUTPUT); //inizializza pin 8 (abilitazione motori) come output
pinMode (11, INPUT_PULLUP); //input digitale per iniziare rifasamento
digitalWrite (8, HIGH); //disabilita motori
minuti=0;
ore=0;
totminuti=0;
disrif=0; // contatore per disabilitare lettura consenso rifasamento
// dopo la lettura viene portato a 12000 e decrementato
// ogni minuto per rileggere l'input dopo un'ora
// 12000 = 60(minuti)*200(impulsi/minuto
// finchè <>0 lettura rifasamento disabilitata
}
void loop () // programma
{
if(disrif>0) disrif=disrif-1;
delay(17450); //aspetta 18 secondi
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(6,LOW); //direzione motore minuti
digitalWrite (3, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (3, LOW); //abbassa il pin step
delay(500); //aspetta 1/2 secondo
digitalWrite (8, HIGH); //disabilita motori
minuti=minuti+1;
totminuti=totminuti+1;
if (minuti==200)
{
minuti=0;
ore=ore+1;
}
if(totminuti==12)
// dopo 12 impulsi sui minuti, da' un impulso sul motore ore
{totminuti=0; // riporta a zero totalizzatore minuti
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(5,LOW); //direzione motore ore
digitalWrite (2, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (2, LOW); //abbassa il pin step
delay(500); // aspetta 1/2 secondo
digitalWrite (8, HIGH); //disabilita motori
if(ore==200) // quando la lancetta ore è sul 12, riporta a zero
{
ore =0;
}
}
//
//controlla se devi eseguire rifasamento
//
if (disrif==0)
{
{lettrif=digitalRead(11); //leggi input consenso rifasamento
}
if(lettrif==0)
{
disrif=12000; //disabilita lettura consenso rifasamento per un'ora
/* tratta rifasamento incrementando gli impulsi
sia delle ore che dei minuti finchè l'input digitale
di ciascuno dei 2 motori sia attivo
*/
pin10=digitalRead(10);
while(pin10==1) // esegui uno step finchè non va a 0
{
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(5,LOW); //direzione motore ore
digitalWrite (2, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (2, LOW); //abbassa il pin step
delay(10);
digitalWrite (8, HIGH); //disabilita motori
pin10=digitalRead(10);
}
pin9=digitalRead(9); //leggi switch minuti
while(pin9==1) // esegui step finchè non va a false
{
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(6,LOW); //direzione motore minuti
digitalWrite (3, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (3, LOW); //abbassa il pin step
delay(10);
digitalWrite (8, HIGH); //disabilita motori
pin9=digitalRead(9);
}
}
}
}
allego qualche dettaglio sulla costruzione dell'orologio da parete comandato da hardware "Arduino"
scheda arduino "uno" costo 10 euro
scheda di controllo CNC shield protoneer ver. 3.0 costo 5 euro compatibile ed installabile direttamente su arduino uno
2 stepper motor driver costo 2 euro cad (la scheda supporta fino a 4 motori) da installare direttamente sulla scheda
2 motori passo passo Nema 17 costo 10 euro cad
tutto il kit ,motori esclusi, si trova a 15 euro su ebay
2 microswitch magnetici magnetic glass reed costo 10 pz X 3 euro
funzionamento:
il sistema Arduino provvede, mediante un software adeguato, a far procedere il motore "minuti" di un passo pari a 1,8 gradi
ogni 18 sec. quindi giro completo di 360° in 3600 sec ( 1 ora).
il motore "ore" fa un passo di 1,8° ogni 12 impulsi del motore minuti facendo appunto 360° in 12 ore.
Arduino fornisce gli input ogni tot millisec ma rimane la necessità di comandare i motori ecco perchè la scheda cnc shield e
i motor drivers.
problema 1
è necessario forare il muro con una punta sufficientemente lunga (60 cm nel mio caso) ma in modo assolutamente perpendicolare
al muro stesso. Piccole variazioni dell'angolo a dx o sx, in su o giù provocano poi l'urto delle lancette con il quadrante.
Questo dettaglio mi ha fatto impazzire.
problema 2
non conoscendo la precisione del clock di arduino ed essendo l'orologio abbastanza irraggiungibile c'è la necessità di un
controllo remoto. ( piccoli ritardi dovuti al movimento motori si accumulano, cambio ora un paio di volte anno ecc)
ho installato all'interno dell'edificio rispettivamente di fronte ai motori due piccolissimi microswitch magnetici ad ore 12 dei minuti e ad ore 6 delle ore
due piccole lancette magnetiche inserite direttamente sull'albero motore fanno scattare gli interruttori quando ci passano davanti
Alle ore 6 e alle 18 un "preciso" cronotermostato al quarzo (modello da riscaldamento alloggio) chiude un contatto su arduino e i motori si azionano in continuo fino a quando il magnete non fa scattare il microswitch bloccando i motori a ore 6.00.
questo è il rifasamento ogni 12 ore di cui parlavo nel post precedente.
In realtà arduino è molto più preciso di quanto pensassi ma almeno al cambio ora stagionale non devo pigliare la scala e spostare le lancette!!!
problema 3
i motori passo passo sono regolabili ogni quando fare un passo ma l'accelerazione è fissa e molto elevata.
il sistema albero/lancetta ha un gioco di leve molto sfavorevole (ogni spostamento di 1,8 gradi sono cm alla punta della lancetta minuti).
Ho interposto un giunto elastico tra albero motore e albero passante il muro im modo da ammortizzare l'accelerazione del motore.
Fondamentale è stato poi il bilanciamento della lancetta dei minuti con una placchetta di piombo sulla coda altrimenti c'era un fastidioso tremolio al bloccaggio.
in aggiunta per dar "fiato" ai motori ho scelto di metterli in stand by tra un passo e l'altro quindi in pratica si disattivano e si sganciano. Se la lancetta è più pesante da un lato cade tristemente tra le 12 e le 6 e non risale tra le 6 e le 12!
Ad oggi (dopo 3 giorni) il sistema va ed è molto preciso. speriamo resista!
ps: il sito Aisor non mi permette di allegare files di testo, aggiungo qui sotto il file di programmazione.
se qualcuno è interessato può leggerselo o caricarlo direttamente da txt su un arduino.
ogni modifica o commento sono assolutamente bene accetti, anzi richiesti, se si vuole migliorare è indispensabile il contributo di tutti.
ciao, a presto
// Orologio con motori passo-passo By Andrea & Piero
//
int minuti;
int ore;
int totminuti;
int disrif; //disabilita lettura rifasamento per un'ora
int lettrif; //lettura consenso per continuare rifasamento
int pin9; //lettura input digitale switch minuti (attivo se =0)
int pin10; //lettura input digitale switch ore (attivo =0)
int pin11; // input per iniziare rifasamento
void setup () // inizializza le variabili
{
pinMode (5, OUTPUT); //inizializza pin 5 (direz. ore) come output
pinMode (6, OUTPUT); //inizializza pin 6 (direz. minuti) come output
pinMode (9, INPUT_PULLUP); //inizializza pin 7 come input dello switch
// motore dei minuti a ore 12 (va messo a massa
// per quota raggiunta)
pinMode (2, OUTPUT); //inizializza pin 2 (impulso ore)come output
pinMode (3, OUTPUT); //inizializza pin 3 (impulso minuti)come output
pinMode (10,INPUT_PULLUP);// inizializza pin 10 come input dello switch
//motore delle ore a ore 12 (va messo a massa per
// quota raggiunta)
pinMode (8, OUTPUT); //inizializza pin 8 (abilitazione motori) come output
pinMode (11, INPUT_PULLUP); //input digitale per iniziare rifasamento
digitalWrite (8, HIGH); //disabilita motori
minuti=0;
ore=0;
totminuti=0;
disrif=0; // contatore per disabilitare lettura consenso rifasamento
// dopo la lettura viene portato a 12000 e decrementato
// ogni minuto per rileggere l'input dopo un'ora
// 12000 = 60(minuti)*200(impulsi/minuto
// finchè <>0 lettura rifasamento disabilitata
}
void loop () // programma
{
if(disrif>0) disrif=disrif-1;
delay(17450); //aspetta 18 secondi
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(6,LOW); //direzione motore minuti
digitalWrite (3, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (3, LOW); //abbassa il pin step
delay(500); //aspetta 1/2 secondo
digitalWrite (8, HIGH); //disabilita motori
minuti=minuti+1;
totminuti=totminuti+1;
if (minuti==200)
{
minuti=0;
ore=ore+1;
}
if(totminuti==12)
// dopo 12 impulsi sui minuti, da' un impulso sul motore ore
{totminuti=0; // riporta a zero totalizzatore minuti
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(5,LOW); //direzione motore ore
digitalWrite (2, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (2, LOW); //abbassa il pin step
delay(500); // aspetta 1/2 secondo
digitalWrite (8, HIGH); //disabilita motori
if(ore==200) // quando la lancetta ore è sul 12, riporta a zero
{
ore =0;
}
}
//
//controlla se devi eseguire rifasamento
//
if (disrif==0)
{
{lettrif=digitalRead(11); //leggi input consenso rifasamento
}
if(lettrif==0)
{
disrif=12000; //disabilita lettura consenso rifasamento per un'ora
/* tratta rifasamento incrementando gli impulsi
sia delle ore che dei minuti finchè l'input digitale
di ciascuno dei 2 motori sia attivo
*/
pin10=digitalRead(10);
while(pin10==1) // esegui uno step finchè non va a 0
{
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(5,LOW); //direzione motore ore
digitalWrite (2, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (2, LOW); //abbassa il pin step
delay(10);
digitalWrite (8, HIGH); //disabilita motori
pin10=digitalRead(10);
}
pin9=digitalRead(9); //leggi switch minuti
while(pin9==1) // esegui step finchè non va a false
{
digitalWrite (8, LOW); //abilita motori (attivo LOW)
delay(10);
digitalWrite(6,LOW); //direzione motore minuti
digitalWrite (3, HIGH); //esegui 1 step
delayMicroseconds (800); //aspetta 800 microsecondi
digitalWrite (3, LOW); //abbassa il pin step
delay(10);
digitalWrite (8, HIGH); //disabilita motori
pin9=digitalRead(9);
}
}
}
}
- Giacomo
- Site Admin
- Messaggi: 11503
- Iscritto il: mer feb 07, 2018 1:50 pm
- Località: Varallo (VC)
- Qualifica AISOR: Presidente
- Contatta:
Re: Orologio da parete esterno
ti ringrazio moltissimo. Se mi invi il file txt lo carico direttamente io.
premetto che io di arduino non ne capisco niente, pero' anni fa in collaborazione con Jean Claude Sulka, avevamo fatto un dispositivo per un divisore per fare le ruote.
avevamo usato un motore 400 step ma era molto robusto e aveva vermamente molta forza.
Comunque mi piace molto la tua realizzazione , e soprattutto ti ringrazio a nome di tutti, per aver voluto condividere con tutti i nostri forumisti i tuoi successi.
Sono sicuro che potrai ricevere altri aiuti, Stefano Calico è un grande appassionato ed esperto in questo campo. A mio parere potete fare molte cose insieme.
premetto che io di arduino non ne capisco niente, pero' anni fa in collaborazione con Jean Claude Sulka, avevamo fatto un dispositivo per un divisore per fare le ruote.
avevamo usato un motore 400 step ma era molto robusto e aveva vermamente molta forza.
Comunque mi piace molto la tua realizzazione , e soprattutto ti ringrazio a nome di tutti, per aver voluto condividere con tutti i nostri forumisti i tuoi successi.
Sono sicuro che potrai ricevere altri aiuti, Stefano Calico è un grande appassionato ed esperto in questo campo. A mio parere potete fare molte cose insieme.
- Calico
- Orologiaio
- Messaggi: 9211
- Iscritto il: sab feb 17, 2018 9:54 am
- Località: PI
- OROLOGIAIO: PROFESSIONISTA
- Maggior Contributore: 2018
- Maggior Contributore: 2019
- Maggior Contributore: 2020
Re: Orologio da parete esterno
Ero esperto. Da quando mi avete coinvolto coi meccanismi, l'armadio e lo scaffale delle riviste di elettronica sono in giacenza. A me Arduino non piace per partito preso, anche se probabilmente sbaglio. Gli svizzeri e i tedeschi, negli anni '80-'90, avevano tutti i loro meccanismi applicazione con una variante in una manciata di sigle dello stesso chip con stessa piedinatura: piattolino a 8 piedini; due per l'alimentazione, intrecciantesi con un quarzo che andava a un piedino per la stabilizzazione e divisione in frequenza (spesso cambiava il quarzo, su 2-3 frequenze massime tra 3, 768 Khz o 4,196 Mhz e poco più) e due piedini che andavano a pilotare una bobina invertente la polarità due volte al secondo, per far fare al motorino passo passo mezzo giro alla volta dentro allo statore accoppiato alla bobina. Se a questo circuito primordiale, alimentabile a 1,5 volt, gli applichi la giusta demoltiplica, può portare lancette di una certa dimensione. Oppure, tramite un motorino simile a quelli della Solari, si può far andare le lancette in movimento continuo. A che serve stare lì a programmare un software? Quello lo utilizzerei preferibilmente per pilotare con minor numero di circuiti una indicazione digitale, magari gigante, con l'ausilio di array di transistors. Arduino e simili li riserverei preferibilmente a quei robot casalinghi che ti spazzano i pavimenti o ti portano le bibite ad orari stabiliti quando sei su una poltrona oppure vicino al divano, se non per automatizzare l'utilizzo di piccoli droni, come quelli che in Korea hanno utilizzato per controllare chi violava l'ordine di stare a casa.
-
- Senior User
- Messaggi: 300
- Iscritto il: sab set 22, 2018 8:30 am
- Località: AO