
La idea principal era crear un reloj autoajustable que deber铆a funcionar en la zona horaria CET con soporte para el horario de verano. Como fuente de tiempo, utilic茅 la se帽al GPS recibida del m贸dulo NEO-7M, que tiene un puerto serie. Como unidad de visualizaci贸n, utilic茅 una pantalla de papel electr贸nico (tinta electr贸nica) de 2,9 pulgadas. Todos estos m贸dulos est谩n conectados al Arduino Nano.
Diagrama de conexi贸n del m贸dulo
A continuaci贸n se muestra el diagrama de conexi贸n de los m贸dulos:

- El m贸dulo GPS utiliza un puerto serie para la comunicaci贸n,
- La pantalla de e-Paper utiliza SPI de 4 l铆neas para la comunicaci贸n.
El programa

El programa fue escrito en el IDE de Arduino. Us茅 las siguientes bibliotecas:
- TinyGPS ++: para decodificar la se帽al GPS recibida y la hora y fecha de an谩lisis,
- U8g2lib: para controlar la visualizaci贸n de e-Paper,
- Zona horaria: para gestionar la hora y la fecha en una zona horaria determinada y para soportar el horario de verano (esto sucede en Europa del Este, aprox. Traductor).
Chart

1. El primer paso es inicializar la plataforma: el n煤mero de serie del software para recibir datos del m贸dulo GPS, mostrando e-Paper, el valor inicial de la fecha y la hora.
2. En la segunda etapa, recibimos datos del puerto serie. Se analiza la se帽al GPS recibida.
3. Si los datos del GPS son v谩lidos, actualizamos la fecha y la hora.
4. En este punto, actualizamos la hora en la pantalla de e-Paper.
C贸digo fuente (tambi茅n disponible como archivo adjunto al final del art铆culo)
/ * CET DST kk99 2018 * / # include <SoftwareSerial.h> # include <TinyGPS ++. h> # include <SPI.h> # include <U8g2lib.h> # include <Timezone.h> # include <Arduino.h> // GPS TinyGPSPlus gps; // EDP U8G2_IL3820_V2_296X128_1_4W_HW_SPI u8g2 (U8G2_R0, / * cs = * / 10 , / * dc = * / 9 , / * reset = * / 8 ) ; // TimeChangeRule CEST = { "CEST" , Last, Sun, Mar, 2 , 120 }; // TimeChangeRule CET = { "CET" , Last, Sun, Oct, 3 , 60 }; // - CE (CEST, CET) ; TimeChangeRule * tcr; // SoftwareSerial softSerial ( 3 , 2 ) ; void setup () { // , : u8g2.begin (); softSerial.begin ( 9600 ); setTime ( 00 , 00 , 00 , 01 , 01 , 1970 ); } void loop () { // : readGPSData ( 1000 ); (); displayTime (); ( 59000 ); } static void readGPSData ( unsigned long timeoutMs) { unsigned long start = millis (); { while (softSerial.available ()) gps.encode (softSerial.read ()); } while (millis () - start <timeoutMs); } static void updateTime ( void ) { if (gps.time.isValid () && gps.date.isValid ()) { setTime (gps.time.hour (), gps.time.minute (), gps.time.second (), gps.date.day (), gps.date.month (), gps.date.year ()) ; } } static void displayTime ( void ) { const unsigned timeLength = 6 ; char timeValue [timeLength]; time_t utc = now (); time_t local = CE.toLocal (utc, & tcr); snprintf (timeValue, timeLength, "% 02d:% 02d" , (), ()); u8g2.firstPage (); { u8g2.setFont (u8g2_font_logisoso78_tn); u8g2.drawStr ( 26 , 103 , timeValue); } while (u8g2.nextPage ()); }
Breve video presentaci贸n
Componentes electr贸nicos usados
1 脳 2.9 'pantalla de papel electr贸nico (tinta electr贸nica),
1 脳 Arduino Nano,
1 脳 NEO-7M
C贸digo fuente
164955