Часы реального времени DS1307 и Arduino
Содержание
- Что такое часы реального времени?
- Узлы, из которых состоит модуль часов реального времени
- Сборка модуля часов реального времени
- Библиотека Arduino для работы с DS1307
- Подключение DS1307 к Arduino
- Скетч для Arduino
В статье вы познакомитесь с отличным модулем часов реального времени на батарейке.
С помощью этого модуля можно отслеживать время в ваших проектах на Arduino даже в случае перепрограммирования или отключения питания. Это один из необходимых элементов для проектов будильников, сигнализаций, снятия показаний с датчиков в режиме реального времени. Одна из самых популярных моделей модуля часов реального времени — DS1307. Именно на нем мы и остановимся. Модуль отлично сочетается с микроконтроллерами Arduino, на которых питание логики равно 5 В.
Особенности модуля от компании-производителя Adafruit (китайцы предлагают аналогичные варианты раза в три-четыре дешевле):
- Все включено: чип, обвязка, батарейка;
- Легко собирается и прост в использовании;
- Устанавливается на любую макетную плату или подключается напрямую с помощью проводов;
- Есть отличные библиотеки и скетчи-примеры;
- Два отверстия для монтажа;
- Продолжительность работы — около пяти лет!
Модуль часов реального времени может быть уже распаянным, а может продаваться в виде отдельных комплектующих, пайка которых займет около 15-ти минут, не более.
Что такое часы реального времени?
Часы реально времени — это. часы. Модуль работает от автономного питания — батарейки и продолжает вести отсчет времени, даже если на вашем проекте на Arduino пропало питание. Используя модуль реального времени, вы можете отслеживать время, даже если вы захотите внести изменения в ваш скетч и перепрограммировать микроконтроллер.
На большинстве микроконтроллеров, в том числе и Arduino, есть встроенный счетчик временни, который называется millis(). Есть и встроенные в чип таймеры, которые могут отслеживать более длительные промежутки времени (минуты или дни). Так зачем же вам отдельным модуль часов? Основная проблема в том, что millis() отслеживает время только с момента подачи питания на Arduino. То есть, как только вы отключили плату, таймер сбрасывается в 0. Вша Arduino не знает, что сейчас, например, четверг или 8-е марта. Все, чего вы можете добиться от встроенного счетчика — это "Прошло 14000 миллисекунд с момента последнего включения".
Например вы создали программу и хотите вести отсчет времени с этого момента. Если вы отключите питание микроконтроллера, счетчик времени собьется. Примерно так, как это происходит с дешевыми китайскими часами: когда садится батарейка, они начинают мигать с показанием 12:00.
В некоторых проектах Arduino вам понадобится надежный контроль времени без прерываний. Именно в таких случаях используется внешний модуль часов реального времени. Чип, который используется в подобных часах, отслеживает года и даже знает сколько дней в месяце (единственно, что обычно не учитывается — это переход на летнее и зимнее время, так как подобные переводы разные в разных частях мира).
На рисунке ниже показана материнская плата компьютера с часами реального времени DS1387. В часах используется литиевая батарея, поэтому они разрослись в размерах.
Мы рассмотрим пример использования часов реального времени DS1307. Это дешевый, легкий в использовании модуль, который работает несколько лет от небольшой батарейки.
Пока батарейка в самом модуле не исчерпает свой заряд, DS1307 будет вести отсчет времени, даже если Arduino отключен от питания или перепрограммируется.
Узлы, из которых состоит модуль часов реального времени
Рисунок | Обозначение | Описание | Производитель | Количество |
---|---|---|---|---|
IC2 | Чип часов реального времени | DS1307 | 1 | |
Q1 | 32.768 КГц, 12.5 пФ кристалл | Generic | 1 | |
R1, R2 | 1/4 Вт 5% 2.2 КОм резистор Красный, Красный, Красный, Золотой | Generic | 2 | |
C1 | 0.1 мкФ керамический конденсатор | Generic | 1 | |
Рельса на 5 контактов (1×5) | Generic | 1 | ||
Батарейка | 12 мм 3 В литиевая батарейка | CR1220 | 1 | |
Холдер для батарейки | 12mm coin cell holder | Keystone 3001 | 1 | |
Плата | Монтажная плата | Adafruit Industries | 1 |
Сборка модуля часов реального времени
Фото | Пояснения |
---|---|
Подготовьтесь к сборке. Проверьте наличие всех необходимых деталей и инструментов. Установите монтажную плату в тисках. | |
Нанесите немного припоя на отрицательный контакт батареи. | |
Установите два резистора 2.2 КОм и керамический конденсатор. Как именно вы их расположите — неважно. Полярность не имеет значения. После этого установите кристалл (также симметрично), держатель (холдер) для батарейки и чип часов реального времени. Чип модуля реального времени надо установить таким образом, чтобы отметка (паз) на чипе располагалась в соответствии с обозначением на монтажной плате. Внимательно посмотрите на фото слева, там чип установлен верно. | |
Чтобы холдер для батарейки не выпадал, лучше его припаять сверху. После этого переверните плату и и припаяйте оставшиеся контакты. | |
Удалите остатки контактов от резисторов, кристалла и конденсатора. | |
Если вы хотите использовать контакты для установки модуля на беспаечную монтажную плату, установите рельсу контактов на макетку, модуль часов реального времени сверху и припаяйте контакты. | |
Установите батарейку. Плоская часть батареи должна быть сверху. В среднем батарейка будет служить около 5 лет. Даже если батарейка села, не оставляйте слот для нее пустым. |
Библиотека Arduino для работы с DS1307
DS1307 легко подключается к любому микроконтроллеру с питанием логики 5 В и возможностью I2C подключения. Мы рассмотрим подключение и использование этого модуля с Arduino.
Будем использовать библиотеку RTClib для получения и настройки показаний с DS1307. Если у вас есть вопросы по учтановке дополнительных библиотек Arduino — ознакомьтесь с этой инструкцией.
Подключение DS1307 к Arduino
В статье рассмотрен пример часов реального времени от Adafruit, но вы можете с тем же успехом использовать китайские аналоги. Принцип работы и подключения не отличается.
Ссылки для заказа оборудования, которое использовалось в проекте из Китая
На часах реального премени 5 пинов: 5V, GND, SCL, SDA и SQW.
- 5V используется для питания чипа модуля часов реального времени, когда вы делаете к нему запрос для получения данных о времени. Если сигнал 5 В не поступает, чип переходит в "спящий" режим.
- GND — общая земля. Обязательно подключается в схему.
- SCL — контакт i2c часов — необходим для обмена данными с часами реального времени.
- SDA — контакт, по которому через i2c передаются данные с часов реального времени.
- SQW дает возможность настроить вывод данных в виде square-wave. В большинстве случаев этот контакт не используется.
Если вы настроили аналоговый пин 3 (цифровой 17) в режим OUTPUT и HIGH, а аналоговый пин 2 (цифровой 16) в режим OUTPUT и LOW, вы можете запитывать часы реального времени непосредственно от этих контактов!
Подключите аналоговый пин 4 на Arduino к SDA. Аналоговый пин 5 на Arduino подключите к SCL.
Скетч для Arduino
Проверка часов реального времени
Первый скетч, который стоит запустить — это программа, которая будет считывать данные с модуля часов реального времени раз в секунду.
Для начала давайте посмотрим, что произойдет, если мы извлечем батарейку и заменим ее на другую, пока Arduino не подключен к USB. Подождите 3 секунды и извлеките батарейку. В результате чип на часах реального времени перезагрузится. После этого вставьте код, который приведен ниже (код также можно выгрузить в меню Examples→RTClib→ds1307 в Arduino IDE) и загрузите его на Arduino.
Вам также понадобится библиотека OneWire.h, скачть ее можно здесь
// функции даты и времени с использованием часов реального времени DS1307, подключенные по I2C. В скетче используется библиотека Wire lib
Источник: