Montre à réglage automatique avec affichage électronique



L'idée principale était de créer une horloge à réglage automatique qui devrait fonctionner dans le fuseau horaire CET avec la prise en charge de l'heure d'été. Comme source de temps, j'ai utilisé le signal GPS reçu du module NEO-7M, qui a un port série. En tant qu'unité d'affichage, j'ai utilisé un écran e-Paper de 2,9 pouces (encre électronique). Tous ces modules sont connectés à l'Arduino Nano.

Schéma de connexion du module


Voici le schéma de connexion des modules:



  • le module GPS utilise un port série pour la communication,
  • L'écran e-Paper utilise un SPI à 4 lignes pour la communication.

Le programme




Le programme a été écrit dans l'IDE Arduino. J'ai utilisé les bibliothèques suivantes:

  • TinyGPS ++ - pour décoder le signal GPS reçu et analyser la date et l'heure,
  • U8g2lib - pour contrôler l'affichage du e-Paper,
  • Fuseau horaire - pour gérer l'heure et la date dans un fuseau horaire donné et prendre en charge l'heure d'été (cela se produit en Europe de l'Est, environ Translator).

Graphique




1. La première étape consiste à initialiser la plateforme: le numéro de série du logiciel de réception des données du module GPS, l'affichage du e-Paper, la valeur initiale de la date et de l'heure.

2. Dans la deuxième étape, nous recevons des données du port série. Le signal GPS reçu est analysé.

3. Si les données GPS sont valides, nous mettons à jour la date et l'heure.

4. À ce stade, nous mettons à jour l'heure sur l'écran e-Paper.

Code source (également disponible en pièce jointe à la fin de l'article)


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

Brève présentation vidéo



Composants électroniques usagés


Affichage 1 × 2.9 'e-Paper (encre électronique),
1 × Arduino Nano,
1 × NEO-7M

Code source


164955

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


All Articles