Основная идея заключалась в создании самонастраивающихся часов, которые должны работать в часовом поясе CET с поддержкой перехода на летнее время. В качестве источника времени я использовал сигнал GPS, полученный от модуля NEO-7M, который имеет последовательный порт. В качестве блока индикации я использовал 2,9-дюймовый дисплей e-Paper (электронно переворачиваемые «листы» бумаги с цифрами). Все эти модули подключены к Arduino Nano.

Схема подключения модулей


Ниже представлена ??схема подключения модулей:



  • модуль GPS использует последовательный порт для связи,
  • дисплей e-Paper использует 4-строчный SPI для связи.

Программа




Программа была написана в Arduino IDE. Я использовал следующие библиотеки:

  • TinyGPS ++ — для декодирования полученного сигнала GPS и разбора времени и даты,
  • U8g2lib — для управления дисплея e-Paper,
  • Часовой пояс — для управления временем и датой в заданном часовом поясе и поддержкой летнего времени (дело происходит в Восточной Европе, прим. переводчика).

Диаграмма




1. Первый шаг — инициализация платформы: серийный номер программного обеспечения для приема данных с модуля GPS, отображение e-Paper, начальное значение даты и времени.

2. На втором этапе мы получаем данные от последовательного порта. Полученный сигнал GPS анализируется.

3. Если данные GPS действительны, мы обновляем дату и время.

4. На этом этапе мы обновляем время на дисплее e-Paper.

Исходный код (также доступен во вложении к конце статьи)


/ * 
   Самонастраивающиеся часы для часового пояса 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 'дисплей e-Paper (электронно переворачиваемые «листы» бумаги с цифрами),
1 ? Arduino Nano,
1 ? НЕО-7М

Исходный код


164955

Комментарии (131)


  1. r00tGER
    30.04.2019 10:34

    1440 — «переворачиваний страницы» каждые сутки (~0.5М в год)… Как насчет ресурса дисплея?


    1. GennPen
      30.04.2019 12:58

      Обычно несколько миллионов обновлений. Многое зависит от площади и места обновления.


  1. staticmain
    30.04.2019 10:41
    +2

    За схематику в виде картинки с ардуиной и за неотформатированный код хочется убивать.


    1. little-brother
      30.04.2019 11:11
      +1

      А что не так со схематикой? Инженерам такая статья в принципе интересна быть не может, а новичкам по картинке схему повторить проще.

      С форматированием кода, да, — беда. Однако можно было бы просто отправить автору-переводчику приват, чтобы код завернул в тег code.


      1. augorelov
        30.04.2019 11:15
        +1

        Не новичкам, а "ардуинщикам". Учиться надо на нормальных схемах электрических принципиальных, а не на таких картиночках.


        1. little-brother
          30.04.2019 11:33

          Кому что требуется. Если знаний нет, а собрать что-то хочется, то лучше быть Ардуинщиком, чем утонуть в программировании/схемотехнике и вовсе ничего не сделать.
          P.S. Сам из секты Arduino :D


          1. Andy_Big
            30.04.2019 11:41

            Но зачем оповещать весь мир о своем незнании и неумении? :)


            1. little-brother
              30.04.2019 11:47

              Тут проблема связанная с тем, что новичкам слишком сложно читать статьи написанные профессионалами для профессионалов, которым многие вещи очевидны (см. Проклятие знания). В статьях же новичков для новичков зачастую описываются теже грабли, на которые другой новичок может наступить.


              1. olartamonov
                30.04.2019 11:48

                А идея читать книги вообще и учебники в частности, я так понимаю, окончательно вышла из моды?..


                1. augorelov
                  30.04.2019 11:53

                  Чукча не читатель...


                1. little-brother
                  30.04.2019 11:55

                  Вряд ли кто-то станет отрицать, что инструкцию что от техники, что от таблеток редко кто читает. Абсолютно аналогичная ситуация с учебниками. Человеческий мозг работает так, что «здесь и сейчас» превалирует над «надо поучить, зато потом окупится сторицей».

                  Учебник стоит читать, если потом это нужно будет для получения денег/развития своего проекта. А для сборки часов, метеостанции, автоматического лотка для кошки и прочей DIY-мелочевки — зачем?

                  Перфекционизм он не всегда нужен.


                  1. augorelov
                    30.04.2019 11:58

                    Диагноз: "Ардуинщик" классический.


                    1. little-brother
                      30.04.2019 12:01

                      Спасибо, доктор!


                      1. augorelov
                        30.04.2019 12:03

                        Всегда пожалуйста!


                  1. olartamonov
                    30.04.2019 12:08
                    +1

                    А для сборки часов, метеостанции, автоматического лотка для кошки и прочей DIY-мелочевки — зачем?


                    А чьи-то статьи вам зачем для этого тогда читать?

                    Вполне хватит инструкции в картинках, какой проводок куда вставлять.

                    (впрочем, многие тут заметят, что по сути «статьи» к этому и сводятся)


                    1. Andy_Big
                      30.04.2019 12:10
                      +2

                      Он про то и пишет — что читать ничего не надо, это труд и сложно для мозга. Картинки и Ютуб — вот это современный уровень :)


                      1. NordicEnergy
                        30.04.2019 12:57

                        Картинки и Ютуб — вот это современный уровень :)
                        Тут надо смириться, что большинство людей не хотят и не могут обрести знания уровня хотя бы начинающего инженера. При этом много всяких менеджеров, продаванов, сантехников, которые таки хотят собрать себе умный туалет. Они вынуждены обращаться к ютубу и картинкам, т.к. большего они не могут осилит. Не всем дано рисовать, так же не всем дано создавать многослойные платы.


                  1. augorelov
                    30.04.2019 12:10

                    Учебник стоит читать, чтобы метеостанция не показывала погоду на Марсе. Или для сборки кошачьего туалета, как в этой статье.


                    1. NordicEnergy
                      30.04.2019 12:55

                      Что-то ссылка не работает, стало интересно что там за туалет


                      1. augorelov
                        30.04.2019 12:58
                        +1

                        Вот правильная ссылочка


                  1. vvzvlad
                    30.04.2019 17:28

                    Вряд ли кто-то станет отрицать, что инструкцию что от техники, что от таблеток редко кто читает.

                    Не читать инструкцию к таблеткам. Даже не проглядеть. Не понимаю.


                    1. augorelov
                      30.04.2019 17:50

                      Как говорит молодой коллега: «Один раз живём!»


                      1. vvzvlad
                        30.04.2019 17:51

                        Если в случае с книгами я могу понять мотивацию, то в случае с таблетками… Нет, если стоит задача этот один раз укоротить, то да.


                        1. augorelov
                          30.04.2019 17:56

                          Он обычно это говорит, нарушая технику безопасности.


                      1. devil_oper
                        01.05.2019 22:19

                        image


                1. yefrem
                  30.04.2019 15:54
                  +1

                  я иногда играю в Starcraft, но совершенно не планирую читать о нем книги (они существуют, да). Мне вполне достаточно моей деревянной лиги, чтоб вечером после работы поиграть с такими же нубами, как я. Вот так и здесь.
                  То, что для вас это серьезная профессия, совершенно не означает, что все вокруг должны так же серьезно ее воспринимать.


                  1. augorelov
                    30.04.2019 16:02

                    Научитесь отделять мух от котлет. Попробуйте на сайте проф. игроков написать статью про то, как надо играть со своим уровнем нуба. Узнаете реакцию.


                    1. yefrem
                      30.04.2019 16:03

                      Это уже другой вопрос. Хотя, туториалы с нубскими стратегиями вполне себе существуют, просто про-игроки туда не заходят


                  1. Andy_Big
                    30.04.2019 16:04

                    Тут совсем другое. Глядя на подавляющее большинство трудов ардуинщиков чувствуешь себя как сантехник, смотрящий на вот это:


              1. Andy_Big
                30.04.2019 11:56

                новичкам слишком сложно читать статьи написанные профессионалами

                Учиться нынче не в почете? Хоть что-то почитать о тех деталях, из которых собираешься слепить что-то? Ну, например, узнать, что ардуина питается (и выдает на выходы) 5 вольт, а тот же модуль GPS допускает на своих входах максимум 3.6 вольта? :)
                В статьях же новичков для новичков зачастую описываются теже грабли, на которые другой новичок может наступить.

                А кроме описанной пары граблей молча прикладывается десяток других, неописанных. Просто потому что автор сам не в курсе их существования из-за недостатка знаний.


                1. little-brother
                  30.04.2019 12:01

                  Учиться — это труд и это сложно для мозга, который старается избежать этого.

                  Да, грабли в статьях от новичков имеются — это неизбежное зло. Однако отмечу, что у автора (оригнал статьи) устройство заработало. Сколько оно проработает — это уже другой вопрос.


                  1. Andy_Big
                    30.04.2019 12:05
                    +1

                    Учиться — это труд и это сложно для мозга

                    Поэтому лучше учить других? Как сделать то, в чем сам не разбираешься? :)
                    отмечу, что у автора (оригнал статьи) устройство заработало

                    В чем его заслуги чуть больше нуля.


                  1. augorelov
                    30.04.2019 12:06
                    +1

                    Учиться — это труд и это сложно для мозга, который старается избежать этого.

                    Какой у Вас ленивый мозг.


                    1. little-brother
                      30.04.2019 12:21

                      У вас мозг видимо другой, отличный от большинства обывателей этой планеты. Этому можно только позавидовать.

                      Поэтому лучше учить других?

                      Тут статья из серии «Смотрите у меня получилось!» и человеку захотелось поделиться. Обучения как такового в статье нет.

                      В целом, я понимаю точку зрения, что «Работа должна выполняться профессионалом». Однако, в реальном мире в редких областях это действительно так.


                      1. augorelov
                        30.04.2019 12:25
                        +1

                        Статьи из серии «Смотрите, что я сделаль, а оно ещё и работает!» не для Хабра. Для этих целей есть профильные сообщества.


                        1. little-brother
                          30.04.2019 12:34
                          +1

                          Насколько я понимаю, автор статьи и опубликовал её в профильном сообществе. То, что она появилась на Хабре — минус переводчика.


                          1. augorelov
                            30.04.2019 12:45
                            +1

                            Самый жирный минус переводчика, автора статьи на Хабре, в качестве перевода. А это показатель низкого уровня знаний в тематике. А низкий уровень знаний в тематика в отсутствии желания учиться. Хотя зачем учиться, это, по Вашим словам, бесполезная трата времени.


                            1. little-brother
                              30.04.2019 13:03
                              -1

                              Хотя зачем учиться, это, по Вашим словам, бесполезная трата времени.

                              Просьба указать сообщение, в котором я такое написал. Если вы имели в виду вот это, то увы, там речь шла про учебник. А читать учебник и учиться — это несколько разные вещи.


                              1. augorelov
                                30.04.2019 13:13
                                +1

                                Обучение без чтения профильной литературы (учебников) не бывает.


                                1. little-brother
                                  30.04.2019 13:25

                                  Не могу согласиться со столь категоричным заявлением. С моей точки зрения чтение учебников — это всего лишь один из способов обучения.


                                  1. augorelov
                                    30.04.2019 13:34

                                    Научится читать можно и без профильной литературы, а рассчитать антенный контур или импульсный источник питания не получится.


          1. augorelov
            30.04.2019 11:45

            С таким подходом и начинать не стоило.


            1. little-brother
              30.04.2019 11:48

              Точно, надо сразу рождаться профессионалом в своей области!


              1. augorelov
                30.04.2019 11:57

                Как минимум учиться по книгам, чтобы повышать свои навыки и умения. А не по картиночках для глупых и копипасту бестолковых программ, не понимая что она делает и почему именно так.


                1. augorelov
                  30.04.2019 13:18
                  +1

                  Правильно подметил olartamonov, чтение профильной литературы не в почете. Судя по минусующим комментарий.


            1. seri0shka
              03.05.2019 14:49

              С таким подходом и начинать не стоило.
              Большая часть того, чем мы занимаемся в свободное от работы и семьи время, вызывает вопросы «зачем, ведь можно купить готовое?», «зачем, ведь другие уже сделали лучше?», «зачем, это не стоит потраченного времени», и т.д.
              В результате многие проводят значительную часть жизни, уставившись в телевизор, планшет, или с пивом на лавочке. Это лучше?


        1. avost
          01.05.2019 01:00

          А что полезного, в данном случае, даст публикация полной схемы ардуины + гпс-модуля + модуля экрана? Это не несёт ни какого смысла. Никто не полезет внутрь гпс-модуля, всё взаимодейставе идёт на уровне интерфейсов и функциональных блоков. Знать, что D5 ардуины подключён к Rx гпс-ки для понимания работы мне необходимо. Знать номинал резистора в смесителе радиочастотной части гпс — нет. Публикация полной схемы электрической принципиальной только запутает и ухудшит понимание принципов работы прибора, ничего полезного не дав взамен. Вы ещё посетуйте, что прошивку в хекс-кодах не опубликовали в статье, как это было принято в журнале "коневодство" (то, есть, простите, "радио"). Да и то там это просто вынужденно делали...


          1. augorelov
            01.05.2019 06:54

            Сколько же вас «ардуинолюбов» бестолковых?! Учите основы. На схемах принципиальных электрических не обязательно изображать подробно каждый модуль. Для таких как Вы придумали ещё схемы соединений.


            1. avost
              02.05.2019 01:01

              Вы, должно быть, чересчур умны, чтобы заметить это, но на иллюстрации изображена именно схема соединений, дорогое невоспитанное подзаборное хамло.


              1. augorelov
                02.05.2019 07:45

                Если это схема соединения, то вернитесь в ясли малолетний «ардуинолюб». В статье именно цветная картиночках и никакого отношения к схеме она не имеет.
                Я никому не хамил в отличие от Вас. Ещё надо посмотреть кто из нас необразованное и невоспитанное подзаборное хамло.
                И в отличие от Вас, я действительно образован и умен.


                1. lenz1986
                  02.05.2019 07:54

                  НА самом деле это и есть схема соединений. Принятая как стандарт в среде ардуино. И рисуется она в программе разработанной ими же fritzing. Это именно та схема соединений которая понятна всем ардуинщикам. Им нельзя дать реальную принципиалку, и реальную схему соединений, могут банально не разобраться, а вот по такой схеме конструкцию может повторить любая домохозяйка, изначально в этом ее суть.
                  P.S> Да и на самом деле, зря вы нападает на среду ардуино. На самом деле очень изюмительная штука, когда надо пощупать что то быстро и без разбора в регистрах нового датчика, просто взял — включил и оно работает. Я так множество датчиков тестирую. Это очень удобно, да и плюс все датчики и сенсоры что продаются на али, все уже изначально подготовлены под интерфейс ардуины, взял проводки воткнул и все завертелось.


                  1. augorelov
                    02.05.2019 09:04

                    Раз принята в среде «ардуинолюбов», пускай и сидят и картиночки рисуют на своих сайтах и в своих сообществах. Хабр все таки более технический сайт, а не сборище домохозяек.
                    З.Ы.
                    Зная, как пишут библиотеки для Ардуино, у Вас вряд ли получится использовать все характеристики датчика не изучая его регистры. Вот мне не составляет проблемы быстро накидать программу без среды Ардуино для проверки работы внешних датчиков, исполнительных устройств и т.д.
                    Мне Вас немного жаль, раз Вы так тестируете.


                    1. lenz1986
                      02.05.2019 11:40

                      Тесты это взял включил и посмотрел а что выходит а как оно там работает. Понятно что в работе потом взял аппноут\датащит и посмотрел что в библиотеке ардуины 64-е лишних телодвижения, когда можно было банально 3 регистра прописать с нужной конфигруацией.


                      1. olartamonov
                        02.05.2019 12:18

                        Как оно работает — на любой датчик прекрасно описано в даташите, первая страница плюс раздел «Application».

                        А как оно работает на самом деле, особенно в сложных условиях — с ардуиновскими библиотеками вы достоверно установите примерно никогда.


                1. avost
                  03.05.2019 03:10
                  -2

                  В статье именно цветная картиночках и никакого отношения к схеме она не имеет.

                  А, то есть вы даже не знаете как выглядят схемы соединений? Тогда понятно, почему вместо конструктивных аргументов вы используете личные оскорбления. Умище так и прёт, так и прёт!


                  Я никому не хамил

                  Вы не только хамло позорное, но и брехло подзаборное.
                  Давайте просто процитирую :


                  вернитесь в ясли малолетний «ардуинолюб

                  Сколько же вас «ардуинолюбов» бестолковых?!

                  Статьи из серии «Смотрите, что я сделаль, а оно ещё и работает!

                  Какой у Вас ленивый мозг.

                  Диагноз: "Ардуинщик" классический.

                  Чукча не читатель…

                  "Ардуинщик" неразумный взялся за перевод статьи

                  Собственно, ничего иного, кроме оскорблений окружающих и хамства вы в теме не написали. Поздравляю вас, вы — брехливое хамло.


                  в отличие от Вас, я действительно образован и умен.

                  Более искушены в хамстве и вранье, это точно. Но тут меня не сложно победить, да я пытаться не буду — слаб я в этом, не то, что вы, такой умище, что не можете схему соединений не то, что прочесть, но даже опознать! Фу, позорище.


                  1. augorelov
                    03.05.2019 08:32

                    Как раз в отличие от Вас я знаю, как выглядит схема соединений. В отличие от Вас схемы электрические разных видов за моим авторством проходили нормаконтроль и проверку военпредов. Так кто из нас неуч?
                    Ах, Вас задевают "Ардуинщик" и "Ардуинолюб", ну извините, пока Вы и такие же как Вы необразованные товарищи будете писать безграмотные статьи, я называл и буду так продолжать называть все ваше сборище.


                  1. JerleShannara
                    03.05.2019 15:27

                    Схема соединений должна быть как-либо стандартизована?


                  1. GennPen
                    03.05.2019 16:34

                    Загуглите первое что предлагают по запросу «схема соединений».
                    Есть определенные стандарты схем. А то что кто-то продвигает свой вид «схем» — это «я художник, я так вижу».


              1. devil_oper
                02.05.2019 09:14
                +1

                Это не схема. Это картинка. Разница между ними разъяснялась в детской книжке Борисова сразу после решения вопроса «где взять диод для детекторного приемника».


    1. Andy_Big
      30.04.2019 11:20

      Тут хоть сигналы подписаны, и на том уже спасибо :))


  1. Salavat
    30.04.2019 10:52

    Вот бы еще питание от солнечной панели и всё залить эпоксидной смолой. Полная автономность, походность… Хватит питания?


    1. olartamonov
      30.04.2019 11:02
      +1

      Вопрос про энергопотребление средний автор успешного ардуино-проекта, я так понимаю, воспринимает как прямое оскорбление и попытку унизить его человеческое достоинство.

      Питания-то хватит, только сначала надо вот эту наколенную поделку выкинуть целиком и сделать нормально.


      1. Andy_Big
        30.04.2019 11:49

        Прикинул ради интереса — при нормальной реализации такие часы смогут работать минимум 7-8 месяцев на аккумуляторе 18650 емкостью 2400 мА*ч :)


        1. olartamonov
          30.04.2019 12:06

          Сильно больше.

          У дешёвого 3-дюймового графического e-ink обновление части экрана занимает 300 мс, жрёт он при этом в пределах 10 мА, обновлять надо раз в минуту одну цифру, раз в 10 минут две цифры, etc.

          GPS более чем достаточно включать раз в неделю на пару минут.

          Всё остальное время потребление всего этого хозяйства < 10 мкА.

          А работать нормально оно всё равно не будет, потому что в типовом железобетонном доме ставить часы придётся на окно, чтобы они что-то там поймали хотя бы теоретически.


          1. Andy_Big
            30.04.2019 12:15

            Ну, я считал с допущениями по максимуму — GPS раз в сутки по минуте с потреблением 30 мА, обновление экрана — 1000 мс с потреблением 20 мА, потребление всего в спячке — 50 мкА :)
            За неделю RTC на обычном часовом кварце может и убежать довольно сильно :)


            1. olartamonov
              30.04.2019 12:30

              Обычный кварц — это не хуже 30 ppm, за неделю меньше 20 секунд уход.


              1. Andy_Big
                30.04.2019 12:41

                Это если нормальный кварц, а не китайский с Алиэкспресса :)


                1. olartamonov
                  30.04.2019 15:42

                  И тут я посмотрел в код этого мегадевайса и неприлично взоржал:

                  void loop() {
                    // put your main code here, to run repeatedly:
                    readGPSData(1000);
                    updateTime();
                    displayTime();
                    delay(59000);
                  }


                  Аффтар проверяет время каждые 59 секунд, то есть, его часы by design имеют отставание до 1 минуты. На ровном месте.

                  А мы тут кварцами меряемся.

                  Upd. А хотя ладно, дальше он кладёт в системные часы и секунды тоже, а ещё дальше берёт время из них. Но зачем тогда ежеминутно дёргать GPS? Ну или, наоборот, зачем эта задержка в 59 секунд, когда просто сиди да читай что тебе GPS сам в консоль сыпет? Загадки, одни загадки.


                  1. Andy_Big
                    30.04.2019 15:55

                    Угу, я тоже оценил этот ход. Даже представил рассуждения автора: «Таак, тут мы ровно одну секунду читаем GPS, потом обновляем время на экране (раз я тут не ставлю задержку значит обновление происходит мгновенно) и делаем паузу ровно 59 секунд. И получается обновление экрана раз в минуту с точностью до миллисекунды — ну не зря же задержку в миллисекундах надо указывать. Бинго!».
                    Автор, похоже, из того же лагеря ардуинистов, что и little-brother — не учиться же, напрягая мозг и себя, в самом деле-то…


                    1. olartamonov
                      30.04.2019 16:16

                      Меня просто поражает каждый раз вот это сочетание масштабности и бессмысленности в типичных ардуино-проектах.

                      То есть наворочен какой-то код, который, видимо, автору казался логичным и нужным, но есть очень серьёзные сомнения, что даже он сам сможет объяснить, почему он ему таким казался.


                      1. NordicEnergy
                        30.04.2019 16:23

                        почему он ему таким казался
                        Потому что этот код был в скетче откуда он содрал этот кусок программы, а выкинуть побоялся — вдруг сломается.


                      1. Andy_Big
                        30.04.2019 16:40

                        Я так подозреваю, что автор самостоятельно наворотил максимум 5 строчек, а остальное надергал из других скетчей и примеров к тем пяти чужим библиотекам, из которых, в общем-то, и состоит вся прошивка.


                        1. augorelov
                          30.04.2019 17:01

                          Классический подход любителей ардуино.


                          1. Andy_Big
                            30.04.2019 18:04

                            Потому что сама ардуина подталкивает к такому подходу. И широко пропагандируется она именно для такого ее использования.


                            1. augorelov
                              30.04.2019 18:07

                              Изначально идея была, как раз не в этом. Но как говаривал один наш политик: «Хотели как лучше, а получилось как всегда!»


                              1. Andy_Big
                                30.04.2019 18:18

                                Изначально идея была, как раз не в этом.

                                Но пришли-то как раз к этому :)


                          1. garageman
                            01.05.2019 10:00

                            Нет, классический подход — это посмотреть как написано в библиотеке, понять почему именно так и использовать. Если не удалось понять или написано плохо — переписать с нуля.


                            1. augorelov
                              01.05.2019 15:03

                              Очень редко встречается описанный Вами подход, что скорее исключение из большинства "ардуинолюбов".


                              1. garageman
                                01.05.2019 15:48

                                А я ардуинку и не люблю собственно :) Больше к 32-разрядным контроллерам привязан. Но подход-то один, независимо от платформы.


    1. Andy_Big
      30.04.2019 11:19

      Этому поделию — нет, не хватит. Но если выкинуть ардуину с ее кодом и заменить ее нормальным микроконтроллером с нормальным кодом, то хватит.


      1. Stanislavvv
        30.04.2019 13:56

        По-моему, тут даже выкидывать ардуину не обязательно. Достаточно написать нормальный код. Там обычная atmega, которая умеет достаточно энергосбережений, чтоб не жрать попусту.


        1. Andy_Big
          30.04.2019 14:50

          Энергосбережение умеет, не спорю. Хотя и далеко не так хорошо как какая-нибудь STM8L. Но во-первых нет удобного (для часов) выхода из энергосбережения, а во-вторых нет часов реального времени.


          1. moviq
            30.04.2019 18:44

            Сделал на atmega48PA с часовым кварцем, работающем в асинхронном режиме на таймере2. Всё время сплю, по прерыванию таймера просыпаюсь каждые 20мс, вывожу через SPI данные на в 4 регистра HC595 для LCD от мультиметра, засыпаю. А время считываю с DS1302 раз в секунду по тому же SPI )


            1. Andy_Big
              30.04.2019 21:10

              На STM32L это решилось бы без внешних регистров и время с DS считывалось бы раз в сутки… Или раз в неделю :) Батареек хватало бы на раз в десять дольше :)


              1. moviq
                01.05.2019 11:11

                Ну наверное и я бы мог раз в сутки/неделю считывать время :) Я для 1302 делал доп. коррекцию внешними конденсаторами для улучшения точности. Всё это у меня потребляет около 100мкА. Работает от 3-х Б/У батареек AAA


  1. ieroglyph
    30.04.2019 11:07

    Интересует, измерялся ли реальный общий ток потребления данных часов?


    1. olartamonov
      30.04.2019 11:12
      +1

      А там измерять — только расстраиваться: у чувака GPS фигачит непрерывно, это само по себе миллиампер двадцать. Плюс неспящая атмега ещё столько же.

      Первые в мире часы на E-ink, которые не могут работать от батарейки.


    1. seg1 Автор
      30.04.2019 11:20

      В статье-оригинале (ссылка на неё есть в шапке) автор не приводит эту информацию.


  1. Andy_Big
    30.04.2019 11:08
    +1

    А зачем исходник сунули в переводчик?

    readGPSData ( 1000 );
    Время обновления();
    displayTime ();
    задержка ( 59000 );


    Ну почему нельзя нормально перевести даже такую короткую заметку?
    e-Paper (электронно переворачиваемые «листы» бумаги с цифрами)

    серийный номер программного обеспечения для приема данных с модуля GPS, отображение e-Paper

    4-строчный SPI для связи

    Или переводчик не владеет тематикой — тогда зачем браться? Или перевод сделан по принципу «вот вам гуглоперевод, отстаньте от меня» — тогда зачем вообще его публиковать?
    И откуда в последнее время пошла мода кое-как переводить всякую ерунду с hackaday.io? Без знаний по теме, без какой-либо изюминки, без хоть какого-то старания… Зачем оно здесь?


    1. augorelov
      30.04.2019 11:13
      +1

      Чему тут удивляться. "Ардуинщик" неразумный взялся за перевод статьи. И таких все больше и больше. Тут возникает вопрос, как такие статьи из песочницы пропускают.


      1. seg1 Автор
        30.04.2019 11:26

        Когда то нужно начинать! Получу тут по полной, чему нибудь и сам начусь.


        1. augorelov
          30.04.2019 12:02

          Учиться надо было раньше, до написания корявого перевода.


          1. seg1 Автор
            30.04.2019 12:50

            В прошлой жизни я был деревом.


            1. augorelov
              30.04.2019 12:52

              Похоже, ничего не изменилось с тех времен.


              1. seg1 Автор
                30.04.2019 12:56

                Я буду первым баобабом, разобравшимся в ардуино!


    1. REPISOT
      30.04.2019 11:14

      Забавно, что пригласил его tormozedison, который штампует такие же переводы с ардуинами.


    1. olartamonov
      30.04.2019 11:14
      +1

      И откуда в последнее время пошла мода кое-как переводить всякую ерунду с hackaday.io? Без знаний по теме, без какой-либо изюминки, без хоть какого-то старания… Зачем оно здесь?


      Публикуешь пять бессмысленных переводов гуглотранслейтом — и вот уже можно называть себя «регулярный автор популярного ресурса Хабрахабр» и соваться в корпоративные блоги с предложением за денежку малую…


      1. lenz1986
        30.04.2019 20:21

        ОООО а так можно было????


        1. olartamonov
          30.04.2019 21:31

          Я нигде не обещал, что автора настигнет успех.

          С другой стороны, вот за этот опус ему уже чуть-чуть в карму да капнуло, будет упорен в глулотранслейте и научится поменьше лажать в технических вещах («Время обновления();») — да норм, за несколько месяцев карму в +NN вытащит, а там можно и услуги начать предлагать, если бедненько — то через фрилансерские биржи, а там и прямые выходы в PR-отделы появятся.


          1. lenz1986
            30.04.2019 21:33

            Вон оно как… Ясно спс за наводку, щас тоже что нить напишу 0))))


            1. olartamonov
              30.04.2019 22:06

              Вы так смайлики ставите, как будто я шучу.

              А я вот во вполне технологической области реально и лично знаю человека, который везде выступает как видный эксперт просто потому, что ему однажды зачем-то захотелось прослыть экспертом в этой области. Дальше всё по накатанной — завёл страницу во вконтакте, канал в телеге, стал копипастить туда новости по теме, начал везде подписываться экспертом. В области, в которой он эксперт, он сам при этом руками делает ровным счётом ничего и опыт имеет ровным счётом никакой.

              Но кто-то вот на подработку на написании текстов карму набирает, а кого-то уже и СМИ периодически цитируют.


              1. lenz1986
                02.05.2019 07:59

                я так не смогу… Я не спец ни в чем… я тока учусь… А смайлики это я в шоке был, хотя предполагал о таком развитии событий.
                P.S> А можно Вам в личку пару вопросов задать?) Вы вроде с нордиками плотно работаете… Я тут с ними играюсь и че та встрял… А дев зон гады молчат (


                1. olartamonov
                  02.05.2019 10:39

                  Ну попробуйте, хотя вот именно я планирую с ними работать примерно так с завтрашнего дня, специально на праздники домой наших модулёчков взял. Но если что, я переадресую тому, кто уже работает.


            1. augorelov
              01.05.2019 00:17

              Вам будет в карму плюс, а кому-то минус)))


  1. 4ekin
    30.04.2019 11:12

    задержка ( 59000 );

    Спасибо за хорошее настроение с утра!


  1. dlinyj
    30.04.2019 11:19
    +1

    Заходим на hackaday, берём и переводим любую статью на habr.

    Браво, вы прекрасны.

    ИМХО, все переводы с hackaday надо запретить. Ибо какой смысл читать одно и то же в двух местах.


    1. Andy_Big
      30.04.2019 11:30

      Тем более такие статьи с таким переводом. Тут все «прекрасно» — и схемотехника, и код, и перевод.


    1. alexyr
      30.04.2019 12:42

      О, спасибо за наводку! Интересный ресурс!


  1. NordicEnergy
    30.04.2019 11:34

    Код вставлен просто божественно! Что мешало сделать так и не заставлять людей страдать?

    / * 
    Самонастраивающиеся часы для часового пояса 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. Andy_Big
      30.04.2019 11:37

      А лучше так:
      /* 
         Self-adjusting clock for CET time zone with DST 
         by kk99 
         2018 
      */
      
      #include <SoftwareSerial.h>
      #include <TinyGPS++.h>
      #include <SPI.h>
      #include <U8g2lib.h>
      #include <Timezone.h>
      #include <Arduino.h>
      
      // GPS handle
      TinyGPSPlus gps;
      
      // EDP handle
      U8G2_IL3820_V2_296X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
      
      // Central European Time
      TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120}; // Central European Summer Time
      TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60};   // Central European Standard Time
      Timezone CE(CEST, CET);
      TimeChangeRule *tcr;
      
      // Serial handle
      SoftwareSerial softSerial(3, 2);
      
      void setup() {
        // put your setup code here, to run once:
        u8g2.begin();
        softSerial.begin(9600);
        setTime(00, 00, 00, 01, 01, 1970);
      }
      
      void loop() {
        // put your main code here, to run repeatedly:
        readGPSData(1000);
        updateTime();
        displayTime();
        delay(59000);
      }
      
      static void readGPSData(unsigned long timeoutMs)
      {
        unsigned long start = millis();
        do
        {
          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", hour(local), minute(local));
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_logisoso78_tn);
          u8g2.drawStr(26, 103, timeValue);
          } while (u8g2.nextPage());
      }
      


      1. NordicEnergy
        30.04.2019 11:39

        Слишком прекрасно для этой статьи будет)


    1. olartamonov
      30.04.2019 11:49

      Что мешало сделать так


      Гуглотранслейт так не умеет.


    1. devil_oper
      30.04.2019 13:12

      Это плохой перевод. Хороший должен выглядеть как-то так:

      алг читатьДанныеГЛОНАСС (арг цел таймаутМс)
      нач
      цел старт
      старт := миллис()
      нц
      нц пока мягкийПоследовательный.доступен()
      глонасс.кодировать(мягкийПоследовательный.читать())
      кц
      кц пока (миллис — старт < таймаутМс )
      кон


      1. seg1 Автор
        30.04.2019 13:14

        Язык машинного программирования «Девил Опер»?


        1. devil_oper
          30.04.2019 14:35

          Вообще-то это язык рая, но школоте не понять.

          bfy.tw/NRmp


          1. seg1 Автор
            30.04.2019 14:47

            Я тупой, но усидчивый, разберусь.


  1. lamoss
    30.04.2019 12:01

    Интересно, но еще можно сэкономить и вместо GPS использовать DCF77 (готовый вариант около 1 тысячи против 2 с лишним тысяч за NEO-7M. Хотя, конечно, вне центральной части РФ принимать будет неустойчиво


    1. VT100
      01.05.2019 22:14

      При том, что есть посконные (т.е с нелимитированной доступностью сигнала) станции точного времени в том-же диапазоне. RBU и т.д.

      Исходная статья — не стоила затрат времени автора и нас и затрат энергии на работу всех задействованных вычислительных средств.


  1. Vbeerby
    30.04.2019 20:01

    Кроме всего прочего, функция

    gps.time.isValid ()
    в TinyGPS++ выдаёт True при значении 00:00, а именно нули выдаёт NEO при отсутствии связи со спутниками, со всеми вытекающими. Эти часы при отсутствии спутников будут показывать нули, а не неточное время.
    Странно, что ни один из популярных парсеров NMEA для Arduino не использует статус из $GPRMC для определения достоверности данных. («A» — статус: «A» — данные достоверны, «V» — недостоверны.) В итоге плюнул на все эти парсеры.


    1. olartamonov
      30.04.2019 21:06

      Странно, что ни один из популярных парсеров NMEA для Arduino не использует статус из $GPRMC для определения достоверности данных


      Я сегодня прямо весь день хожу и всем советую прекрасную футболку.

      Вот опять же, интересно, а что конкретно авторов этих парсеров побудило так делать?..


    1. Andy_Big
      30.04.2019 21:12

      Может они просто не в курсе что есть такой статус?.. Совершенно не удивлюсь.


      1. augorelov
        01.05.2019 00:12

        А кто из них осилит изучить NMEA, это выше их сил. Это же учебники читать надо!


        1. JerleShannara
          01.05.2019 00:36

          А что в нём сложного? Этож текстовый протокол.


          1. augorelov
            01.05.2019 07:00

            Вы у меня спрашиваете?! Спросите «ардуюнолюбов», раз не могут нормальный парсер пакетов NMEA изобразить.


    1. vau
      02.05.2019 22:34
      +1

      Флаг в пакете RMC — индикатор валидности решения навигационной задачи. Для ее решения приемнику необходимо видеть минимум 4 спутника на постоянной основе. Для определения времени достаточно одного и то изредка. В современных приемниках есть внутренние часы, которые приемнику крайне необходимы для «горячего» и «теплого» старта или для восстановления потерянного фикса. Таким образом приемники на актуальных чипсетах продолжают выдавать корректное для многих практических задач время даже при полной потере сигнала от спутника. Отдельного флага достоверности времени в NMEA нет. А еще есть такое прекрасное явление, как gps week number rollover, которое мы могли наблюдать в апреле сего года. Так что со временем все сложно не только у ардуинщиков.


      1. Vbeerby
        03.05.2019 09:31

        Да, я полностью согласен что использование флага при получении только времени — избыточно. И был бы благодарен за подсказку в получении достоверного времени для построения энергоэффективного устройства. Так как разница ощутимая, на холодную — до получения времени 10-30 сек. до смены флага ~2мин.
        Сравнивать несколько показаний с заданным интервалом?
        Смотреть на количество видимых спутников в $GPGSV?


        1. devil_oper
          03.05.2019 09:41

          ЕМНИП, ublox'ы начинают выдавать импульсы на выход PPS, когда успешно определили время — так что можно ловить это.


          1. olartamonov
            03.05.2019 13:41

            Quectel L76 — 1PPS появляется строго в момент фиксации координат, одновременно с флагом A в RMC. Точное время при этом в RMC появляется через 3-4 секунды после приёма первого спутника (т.е. на GSV ориентироваться нельзя), до этого момента в RMC во времени отнюдь не нули, а данные с внутренних часов, стартующих при подаче питания на 23:59:42.

            Но 1PPS, если нужно точное время, надо ловить в любом случае, потому как именно по его фронту определяется время, отданное позже в том же RMC. 1PPS можно игнорировать, если доли секунды роли не играют.


        1. vau
          03.05.2019 17:09

          Самое простое, что приходит на ум — смотреть на дату. Она должна стать корректной. Т.е. больше 2 мая 2019. Насколько я вижу на примере китайского чипсета MT3333 во многих случаях сначала приемник выдает корректное время, но дата неправильна. Через несколько секунд время и дата становятся корректными. Но опять таки надо смотреть на особенности приемника. У uBlox тараканы могут быть другими.


          1. olartamonov
            03.05.2019 17:22

            Quectel L76 (тот же MT3333 внутри)

            Включение:
            $GPRMC,235954.970,V,,,,,0.00,0.00,050180,,,N*43

            Увидел один спутник, время стало правильным, дата изменилась, но опять неправильная:
            $GPRMC,141524.094,V,,,,,0.00,0.00,110180,,,N*4E

            Увидел несколько спутников (в т.ч. ГЛОНАСС, поэтому GPRMC сменилось на GNRMC), время и дата правильные, но координат пока нет:
            $GNRMC,141709.078,V,,,,,42.33,255.93,030519,,,N*66

            Короче, до фиксации координат никто ничего не гарантирует. Более того, NMEA 0183 подразумевает, что поля времени и даты в RMC без координат тупо не имеют смысла — т.к. это время собственно фиксации данных координат.

            Какую-то эмпирику, не связанную с явным признаком валидности, можно использовать только на конкретной модели приёмника с конкретной версией прошивки.

            Хотите, чтобы гарантированно работало на всех приёмниках — ждите «A» в RMC и строба 1PPS.


            1. Vbeerby
              03.05.2019 19:36

              Огромное спасибо за развёрнутый ответ!