- Модули часов реального времени в проектах Arduino
- Сравнение популярных модулей RTC DS1302, DS1307, DS3231
- Компоненты:
- Модуль DS1307
- Проверка RTC модуля
- Эксперимент 2
- Описание
- Необходимые комплектующие
- Схема соединений
- Часы на RTC DS3231 и TM1637
- Подразделы
- Схема часов
- Конструкция часов
- Скетч часов
- Вариант мигания точек, если нет SQW
- Приложение
- Печатная плата:
Модули часов реального времени в проектах Arduino
Модуль часов представляет собой небольшую плату, содержащую, как правило, одну из микросхем DS1307, DS1302, DS3231. Также практически можно найти механизм для установки аккумулятора на плату. Такие карты часто используются для отслеживания времени, даты, дня недели и других временных параметров. Модули работают от собственного источника питания — батарей, аккумуляторов и продолжают считать, даже если Arduino выключен. Самые распространенные модели часов — DS1302, DS1307, DS3231. Они основаны на модуле RTC (Real Time Clock), подключенном к Arduino).
Часы отсчитывают в удобных для обычного человека единицах: минутах, часах, днях недели и других, в отличие от обычных часовых счетчиков и генераторов, считывающих «тики». В Arduino есть специальная функция под названием millis (), которая также может считывать различные временные интервалы. Но главный недостаток этой функции в том, что она сбрасывается при включении таймера. Его можно использовать только для чтения времени, нельзя установить дату или день недели. Для решения этой проблемы используются модули часов реального времени.
Электронная схема включает микросхему, блок питания, кварцевый резонатор и резисторы. Кристаллический резонатор работает на частоте 32768 Гц, что удобно для обычного двоичного счетчика. Схема DS3231 имеет встроенные кристаллы и термостабилизатор для получения значений высокой точности.
Сравнение популярных модулей RTC DS1302, DS1307, DS3231
В этой таблице мы привели список самых популярных модулей и их основные функции.
Имя | Частота | Точность | Поддерживаемые протоколы |
DS1307 | 1 Гц, 4,096 кГц, 8,192 кГц, 32,768 кГц | Это зависит от кварца: обычно значение достигает 2,5 секунды в день, невозможно получить точность больше 1 секунды в день. Кроме того, точность зависит от температуры. | I2C |
DS1302 | 32,768 кГц | 5 секунд в день | I2C, SPI |
DS3231 | Два выхода — первый на 32768 кГц, второй — программируемый от 1 Гц до 8192 кГц | ± 2 ppm при температуре от 0 ° C до 40 ° C.
± 3,5 ppm при температуре от -40 ° C до 85 ° C. Точность измерения температуры — ± 3С |
I2C |
Компоненты:
- Digispark
- Модуль часов DS3231
- Индикатор на TM1637
Модуль DS1307
DS1307 — это модуль, который используется для отсчета времени. Он собран на базе микросхемы DS1307ZN, питание осуществляется от литиевой батареи для реализации длительной автономной работы. Аккумулятор на плате крепится сзади. В модуле установлена микросхема AT24C32 — это энергонезависимая EEPROM емкостью 32 КБ. Обе микросхемы соединены между собой шиной I2C. DS1307 энергоэффективен и содержит часы и календарь на 2100 год.
Модуль имеет следующие параметры:
- Электропитание — 5В;
- Диапазон рабочих температур от -40С до 85С;
- 56 байт памяти;
- Литиевая батарея LIR2032;
- Реализовать 12 и 24 часовой режимы;
- Поддержка интерфейса I2C.
Форма оправдана для использования в тех случаях, когда данные читаются достаточно редко, с интервалом в одну неделю и более. Это позволяет экономить электроэнергию, так как при непрерывном использовании вам придется расходовать больше напряжения, даже если у вас есть аккумулятор. Наличие памяти позволяет записывать различные параметры (например, измерение температуры) и считывать информацию, полученную от модуля.
Взаимодействие с другими устройствами и обмен информацией с ними осуществляется по интерфейсу I2C с выводов SCL и SDA. В схеме установлены резисторы, позволяющие обеспечить необходимый уровень сигнала. Также на плате есть специальный корпус для установки датчика температуры DS18B20. Контакты разделены на 2 группы, шаг 2,54 мм. Первая группа контактов содержит следующие выводы:
- DS — выход для датчика DS18B20;
- SCL — тактовая линия;
- SDA — линия передачи данных;
- VCC — 5В;
- GND.
Вторая группа контактов содержит:
- SQ — 1 МГц;
- DS ;
- SCL;
- ПДД;
- VCC;
- ЗЕМЛЯ;
- BAT — вход для литиевой батареи.
Для подключения к плате Arduino вам понадобится сама плата (в данном случае это Arduino Uno), модуль часов реального времени DS1307 RTC, кабели и USB-кабель.
Для подключения контроллера к Arduino используются 4 контакта: VCC, земля, SCL, SDA .. VCC от часов подключается к 5 В на Arduino, земля от часов — земля от Arduino, SDA — A4, SCL — A5.
Для начала работы с модулем часов необходимо установить библиотеки DS1307RTC, TimeLib и Wire. Может использоваться для работы и RTCLib.
Проверка RTC модуля
При выполнении первого кода программа будет считывать данные из модуля раз в секунду. Во-первых, вы можете увидеть, как программа будет себя вести, если вы удалите аккумулятор из модуля и замените его другим, пока плата Arduino не подключена к компьютеру. Вам нужно подождать несколько секунд и вынуть аккумулятор, в результате часы перезапустятся. Затем нужно выбрать пример в меню Примеры → RTClib → ds1307. Важно правильно выставить скорость передачи 57600 бит / с.
Когда откроется окно монитора последовательного порта, должны появиться следующие строки:
Он покажет время 0: 0: 0. Это связано с тем, что часы потеряли питание, и обратный отсчет остановится. По этой причине не извлекайте аккумулятор во время работы модуля.
Чтобы установить время на форме, вам нужно найти линию на эскизе
RTC.adjust (DateTime (__ DATE__, __TIME__));
Эта строка будет содержать данные с компьютера, который используется для прошивки модуля часов реального времени. Для правильной работы необходимо сначала проверить правильность даты и времени на компьютере и только потом начинать прошивать модуль часов. После настройки на мониторе будут отображаться следующие данные:
Настройки выполнены правильно, и нет необходимости перенастраивать часы реального времени.
Время читать. После настройки формы вы можете отправлять запросы времени. Для этого используйте функцию now (), которая возвращает объект DateTime, содержащий информацию о времени и дате. Существует ряд библиотек, которые используются для определения времени. Например, RTC.year () и RTC.hour () — отдельно получают информацию о году и времени. При работе с ними может возникнуть проблема: например, запрос на отображение времени будет сделан в 1:19:59.
Прежде чем показывать время 1:20:00, часы будут отображать время 1:19:00, что фактически означает, что одна минута будет потеряна. Поэтому рекомендуется использовать эти библиотеки в тех случаях, когда чтение происходит нечасто — раз в несколько дней. Есть и другие функции для вызова времени, но если вам нужно уменьшить или избежать ошибок, лучше использовать now () и извлечь из него необходимые показания.
Эксперимент 2
Описание
В этом руководстве мы подключим 7-сегментный счетчик к Arduino Mega и посмотрим, как отображать значения счетчика, которые уменьшаются на 1 каждую секунду на счетчике.
Необходимые комплектующие
В этом эксперименте используются те же компоненты, что и в первом случае.
Схема соединений
Схема подключения в этом эксперименте такая же, как и в первом случае.
Часы на RTC DS3231 и TM1637
Я до сих пор использую дешевые и миниатюрные платы Arduino Pro Mini. На этой странице я представляю проект часов. Сейчас обычные времена .
Подразделы
- Схема подключения
- Посмотрите на дизайн
- Эскиз часов
- Вариант точек возгорания при отсутствии SQW 2021-08-27
- Заявка
Прежде чем сделать набросок, я поискал в Интернете, что делают другие. И тут мне попался интересный проект http://arduinolab.pw/index.php/2016/06/23/chasy-na-arduino/, я решил взять его за основу.
Повторив проект, я обнаружил, что у него есть ряд недостатков. Существенными недостатками, на мой взгляд, являются:
- Отсутствие регулировки яркости индикатора.
- Без удаления несущественных нулей.
Поэтому я устранил эти недостатки и в моем проекте уже есть подавление нуля и регулировка яркости, значение которой записано в EEPROM, чтобы при включении часов яркость выставлялась на то, что мы выставили.
Кто-то производит автоматическую регулировку яркости с помощью фоторезистора. Сделать это вполне возможно, но я не делал, такая опция не нужна, хотя до этой опции проект можно расширить или модернизировать.
Я также хотел реализовать будильник, но потом передумал, и кнопка, отображаемая на передней панели для включения будильника, осталась неподключенной. Возможно, при необходимости поменяю часы на будильник.
Схема часов
Схема часов не сложная. Из-за того, что индикатор управляется протоколом IIC (I2C), подключений очень мало. Блок питания используется как импульсный, обратноходовой, как своего рода зарядка для телефона. Выходы +6,5 В. Это напряжение подается на регулятор Arduino Pro Mini — на вывод RAW.
Рис 2. Схема подключения для эскиза №. 8
На самом деле у меня не четыре кнопки, а пять. Пятый предназначался для управления настройкой будильника, но до него это так и не дошло. Еще была мысль с этой кнопкой, чтобы отображать дату и месяц . может позже добавлю расписание и реализую эту функцию.
Конструкция часов
Кузов традиционно оклеен АБС-пластиком. Размеры 80 x 60 x 54 мм (Д x Ш x В). Сама конструкция представляет собой блок модулей: индикатор реального времени, плату с Arduino, модуль питания и полоску с кнопками. Arduino Pro Mini подключается к разъему DIP24, который припаян к схеме. Ссылки из модулей переходят на эту вкладку. Конструктивно модули соединяются между собой нейлоновыми опорами и винтами М3. К таким же стойкам прикручивается задняя крышка. В корпус вставляется модульный блок и закрепляется снизу винтом M3.
Хочу обратить ваше внимание на то, что вверху есть кнопка отключения внешнего питания. Нет смысла гореть индикатор при работе весь день. Поскольку модуль реального времени имеет собственную литиевую батарею 3 В, время продолжает отсчитываться независимо от источника питания Arduino и индикатора. Очень полезная функция.
Кнопки управления вынесены на переднюю панель и немного утоплены. Сейчас я объясню, почему это так. У меня часы ASSISTANT ah-1066, размер чуть больше и индикатор такой же, зеленый. Затем их кнопки управления размещаются на верхней крышке, что с моей точки зрения и опыта эксплуатации такой конструкции не очень удобно, и на них оседает пыль. Батарейки в этих часах розовые (AAA) 3шт. — в ближайщем будущем. Нет контроля яркости индикатора. Поэтому при создании своего дизайна я постарался устранить эти недостатки. Например, когда кнопки находятся впереди, можно легко отрегулировать или установить время, так как вы можете видеть и индикатор, и кнопки одновременно.
Ниже представлен небольшой фотоотчет о конструкции часов.
Рисунок 3. Часы. Внешний вид, разные ракурсы
Рисунок 4. Часы. Внешний вид, разные ракурсы
Рисунок 5. Часы. Внешний вид, вид снизу
Рисунок 6. Часы. Внешний вид, задняя крышка снята
Фото 7. Часы. Выньте замок часов из корпуса
Фото 8. Часы. Замок часов вынимается из корпуса
Фото 9. Часы. Блокировка часов отключена. Отдельная карта DS3231 RTC
Фото 10. Часы. Блокировка часов отключена. Отдельная карта DS3231 RTC
Фото 11. Часы. Блокировка часов отключена. Индикаторная плата TM1637 и отдельная кнопочная панель
Фото 12. Часы. Окончательный вариант
Скетч часов
Ниже представлен набросок. Рассмотрю некоторые его особенности. Затем автор использует сигнал от модуля в реальном времени от контакта SQW, чтобы точки мигали, который отправляется на контакт Arduino 2. На этот вывод устанавливается внешнее прерывание 0 для CHANGE. Это можно реализовать и другим способом, например через Timer1. Оставил как автор, может в другом проекте сделаю через Timer1, для разнообразия.
Весь код подробно прокомментирован, надеюсь, с его пониманием проблем не возникнет. Я просто хочу обратить ваше внимание на то, что когда значение записывается в EEPROM, индикатор гаснет на полсекунды, чтобы увидеть, что команда записи сработала. В некотором смысле это указание на регистрацию.
Пользуюсь этими часами давно, до этого сам пользовался модулями замков и сейчас уже изготовлен полноценный корпус.
На данный момент выяснилось, что произошло. Дизайн полностью коммерческий, готов к использованию в повседневной жизни. Вполне доступный. Рекомендую повторить.
Вариант мигания точек, если нет SQW
Несколько раз меня спрашивали, что делать, если на DS3231 нет вывода SQW, я могу предложить использовать прерывания Timer1. Уточнение скетча не займет много времени, и эффект такой же, как и при выводе SQW.
Приложение
Используемые библиотеки и программы:
- EEPROM.zip
- TM1637.zip
- Wire.zip
- Эскиз: Clock_tm1637_RTC_DS3231.zip
- Sketch + Libraries по альтернативной ссылке: Clock_tm1637_RTC3231.rar
Печатная плата:
Плата по сути представляет собой модуль часов с контактами для Digispark и индикатором на TM1637.
Читайте также: Подавление дребезга контактов и защита кнопки: как устранить на Ардуино