Abbiamo visto, sin dal primo articolo dedicato ad AULAPULITA, l’utilizzo di un orologio hardware fornito di batteria tampone da 3v. Molti di voi, durante questi mesi, mi hanno chiesto qual’è il modo più corretto per gestire in modo automatico il cambio di orario con il passaggio dall’ora legale a quella solare e viceversa senza dover riprogrammare l’orologio hardware collegandolo ad un PC attraverso Arduino.
Occorre fare una premessa: qualsiasi orologio hardware che acquistiamo da utilizzare con Arduino e simili è sprovvisto di orario, questo infatti va impostato e salvato come quando acquistiamo un orologio nuovo. Nei miei progetti ho sempre utilizzato il DS1307 della Maxim, ad oggi il più economico e facilmente reperibile sul mercato.
A questo punto è importante sapere quale orario va salvato alla prima accensione sulla memoria interna dell’orologio hardware. L’orario che va salvato è quello relativo al fuso orario di riferimento (UTC), l’unico che può essere elaborato in maniera automatica dagli elaboratori elettronici per il passaggio dall’ora legale (DST, in inglese: daylight saving time) a quella solare o standard che coincide con il fuso orario del meridiano riferimento (in Italia UTC+1) e viceversa.
In tre passaggi le accortezze da seguire prima di caricare lo sketch che memorizza l’orario sulla memoria dell’orologio hardware:
- Verifichiamo su Google l’orario corrente nel sistema di riferimento universale UTC. Basterà digitare sulla barra di ricerca le parole “utc time” e ci verrà restituito l’orario al netto del fuso orario e dell’ora legale o solare in vigore.
- A questo punto conosciamo l’orario di riferimento (UTC) che utilizza tutto il globo per elaborare il fuso orario e l’orario legale se questo è in vigore. Verifichiamo l’ora sul nostro PC e modifichiamola con quella restituita dalla rete. I minuti e i secondi vanno invece lasciati inalterati. A questo punto anche il nostro PC ha come orario quello di riferimento (UTC).
- Scegliamo lo sketch che più ci piace per caricare l’orario sull’orologio hardware, personalmente utilizzo lo sketch SetTime presente nella libreria DS1307RTC (per orologi basati su integrato della Maxim o suoi cloni), questa è disponibile per il download su GitHub ed è installabile anche direttamente dall’IDE di Arduino. Possiamo verificare l’orario salvato con lo sketch ReadTest che è parte della stessa libreria.
Una volta caricato lo sketch SetTime sull’Arduino ricordiamoci di rimettere l’ora corretta sul PC altrimenti continueremo a lavorare con l’orario UTC.
A questo punto nei nostri progetti possiamo prevedere l’uso di una libreria che automaticamente sposterà le lancette (virtuali) dell’orologio di un’ora quando entrerà in vigore l’ora legale o solare.
Da qualche tempo a questo scopo utilizzo la libreria Timezone. Questa è disponibile per il download su GitHub ed è installabile anche direttamente dall’IDE di Arduino. Tra gli esempi troveremo lo sketch HardwareRTC che possiamo usare come base per i nostri progetti.
Le variabili da impostare per comunicare alla libreria quando intervenire sull’orario sono due, nella prima indicheremo quando entrerà in vigore l’ora legale (DST) e nella seconda indicheremo invece quando tornerà in vigore l’ora solare o standard (ricordiamo che l’ora standard in Italia coincide con il riferimento UTC aumentato di una ora, così come definito dalle norme internazionali in materia di orari e fusi).
TimeChangeRule myDST = {“DST”, Last, Sun, Mar, 3, 120}; //Daylight time = UTC +2 hours
TimeChangeRule mySTD = {“STD”, Last, Sun, Oct, 2, 60}; //Standard time = UTC +1 hours
Se volete approfondire gli aspetti tecnici e legali legati agli orari nel mondo vi invito a consultare su Wikipedia le voci Tempo coordinato universale e Ora legale, queste due voci mi sono state molto utili per comprendere lo stato dell’arte sui riferimenti temporali nelle acquisizioni di dati.
In conclusione un ulteriore appunto per gli smanettoni. La libreria Timezone può essere utilizzata su qualsiasi board che supporti l’uso del protocollo I2C e anche su Wemos o board basate su ESP8266. Su quest’ultime, dotate di connessione ad internet è possibile utilizzare in alternativa l’orologio software basato sul protocollo NTP e anche questo per definizione lavora solamente con l’orario di riferimento UTC ma è allo stesso modo manipolabile in automatico attraverso la libreria sopra citata.