带电子显示器的自动调整手表



主要思想是创建一个自调整时钟,该时钟应在CET时区工作,并支持夏时制。 作为时间源,我使用了从NEO-7M模块接收的GPS信号,该模块具有一个串行端口。 作为显示单元,我使用了2.9英寸的电子纸(电子墨水)显示器。 所有这些模块都连接到Arduino Nano。

模块连接图


以下是模块的连接图:



  • GPS模块使用串行端口进行通信,
  • 电子纸显示屏使用4行SPI进行通信。

程序




该程序是用Arduino IDE编写的。 我使用了以下库:

  • TinyGPS ++-用于解码接收到的GPS信号并解析时间和日期,
  • U8g2lib-控制电子纸的显示,
  • 时区-用于管理给定时区中的时间和日期并支持夏时制(这在东欧发生,大约是翻译器)。

图表




1.第一步是初始化平台:用于从GPS模块接收数据,显示电子纸,日期和时间的初始值的软件的序列号。

2.在第二阶段,我们从串行端口接收数据。 分析接收到的GPS信号。

3.如果GPS数据有效,我们将更新日期和时间。

4.此时,我们更新电子纸显示屏上的时间。

源代码(也可作为本文结尾的附件提供)


/ *      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 ()); } 

简短的视频演示



二手电子零件


1×2.9'电子纸显示屏(电子墨水),
1个Arduino Nano,
1×NEO-7M

源代码


164955

Source: https://habr.com/ru/post/zh-CN450102/


All Articles