主なアイデアは、夏時間をサポートするCETタイムゾーンで動作する自動調整クロックを作成することでした。 タイムソースとして、シリアルポートを備えたNEO-7Mモジュールから受信したGPS信号を使用しました。 ディスプレイユニットとして、2.9インチの電子ペーパー(電子インク)ディスプレイを使用しました。 これらのモジュールはすべてArduino Nanoに接続されています。
モジュール接続図
以下は、モジュールの接続図です。
- GPSモジュールは通信にシリアルポートを使用します。
- 電子ペーパーディスプレイは、通信に4行のSPIを使用します。
プログラム
プログラムはArduino IDEで作成されました。 次のライブラリを使用しました。
- TinyGPS ++-受信したGPS信号をデコードし、時刻と日付を解析するために、
- U8g2lib-電子ペーパーの表示を制御するには、
- タイムゾーン-指定されたタイムゾーンの時刻と日付を管理し、夏時間をサポートします(これは東ヨーロッパで約発生します)。
チャート
1.最初のステップは、プラットフォームを初期化することです:GPSモジュールからデータを受信するためのソフトウェアのシリアル番号、電子ペーパー、初期の日付と時刻の値を表示します。
2.第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