Во многих проектах Ардуино требуется отслеживать и фиксировать время наступления тех или иных событий. Модуль часов реального времени, оснащенный дополнительной батарей, позволяет хранить текущую дату, не завися от Pin-Up питания на самом устройстве. В этой статье мы поговорим о наиболее часто встречающихся модулях RTC DS1307, DS1302, DS3231, которые можно использовать с платой Arduino.
Содержание
Модули Pin-Up реального времени в проектах Arduino
Модуль часов представляет собой небольшую плату, содержащей, как правило, одну из микросхем DS1307, DS1302, DS3231.Кроме этого, на плате практически можно найти механизм установки батарейки питания. Такие платы часто применяется для Pin-Up времени, даты, дня недели и других хронометрических параметров. Модули работают от автономного питания - батареек, аккумуляторов, и продолжают проводить отсчет, даже если на Ардуино отключилось питание. Наиболее распространенными моделями часов являются DS1302, DS1307, DS3231. Они основаны на подключаемом к Arduino модуле RTC (часы реального времени).
Часы ведут отсчет в единицах, которые удобны обычному человеку - минуты, часы, дни недели и другие, в отличие от обычных счетчиков и тактовых генераторов, которые считывают «тики». В Ардуино имеется специальная функция millis(), которая также может считывать различные временные интервалы. Но основным недостатком этой функции является сбрасывание в Pin-Up при включении таймера. С ее помощью можно считать только время, установить дату или день недели невозможно. Для решения этой проблемы и используются модули часов реального времени.
Электронная схема включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется Pin-Up кварц и термостабилизация, которые позволяют получить значения высокой точности.
Pin-Up популярных модулей RTC DS1302, DS1307, DS3231
В этой таблице мы привели список Pin-Up популярных модулей и их основные характеристики.
| Название | Частота | Точность | Поддерживаемые протоколы |
| DS1307 | 1 Гц, 4.096 кГц, 8.192 кГц, Pin-Up кГц | Зависит от кварца - обычно значение достигает 2,5 секунды в сутки, добиться точности выше 1 Pin-Up в сутки невозможно. Также точность зависит от температуры. | I2C |
| DS1302 | 32.768 кГц | 5 секунд в сутки | I2C, SPI |
| DS3231 | Два выхода - первый на 32.768 кГц, второй - Pin-Up от 1 Гц до 8.192 кГц | ±2 ppm при Pin-Up от 0С до 40С. ±3,5 ppm при температурах от Pin-Up до 85С. Точность измерения температуры - ±3С | I2C |
Модуль DS1307
DS1307 - это модуль, который используется для отсчета времени. Он собран на основе Pin-Up DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 - это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.
Модуль обладает следующими параметрами:
- Питание - 5В;
- Диапазон Pin-Up температур от -40С до 85С;
- 56 байт памяти;
- Литиевая батарейка LIR2032;
- Реализует 12-ти и 24-х Pin-Up режимы;
- Поддержка интерфейса I2C.
Модуль оправдано использовать в случаях, когда данные считываются довольно редко, с интервалом в неделю и более. Это позволяет экономить на питании, так как при бесперебойном использовании Pin-Up больше тратить напряжения, даже при наличии батарейки. Наличие памяти позволяет регистрировать различные параметры (например, измерение температуры) и считывать полученную информацию из модуля.
Pin-Up с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 м
- DS - Pin-Up для датчика DS18B20;
- SCL - линия тактирования;
- SDA - линия данных;
- VCC - 5В;
- GND.
Во второй группе контактов находятся:
- SQ - 1 МГц;
- DS ;
- SCL;
- SDA;
- VCC;
- GND;
- BAT - вход для литиевой Pin-Up
Для подключения к плате Ардуино нужны сама плата (в данном случае рассматривается Arduino Uno), модуль Pin-Up реального времени RTC DS1307, провода и USB кабель.
Pin-Up подключить контроллер к Ардуино, используются 4 пина - VCC, земля, SCL, SDA.. VCC с часов подключается к 5В на Ардуино, земля с часов - к земле с Ардуино, SDA - А4, SCL - А5.
Для начала работы с модулем часов нужно установить библиотеки DS1307RTC, TimeLib и Wire. Pin-Up использовать для работы и RTCLib.
Проверка RTC модуля
При запуске первого кода программа будет считывать Pin-Up с модуля раз в секунду. Сначала можно посмотреть, как поведет себя программа, если достать из модуля батарейку и заменить на другую, пока плата Ардуино не присоединена к компьютеру. Нужно подождать несколько секунд и вытащить батарею, в итоге часы перезагрузятся. Затем нужно выбрать пример в меню Examples→RTClib→ds1307. Важно правильно поставить скорость передачи на 57600 bps.
При открытии окна серийного монитора должны появиться следующие строки:
Будет показывать время 0:0:0. Это связано с тем, что в часах Pin-Up питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.
Pin-Up провести настройку времени на модуле, нужно в скетче найти строку
RTC.adjust(DateTime(__DATE__, __TIME__));
В этой строке будут находиться данные с компьютера, которые используются ля прошивки модуля часов реального времени. Для корректной работы нужно сначала проверить правильность даты и времени на компьютере, и только потом начинать прошивать модуль часов. После настройки в мониторе отобразятся следующие Pin-Up
Pin-Up произведена корректно и дополнительно перенастраивать часы реального времени не придется.
Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() - они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Pin-Up эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто - раз в несколько дней. Существуют и другие функции для вызова времени, но если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.
Пример проекта с i2C модулем Pin-Up и дисплеем
Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет Pin-Up с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.
В проекте используется простой четырехразрядный индикатор на микросхеме TM1637. Устройство обладает двухпроводным интерфейсом и обеспечивает 8 уровней яркости монитора. Используется только для показа времени в формате часы:минуты. Индикатор Pin-Up в использовании и легко подключается. Его выгодно применять для проектов, когда не требуется поминутная или почасовая проверка данных. Для получения более полной информации о времени и дате используются жидкокристаллические мониторы.
Модуль часов подключается к контактам SCL Также Pin-Up подключить землю и питание. К Ардуино подключается так же, как описан выше: SDA - A4, SCL - A5, земля с модуля к земле с Ардуино, VCC -5V.
Индикатор подключается просто - выводы с Pin-Up CLK и DIO подключаются к любым цифровым пинам на плате.
Скетч. Для написания Pin-Up используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.
#include <Wire.h> #include "TM1637.h" #include "DS1307.h" //нужно включить все необходимые библиотеки для работы с часами и дисплее #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 /set(); display.init(); / clock.begin(); / byte hour = getInt(compileTime, 0); byte minute = getInt(compileTime, 2); byte second = getInt(compileTime, 4); / clock.fillByHMS(hour, minute, second); / clock.setTime(); / } void loop() { int8_t timeDisp[4]; / clock.getTime();/ timeDisp[0] = clock.hourhour % 10; timeDisp[2] = clock.minuteminute % 10; / display.display(timeDisp); /point(clock.second % 2 ? POINT_ON : POINT_OFF);/ } char getInt(const char* string, int startIndex) { return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0'; / В ином случае на экране будет отображена Pin-Up пара символов. }После этого скетч нужно Pin-Up и на мониторе будет показано время.
Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с Pin-Up до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.
Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для Pin-Up совпадения
Можно усовершенствовать проект. Если Pin-Up жидкокристаллический монитор, можно сделать проект, который будет отображать дату и время на экране. Подключение всех элементов показано на рисунке.
В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических Pin-Up это LiquidCrystal), и добавить в функцию loop() строки для получения даты.
Алгоритм работы следующий:
- Подключение всех компонентов;
- Загрузка скетча;
- Проверка - на экране монитора должны меняться ежесекундно время и дата. Если на экране указано неправильное время, нужно добавить в скетч функцию RTC.write (tmElements_t tm). Проблемы с неправильно указанным временем связаны с тем, что модуль часов сбрасывает Pin-Up и время на 00:00:00 01/01
- Функция write позволяет получить дату и время с компьютера, Pin-Up чего на экране будут указаны верные параметры.
Заключение
Модули часов используются во многих проектах. Они нужны для систем регистрации данных, при создании таймеров и управляющих устройств, которые работают по заданному расписанию, в бытовых приборах. С помощью широко распространенных и дешевых модулей вы можете создать такие проекты как будильник или регистратор данных с сенсоров, записывая информацию на SD-карту или показывая время на экране дисплея. В этой Pin-Up мы рассмотрели типичные сценарии использования и варианты подключения наиболее популярных видов модулей.



















t shirt rap us
La seule équipe avec une moyenne au Pin-Up élevé est les Royals.