Делаем реальные часы при помощи чипа arduino ds3231 arduino+

Часы реального времени DS3231

Товары

Обзор часов реального времени DS3231

Если вы создаете устройство, которому нужно знать точное время, вам пригодится модуль часов реального времени RTC (Real Time Clock). Данные модули отсчитывают точное время и могут сохранять его даже при отключении основного питания при использовании резервного питания (батарейка CR2032 или литий-ионный аккумулятор LIR2032-3,6 В), которого хватит на несколько лет.

Еще совсем недавно основным модулем RTC в среде Ардуинщиков являлся модуль на микросхеме DS1307. В этом модуле использовался внешний кварцевый генератор частотой 32кГц, при изменении температуры менялась частота кварца, что приводило к погрешности в подсчете времени.

Новые модули RTC (рис. 1) построены на микросхеме DS3231, внутрь которой установлен кварцевый генератор и датчик температуры, который компенсирует изменения температуры, поэтому время отсчитывается более точно. Погрешность составляет ±2 минуты за год.

Технические характеристики

календарь до 2100 года

выход стабильной частоты : 1-32768 Гц

напряжение питания : 2,7 – 5,3 В

напряжение батарейки : 2,3 – 5,3 В

ток потребления : 250 мкA

ток потребления от батарейки : 3 мкA

порог переключения на батарейку : 2,6 В

размеры : 40х22 мм

Назначение контактов

Модуль имеет 6 выводов:

VCC – питание 2,7 – 5,3 В

SDA – вход/выход данных интерфейса I2C

SCL – синхронизация интерфейса I2C

SQW – прерывание от будильников или выход импульсов 1-8192 Гц

32K – выход импульсов 32768 Гц

Подключение к плате Arduino

Модуль DS3231 подключается к плате Arduino по интерфейсу I2C, используются выводы SDA и SCL. Схема подключения показана на рис. 2.

Для программирования будем использовать библиотеки DS1307 и Time. Скетч получения данных с DS3231 и вывода в последовательный порт показан в листинге 1.

Открываем монитор последовательного порта (рис. 3).

Результат работы – правильный отсчет, но неверное значение времени и даты. При отсутствии питания значение времени в микросхеме DS3231 сбрасывается на 00:00:00 01/01/2000.

Добавим функционал скетчу – установка времени отправкой строки вида “dd/mm/ YYYY hh:mm:ss” в последовательный порт.

После загрузки скетча на плату Arduino, открываем монитор последовательного порта и отправляем в Arduino строку «dd/mm/ YYYY hh:mm:ss» для установки текущей даты и точного времени (рис. 4,5).

Теперь DS3231 будет отсчитывать точное время. И если установлена батарейка, время не собъется после отключения питания.

Пример использования

Создадим проект часов с выводом данных на 4-х разрядный семисегментный дисплей на базе драйвера TM1637.

Нам потребуются следующие компоненты:

Плата прототипирования – 1

Модуль DS3231 – 1

4digit display на базе TM1637 – 1

Схема соединения элементов показана на рис. 6.

Для программирования вывода данных на 4-х разрядный семисегментный дисплей на базе драйвера TM1637 установим в Arduino IDE библиотеку TM1637. Каждые 5 секунд меняем на дисплее отображение:

При отображении показаний текущего времени каждые 0.5 секунды мигаем разделителем типа “двоеточие” между вторым и третьим разрядом. Содержимое скетча показано в листинге 3.

Загружаем скетч на плату Arduino и проверяем работу часов.

Часто задаваемые вопросы

1. Отсутствует получение данных времени с модуля DS3231.

  • Проверьте правильность подключения модуля DS3231 к плате Arduino.

2. Данные, получаемые с модуля DS3231, неверные.

  • Установите правильную дату и время, загрузив код из листинга 2 и отправив из последовательного порт правильные данные.

3. При отключении питания сбивается время и дата.

Установите резервное питание модуля (батарейка CR2032 или литий-ионный аккумулятор LIR2032-3,6 В).

Проверьте напряжение резервного питания (должно быть не менее 2,3 В).

Arduino для начинающих. Урок 11. Подключение модуля часов реального времени DS3231

Продолжаем серию уроков «Arduino для начинающих«. Знакомимся с модулем часов реального времени DS3231. В статье видео-инструкция, листинги программ, назначение и способы подключения к Arduino модулей из семейства DS.

Модуль часов реального времени DS3231

Что такое модуль часов реального времени DS3231?

Модуль часов реального времени — это электронная схема, предназначенная для учета хронометрических данных (текущее время, дата, день недели и др.), представляет собой систему из автономного источника питания и учитывающего устройства.

Модуль DS3231 по сути представляет из себя обыкновенные часы. В платах Arduino уже есть встроенный датчик времени Millis, однако он работает только при поданном питании на плату. При отключении и дальнейшем включении Arduino отсчет времени Millis сбросится до нуля. А DS3231 имеет на борту батарейку, которая даже при отключенной плате Arduino продолжает «питать» модуль, позволяя ему измерять время.

Модуль можно использовать в качестве часов или будильника, построенных на базе плат Arduino. Или же в качестве оповещения для различных систем, к примеру в «Умном доме».

Технические характеристики DS3231:

  • модуль производит подсчет часов, минут, секунд, дат, месяцев, лет (високосные года учитываются до 2100 года);
  • для подключения к различным устройствам, часы подключаются по I2C интерфейсу.

32К — Выход, предназначенный для подачи внешнего питания >12В.

SQW — Программируемый выход Square-Wave сигнала.

SCL – Через этот пин по интерфейсу I2C происходит обмен данными с часами.

SDA – Через этот пин передаются данные с часов.

VCC – Питание часов реального времени, нужно 5 вольт. Если на этот пин не поступает напряжение, часы переходят в спящий режим.

GND — Земля.

Схема подключения часов реального времени DS3231 и простейшая программа

Пины SDA и SCL на разных платах Arduino:

SDA SCL
UNO A4 A5
Mini A4 A5
Nano A4 A5
Mega2560 20 21
Leonardo 2 3

Подключим модуль часов реального времени к Arduino UNO. SDA — пин A4, SCL — пин A5.

Для работы модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):

#include
iarduino_RTC time(RTC_DS3231);
void setup() <
delay(300);
Serial.begin(9600);
time.begin();
>
void loop() <
if(millis()%1000==0) < // если прошла 1 секунда
Serial.println(time.gettime(“d-m-Y, H:i:s, D”)); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
>
>

В данном скетче просто идет отсчет времени.

В первую очередь в сктече подключение библиотеки iarduino_RTC.h.

Там же укажите точное название своего модуля для корректной работы с ним.

Дальше укажите задержку включения модуля в сравнении с включением самой платы и укажите скорость для работы с монитором порта.

В итоге получаем вывод времени с модуля DS3231 в монитор порта. Идет вывод часов, минут, секунд.

В следующем скетче добавим функцию settime, позволяющую установить начальное время отсчета.

#include
iarduino_RTC time(RTC_DS3231);
void setup() <
delay(300);
Serial.begin(9600);
time.begin();
time.settime(0,0,18,24,04,17,1); // 0 сек, 0 мин, 18 час, 24, апреля, 2017 года, понедельник
>
void loop() <
if(millis()%1000==0) < // если прошла 1 секунда
Serial.println(time.gettime(“d-m-Y, H:i:s, D”)); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
>
>

В примере время начинает отсчитываться с 0 сек, 0 мин, 18 час, 24, апреля, 2017 года, понедельник.

Смотрите также:

Посты по урокам:

Все посты сайта «Занимательная робототехника» по тегу Arduino.

Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазин Амперка. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.

Подключение часов реального времени( DS3231) к Arduino.

Одной из самых известных микросхем RTC (RealTimeClock) является наверное DS1307 от Dallas Semiconductors. Эти часы достаточно точные, братья Китайци сделали целую кучу готовых модулей. Они просты в понимании и подключение. Приступим.

Характеристики :

  • Напряжение питания: 3.3В и 5В.
  • Чип памяти: AT24C32 (32 Кб).
  • Точность: ± 0.432 сек в день .
  • Частота кварца:32.768 кГц.
  • Поддерживаемый протокол: I2C.

Большинство микросхем, таких как DS1307 используют внешний кварцевый генератор частотой 32кГц, но в них есть существенный недостаток, при изменении температуры меняется частота кварца, что приводит к погрешности в подсчете времени. Эта проблема устранена в чипе DS3231, внутрь которого установили кварцевый генератор и датчик температуры, который компенсирует изменения температуры, так что время остается точным (при необходимости, данные температуры можно считать). Так же чип DS3231 поддерживает секунды, минуты, часы, день недели, дата, месяц и год информацию, а так же следит за количеством дней в месяце и делает поправку на високосный год. Поддерживает работу часов в двух форматов 24 и 12, а так-же возможно запрограммировать два будильника. Модуль работает по двух проводной шине I2C.

Выводы :
  • 32K: выход, частота 32 кГц.
  • SQW: выход.
  • SCL: линия тактирования (Serial CLock) .
  • SDA: линия данных (Serial Data).
  • VCC: «+» питание модуля.
  • GND: «-» питание модуля.
Подключение :

Часы подключаются по двухпроводной шине IIC (Inter-IntegratedCircuit) через выводы SDA и SCL к SDA и SCL Arduino соответственно. Также необходимо подключить питание +5В и GND. Остальные выводы специфичны для DS3231 и не поддерживаются библиотеками для DS1307, да и не часто используются.

На Arduino Nano это будут SDA — D4(7 pin), SCL- D5(8 pin).

Кодинг :

Для начала нам потребуется две библиотеке DS1307 RTC и TimeLib. Скачать их можно например отсюда. Так же мы будем использовать TFT дисплей. Как его подключить написано тут.

// библиотека для работы.
#include // Библиотека дисплея.
#include
#include // Библиотека часов.
#include // Библиотека IIC (Inter-IntegratedCircuit).
#include //Библиотека часов.

// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);

// объявления встроенных шрифтов
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
String floatToString(float x, byte precision = 0) // Функция преобразования
<
char tmp[50];
dtostrf(x, 0, precision, tmp);
return String(tmp);
>
void setup()
<
setSyncProvider(RTC.get);
//Устанавливаем нужное время в формате: Часы, минуты, секунды, день, месяц, год
setTime(11,32,0,01,4,2016);
//Применяем значение:
RTC.set(now());
myGLCD.InitLCD(1); // инициализируем дисплей с горизонтальной ориентацией
>

void loop()
<
// очищаем экран
myGLCD.clrScr();
myGLCD.setFont(BigFont);// Выбираем шрифт.
myGLCD.setColor(VGA_RED); //Задаем цвет.
myGLCD.print( floatToString(hour()) , 100, 215); //Выводим на экран часы
myGLCD.print( floatToString(minute()) , 150, 215); // Минуты
myGLCD.print( floatToString(second()) , 200, 215); // Секунды

// ждём 1 секунду
delay(1000);
>

Более подробно про библиотеку TimeLib можно прочитать тут. Успехов.

DS3231 arduino подключение

DS3231 arduino подключение — часы реального времени

DS3231 arduino подключение — это автономная дешевая плата, в которой имеется встроенный кварц с термо-стабилизацией с исключительной точность хода часами в режиме реального времени. В состав модуля также входит литий-ионный аккумулятор, обладающий лучшим соотношением массы и накопленной энергии. Встроенный генератор позволил сократить количество деталей в схеме и повысить корректность работы прибора.

Технические характеристики устройства

Напряжение питания: 3.3В и 5В/v
Чип памяти:: AT24C32 (32 Кб)
Точность: ± 0.432 сек в день
Частота кварца: 32.768 кГц
Поддерживаемый протокол: I2C
Габариты: 38мм x 22мм x 15мм

Базовая информация

Большая часть микросхем, аналогичных одной из самых доступных типов модульного устройства часов реального времени DS1307, применяется схема простого кварцевого генератора. DS3231 arduino подключение, которого не представляет никакой сложности. Данная схема выполнена на двух транзисторах с рабочей частотой 32 кГц. Однако и в этих приборах имеется свое несовершенство, так при различных температурных составляющих изменяется диапазон частот у кварца. А это в свою очередь создает неточность при обработке и подсчете времени.

Этот недостаток был решен в микросхеме DS3231, за счет внедрения в нее термо-компенсированного кварцевого генератора поддерживающий температурную стабильность частоты. При этом реальное время всегда находится в высокоточном режиме (в случае надобности, параметры температуры возможно подсчитать). DS3231 гарантирует работу с выводом информации по всем значениям, начиная от секунд и заканчивая месяцем и годом. Помимо этого он определяет сколько дней в текущем месяце и делает коррекцию при високосном годе.

Само устройство собрано на основе чипа DS3231N. Чтобы подтянуть линии 32K, SQW, SCL и SDA была применена сборка из резисторов RP1 с номиналом 4.7 кОм. Но здесь нужно учитывать одну зависимость. При использовании некоего количества приборов с шиной обеспечивающей передачу информации через интерфейс I2C, тогда нужно убрать резисторы на остальных модулях. Другая резисторная сборка, также служащая для поддержания стабильного уровня нуля на линиях A0, A1 и A2 и для изменения памяти адреса у микросхемы AT24C32N.

Подзарядка аккумулятора

Для обеспечения подзарядки аккумулятора служит цепочка, собранная на сопротивлении R5 и выпрямительном диоде D1. Вообще то эту цепь можно убрать, поскольку дисковые литиевые элементы SR2032 могут служить много лет. Светодиод визуальной индикации, включенный через сопротивление R1 показывает, что модуль включен и готов к работе. Так как DS3231 arduino подключение выполнено по интерфейсной шине I2C, то для удобства использования электрические шины поданы на два коннектора J1 и J2. Для чего служат другие контакты — показано в таблице ниже.

Функции J1

32K: выход, частота 32 кГц
SQW: выход
SCL: линия тактирования (Serial CLock)
SDA: линия данных (Serial Dфta)
VCC: «+» питание модуля
GND: «-» питание модуля

Функции J2

SCL: линия тактирования (Serial CLock)
SDA: линия данных (Serial Data)
VCC: «+» питание модуля
GND: «-» питание модуля

Что касается электронного компонента памяти AT24C32N, то он упрятан в корпус SOIC8, работает по сдвоенному интерфейсному проводнику I2C. Фиксированный адрес чипа AT24C32N — 0x57, но в случае нужды его несложно изменить, установив перемычки A0, A1 и A2. Поскольку в приборе AT24C32N реализовано три входных адреса A0, A1 и A2, способные быть в двух положениях: LOG-1 или LOG-0. Микросхема способна работать на восемь адресов, начиная от 0x50 и заканчивая 0x57.

Подключение DS3231 к Arduino

Компоненты для подключения:

Arduino UNO R3 x 1 шт.
Часы реального времени на DS3231, RTC, SPI, AT24C32 x 1 шт.
Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
Кабель USB 2.0 A-B x 1 шт.

Принцип подключения:

В этой иллюстрации покажу как делать DS3231 arduino подключение используя только приборы DS3231 и Arduino UNO R3, необходимая информация будет поступать на все данные будут передаваться в «Port Monitor». Сложного в схеме ничего нет, для подключения нужно две пары проводов. Первым делом подключается интерфейсный проводник I2C, SCL в A4 (Arduino UNO) и SDA в A5 (Arduino UNO), теперь подается напряжение питание GND к GND и VCC к 5V. Возможно подать и 3.3v, на этом подключение завершилось.

Для нормальной работы устройства DS3231 требуется библиотека, которая отсутствует в программе разработки Arduino, поэтому ее нужно скачать здесь и встроить в программу разработки. Скачать: DS1307RTC и TimeLib

Настройка и установка времени DS3231

Прежде, чем включать устройство нужно запустить процесс программирования времени, для этого необходимо взять из библиотеки DS1307RTC в качестве примера файл. Делается это так: -> «Файл» -> «Примеры» -> «DS1307RTC» -> «SetTime», либо можно взять готовый код расположенный ниже.

DS3231 arduino подключение — теперь этот код нужно загрузить в контроллер Arduino, значение времени нужно взять с операционной системы, открываем «Мониторинг порта».

Программа разработки

В данной библиотеке имеется еще дополнительный файл для примера, открывается он также просто: DS1307RTC «Файл» —> «Примеры» —> «DS3231» —> «DS3231_Serial_Hard»

Опять же и этот код добавляем в контроллер Arduino, а затем открыть «Мониторинг порта»

Источники:

http://edurobots.ru/2017/05/arduino-real-time-clock-ds3231/

http://xn--90aeniddllys.xn--p1ai/podklyuchenie-chasov-realnogo-vremeni-ds3231-k-arduino/

http://usilitelstabo.ru/ds3231-arduino-podklyuchenie.html

http://electro-mobiles.ru/index.php/stati/98-elektromobil-svoimi-rukami/175-elektromobil-svoimi-rukami-za-tri-dnya-video-poshagovaya-instruktsiya-sozdaniya-samodelnogo-elektromobilya

Ссылка на основную публикацию