Часы-будильник на модуле RTC DS1302

Цель этого проекта - освоить работу с модулем часов реального времени (Real Time Clock) на базе чипа DS1302 от компании Maxim Integrated.

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

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

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

СОСТАВ СИСТЕМЫ

PLC Arduino UNO с шилдом Sensor Shield v 5.0 (питание 7-12 В постоянного тока), LCD-дисплей с шиной I2C, DC-DC конвертер для питания дисплея, пьезопищалки и светодиода, кнопочный пост с тремя кнопками и модуль часов реального времени. Для работы этого модуля нужна батарейка CR2032 на 3 вольта. Измерение температуры производится самодельным температурным преобразователем.

КАК РАБОТАЕТ

При подаче питания на Arduino во время приветственной заставки вы услышите проверочный сигнал зуммера и увидите, как загорится светодиод. Если это самое первое включение, вам надо зайти в настройки часов и выставить текущую дату и время. Далее вы можете пользоваться устройством, как обычными часами, включая функцию будильника.

Часы-будильник на базе RTC DS1302

Часы-будильник на базе RTC DS1302

КНОПКИ УПРАВЛЕНИЯ

Управлять системой можно с помощью трех кнопок : НАСТРОЙКИ, ВВЕРХ и ВНИЗ. Рассмотрим их функции подробно :

Кнопка НАСТРОЙКИ

При нажатии этой кнопки вы попадете в меню настроек и будете циклично переходить по пунктам меню. После последнего пункта меню вы снова вернетесь на основной экран (время, дата и температура). Так как количество пунктов меню довольно много, все они разбиты на четыре логические группы : установка будильника, настройка часов и даты, калибровка термодатчика и сохранение/загрузка. Каждый блок предваряет приветственный экран, от куда вы можете сразу перейти к следующей группе настроек (кнопка ВВЕРХ) или выйти из настроек (кнопка ВНИЗ).

Все цифровые параметры имеют верхнюю и нижнюю границы, за которые вы выйти не сможете. Изменения параметров будильника и термодатчика сразу принимаются системой, подтверждение не нужно. Обратите внимание, верхнюю и нижнюю границы, а также значения по умолчанию вы можете сами изменять в скетче. Имейте в виду, на время нахождения в настройках будильник отключается.

Пройдемся по пунктам меню Настройки.

  • Alarm Settings : приветственный экран группы настроек будильника.
  • HourNow HH:MM:SS / HourNew HH:MM:SS : настройка часов будильника (верхняя строчка - текущее время, нижняя - вновь устанавливаемое).
  • Min_Now HH:MM:SS / Min_New HH:MM:SS : настройка минут будильника.
  • Sec_Now HH:MM:SS / Sec_New HH:MM:SS : настройка секунд будильника.
  • Day_Now DD.MM.YY / Day_New DD.MM.YY : настройка дня будильника (верхняя строчка - текущая дата, нижняя - вновь устанавливаемая).
  • Mon_Now DD.MM.YY / Mon_New DD.MM.YY : настройка месяца будильника.
  • YearNow DD.MM.YY / YearNew DD.MM.YY : настройка года будильника.
  • Week Mode : режим будильника по дням недели. Имеются следующие варианты :
    • Only One Time - будильник срабатывает только один раз в установленное время (здесь играет роль и дата).
    • Every Day - в этом режиме сигнал подается каждый день в одно и то же время (настройки даты значения не имеют).
    • From Mon to Fri - в этом режиме сигнал подается в будние дни (понедельник - пятница) в одно и то же время (настройки даты значения не имеют).
    • Only Sat and Sun - здесь сигнал подается в выходные (суббота и воскресенье) в одно и то же время (настройки даты значения не имеют).
    • Only Xxxxxxxx - в этом режиме сигнал подается в определенный день недели в одно и то же время, например, только по вторникам (настройки даты значения не имеют).
  • Buzzer Time : продолжительность звонка в секундах. Звонок можно остановить и раньше, нажав кнопку ВНИЗ.
  • Alarm ON/OFF : включение - выключение будильника. Если будильник включен, то на экране за днем недели появится буква "А".
  • Buzzer Check : проверка звонка и светодиода. Нажмите кнопку ВВЕРХ для проверки.
  • Save Alarm Sett. : сохранение настроек будильника в память контроллера. Все настройки будильника хранятся в оперативной памяти, поэтому при обесточке они будут стерты (вернутся к заводским). Чтобы после восстановления питания Arduino не настраивать будильник вновь, сохраните параметры в энергонезависимую память.

  • Time Settings : приветственный экран группы настроек времени и даты.
  • HourOld HH:MM:SS / HourNew HH:MM:SS : установка часов (верхняя строчка - текущее время, нижняя - вновь устанавливаемое).
  • Min_Old HH:MM:SS / Min_New HH:MM:SS : установка минут.
  • Sec_Old HH:MM:SS / Sec_New HH:MM:SS : установка секунд.
  • Day_Old DD.MM.YY / Day_New DD.MM.YY : установка дня месяца (верхняя строчка - текущая дата, нижняя - вновь устанавливаемая).
  • Mon_Old DD.MM.YY / Mon_New DD.MM.YY : установка месяца.
  • YearOld DD.MM.YY / YearNew DD.MM.YY : установка года.
  • WeekOld Xxxxxxxx / WeekNew Xxxxxxxx : установка дня недели.
  • Save Time Setin : сохранение настроек времени и даты в память контроллера, а также перепрошивка модуля часов реального времени DS1302.

  • Temperature Set. : приветственный экран группы настроек термодатчика. Эти настройки сразу принимаются системой, подтверждение не нужно. Но они хранятся в оперативной памяти, поэтому, чтобы не потерять, сохраните их в энергонезависимую память.
  • Temp Correction : поправка температуры в ºC. Значение по умолчанию - 0ºC. Нижняя граница -100ºC, верхняя +100ºC. Эта поправка добавляется к замеренной температуре. Если поправка отличается от нуля, то на экране за температурой появится восклицательный знак.
  • Min_Volt нижняя граница вольтажа с аналогового порта датчика Pt100, переведенная в цифровой вид. Значение по умолчанию - 39. Нижняя граница 0, верхняя 1023. Эта величина и далее необходимы для калибровки самодельного преобразователя термосопротивления Pt100.
  • MinPt соответствующая нижней границе температура в ºC. Значение по умолчанию - 0ºC. Нижняя граница 0ºC, верхняя +1000ºC.
  • Max_Volt верхняя граница вольтажа с аналогового порта датчика Pt100, переведенная в цифровой вид. Значение по умолчанию - 546. Нижняя граница 0, верхняя 1023.
  • MaxPt соответствующая верхней границе температура в ºC. Значение по умолчанию +100ºC. Нижняя граница 0ºC, верхняя +1000ºC.

  • Read/Save/Defual : приветственный экран группы сохранение - загрузка.
  • Read Settings : чтение настроек из энергонезависимой памяти Arduino. При нажатии кнопки ВВЕРХ настройки из памяти PLC перейдут в оперативную.
  • Save Settings : запись настроек в энергонезависимую память Arduino. При нажатии кнопки ВВЕРХ текущие параметры запишутся в постоянную память PLC. При перезагрузке контроллера (выключение - включение) именно эти настройки загрузятся в программу. Обратите внимание, при сохранении параметров модуль RTC DS1302 не перепрошивается, время и дата не меняются. В память будут занесены цифры, которые вы подставляли при последней настройки часов и даты. Это сделано для удобства, чтобы заново не вбивать параметры. Если вы хотите установить новые дату и время, зайдите в соответствующий пункт меню настроек.
  • Load Default : загрузка значений по умолчанию. При нажатии кнопки ВВЕРХ параметры, определенные в начале скетча, загрузятся в оперативную память PLC (в текущие настройки). Эта функция может быть полезна, когда вы запутались в регулировках и хотите все вернуть в исходное положение. Но есть и еще одна причина ее использования. Если вы на одну и ту же плату Arduino постоянно записываете скетчи разных проектов, возможна ситуация, когда параметры одного проекта запишутся в настройки другого. Конечно, это можно исправить, но представьте, что в параметре, где должно быть, например, число 10, стоит 32000. Вручную кнопками ВВЕРХ или ВНИЗ корректировать это очень долго, проще сбросить настройки к заводским, а уже затем их подправить. Здесь также модуль RTC DS1302 не перепрошивается, время и дата не меняются.

Кнопки ВВЕРХ-ВНИЗ

В настройках этими кнопками меняются значения параметров.

В основном экране при нажатии кнопки ВВЕРХ вы увидите настройки будильника, а кнопкой ВНИЗ можно остановить сигнал будильника.

ИНДИКАЦИЯ LCD

Верхняя строчка :
"HH:MM:SS TT,TºC" - текущее время и температура
Если введена поправка температуры, появится восклицательный знак
При нажатии кнопки ВВЕРХ - уставка будильника
В режиме настроек : пункты меню настроек
Нижняя строчка :
"DD.MM.YY Www" - текущая дата и день недели
Если включен будильник, появится буква "А"
В режиме настроек : значение пункта меню настроек
Индикация LCD

Индикация LCD

ПОДКЛЮЧЕНИЕ

Здесь приведено соединение всех элементов системы управления, Arduino (через шилд), модуля часов и датчика температуры. В виде схемы подключение представлено ниже.

Плата Arduino и Sensor-shield

  • питание Arduino : от адаптера 7-12VDC (2A)
  • питание шилда (перемычка убрана) : от адаптера 7-12VDC (2A) через понижающий DC-DC преобразователь типа LM2596 (не менее 2А)
  • LCD-дисплей 1602 + модуль I2C : питание от шилда (подсоединяем GND и VCC к любым свободным пинам G и V цифровых входов), SDA (I2C) - A4 (шилд), SCL (I2C) - A5 (шилд)
  • зуммер будильника : сигнал от Arduino - цифровой пин 10, земля - к пину G пина 10 шилда. Помните про полярность зуммера
  • светодиод будильника : сигнал от Arduino - цифровой пин 8, земля - к пину G пина 8 шилда. Не забудте поставить резистор 220 Ом на линии светодиода. Помните про полярность светодиода
  • сигнал от кнопки НАСТРОЙКИ : вход в Arduino - цифровой пин 7. Пины + и - кнопочного поста, общие для всех кнопок НАСТРОЙКИ, ВВЕРХ, ВНИЗ, подсоединяем к любым свободным пинам V и G цифровых входов. Линию сигнала и земли шунтируем резистором 10кОм
  • сигнал от кнопки ВВЕРХ : вход в Arduino - цифровой пин 6. Линию сигнала и земли шунтируем резистором 10кОм
  • сигнал от кнопки ВНИЗ : вход в Arduino - цифровой пин 5. Линию сигнала и земли шунтируем резистором 10кОм
  • сигнал от преобразователя Pt100 к Arduino - аналоговый пин A0. Питание к любым свободным пинам G и V цифровых входов
  • Термодатчик Pt100 - к клеммам на самодельном термопреобразователе

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

  • питание (VCC и GND) : к любым свободным пинам G и V цифровых входов шилда
  • пин RST : к цифровому пину 2
  • пин CLK : к цифровому пину 3
  • пин DAT : к цифровому пину 4
Схема подключения будильника

Схема подключения будильника

ПЛАТА ДЛЯ ДАТЧИКА

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

Схема пайки сигналки на макетной плате

Схема пайки сигналки на макетной плате

Примечания :

  1. Все подводы и отводы выполнены в трех вариантах : клеммница, штыревой соединитель "папа" и "мама" для проводов Dupont.
  2. Мощность резистора 0,25 ватт.

ЧТО НУЖНО ДЛЯ ПРОЕКТА

  • PLC Arduino UNO - 1 шт
  • Sensor Shield v 5.0 - 1 шт
  • понижающий DC-DC преобразователь типа LM2596 (не менее 2А) - 1 шт
  • LCD-дисплей 1602 + модуль I2C - 1 шт
  • модуль часов DS1302 - 1 шт
  • батарейка CR2032 на 3 вольта - 1 шт
  • кнопка тактовая с колпачком - 3 шт
  • резистор 220 Ом (0,25 Вт) - 1 шт
  • резистор 10 кОм (0,25 Вт) - 3 шт
  • зуммер (пищалка) - 1 шт
  • светодиод 5 мм - 1 шт
  • макетная плата под пайку 30х55 - 1 шт (для монтажа кнопок)
  • макетная плата под пайку 35х25 - 1 шт (для монтажа зуммера и светодиода)
  • клеммница тройная - 1 шт
  • стойка мама-мама М3х15 - 7 шт (для монтажа LCD-дисплея и сигналки)
  • гайка М3 - 50 шт и более в зависимости от способа крепления вышеуказанных элементов
  • болт М3х15, М3х10 - 20 шт и более
  • провод Dupont мама-мама или папа-мама (20 см) - 30 шт и более в зависимости от типа пинов соединяемых элементов
  • провод типа AWG - 50 см (соединение штекер - DC-DC преобразователь - Sensor Shield)
  • штыревой соединитель 40pin - 1 шт
  • разъем PBS 40pin - 1 шт
  • штекер питания DC 2.1 мм с клеммной колодкой папа и мама - 1 пара (для подключения шилда)
  • кусок оргстекла или т.п. - 20х30 см (для монтажа всех элементов)
  • болт М6х15 и гайка - 4 шт (ножки оргстекла)