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

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

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

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

Соединение всех электронных компонентов проводится на специальной контактной («беспаячной») макетной плате, что исключает риск получения ожогов, порезов и других травм — поэтому заниматься с конструктором Arduino можно и вместе с детьми. А наглядный способ представления принципиальной схемы поможет не ошибиться при сборке устройства.

Шаг 1. Список компонентов

Чтобы собрать простые часы на светодиодных матрицах вам потребуется всего несколько дешёвых компонентов:

  • платформа Arduino. Подойдут самые простые модели — Arduino Nano или Micro;
  • контактная макетная плата;
  • соединительные провода для макетной платы;
  • модуль часов реального времени Adafruit DS3231;
  • светодиодный матричный модуль 32×8 MAX7219;
  • две кнопки.

Также понадобится персональный компьютер и USB—mini-USB кабель для загрузки программы управления в память Arduino IDE. Вот и всё — паяльник, щипцы для снятия изоляции, монтажные ножи и прочие профессиональные инструменты не нужны: все операции выполняются руками. Разве что в некоторых случаях удобнее использовать пинцет, но можно обойтись и без него.

Детали для сборки электронных часов на Arduino

Шаг 2. Сборка электронной схемы

Схема электронных часов с индикацией на светодиодах с применением Arduino даже для неопытных радиолюбителей покажется довольно простой. Для сборки требуется всего несколько проводников. Таблица подключений:

Модуль Arduino → светодиодная матрица 32×8 MAX7219

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

Модуль Arduino → кнопки

Второй вывод кнопок соединяется с землёй GND.

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

Схема электрических подключений макетной платы

Два ряда (1 и 4) с обеих сторон замкнуты горизонтально — обычно они используются как линия питания +5V и земля GND. Все внутренние контакты (2 и 3) замкнуты вертикально. При этом монтажная плата как вертикально, так и горизонтально разделена на две независимые друг от друга симметричные части. Это позволяет, например, собрать два разных устройства на одной плате.

Схема электронных часов с индикацией на светодиодах, а также расположение элементов на монтажной плате представлена на иллюстрации:

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

Внешний вид собранного устройства

Шаг 3. Прошивка Arduino

После того как сборка и проверка схемы завершена, можно приступать к загрузке управляющей программы (или «прошивки») в память Arduino.

Интерфейс среды разработки Arduino IDE

Для этого нужно установить бесплатную официальную среду разработки — Arduino IDE [https://www.arduino.cc/en/Main/Software]. Также вам потребуется исходный код проекта, который вы можете скачать ниже в архиве со всеми библиотеками и скетчем, а если вам нужен просто скетч — его можно скопировать отдельно:

Теперь для завершения работы над устройством потребуется выполнить лишь ряд простых операций:

  1. подсоедините Arduino к USB-порту компьютера. Если модуль подключается впервые, то необходимо будет дождаться определения устройства операционной системой и установки драйвера;
  2. скопируйте содержимое папки libraries из архива в одноимённую папку в каталоге Arduino IDE;
  3. запустите средство разработки Arduino IDE;
  4. настройте тип Arduino в соответствии с имеющимся у вас модулем. Так, если вы используете Arduino Nano, в меню необходимо выбрать Tools -> Board: “Arduino Nano”. Также убедитесь в том, что модель процессора соответствует микроконтроллеру на вашей плате:

Выбор модели Arduino в среде Arduino IDE

  • откройте исходный код (файл clock_8x32.ino): File -> Open. Arduino IDE предложит вам автоматически создать отдельную директорию под проект — ответьте утвердительно;
  • загрузите программу в память Arduino: Sketch -> Upload.
  • Компиляция программного кода и дальнейшая загрузка в память микроконтроллера займёт некоторое время, обычно не более одной минуты. Об успешном завершении операции будет сообщено в консоли Arduino IDE. После чего остаётся лишь перезагрузить Arduino с помощью кнопки Reset на устройстве — простые часы на светодиодных матрицах готовы!

    Готовые часы на Arduino

    Настройка часов осуществляется с помощью двух кнопок. Устройство поддерживает 12- и 24-часовой формат вывода времени, показ даты и дня недели, отображение времени с секундами и без. Также имеется возможность менять яркость свечения светодиодов.

    Вариант корпуса для светодиодных часов

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

    Читайте также:  Как добавить atn в фотошоп

    Во многих проектах Ардуино требуется отслеживать и фиксировать время наступления тех или иных событий. Модуль часов реального времени, оснащенный дополнительной батарей, позволяет хранить текущую дату, не завися от наличия питания на самом устройстве. В этой статье мы поговорим о наиболее часто встречающихся модулях RTC DS1307, DS1302, DS3231, которые можно использовать с платой Arduino.

    Модули часов реального времени в проектах Arduino

    Модуль часов представляет собой небольшую плату, содержащей, как правило, одну из микросхем DS1307, DS1302, DS3231.Кроме этого, на плате практически можно найти механизм установки батарейки питания. Такие платы часто применяется для учета времени, даты, дня недели и других хронометрических параметров. Модули работают от автономного питания – батареек, аккумуляторов, и продолжают проводить отсчет, даже если на Ардуино отключилось питание. Наиболее распространенными моделями часов являются DS1302, DS1307, DS3231. Они основаны на подключаемом к Arduino модуле RTC (часы реального времени).

    Часы ведут отсчет в единицах, которые удобны обычному человеку – минуты, часы, дни недели и другие, в отличие от обычных счетчиков и тактовых генераторов, которые считывают «тики». В Ардуино имеется специальная функция 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 Два выхода – первый на 32.768 кГц, второй – программируемый от 1 Гц до 8.192 кГц ±2 ppm при температурах от 0С до 40С.

    ±3,5 ppm при температурах от -40С до 85С.

    Точность измерения температуры – ±3С

    I2C

    Модуль 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.

    Во второй группе контактов находятся:

    Для подключения к плате Ардуино нужны сама плата (в данном случае рассматривается Arduino Uno), модуль часов реального времени RTC DS1307, провода и USB кабель.

    Чтобы подключить контроллер к Ардуино, используются 4 пина – VCC, земля, SCL, SDA.. VCC с часов подключается к 5В на Ардуино, земля с часов – к земле с Ардуино, SDA – А4, SCL – А5.

    Для начала работы с модулем часов нужно установить библиотеки DS1307RTC, TimeLib и Wire. Можно использовать для работы и RTCLib.

    Проверка RTC модуля

    При запуске первого кода программа будет считывать данные с модуля раз в секунду. Сначала можно посмотреть, как поведет себя программа, если достать из модуля батарейку и заменить на другую, пока плата Ардуино не присоединена к компьютеру. Нужно подождать несколько секунд и вытащить батарею, в итоге часы перезагрузятся. Затем нужно выбрать пример в меню Examples→RTClib→ds1307. Важно правильно поставить скорость передачи на 57600 bps.

    Читайте также:  Сколько мбайт в гигабайт

    При открытии окна серийного монитора должны появиться следующие строки:

    Будет показывать время 0:0:0. Это связано с тем, что в часах пропадает питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.

    Чтобы провести настройку времени на модуле, нужно в скетче найти строку

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

    Настройка произведена корректно и дополнительно перенастраивать часы реального времени не придется.

    Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() – они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Поэтому эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто – раз в несколько дней. Существуют и другие функции для вызова времени, но если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.

    Пример проекта с i2C модулем часов и дисплеем

    Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет мигать с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.

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

    Модуль часов подключается к контактам SCL/SDA, которые относятся к шине I2C. Также нужно подключить землю и питание. К Ардуино подключается так же, как описан выше: SDA – A4, SCL – A5, земля с модуля к земле с Ардуино, VCC -5V.

    Индикатор подключается просто – выводы с него CLK и DIO подключаются к любым цифровым пинам на плате.

    Скетч. Для написания кода используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.

    После этого скетч нужно загрузить и на мониторе будет показано время.

    Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с 00:00:00 до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.

    Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для проверки совпадения/несовпадения хэша с хэшем, записанным в EEPROM.

    Можно усовершенствовать проект. Если использовать жидкокристаллический монитор, можно сделать проект, который будет отображать дату и время на экране. Подключение всех элементов показано на рисунке.

    В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических экранов это LiquidCrystal), и добавить в функцию loop() строки для получения даты.

    Алгоритм работы следующий:

    • Подключение всех компонентов;
    • Загрузка скетча;
    • Проверка – на экране монитора должны меняться ежесекундно время и дата. Если на экране указано неправильное время, нужно добавить в скетч функцию RTC.write (tmElements_t tm). Проблемы с неправильно указанным временем связаны с тем, что модуль часов сбрасывает дату и время на 00:00:00 01/01/2000 при выключении.
    • Функция write позволяет получить дату и время с компьютера, после чего на экране будут указаны верные параметры.

    Заключение

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

    Если вы проектируете устройство, которому нужно всегда и везде знать точное время, вам пригодится модуль часов реального времени. Такие часы способны отсчитывать точное время и сохранять его даже при отключении основного питания, так как подразумевается их эксплуатация с батарейкой (обычно CR2032). В режиме работы без основного питания, часы способны отработать на такой батарейке c десяток лет!

    Читайте также:  Как найти жесткий диск в биос

    Одним из наиболее часто используемых модулей ЧРВ (RTC – Real Time Clock) является микросхема DS1307 от Dallas Semiconductors. Точность хода микросхемы сильно зависит от внешнего кварца и его обвязки, поэтому на просторах Интернета данный модуль считается неточным.

    Однако, существует «автономный» модуль – DS3231, который имеет встроенный кварц с термостабилизацией.

    Его точность составляет 2ppm (partspermillion – частей на миллион). Такая погрешность зачастую незаметна и примерно равна погрешности наручных часов. При всех его плюсах, модуль ещё и совместим со всеми DS1307-ми библиотеками!

    И в нашей сегодняшней статье мы поговорим о подключении данной микросхемы к микроконтроллерам Arduino.

    Для реализации проекта из этой статьи нам потребуются следующие компоненты:

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

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

    Обратите внимание – выводы шины IICна разных контроллерах расположены на разных пинах:

    Контакт SDA Контакт SCL
    На Arduino UNO, Nano, Pro Mini etc. A4 A5
    На Arduino Mega, Due 20 21
    На Arduino Leonardo, Pro Micro 2 3

    После подключения у нас должно получится примерно так:

    Настройка и подключение в Arduino IDE

    Как и со всей периферией Arduino, с модулем часов удобнее работать, используя библиотеку. Мы будем пользоваться низкоуровневой библиотекой Wire (входит в комплект поставки Arduino IDE) и двумя высокоуровневыми DS1307 RTCи Time (необходимо скачать).

    Несмотря на то, что библиотека написана для «неточных» часов, она поддерживает работу и с DS3231.

    После скачивания библиотек их необходимо установить. Для этого две папки с библиотеками копируются в поддиректорию libraries в папке установки среды Arduino IDE.

    Папка Libraries находится по разным адресам в зависимости от вашей ОС:

    На Mac: домашняя директория -> Documents -> Arduino -> libraries

    На PC: Мои документы -> Arduino -> libraries

    На Linux: домашняя директория -> sketchbook -> libraries

    После установки запустите среду Arduino IDE и откройте пример TimeRTC библиотеки Time (Файл Examples Time TimeRTC), или просто скопируйте код:

    Загрузите скетч в плату, после чего откройте монитор последовательного порта (Ctrl+Shift+M). Скорее всего, вы увидите неправильное время или вообще его не увидите, так как часы всё ещё не настроены.

    Для их настройки запустите пример SetTime (Файл Примеры DS1307RTC SetTime) и залейте его в плату. После загрузки время будет настроено по системному времени ПК на момент компиляции. Если вы в любой момент времени перезагрузите плату, то время снова будет сброшено ко времени компиляции, поэтому после заливки настроенного скетча отключите сигнальные линии часов и залейте любой другой скетч (например, наш первый, выводящий время).

    Если вам не нравится настройка времени по времени компиляции, вы можете задать ее самостоятельно, для этого используйте следующий код:

    Он установит время и дату на 13:00:00 1 апреля 2016 года. Поменяйте это значение для установки своего времени. Учтите – если вы перезагрузите плату, время будет сброшено, как с временем компиляции, так что повторите действия с отключением платы и заливкой другого скетча.

    Товары, используемые в материале

    Arduino Uno (DIP версия)

    DS3231 – часы реального времени (RTC)

    Блок питания 9V, 1А

    Шлейф проводов «Папа — Мама» (20см, 40шт.)

    Самые популярные материалы в блоге

    За все время

    За сегодня

    5 комментариев . Оставить новый

    спасибо но работает только с ардуино IDE 0015-1.5

    а какие ошибки появляются при работе с другой версией?

    Мне интересно, эти ошибки специально созданы для того, чтобы только продвинутый пользователь мог разобраться? Или всё же случайно?

    Arduino: 1.8.2 Hourly Build 2017/03/21 05:33 (Windows XP), Плата:”Arduino Nano, ATmega328P”
    In file included from C:Program FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.ino:1:0:
    C:Program FilesArduinolibrariesDS1307RTC/DS1307RTC.h:19:22: error: ‘tmElements_t’ has not been declared
    static bool read(tmElements_t &tm);
    ^
    C:Program FilesArduinolibrariesDS1307RTC/DS1307RTC.h:20:23: error: ‘tmElements_t’ has not been declared
    static bool write(tmElements_t &tm);
    ^
    SetTime:10: error: ‘tmElements_t’ does not name a type
    tmElements_t tm;

    ^
    C:Program FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.ino: In function ‘void setup()’:

    SetTime:20: error: expected primary-expression before ‘)’ token
    if (RTC.write(tm)) <

    ^
    C:Program FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.ino: In function ‘bool getTime(const char*)’:

    SetTime:53: error: expected unqualified-id before ‘.’ token
    tm.Hour = Hour;

    ^
    SetTime:54: error: expected unqualified-id before ‘.’ token
    tm.Minute = Min;

    ^
    SetTime:55: error: expected unqualified-id before ‘.’ token
    tm.Second = Sec;

    ^
    C:Program FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.ino: In function ‘bool getDate(const char*)’:

    SetTime:70: error: expected unqualified-id before ‘.’ token
    tm.Day = Day;

    ^
    SetTime:71: error: expected unqualified-id before ‘.’ token
    tm.Month = monthIndex + 1;

    ^
    SetTime:72: error: expected unqualified-id before ‘.’ token
    tm.Year = CalendarYrToTm(Year);

    ^
    exit status 1
    ‘tmElements_t’ does not name a type

    Ссылка на основную публикацию
    Функция плотности распределения пуассона
    На этой странице мы собрали примеры решения учебных задач, где используется распределение Пуассона. Краткая теория Рассмотрим некоторый поток событий, в...
    Фоллаут 76 официальный сайт на русском
    Игра Fallout 76 Модификация силовой брони и оружия в честь 300-летия США Голова Волт-Боя Патриотический костюм американца Праздничное приветствие Волт-Боя...
    Фольксваген тигуан 2 литра механика
    Все минусы Фольксваген Тигуан 2018-2019 ➖ Качество отделочных материалов ➖ Расход топлива Плюсы ➕ Динамика ➕ Управляемость ➕ Удобный салон...
    Функция распределения случайного времени безотказной работы радиоаппаратуры
    На странице Непрерывная случайная величина мы разобрали примеры решений для произвольно заданных законов распределения (многочлены, логарифмы и т.п.). Здесь же...
    Adblock detector