Как на ардуино настроить часы

Урок 18. Подключение RTC часы реального времени с кнопками

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

В этом уроке мы научимся не только выводить, но и устанавливать время RTC модуля при помощи трёх кнопок.

Нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

Видео

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

Подключение модулей RTC и LCD, данного урока, осуществляется к аппаратным выводам SDA, и SCL.

RTC модуль Trema на базе чипа DS1307 / LCD дисплей на базе чипа LCD1602Arduino Uno
GNDGND
Vcc+5V
SDA (Serial DAta)A4
SCL (Serial CLock)A5

подключение кнопок: кнопка «SET» к выводу 2, кнопка «UP» к выводу 3 и копка «DOWN» к выводу 4.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Код программы:

При подключении библиотеки «iarduino_RTC» нужно указать, с каким модулем ей работать, в данном случае это модуль Trema на базе чипа DS1307:

Аналогичный алгоритм действий при подключении библиотеки «LiquidCrystal_I2C» для работы с LCD дисплеем LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) :

В библиотеке «iarduino_RTC» доступны 9 числовых переменных: seconds, minutes, hours, Hours, midday, day, weekday, month и year, значения которых обновляются после каждого вызова функции gettime(). Эти переменные мы будим использовать для изменения даты и времени.

Алгоритм работы кнопок следующий:

Источник

Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino

Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека. Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Подключение:

Подключение DS1307 к Arduino :

RTC DS1307Arduino UNO
GNDGND
VCC+5V
SDAA4
SCLA5

Подключение DS1302 к Arduino :

RTC DS1302Arduino UNO
GNDGND
VCC+5V
RST10 (Можно изменить на другие в скетче)
CLK13 (Можно изменить на другие в скетче)
DAT12 (Можно изменить на другие в скетче)

Подключение DS3231 к Arduino :

RTC DS3231Arduino UNO
GNDGND
VCC+5V
SDAA4
SCLA5

Программа:

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

Для DS1307:

Для DS1302 :

Для DS3231 :

Пример установки текущего времени в RTC модуль (DS1307):

Пример считывания текущего времени с RTC модуля (DS1307) и вывод в «Последовательный порт» :

Преимущества библиотеки:

— библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.

— библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire

— для инициализации модуля необходимо вызвать функцию begin с названием модуля.

— подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)

— простота установки и чтения времени функциями settime и gettime

функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.)

функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.

— библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt

Таким образом добавив новый модуль в библиотеку, мы лишь увеличим область занимаемой динамической памяти на

36 байт, при этом не затронув область памяти программ.

— при вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания.

— при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.

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

Функцию period достаточно вызвать один раз.

Источник

Часы на Ардуино своими руками

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

Часы на Ардуино на основе ЖК-дисплея и часов реального времени

Цель первого урока показать, как сделать простые часы на основе Arduino с использованием ЖК-дисплея и часов реального времени.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Комплектующие

Для первого урока этого большого руководства нам понадобятся следующие комплектующие для наших часов на Ардуино:

Схема соединения

Схема очень проста. PCF8563 связывается с Arduino с помощью TWI, и когда данные принимаются, ЖК-дисплей обновляется, показывая новое время.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Установка даты и времени

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

Код проекта

Теперь вы сможете использовать свои часы, загрузив этот скетч на Arduino:

Часы с выводом на экран Nokia 5110

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Комплектующие

Детали, используемые в этом проекте ниже.

Оборудование

Программное обеспечение

Схема соединения

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Соединяем детали часов на Ардуино как на схеме выше:

Код урока

Код второй версии часов вы можете скачать или скопировать ниже.

Часы с будильником, гигрометром и термометром

Эти часы сделаны с использованием платы Arduino Uno, датчика AM2302, модуля RTC DS3231 и TFT-дисплей 1,8″ с ST7735.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Комплектующие

Компоненты, используемые в третьей версии часов на Ардуино перечислены ниже.

Компоненты оборудования

Программное обеспечение

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Схема соединения

Соедините все детали часов согласно схеме ниже.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Код урока

Скачайте или скопируйте код часов для Ардуино ниже и загрузите на плату используя Arduino IDE.

Часы без RTC

Для начала мы должны понимать, что такое RTC. Из Википедии:

В итоге в данной версии мы сделаем часы без RTC с индикатором температуры и влажности на Arduino с помощью модуля DHT11. Также мы используем 3 кнопки для установки часов.

Комплектующие

Вам понадобятся эти кусочки для этого проекта:

Схема соединения

Соедините комплектующие часов как на схеме ниже.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Вы можете скопировать или скачать код часов на Ардуино ниже.

На этом пока всё. Мы постарались описать все основные варианты реализации часов на Ардуино.

Источник

Подключение DS1302 к Ардуино по I2C / SPI

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

DS1302 Аrduino — это модуль часов реального времени с возможностью бесперебойного питания от литиевой батарейки. Рассмотрим схему подключения модуля к плате Ардуино и продемонстрируем код, с помощью которого можно установить нужную дату и время. Также мы разместили описание универсальной библиотеки iarduino_RTC.h для работы с модулями DS1302, DS1307 и DS3231.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Модуль DS1302 (RTC): схема, описание

Ориентация по времени полезна при создании устройства для автоматического полива растений, включении света или отопления по строгому расписанию и т.д. Контроллер Arduino не имеет встроенных часов, поэтому при необходимости выполнения задач микроконтроллером Arduino Uno в строго определенное время суток, понадобится использовать в проекте модуль часов DS1302 или ближайшие аналоги.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часыРаспиновка ds1302. Часы реального времени Arduino DS1302

Микросхема отличается низким энергопотреблением и позволяет отсчитывать время с точностью до секунд. Подключение ds1302 к Ардуино осуществляется с помощью пяти контактов. Выводы VCC и Gnd отвечают за питание модуля. Контакты CLK,DAT и RESX подключают к цифровым пинам микроконтроллера. В скетче можно самим указать задействованные цифровые пины (в нашем примере использован 6,7 и 8 пин).

Как подключить DS1302 к Arduino (RTC)

Для этого занятия нам потребуется:

Модули часов DS1307 и DS3231 подключаются к плате Ардуино через I2C протокол, как LCD дисплей I2C. Контакт SDA подключается к пину A4, контакт SCL к пину A5 Ардуино Уно. При подключении данных модулей к плате Arduino Mega следует использовать порты SDA (20 пин) и SCL (21 пин). При этом в скетче необходимо снять комментарий в строчке с нужным модулем, а строчку с модулем 1302 наоборот закомментировать.

Скетч. Работа с модулем ds3231 Ардуино DS1307

Пояснения к коду:

Подключение DS1307 к дисплею LCD 1602 i2c

Рассмотрим два варианта подключения модуля RTC к Arduino и текстового дисплея 1602. В первом варианте используется протокол SPI для модуля часов, поэтому к предыдущей схеме потребуется добавить только дисплей с iic модулем. А в скетче следует расскомментировать соответствующую строку. После внесения правок в схему и программу — загрузите следующий скетч в микроконтроллер.

Скетч. Часы с экраном LCD 1602 и DS1302

Пояснения к коду:

При подключении экрана и модуля RTC к одной шине iic — порты SDA(A4) и SCL(A5), следует указать в скетче какой модуль используется. Схема подключения размещена выше, кроме того вы можете использовать сканер шины i2c для того, чтобы увидеть адреса устройств. Если адреса, которые установлены производителем по умолчанию вы не изменяли — соберите схему и загрузите следующий пример в плату.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часыСхема подключения DS1307 и LCD по i2c

Скетч. Часы с LCD 1602 и DS1302 I2C Arduino

Пояснения к коду:

Библиотека RTC.h Arduino: описание команд

Для работы с модулями часов Ардуино, в библиотеке реализовано 5 функций:

begin(); // запуск модуля

settime(секунды, минуты, часы, день, месяц, год, день недели); // указать время
— год указывается без учета века, в формате 0-99
— часы указываются в 24-часовом формате, от 0 до 23
— день недели указывается в виде числа от 0-воскресенье, 6-суббота

gettime(«строка с параметрами»); // получить время
— gettime(«d-m-Y, H:i:s, D»); ответит строкой «12-06-2020, 18:30:05, Fri»
— gettime(«H»); ответит строкой «18»

функцией gettime можно получать различную информацию:

blinktime(параметр)
— указывает функции gettime мигать одним из параметров времени

period(минуты)
— устанавливает период обращения к модулю в минутах (от 0 до 255)

Заключение. В часы на Ардуино с дисплеем 1602 и DS1302 можно добавить функцию показа температуры и будильник. Данный модуль позволяет существенно расширить функции микроконтроллера, которые должны выполняться в определенное время суток. Если у вас возникли вопросы по сборке и программированию часов на Arduino с DS1302 и LCD дисплеем — оставляйте их в комментариях к записи.

Источник

Arduino Mega Server и часы реального времени

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

В этой статье вы узнаете как Arduino Mega Server работает со временем и как можно создавать проекты на Ардуино, которые имеют привязку к реальному времени, вне зависимости от того, установлен ли в них «железный» RTC-модуль или нет. Все вопросы работы с реальным временем на Ардуино будут подробно разобраны и после прочтения этой статьи вы станете настоящим «мастером часовых дел».

Суть вопроса

Любой мало-мальски серьёзный проект на Ардуино должен иметь представление о текущем реальном времени. Например, показания датчиков должны быть привязаны ко времени (иначе никакой статистики и даже элементарных графиков невозможно будет построить), контроллер должен производить те или иные действия в зависимости от текущего времени суток, выходных, праздников и т. д. Если ваш контроллер не имеет представления о реальном времени, то он превращается в простой автомат, который может производить только элементарные действия по жёстко заданной программе.

Поскольку Arduino Mega Server это мощная и развитая система, то такое положение дел (отсутствие работы с реальным временем) меня, да и всех остальных пользователей системы, никак не могло устроить. Поэтому вопрос интеграции в систему RTC был одним из первых на повестке дня.

Виртуальные часы реального времени

Всё бы ничего, но ни у меня, ни у большинства пользователей AMS не было того самого «железного» модуля RTC, поэтому было принято решение сделать «ход конём» и, в качестве временной меры, организовать часы реального времени, работающие внутри системы, без настоящего физического модуля. Что и было с успехом реализовано.

Итак, как организовать виртуальный RTC, без настоящего модуля. Существует замечательная библиотека Time Library которая и выполняет львиную долю работы по обеспечению нас точным временем. Для начала работы с ней, её нужно скачать, разархивировать и поместить на стандартное место всех библиотек среды Arduino, а именно, в папку:

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

Как это работает

Принцип очень простой. Библиотека «запускает» виртуальные часы «внутри» контроллера и предоставляет возможность синхронизировать их множеством способов, на выбор. Вы можете выбрать тот способ, который вам больше подходит. Поскольку Arduino Mega Server это сетевое устройство, то был выбран вариант синхронизации часов через сеть с серверами точного времени. Это могут быть сервера в Интернет или сервера в локальной сети, на которых работает соответствующая служба. Например, в базовом варианте AMS часы синхронизируются с сервером MajorDoMo, и для этого ничего настраивать не нужно, всё работает «из коробки».

Итак, для того, чтобы это заработало, нужно в начале скетча подключить соответствующие библиотеки.

Файл Time.h это собственно библиотека для работы со временем, а остальные файлы необходимы для работы с сетью и для синхронизации времени по протоколу NTP (библиотека Ethernet тоже должна быть у вас установлена).

Далее, вам нужно указать IP-адрес сервера, с которым вы хотите синхронизировать время

и соответствующий порт

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

осталось только указать временную зону

и создать объект EthernetUDP

На этом подготовительные операции можно считать законченными и можно описывать нужную вам функциональность работы со временем. Функция инициализации:

Здесь нужно обратить внимание на функцию

Эта функция устанавливает источник синхронизации времени (в данном случае это NTP синхронизация через сеть). Но это может быль любой другой источник, например, физический модуль RTC. Выполнение этой функции приводит к установке источника синхронизации (на будущее) и, одновременно, к самой синхронизации времени через этот источник. Именно в момент выполнения этой функции у вас в системе «появляется» точное время.

В самой библиотеке есть ещё одна интересная функция,

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

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Теперь вы можете пользоваться точным временем внутри скетча Ардуино, например, выводить в Serial монитор события не просто, а привязанными к конкретному точному времени. Делается это при помощи функции timeStamp():

которая является обёрткой для функции serialRTC():

Разбор механизма передачи и отображения времени в веб-интерфейсе AMS выходит за рамки данного повествования и достоин отдельной статьи и, если будет интерес, то можно будет написать продолжение и во всех подробностях объяснить, как происходит «магия» отображения времени в веб-интерфейсе Arduino Mega Server.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Собственно, всё. Так были организованы виртуальные часы реального времени в AMS вплоть до 0.12 версии включительно и так же вы можете организовать работу с точным временем в своих проектах, даже если у вас нет физического модуля часов реального времени. Но это ещё не конец истории, а скорее, только начало.

/*
Modul Virtual RTC
part of Arduino Mega Server project
*/

IPAddress timeServer(192, 168, 2, 8);
unsigned int localPort = 8888; // local port to listen for UDP packets
EthernetUDP Udp;

const int timeZone = 4;
time_t prevDisplay = 0; // when the digital clock was displayed

void rtcInit() <
Udp.begin(localPort);
Serialprint(«Waiting for NTP sync… \n»);
setSyncProvider(getNtpTime);
modulRtc = 1;
>

void printDigits(int digits) <
if(digits 0); // discard any previously received packets
Serialprint(«Transmit NTP request\n»);
sendNTPpacket(timeServer);
uint32_t beginWait = millis();
while (millis() — beginWait = NTP_PACKET_SIZE) <
Serialprint(«Receive NTP response\n»);
Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer
unsigned long secsSince1900;
// convert four bytes starting at location 40 to a long integer
secsSince1900 = (unsigned long)packetBuffer[40] = SECS_PER_DAY) <
Serial.print(duration / SECS_PER_DAY);
Serialprint(» day «);
duration = duration % SECS_PER_DAY;
>
if(duration >= SECS_PER_HOUR) <
Serial.print(duration / SECS_PER_HOUR);
Serialprint(» hour «);
duration = duration % SECS_PER_HOUR;
>
if(duration >= SECS_PER_MIN) <
Serial.print(duration / SECS_PER_MIN);
Serialprint(» min «);
duration = duration % SECS_PER_MIN;
>
Serial.print(duration);
Serialprint(» sec) \n»);
>

void checkEvent(time_t* prevEvent) <
time_t duration = 0;
time_t timeNow = now();

if (*prevEvent > 0) <
duration = timeNow — *prevEvent;
>
if (duration > 0) <
showDuration(duration);
>
*prevEvent = timeNow;
>

Приятная неожиданность

Я бы ещё долго не занялся интеграцией модулей RTC в систему (хватает и других актуальных задач), но тут, в рамках технологического сотрудничества с нашим проектом, компания CHIPSTER предоставила для тестирования и интеграции в AMS оборудование, среди которого оказались Ethernet модули на чипе W5500 и… модуль часов реального времени на чипе DS3231, что оказалось как нельзя более кстати и послужило толчком для интеграции модулей RTC в систему.

Оказалось, что компания CHIPSTER не только торгует электронным оборудованием, но и разрабатывает собственные изделия для Arduino и автоматизации под торговой маркой Geegrow и имеет большие планы на будущее в этом направлении, в частности, у неё есть проект по выпуску специализированной версии Arduino Mega 2560 с расширенными возможностями и «заточенной» специально под Arduino Mega Server. И, если эта плата будет выпущена, то это будет очень интересное событие. Но вернёмся к часам реального времени.

Реальные часы реального времени

Поскольку модуль RTC оказался у меня под руками, то грех было бы не интегрировать его в систему. Благо это оказалось совсем несложно благодаря всё той же Time Library. Но обо всём по порядку.

Для тех, кто не знает, модули реального времени бывают двух типов — «обычные» (как правило, на чипе DS1307) и «продвинутые» (на чипе DS3231, который мне и достался). Разница между ними заключается в том, что первые не очень точные и могут «убегать» очень быстро и очень сильно, а вторые это высокоточные часы с нормированным уходом не более двух минут в год, то есть реально применимые на практике. А точность достигается благодаря более сложной схемной реализации и встроенной термокомпенсации.

Но программно обе версии модулей совместимы и работать с библиотекой и кодом будут и те и другие. Разница будет только в точности хода.

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

Физическое подключение

Теперь давайте поговорим о том, как физически подключить модуль RTC к Arduino Mega Server или к вашему проекту на Ардуино. Сразу скажу, что это очень просто и вам понадобятся всего два резистора и несколько проводов.

Подключение тривиально: вам нужно найти на своём модуле четыре контакта — GND («земля»), VCC (напряжение питания), SCL (синхросигнал), SDA (данные). Остальные контакты используются в редких и специфических случаях и вы на них можете не обращать внимания.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Итак, вывод GND подключаем к «земле», вывод VCC — к напряжению питания контроллера. Здесь всё просто и никаких вопросов возникать не должно.

С остальными выводами дело обстоит ненамного сложнее. Модуль RTC общается с контроллером по интерфейсу I2C, у которого всего два провода: синхронизация и данные и в контроллерах Arduino уже предусмотрены контакты для подключения этого интерфейса. У Arduino Uno это A4 (SDA) и A5 (SCL), а у arduino Mega это D20 (SDA) и D21 (SCL).

Единственная тонкость заключается в том, что выводы SCL и SDA нужно «подтянуть» к источнику питания через резисторы 4,7 КОм. Если у вас нет точно такого номинала, то можно использовать резисторы из диапазона 2 КОм — 10 КОм.

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Программная поддержка

Теперь осталось только дописать поддержку модуля в коде AMS или вашего проекта. Как я уже сказал, это будет очень просто потому, что с модулем будет работать всё та же библиотека Time Library. Правда нам нужно будет добавить ещё одну библиотеку, а именно DS1307RTC Library. Её тоже распаковываем и помещаем в стандартную папку для библиотек:

Добавляем в код вашего скетча следующие строки

Теперь мы во всеоружии и можем приступать к написанию кода самого скетча, работающего с физическим модулем RTC. В функции

и внутреннее время Arduino Mega Server (или вашего контроллера) будет синхронизироваться с «железным» контроллером RTC, а не с серверами в Интернет или локальной сети. Таким образом, вызывая функции setSyncProvider(getNtpTime) и setSyncProvider(RTC.get) вы можете манипулировать источниками синхронизации времени и синхронизировать время так, как вам будет угодно, в зависимости от различных условий.

Ещё одна функция, о которой вам необходимо знать, это

которая позволяет узнать синхронизировано ли время и в зависимости от данного условия предпринять нужные действия.

Тонкий момент

Нужно различать две вещи: время, идущее в «железном» модуле RTC и время, идущее в вашем контроллере. Это не одно и то же. «Главным» для вас является время в контроллере, а время в модуле является лишь источником для синхронизации.

Но! поскольку время в физическом RTC тоже постепенно «уходит», то его тоже нужно подстраивать, синхронизируя с более точными источниками, например, с серверами в Интернет.

Поэтому, оптимальный алгоритм должен быть такой: если есть возможность, то синхронизируем все часы с серверами в Интернет, если сеть недоступна, то начинаем синхронизировать время в контроллере с модулем RTC, как только появляется сеть — переходим опять на синхронизацию через Интернет.

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

Давайте, для примера, рассмотрим функцию синхронизации внутренних часов контроллера и модуля RTC через сеть:

Здесь мы сначала получаем точное время по сети

затем, в случае удачи, устанавливаем его в модуль RTC

а затем уже из этого модуля устанавливаем время контроллера

Начальный запуск

Но и это ещё не всё. Существует ещё проблема начального запуска, когда модуль RTC только подключён, но время в нём не выставлено и синхронизироваться с ним поэтому нельзя. Нужно каким-то образом выставить в нём правильное время. В Arduino Mega Server существует два способа решения этой проблемы: можно синхронизировать физический RTC через сеть (если доступны сервера точного времени) или при помощи утилиты Arduino Serial Commander.

Для установки времени в модуле RTC достаточно… нажать на кнопку. Всё остальное сделают за вас два молодца по имени Arduino Mega Server и Arduino Serial Commander. Если вы не пользуетесь AMS, а разрабатываете свой собственный проект, можете взять код из дистрибутива Arduino Mega Server (код доступен и полностью свободен) или поискать решение этой проблемы в Интернет (там есть несколько вариантов решения).

Как на ардуино настроить часы. Смотреть фото Как на ардуино настроить часы. Смотреть картинку Как на ардуино настроить часы. Картинка про Как на ардуино настроить часы. Фото Как на ардуино настроить часы

Версия с поддержкой настоящего RTC

Arduino Mega Server, начиная с версии 0.13, поддерживает «железный» RTC. Скачать последнюю актуальную версию вы можете с официального сайта проекта, а задать возникшие вопросы можно на форуме.

И, конечно, я выражаю признательность компании CHIPSTER за сотрудничество и предоставленное для тестирования и интеграции оборудование (о модуле W5500 и о ускорении сетевой работы AMS я расскажу вам в одной из следующих статей).

Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *