DS3231 Подключение к Arduino, настройка и установка времени.
Сегодня снова поговорим о модуле часов DS3231. А точнее про его настройку и установку на нём времени, даты и будильников.
Про саму работу датчика и его подключение к Ардуино уже есть много видео, и на моём канале тоже. Если есть желание, то можете посмотреть вот здесь.
- Во-первых, это установку даты и времени. Есть несколько вариантов. Первый и самый простой – это прямо в коде написать дату и время и сохранить в модуль часов. Этот вариант хороший, но модуль, хоть он и считается очень точным, но через какое-то время, он начнёт отставать или спешить. И для настройки нам снова придётся подключать его к компьютеру и заново прошивать время.
- Второй способ – это синхронизировать время с временем на компьютере. Но для этого Ардуино всегда должна быть подключена к компьютеру.
- И третий способ — это сделать возможным управление часами с помощью кнопок или энкодера. С энкодером удобнее, но это я оставлю на следующий раз. А сегодня – это кнопки.
Я хочу снова вернуться к спонсорской помощи канала. Если вам нравятся мои уроки и то как я всё делаю и объясняю, то думаю вам не составит большого труда помочь в развитии канала. Минимальный вклад – это 99 рублей. Согласитесь, что это не много. А мне это поможет в закупке новых комплектующих. Мои резервы уже на исходе. Время не стоит на месте и появляются всё новые модули и датчики, и если вы хотите чтобы я рассказывал о них, они должны у меня быть. У меня на каждый проект уходит очень много времени, вам же я стараюсь рассказать за несколько минут, то что я искал часами.
Скачивая готовые проекты, вы можете буквально за час-другой сделать готовое изделие. Это экономит ваше время. А как говорится, Время это деньги.
Мне не жалко, но без вашей помощи, канал может загнуться.
Думаю, что вы войдёте в моё положение и поможете каналу, а так же и себе тоже.
Думаю вы достаточно посмотрели, и теперь готовы к изучению этого примера.
Сегодня нам понадобятся
- Модуль часов DS3231
- LCD дисплей 1602
- Три кнопки
- И плата семейства Ардуино.
Как вы уже поняли выводить дату время мы будем на LCD дисплей 1602. Я взял в версии с I2C. Так проще и подключить надо будет всего 2 вывода, а оставшиеся свободные выходы Ардуино нам ещё пригодятся.
Сначала я хотел выводить на экран русские буквы, но с налёта у меня не получилось. Возможно сделаю это в следующей версии.
Давайте посмотрим схему подключения.
У модуля дисплея, и у модуля часов одинаковые выходы, так как они работаю по одной шине. Шине I2C. Поэтому их подключаем одинаково.И выводы SDA и SCL подключаем к выводам A4 и A5 соответственно. Питание у обоих модулей 5 вольт.
Кнопки подключаем к выводам A0 – A3.
- A0 – кнопка отвечает за выбор режима работы.
- A1 – прибавляет значения, а A2 – уменьшает значения.
- A3– кнопка работы с будильником.
- Для работы будильника установим на выход D8 пищалку.
Давайте немного посмотрим скетч.
Скетч довольно непростой. А для тех кто никогда не работал в энергонезависимой памятью EEPROM, так и вообще покажется запутанным.
Для начала вам нужно установить 2 библиотеки. Одну для работы с дисплеем, а вторую для модуля часов.
Библиотеку для дисплея можно установить из самой Ардуино IDE, а вот библиотеку часов нужно установить мою, их архива. И если у вас уже установлена другая версия библиотеки, то её надо будет удалить перед установки моей библиотеки.
Это адрес дисплея на шине I2C и его размер.
Это для работы с библиотекой часов. Я в коде кое-где накидал комментариев. Если что разберётесь.
Это куда подключены кнопки и пищалка, а это переменные для хранения времени, даты и дней недели.
Так выглядит код отвечающий за символы термометра и будильника. Если хотите можете заменить на свои.
Если что там ещё много кода осталось. Попробуйте разобраться сами.
Если вам нравятся мои видео, то вы можете помочь в развитии канала став его спонсором. Все ваши вклады пойдут на закупки новых модулей. Вам же за это будут предоставлены дополнительные бонусы, и они довольно интересные.
Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino
Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека.
Подключение:
Подключение DS1307 к Arduino :
RTC DS1307 | Arduino UNO |
---|---|
GND | GND |
VCC | +5V |
SDA | A4 |
SCL | A5 |
Подключение DS1302 к Arduino :
RTC DS1302 | Arduino UNO |
---|---|
GND | GND |
VCC | +5V |
RST | 10 (Можно изменить на другие в скетче) |
CLK | 13 (Можно изменить на другие в скетче) |
DAT | 12 (Можно изменить на другие в скетче) |
Подключение DS3231 к Arduino :
RTC DS3231 | Arduino UNO | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
GND | GND | ||||||||||
VCC | +5V | ||||||||||
SDA | A4 | ||||||||||
SCL | A5 Программа:В зависимости от того какой модуль Вы подключаете, необходимо в программе указать Для 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. — в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента — количество минут (от 1 до 255) если в течении указанного времени была вызвана функция gettime несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа. Функцию period достаточно вызвать один раз. Урок 18. Подключение RTC часы реального времени с кнопкамиВ этом уроке мы научимся не только выводить, но и устанавливать время RTC модуля при помощи трёх кнопок. Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE . Видео
Схема подключения:Подключение модулей RTC и LCD, данного урока, осуществляется к аппаратным выводам SDA, и SCL.
подключение кнопок: кнопка «SET» к выводу 2, кнопка «UP» к выводу 3 и копка «DOWN» к выводу 4.
Код программы:При подключении библиотеки «iarduino_RTC» нужно указать, с каким модулем ей работать, в данном случае это модуль Trema на базе чипа DS1307: Аналогичный алгоритм действий при подключении библиотеки «LiquidCrystal_I2C» для работы с LCD дисплеем LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) : Осталось подключить 3 кнопки: «SET», «UP» и «DOWN» . Для этого им нужно назначить номера выводов и указать, что эти выводы работают как вход: В библиотеке «iarduino_RTC», для работы с датой и временем реализованы две функции: settime() — установка и gettime() — получение времени. В библиотеке «iarduino_RTC» доступны 9 числовых переменных: seconds, minutes, hours, Hours, midday, day, weekday, month и year, значения которых обновляются после каждого вызова функции gettime(). Эти переменные мы будим использовать для изменения даты и времени. Еще одна функция библиотеки «iarduino_RTC», которая нам понадобится, это blinktime(), она заставляет функцию gettime(), мигать одним из параметров времени (0 — не мигать, 1 — мигать секундами, 2 — мигать минутами, 3 — мигать часами, 4 — мигать днями и т.д.). И последнее, о чем надо позаботиться перед созданием кода программы — это алгоритм работы кнопок и определение переменных Алгоритм работы кнопок следующий:
Исходя из алгоритма, нам понадобятся две переменные, назовем их: VAR_mode_SHOW и VAR_mode_SET . Первая будет указывать режим вывода (1-выводим_время, 2-выводим_дату). Вторая, будет указывать режим установки времени (0-нет, 1-сек, 2-мин, 3-час, 4-день, 5-мес, 6-год, 7-д.н.). Часы реального времени, RTC (Trema-модуль)
Общие сведения:Trema-модуль RTC (DS1307Z) и Trema-модуль RTC (DS3231) — высокоточные энергонезависимые модули, которые можно использовать в таких проектах как часы, будильник, секундомер и т.д., а также, с его помощью, можно запускать Ваши процессы по расписанию. Trema-модуль RTC (DS1307Z) построен на базе чипа DS1307Z, который снабжен: интерфейсом I2C (частота 100 кГц, адрес 0x68), 64 однобайтными регистрами (56 из которых доступны для хранения данных пользователя), компаратором (для переключения между основным и резервным питанием), блоком подзарядки аккумуляторной батареи. Модуль позволяет считывать: секунды, минуты, часы, дни, дни недели, месяц и год. Trema-модуль RTC (DS3231) — построен на базе чипа DS3231, который снабжен: интерфейсом I2C, кварцевым резонатором на 32,768 кГц, датчиком температуры (для температурной компенсации кварцевого резонатора), регистрами данных, двумя будильниками, компаратором (контролирующим уровень заряда батареи), блоком подзарядки аккумуляторной батареи и выходами меандра (с фиксированной 32,768 кГц, и программируемой частотой 1,0 Гц — 8,192 кГц). Модуль позволяет устанавливать и считывать: секунды, минуты, часы, дни, дни недели, месяц, год и состояние. Считывать температуру и устанавливать: секунды, минуты, часы, и дни будильников Видео
Спецификация для чипа DS1307Z:
Спецификация для чипа DS3231:
Все модули линейки «Trema» выполнены в одном формате Подключение:Модуль подключается к аппаратной или программной шине I2C Arduino и имеет адрес 0x68. Модуль удобно подключать 3 способами, в зависимости от ситуации: Способ — 1 : Используя проводной шлейф и Piranha UNOИспользуя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO. Способ — 2 : Используя Trema Set ShieldМодуль можно подключить к любому из I2C входов Trema Set Shield. Способ — 3 : Используя проводной шлейф и ShieldИспользуя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд. При подключении RTC модулей на базе чипов DS1302, DS1307, DS3231 к другим платам, например, WEMOS D1 mini или WEMOS D1 mini Pro на базе микроконтроллера ESP8266, и т.д. перед подключением библиотеки iarduino_RTC нужно подключить библиотеку Wire, как это описано в разделе Wiki — расширенные возможности библиотек iarduino для шины I2C. Питание:
Подробнее о модулях:Для работы с RTC модулями на базе чипов DS1302, DS1307, DS3231, . , предлагаем воспользоваться библиотекой iarduino_RTC, Преимуществом данной библиотеки является удобная реализация получения времени. Вы можете получать время не только через переменные (для сек., мин., часов., . ), но и одной строкой, указав, что именно в ней должно быть. Подробнее про установку библиотеки читайте в нашей инструкции.. Примеры:Вывод времени в Монитор последовательного порта:Установка времени модуля:Получение времени в переменные и вывод их в монитор:Установка системного времени в модуль (времени компьютера):Будильник:В библиотеке реализовано 7 функций: 3 основных (begin, settime, gettime) и 4 дополнительных (blinktime, period, settimeUnix, gettimeUnix). Описание основных функций библиотеки:Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C. |