Go Down

Topic: Orologio siderale (Read 2 times) previous topic - next topic

leo72

Sì, si può rigirare in questo modo il problema, dicendo che ogni secondo invece di far avanzare la lancetta dei secondi di 1 passo, la si deve far avanzare di 1,002731481 passi.

leo72


E dopo 6 mesi misurerà la mezzanotte a mezzogiorno.  :smiley-sad-blue:

E' un orologio usato in astronomia per i calcoli delle posizioni degli oggetti celesti, non si usa per avere l'ora  ;)

Emiliano


io direi che un RTC esterno potrebbe bastare, in pratica è un orologio a se, che ha vita indipendente dall'arduino. Quindi per ora lo programmi una volta da PC, e magari ti fai un programmino che quando accendi il pc aggiorna l'ora, però a parte la prima volta arduino è indipendente.

Poi direi che ci vuole un pulsante di azzeramento e un pulsante di start.

puoi programmare l'rtc per lanciare un interrupt ogni secondo (anche i più economici lo permettono) in modo che eventualmente potrai mettere arduino in sleep profondo quando deciderai di fare un circuito a sè, per risparmiare tantissimo in batterie.

Dicevamo, ogni secondo arriva un iterrupt, arduino si sveglia, e fa scattare la lancetta di un passo. O meglio. se vuoi 24 ore, vuol dire che ti servono 1440 minuti, ovvero 86400 secondi.

Ti serve una buona meccanica per i secondi, ma per i minuti dovresti farcela anche in modo rozzo. In oltre gli stepper hanno un numero di passi ben preciso, quindi per il reset basta tornare indietro dei passi percorsi o completare i passi mancanti (sta a te vedere la soluzione che ti piace di più, io farei la stada "più veloce")

in oltre hai altri 2 interrupt:
1. sul pulsante reset. Disabilita l'allarme che fa generare l'interrupt dall'RTC, dopodichè riporta la lancetta in posizione zero
2. pulsante start: riabilita l'allarme dell'RTC.


Caspiterina, quante risposte! E tutte molto pertinenti. Veramente bravi tutti.
Ma questo RTC è costituito da uno stepper? Ed è possibile programmarlo in modo che invii l'interrupt ogni 0,9972685... anziché ogni secondo? Ovvero 86400 interrupt in 86164 secondi di tempo (23h 56m 04s)
Per quanto riguarda la meccanica ho già il movimento di un orologio su 24 ore che veniva pilotato da un quarzo.
Mi basterebbe rendere l'asse dello stepper solidale alla lancetta dei secondi, la rotazione della lancetta dei minuti e delle ore avverrebbe meccanicamente.

Cosa intendi quando dici "riporta la lancetta in posizione zero" ?
Io pensavo, ancor più semplicemente di quanto avevo detto, di farmi visualizzare dal PC l'ora siderale, spostare le lancette, compresi i secondi, un po' più avanti e riavviare l'RTC allo scattare di quell'ora sul PC.




lesto

no, un RTC è un Real Time Counter, ovvero un orologio.
Arduino ha dei timer interni, che però lavorano con un generatore di clock (quarzo o peggio oscillatore) molto impreciso, Leo72 ha provato a creare una libreria orologio usandoli, e l'errore è di molti secondi al giorno, forse anche minuti.

Un RTC invece è un chippino con un quarzo particolare che è fatto apposta per misurare il tempo come lo intendiamo noi (e costicchia, quanto un chip atmega intero, che al suo interno ha un oscillatore...)

poi gli stepper con 86164 o anche 86400non esiste, anche usando i microstep (sconsiglio ai principianti).

un motore stepper da 15/20€ ha circa 400step/rotazione.

86164(step richiesti)/400(step necessari)=215.41

cosa vuol dire? che devi creare una serie di ingranaggi che moltiplicano il movimento di 215.41 volte, ovvero ogni 215.41 rotazioni dello stepper avrai una rotazione completa dell'orologio.

Però quel numero NON è tondo (lo sarebbe stato nel caso di un orologio normale, 216 spaccato), ciò vuol dire che  la lancetta sarà sempre un poco errata.. nulla che un umano possa vedere eh..

il punto è fare un ingranaggio 216:1 (anzi, 215.41:1, ma è impossibile se non usando qualche arcana combinazione, meglio cercare uno stepper che ha un numero di step a rivoluzione che sia divisore di 86164)
ovviemente puoi usare più ingranaggi in cascata

ORA sappi che NON ho mai studiato meccanica. Tutto quello che ti scrivo è basato su pura filosofia fatta al momento e non verificata, quindi magari ho detto boiate pazzesce........ ma dubito (tranne forse quella che NON è impossibile fare 215.41:1)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72

RTC sta per Real-Time Clock, ossia Orologio in Tempo Reale.
E' un piccolo integrato che serve a tenere il tempo.

Siccome a te serve un secondo che duri un po' meno di un secondo, non userei la tecnica dell'interrupt generato dal chip RTC esterno ma piuttosto potresti prendere un timer interno ed impostarlo affinché tu abbia un sistema efficace per calcolarti la durata che ti serve. Va studiato un po' ma non è impossibile. Anche nel caso dell'Arduino, il timer 0 è impostato per generare un interrupt ogni 976  us, quindi dopo 1000 interrupt non è trascorso 1 secondo esatto. Per "addirizzare" lo scorrere del tempo viene usato un piccolo accorgimento software.
Tu dovresti fare lo stesso secondo me. Ed usare l'RTC esterno solo per ricalibrare l'orologio siderale ogni 8/12 ore in modo che l'accumulo dello scarto abbia prodotto una differenza misurabile in secondi, un valore gestibile con l'RTC.

Go Up