Sommario:

Orologio Easy Daylight Savings: 7 Steps
Orologio Easy Daylight Savings: 7 Steps

Video: Orologio Easy Daylight Savings: 7 Steps

Video: Orologio Easy Daylight Savings: 7 Steps
Video: Fixing Daylight Saving Time Is THIS Easy 2024, Luglio
Anonim
Orologio facile per l'ora legale
Orologio facile per l'ora legale
Orologio facile per l'ora legale
Orologio facile per l'ora legale

Storia

Questo progetto è iniziato come una sfida per me per imparare a programmare (codifica) con Arduino Uno e un singolo display LCD da 1602A, prima volevo spingere l'Arduino ai suoi limiti di precisione. Questo è un progetto per costruire un orologio senza l'uso di un modulo RTC (modulo Real Time Clock) e inoltre non utilizzare alcun ritardo (); comandi perché il delay(); Il comando interrompe il codice per un determinato periodo di tempo. Mentre lavoravo con il codice di base per il mantenimento del tempo, ho pensato che potesse essere un po' banale, quindi ho deciso di aggiungere una funzione di ora legale come una nuova aggiunta per rendere le cose più piccanti e possibilmente creare un po' più di interesse in questo progetto. All'inizio l'idea era puramente innovativa, ma più ci lavoro e guardo l'orologio fisico che ho sulla scrivania, più l'idea diventa pratica. Aggiungendo un modulo RTC e regolando il codice, questo orologio sarebbe preciso per gli anni a venire e a un costo molto basso per i produttori e il pubblico che lo acquistano.

L'ora legale o (DST) esiste da oltre 100 anni (Google, ha una storia piuttosto colorata). Non voglio entrare nella politica ma è un esercizio crudo e doloroso che non rende la vita facile alla gente comune (io e te). Per la maggior parte ci godiamo l'ora in più di luce del giorno, ma il modo in cui viene applicato è brutale. È tempo di un importante aggiornamento a un'idea molto vecchia.

Questo esempio è facile da vivere con e con l'era digitale e i progressi tecnologici facilmente applicabili a tutte le forme di orologi digitali, ma potrebbe aiutare la scomparsa dell'orologio analogico. Piuttosto che un salto di 1 ora dall'ora solare all'ora legale, quindi dall'ora legale all'ora solare, questo orologio si basa sulla progressione graduale del tempo dal solstizio d'inverno al solstizio d'estate, per poi tornare all'ora solare al successivo solstizio d'inverno anno dopo anno. Questa transizione avviene per 180 giorni su ogni periodo di 6 mesi, l'adeguamento è di 20 secondi al giorno per 360 giorni con i restanti 5 o 6 giorni aggiunti alla lunghezza dei solstizi. Il mio esempio qui incrementa di 1 minuto una volta ogni tre giorni all'interno del ciclo di 180 giorni. Il o intorno al 21 giugno di ogni anno l'orologio è avanti di un'ora intera e intorno al 21 dicembre di ogni anno l'orologio è tornato all'ora solare. L'anno bisestile è facilmente contabilizzato soprattutto se si utilizza un RTC. Anche l'emisfero australe si adatta facilmente a questo orologio, la scala a scorrimento è semplicemente sfasata di 6 mesi rispetto all'emisfero settentrionale.

Ci sono tre posti nel mondo in cui l'ora legale sarebbe praticamente a meno che, la regione equatoriale e i poli. Non credo che la luce del giorno cambi molto all'equatore, non so se qualcuna delle aree tropicali usa l'ora legale e i poli sono di nuovo una storia diversa, solo CHE' ora è ai poli comunque?

Passaggio 1: informazioni sull'orologio

Informazioni sull'orologio
Informazioni sull'orologio
Informazioni sull'orologio
Informazioni sull'orologio

L'orologio che ho creato si basa sull'ora standard che non varia mai dall'orologio mondiale accettato a livello internazionale, che viene visualizzato sulla prima riga del display LCD 1602. La seconda riga è la stessa scala temporale ma mostra l'offset dei minuti da un solstizio all'altro. Dal solstizio d'inverno al solstizio d'estate l'offset aumenta di un minuto ogni tre giorni fino ad un massimo di sessanta minuti. Dal solstizio d'estate al solstizio d'inverno l'offset diminuisce di un minuto ogni tre giorni finché l'ora solare e l'ora legale non coincidono.

Per questo esempio ho usato l'ora militare (orologio a 24 ore) e l'ora standard (orologio a 12 ore) AM e PM per aiutare quelle persone che non hanno familiarità con la scala temporale delle 24 ore, inoltre ha dato alla mia stanza la visualizzazione del numero del giorno in cui è l'ora legale impostato da. Il codice può essere modificato per visualizzare l'orologio a 12 ore. Ho aggiunto tre pulsanti collegati ai pin digitali 2, 3 e 4 per regolare l'ora. Questi pulsanti aumenteranno solo i secondi, i minuti o le ore. I pulsanti sono opzionali, l'orologio funzionerà comunque bene se non si collegano i pulsanti e non è necessario modificare il codice. Consiglierei almeno di usare un pulsante per regolare i secondi e se non è possibile ottenere una precisione completa, mantenere l'orologio sul lato lento, il pulsante fa avanzare il tempo di 1 secondo al secondo.

Se si avvia l'orologio dall'IDE di Arduino, ci vorranno dai 5,5 ai 6 secondi per caricare e avviare lo schizzo, se lo schizzo è caricato su Arduino, collegarlo a una verruca a muro o a un alimentatore ci vorranno circa 2,5 per 3 secondi per l'avvio e l'esecuzione.

È necessaria una configurazione manuale quando finalmente l'orologio è pronto per il funzionamento.

Questo orologio non usa un modulo RTC né usa "delay();" comandi.

Se ti piace usare l'RTC con Arduino, questo concetto può ancora essere usato. L'RTC ti fornirà tutte le informazioni necessarie per aggiungere l'ora EDSC. Il codice potrebbe essere molto diverso con un modulo RTC, non l'ho esaminato. Sei praticamente da solo se lo fai, ma è un ottimo modo per esercitare il tuo cervello.

Passaggio 2: cosa ti servirà

Cosa ti servirà
Cosa ti servirà
Cosa ti servirà
Cosa ti servirà
Cosa ti servirà
Cosa ti servirà

LISTA DELLA SPESA

1 Arduino Uno o Mega2569 (i pin I2C sono A4 e A5 su UNO e 20 e 21 su 2560 Mega)

Quasi tutti gli altri Arduino dovrebbero funzionare, i pin utilizzati potrebbero essere diversi. Del resto, qualsiasi scheda controller funzionerà. Dovrai riscrivere il codice per quella scheda o produttore.

1 display LCD 1602 (colore a scelta)

Uso uno zaino I2C con il display LCD, lo trovo più facile e veloce da configurare.

Ponticelli

FORNITURE OPZIONALI

1 tagliere per pane di medie dimensioni

1-3 pulsanti a contatto momentaneo

1-3 resistori da 10 K ohm

Questo istruibile è lungo, quindi non entrerò nel montaggio o nell'armadio che ho usato per visualizzare l'orologio. Se ti piace questo progetto e vuoi creare una versione permanente, progettalo a tuo piacimento. Questo design è perfetto per me perché avevo tutto ciò di cui avevo bisogno nella mia scatola delle cianfrusaglie e mi piace l'aspetto.

APPUNTI:

Per evitare le interruzioni di corrente, il mio ultimo orologio è alimentato da un pannello solare che ho all'esterno. Il pannello solare mantiene carica una batteria da 12 volt con un regolatore per evitare una carica eccessiva. Questa batteria è collegata ad Arduino tramite il jack di alimentazione accanto alla porta USB. Tengo la porta USB collegata alla rete per ridurre il consumo della batteria. Entrambe le fonti di alimentazione possono essere utilizzate contemporaneamente senza danneggiare l'Arduino. Una batteria da 12 volt può essere caricata a 14,5 volt max, che è troppo alta per Arduino, quindi uso un convertitore buck per ridurre la tensione di alimentazione dalla batteria a un intervallo da 9 a 12 volt. La batteria da 12 volt che tengo in carica durerà 3 o 4 giorni se le giornate sono nuvolose. Il regolatore che uso interromperà l'alimentazione all'Arduino se la tensione della batteria scende a 11 volt. La batteria che ho proviene da un sistema di illuminazione di emergenza per edifici commerciali, è circa un quarto delle dimensioni di una piccola batteria per auto. Se intendi utilizzare una batteria per auto assicurati di tenerla in un'area ben ventilata (all'esterno), le batterie per auto emettono idrogeno e ossigeno mentre si caricano e si scaricano, questa è una combinazione esplosiva.

AVVERTIMENTO

TENERE LA BATTERIA IN UN BENE

ZONA VENTILATA, AL DI FUORI

Passaggio 3: cablaggio

Cablaggio
Cablaggio

Ho fornito uno schema per tutte le connessioni in questo progetto, se usi una breadboard avrai bisogno di una scheda di medie dimensioni, gli interruttori avranno bisogno di spazio per essere distribuiti in modo che il circuito non crei confusione.

Il display LCD 1602 ha uno zaino I2C per semplicità, se usi le connessioni SPI dovrai cercare come usarlo e modificare il codice vicino all'inizio dello schizzo. Non ho mai usato le connessioni SPI, quindi i pin 2, 3 e 4 potrebbero non essere disponibili per i tre pulsanti.

I tre pulsanti vengono utilizzati per regolare l'ora sull'orologio. Avanzano solo il tempo (AVANTI). Nelle regolazioni finali tenere l'orologio nel codice sul lato lento (circa 1 o 2 secondi al giorno o più giorni) in questo modo è possibile anticipare il tempo se necessario. Ciascun pulsante fa avanzare il tempo di un incremento al secondo, il pulsante in basso di 2 secondi al secondo, il pulsante centrale di 1 minuto al secondo e il pulsante in alto di 1 ora al secondo. Dovrebbe essere possibile un grado di precisione abbastanza elevato, quindi non sarà necessario regolarlo molto spesso.

Se si stanno regolando secondi, minuti o ore (ad esempio se i minuti sono avanzati di 58, 59, 00) l'ora avanzerà all'ora successiva.

Questi tre pulsanti sono un'aggiunta dell'ultimo minuto all'orologio, funzionano bene ma potrebbe esserci un modo migliore. Ricorda solo che se fai confusione con questa parte del codice il "delay();" comando non può essere utilizzato. Ho usato questo metodo perché non devo preoccuparmi del rimbalzo dello switch e di strani salti negli avanzamenti temporali.

Passaggio 4: cosa mostra il display

Cosa mostra il display
Cosa mostra il display

Ho inserito molte informazioni sul display LCD 1602 che necessitano di qualche spiegazione:

Riga 1 O riga zero '0' quando si parla in codice, mostra l'ora standard. Sulla sinistra c'è 'STD', che sta per 'STandarD'.

Il prossimo sulla prima riga al centro è l'ora locale standard. Non iniziare con l'ora legale, l'orologio lo visualizzerà sulla seconda riga.

Questa scala temporale è un orologio di 12 ore, quindi sul lato destro è 'AM o 'PM' per indicare la mattina o dopo mezzogiorno.

Riga 2 O riga uno '1' quando si parla in codice, mostra l'ora legale che varia a seconda del giorno dell'anno. L'"ora legale" a sinistra significa "ora legale"

Al centro della seconda riga c'è l'ora militare locale che è un orologio di 24 ore. Lo sentirai chiamare "oh seicento ore", per esempio.

Sul lato destro c'è il giorno dell'anno come riferimento dal solstizio d'inverno, nell'emisfero settentrionale il 21 dicembre (circa) è il giorno zero "0" e nell'emisfero australe il 21 giugno (circa) è il giorno zero "0".

Ho fornito due file.pdf come riferimento durante la prima configurazione dell'orologio. Scegli il file che fa riferimento all'emisfero in cui vivi.

I tre pulsanti sulla destra incrementano secondi, minuti e ore dal basso verso l'alto.

Passaggio 5: impostazione dello schizzo

Impostazione dello schizzo
Impostazione dello schizzo

Ci sono diverse righe di codice che devono essere impostate per l'avvio iniziale. Alcune di queste linee devono essere modificate ogni volta che si scollega l'orologio e si modificano i valori delle variabili nello schizzo. Se si avvia l'orologio per l'IDE, ci vorranno circa 6 secondi per caricarsi e avviarsi. Se carichi lo schizzo dall'IDE, quindi scollega l'orologio e riavvialo da una verruca a muro o da un alimentatore, lo schizzo si avvierà in circa 2,5 secondi.

Riga 11 LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);

Questa riga indirizza il display LCD e imposta l'indirizzo corretto dello zaino I2C. 0x27 è l'indirizzo di uno qualsiasi degli zaini che ho acquistato. Se accendi l'orologio ma non ci sono dati visualizzati ma si illumina, l'indirizzo è probabilmente diverso sul display LCD. Metterò un link qui sotto per una descrizione di come cambiare l'indirizzo del tuo zaino LCD o trovare l'indirizzo.

Righe 24 int minuteSt = 35;

Imposta il minuto di inizio per l'orologio standard, di solito impostalo 5 minuti prima di avviare l'orologio per consentire il tempo di impostazione.

Righe 25 int hourSt = 18;

Imposta l'ora sull'ora STD (orologio a 24 ore) in cui inizia tra le 18:00.

Riga 26 int DSTdays = 339;

Scarica e fai riferimento al file pdf "Easy DST Clock Time Scale" (emisfero nord o sud) in cui vivi, cerca la data e inserisci il giorno # in questa riga. (colonna sinistra). Esempio (il 24 novembre è il giorno n. 339 nell'emisfero settentrionale e il giorno n. 156 nell'emisfero australe)

Riga 27 int DSTanno = 2019;

Inserisci l'anno in corso.

Riga 92 if ((masterTime - previousMasterTimeSt >=1000) && (microTime - previousMicroTimeSt >= 500)){

Il "precedenteMasterTimeSt" deve essere confrontato con il numero di millisecondi, quindi questo "1000" potrebbe dover cambiare a 999 a seconda dell'orologio interno della scheda Arduino, quindi regolare il precedenteMicroTime per mettere a punto l'orologio. L'orologio interno sebbene 16MH ha variazioni da una scheda all'altra.

Il "precedenteMicroTimeSt" regola con precisione l'orologio interno per aiutare a contare un secondo preciso. Se l'orologio è troppo veloce aumentare i microsecondi e se l'orologio è troppo lento diminuire i microsecondi e se necessario abbassare i millisecondi a 999 e quindi avviare i microsecondi a circa 999, 990 o aumentare la velocità dell'orologio.

Ogni scheda Arduino ha una velocità leggermente diversa, quindi questi numeri cambieranno con ogni scheda che usi. Parte del codice non è ancora stata testata, questa è la riga 248 per tenere conto di ogni anno bisestile. Nelle prossime settimane lo proverò e posterò eventuali modifiche se necessario.

Passaggio 6: note finali

Note finali
Note finali

Questo progetto è facile da costruire, ma il concetto e le modifiche necessarie nel codice potrebbero essere un compito, prenditi il tuo tempo e pensaci bene, l'orologio non scade fino alla fine del 2037. Terrò d'occhio il mio e-mail per domande in quanto sono sicuro che ce ne saranno alcune, non sono un genio letterario quindi alcune delle mie descrizioni potrebbero essere un po' confuse.

Ci sono due file.pdf inclusi, scarica il file per l'emisfero in cui vivi, questo file ti darà le informazioni necessarie per far partire l'orologio con precisione.

Con le informazioni manipolate nello schizzo sarebbe facile visualizzare non solo l'ora standard e l'ora legale, ma anche il giorno e la data su un LCD 2004A. Se ti piacciono le sfide che questo progetto offre, prova a collegare un display LCD 2004A, quindi aggiungi il codice per visualizzare le informazioni aggiuntive o se viene mostrato un interesse sufficiente, farò un'altra variazione di questo progetto includendo queste informazioni aggiuntive.

Ho cercato di essere onnicomprensivo in questo progetto, ma ho trovato tre aree del mondo in questione. Il Polo Nord, il Polo Sud e l'Equatore.

L'ora legale è necessaria o addirittura possibile al polo nord o sud?

Che ore sono al Polo Nord o al Polo Sud?

In che direzione viaggeresti per lasciare il Polo Nord o il Polo Sud?

Dal Polo Sud quale direzione viaggeresti per raggiungere l'Australia, il Nord America, l'Europa o l'Asia?

In che fuso orario vive Babbo Natale?

Ha bisogno dell'ora legale?

Che ore sono comunque al Polo Nord?

In che direzione viaggia Babbo Natale per consegnare tutti i suoi doni?

A quale latitudine è effettiva l'ora legale?

Ora per l'Equatore;

Questo orologio è utilizzabile all'equatore?

Userebbero la scala dell'emisfero settentrionale o meridionale?

Quali sono le date del solstizio d'inverno e del solstizio d'estate?

A quale latitudine è effettiva l'ora legale?

I pinguini hanno bisogno dell'ora legale?

Pensi che io sia strano a pensare a queste domande?

Buona costruzione a tutti!

philmnut

Passaggio 7: altri collegamenti

Questo è un collegamento per determinare o modificare l'indirizzo sullo zaino I2C:

www.instructables.com/id/1602-2004-LCD-Adapter-Addressing/

PiotrS ha scritto un eccellente tutorial per gli indirizzi hardware I2C

playground.arduino.cc/Main/I2cScanner

Questo collegamento eseguirà la scansione del dispositivo I2C e restituirà l'indirizzo

Consigliato: