Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Модуль DS1307
Библиотека RTClib
Иногда требуется отслеживать определённое время наступления события. Модуль часов реального времени с литиевой батарей позволяет хранить текущую дату, независимо от наличия питания на самом устройстве. Наиболее распространённые модули RTC: DS1302 (совсем не точные), DS1307 (не очень точные), DS3231 (точные), DS3232 (точные) и др.
Модуль часов представляет собой небольшую плату, которая содержит микросхему (DS1307, DS1302, DS3231), а также сам механизм установки батарейки питания. Часы ведут отсчёт в удобных для человека единицах – минуты, часы, дни недели и другие, в отличие от обычных счётчиков и тактовых генераторов, которые считывают «тики». В Arduino имеется функция millis(), которая умеет считывать различные временные интервалы, но основным недостатком функции является сбрасывание в ноль при включении таймера. С её помощью можно считать только время, а установить дату или день недели невозможно. Модули часов реального времени позволяют решить эту задачу.
Электронная схема модуля включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется встроенный кварц и термостабилизация, которые позволяют получить значения высокой точности.
Как правило, все модули работают по протоколу I2C.
Модуль можно использовать в случаях, когда данные считываются довольно редко, с интервалом в неделю и более. Это позволяет экономить на питании, так как при бесперебойном использовании придётся больше тратить напряжения, даже при наличии батарейки. Наличие памяти позволяет регистрировать различные параметры (например, измерение температуры) и считывать полученную информацию из модуля.
Модуль DS1307 собран на основе микросхемы DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 – это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.
Взаимодействие с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 мм.
В первой группе контактов находятся следующие выводы:
Во второй группе контактов находятся:
Чтобы подключить модуль к Arduino Uno, используются 4 вывода.
DS1307 | Arduino
-----------------
GND | GND
VCC | 5V
SCL | A5
SDA | A4
DS | N/A
Платы Leonardo, MEGA, ADK, DUE используют другие схемы. Ищите в интернете.
Для работы с модулем реального времени существует множество библиотек. Рассмотрим библиотеку от Adafruit RTClib.
Установите её через менеджер библиотек. После установки запустите один из готовых примеров из библиотеки ds1307. В Serial Monitor установите скорость 57600. Вы увидите дату на сегодняшний день.
При запуске скетча время берётся с компьютера, поэтому сначала убедитесь, что на вашем компьютере установлены правильные дата и время.
Получение даты и времени происходит через вызов функции now(), который возвращает объект DateTime. Данный объект позволяет узнать год, месяц, день, час, минуту и секунду.