ضبط النفس ووتش مع العرض الإلكتروني



كانت الفكرة الرئيسية هي إنشاء ساعة ضبط ذاتي يجب أن تعمل في المنطقة الزمنية CET مع دعم التوقيت الصيفي. كمصدر زمني ، استخدمت إشارة GPS المستلمة من وحدة NEO-7M ، التي تحتوي على منفذ تسلسلي. كوحدة عرض ، استخدمت شاشة بحجم 2.9 بوصة (الحبر الإلكتروني). جميع هذه الوحدات متصلة بـ Arduino Nano.

مخطط اتصال وحدة


أدناه هو مخطط اتصال الوحدات:



  • تستخدم وحدة GPS منفذ تسلسلي للاتصال ،
  • تستخدم شاشة الورق الإلكتروني SPI المكون من 4 أسطر للاتصال.

البرنامج




كتب البرنامج في اردوينو 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 × اردوينو نانو ،
1 × NEO-7M

شفرة المصدر


164955

Source: https://habr.com/ru/post/ar450102/


All Articles