Подключение DS1302 к Аrduino

СОДЕРЖАНИЕ ►
DS1302 Аrduino — это модуль часов реального времени с возможностью бесперебойного питания от литиевой батарейки. Рассмотрим схему подключения модуля к плате Ардуино и продемонстрируем код, с помощью которого можно установить нужную дату и время. Также мы разместили описание универсальной библиотеки iarduino_RTC.h для работы с модулями DS1302, DS1307 и DS3231.
Модуль DS1302 (RTC): схема, описание
Ориентация по времени полезна при создании устройства для автоматического полива растений, включении света или отопления по строгому расписанию и т.д. Контроллер Arduino не имеет встроенных часов, поэтому при необходимости выполнения задач микроконтроллером Arduino Uno в строго определенное время суток, понадобится использовать в проекте модуль часов DS1302 или ближайшие аналоги.

Микросхема отличается низким энергопотреблением и позволяет отсчитывать время с точностью до секунд. Подключение ds1302 к Ардуино осуществляется с помощью пяти контактов. Выводы VCC и Gnd отвечают за питание модуля. Контакты CLK,DAT и RESX подключают к цифровым пинам микроконтроллера. В скетче можно самим указать задействованные цифровые пины (в нашем примере использован 6,7 и 8 пин).
Как подключить DS1302 к Arduino (RTC)
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль DS1302, DS1307 или DS3231;
- LCD монитор 1602 i2c;
- провода «папа-мама».

Модули часов DS1307 и DS3231 подключаются к плате Ардуино через I2C протокол, как LCD дисплей I2C. Контакт SDA подключается к пину A4, контакт SCL к пину A5 Ардуино Уно. При подключении данных модулей к плате Arduino Mega следует использовать порты SDA (20 пин) и SCL (21 пин). При этом в скетче необходимо снять комментарий в строчке с нужным модулем, а строчку с модулем 1302 наоборот закомментировать.
Скетч. Часы реального времени Ардуино DS1307
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,8,7); // для модуля DS1302 - RST, CLK, DAT // iarduino_RTC time(RTC_DS1307); // для модуля DS1307 с i2C // iarduino_RTC timeRTC_DS3231); // для модуля DS3231 с i2C void setup() { delay(300); Serial.begin(9600); time.begin(); time.settime(0, 30, 18, 12, 6, 20, 5); // 0 сек, 30 мин, 18 часов, 12, июня, 2020, четверг } void loop() { // если прошла 1 секунда выводим время if (millis() % 1000 == 0) { Serial.println(time.gettime("d-m-Y, H:i:s, D")); delay(1); } }
Пояснения к коду:
- для работы с программой необходимо скачать библиотеку iarduino_RTC.h.
- с помощью команды
time.settime();
можно установить дату и время.

К сожалению, следующий пример с подключением дисплея 1602 I2C, возможен только с модулем 1302, так как порты SDA(A4) и SCL(A5) на микроконтроллеры Ардуино Уно необходимы для подключения дисплея LCD.
Скетч. Часы на Ардуино с LCD 1602 и DS1302
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,8,7); // для модуля DS1302 - RST, CLK, DAT #include <Wire.h> // библиотека для устройств I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для дисплея LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя дисплею void setup() { delay(300); LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея time.begin(); time.settime(0, 30, 18, 12, 6, 20, 5); // 0 сек, 30 мин, 18 часов, 12, июня, 2020, четверг } void loop() { // если прошла 1 секунда выводим время на дисплей if (millis() % 1000 == 0) { LCD.setCursor(0,0); LCD.print(time.gettime("d M Y, D")); LCD.setCursor(4,1); LCD.print(time.gettime("H:i:s")); delay(1); } }
Пояснения к коду:
- далее вы найдете подробное описание команд для модуля часов.
Библиотека 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 можно получать различную информацию:
- s — секунды от 00 до 59 (два знака)
- i — минуты от 00 до 59 (два знака)
- h — часы в 12-часовом формате от 01 до 12 (два знака)
- H — часы в 24-часовом формате от 00 до 23 (два знака)
- d — день месяца от 01 до 31 (два знака)
- D — день недели наименование от Mon до Sun (три знака)
- m — месяц от 01 до 12 (два знака)
- M — месяц наименование от Jan до Dec (три знака)
- Y — год от 2000 до 2099 (четыре знака)
- y — год от 00 до 99 (два знака)
blinktime(параметр)
— указывает функции gettime мигать одним из параметров времени
period(минуты)
— устанавливает период обращения к модулю в минутах (от 0 до 255)
Заключение. В часы на Ардуино с дисплеем 1602 и DS1302 можно добавить функцию показа температуры и будильник. Данный модуль позволяет существенно расширить функции микроконтроллера, которые должны выполняться в определенное время суток. Если у вас возникли вопросы по сборке и программированию часов на Arduino с DS1302 и LCD дисплеем — оставляйте их в комментариях к записи.
Подборка на тему: Подключение DS1302 к Аrduino
5 комментариев для “Подключение DS1302 к Аrduino”
Добавить комментарий
Записи похожие на: DS1302 Arduino. Часы реального времени (RTC)
- Монитор порта Ардуино: команды
- Сертификат на дополнительное образование
- Функция pinMode в Ардуино
- Как подключить кнопку к Ардуино
Проекты похожие на: DS1302 Arduino. Часы реального времени (RTC)
Спасибо. Неправильно задал вопрос. Модуль «RTC часы реального времени DS1302», есть автономный источник питания. После выключения питания Ардуино модуль продолжает работать автономно и при повторном включении питания не надо в setup() менять установки даты и времени, правильно я понял?
Да, все верно
Когда я загрузил программу у меня вместо времени показывает 00:00:00.
А разве к IIC нельзя подключить несколько устройств? Зачем там тогда адреса? И почему в таком случае нельзя подключить одновременно и дисплей и IIC RTC модуль?
Не говоря уже о возможности подключить любой не IIC дисплей к arduino, только проводов больше.
Время не будет запрашиваться без установки периода опроса модуля
time.period(1);