Arduino time. Часы реального времени (RTC) для Arduino: подключение, настройка и использование

Как подключить модуль часов реального времени к Arduino. Какие преимущества дает использование RTC. Как настроить и использовать библиотеку RTClib для работы с модулем DS1307. Какие функции доступны для получения даты и времени.

Что такое часы реального времени (RTC) и зачем они нужны в проектах Arduino

Часы реального времени (Real Time Clock, RTC) — это электронное устройство, которое точно отсчитывает время даже при отключении основного питания. В проектах на базе Arduino модули RTC позволяют решить ряд важных задач:

  • Отслеживать текущие дату и время с высокой точностью
  • Сохранять временные метки событий
  • Запускать определенные действия по расписанию
  • Вести лог-файлы с привязкой ко времени

В отличие от встроенной функции millis(), модуль RTC продолжает работать даже при отключении питания Arduino. Это позволяет всегда иметь актуальные данные о времени.

Популярные модули RTC для Arduino и их характеристики

Наиболее распространенные модули часов реального времени для Arduino:


  • DS1302 — бюджетный вариант с низкой точностью
  • DS1307 — популярная модель среднего уровня
  • DS3231 — высокоточный модуль с температурной компенсацией
  • DS3232 — улучшенная версия DS3231 с дополнительной SRAM-памятью

Рассмотрим подробнее характеристики модуля DS1307 как одного из самых распространенных:

  • Питание: 5В
  • Интерфейс: I2C
  • Точность хода: ±2 минуты в месяц
  • Диапазон рабочих температур: -40°C до +85°C
  • Энергонезависимая память: 56 байт
  • Поддержка 12/24 часового формата времени
  • Автономная работа от батарейки CR2032

Как подключить модуль RTC DS1307 к Arduino

Подключение модуля DS1307 к Arduino Uno осуществляется по следующей схеме:

  • VCC модуля — к выводу 5V Arduino
  • GND модуля — к выводу GND Arduino
  • SDA модуля — к выводу A4 Arduino
  • SCL модуля — к выводу A5 Arduino

Для других плат Arduino (Leonardo, Mega, Due) распиновка может отличаться. Уточняйте схему подключения в документации к вашей плате.

Особенности подключения модуля DS1307

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


  • Необходимо установить литиевую батарейку CR2032 в специальный держатель на плате модуля. Это обеспечит автономную работу часов при отключении основного питания.
  • На модуле уже установлены подтягивающие резисторы для линий SDA и SCL. Дополнительные резисторы на Arduino не требуются.
  • Некоторые модули DS1307 имеют вывод SQW для генерации прямоугольных импульсов с частотой 1 Гц. Его можно подключить к цифровому входу Arduino для точной синхронизации.

Установка и настройка библиотеки RTClib для работы с модулем DS1307

Для удобной работы с модулем DS1307 рекомендуется использовать библиотеку RTClib. Она предоставляет простой интерфейс для чтения и установки времени. Порядок установки и настройки библиотеки:

  1. Откройте Arduino IDE
  2. Выберите «Инструменты» — «Управление библиотеками»
  3. В поиске введите «RTClib»
  4. Найдите библиотеку от Adafruit и нажмите «Установить»
  5. После установки перезапустите Arduino IDE

Теперь библиотека RTClib готова к использованию в ваших скетчах. Для ее подключения добавьте в начало скетча строку:


#include <RTClib.h>

Основные функции библиотеки RTClib для работы с датой и временем

Библиотека RTClib предоставляет удобные функции для работы с модулем DS1307:

  • RTC_DS1307 rtc; — создание объекта для работы с модулем
  • rtc.begin(); — инициализация модуля
  • rtc.now(); — получение текущих даты и времени
  • rtc.adjust(DateTime(YYYY, MM, DD, HH, MM, SS));
    — установка даты и времени

Функция now() возвращает объект DateTime, который содержит следующие методы:

  • year() — получение года
  • month() — получение месяца
  • day() — получение дня
  • hour() — получение часа
  • minute() — получение минут
  • second() — получение секунд

Пример использования модуля DS1307 с Arduino

Рассмотрим простой пример, который демонстрирует базовое использование модуля DS1307 с Arduino:


#include <RTClib.h>

RTC_DS1307 rtc;

void setup() {
  Serial.begin(9600);
  
  if (!rtc.begin()) {
    Serial.println("Не удалось найти RTC");
    while (1);
  }

  if (!rtc.isrunning()) {
    Serial.println("RTC не работает!");
    // Установим время при первом запуске
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now();

  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  delay(1000);
}

Этот скетч выводит текущую дату и время в Serial Monitor каждую секунду. При первом запуске время устанавливается автоматически на основе времени компиляции скетча.


Особенности и ограничения модуля DS1307

При работе с модулем DS1307 следует учитывать некоторые его особенности и ограничения:

  • Точность хода составляет ±2 минуты в месяц. Для более точного отсчета времени рекомендуется использовать модуль DS3231.
  • Модуль чувствителен к температуре. При значительных колебаниях температуры точность может снижаться.
  • Срок службы батарейки CR2032 составляет около 3-5 лет при нормальных условиях эксплуатации.
  • Модуль не имеет встроенной температурной компенсации, в отличие от более продвинутых аналогов.

Несмотря на эти ограничения, DS1307 остается популярным выбором для многих проектов Arduino благодаря своей доступности и простоте использования.

Расширенные возможности работы с модулем DS1307

Помимо базовых функций получения времени, модуль DS1307 предоставляет ряд дополнительных возможностей:

Использование встроенной памяти

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


  • rtc.writenvram(address, data) — запись байта в память
  • rtc.readnvram(address) — чтение байта из памяти

Генерация прямоугольного сигнала

Модуль может генерировать прямоугольный сигнал на выводе SQW с настраиваемой частотой. Это может быть полезно для точной синхронизации. Для управления сигналом используется метод:

rtc.writeSqwPinMode(DS1307_SquareWave1HZ);

Доступные частоты: 1 Гц, 4 кГц, 8 кГц, 32 кГц.

Работа с будильниками

Хотя DS1307 не имеет встроенных будильников, их можно реализовать программно. Например:


if (now.hour() == alarmHour && now.minute() == alarmMinute) {
  // Действия при срабатывании будильника
}

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


Real Time Clock (RTC)/Часы реального времени

Статья проплачена кошками — всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Модуль DS1307
Библиотека RTClib

Иногда требуется отслеживать определённое время наступления события. Модуль часов реального времени с литиевой батарей позволяет хранить текущую дату, независимо от наличия питания на самом устройстве. Наиболее распространённые модули RTC: DS1302 (совсем не точные), DS1307 (не очень точные), DS3231 (точные), DS3232 (точные) и др.

Модуль часов представляет собой небольшую плату, которая содержит микросхему (DS1307, DS1302, DS3231), а также сам механизм установки батарейки питания. Часы ведут отсчёт в удобных для человека единицах – минуты, часы, дни недели и другие, в отличие от обычных счётчиков и тактовых генераторов, которые считывают «тики». В Arduino имеется функция millis(), которая умеет считывать различные временные интервалы, но основным недостатком функции является сбрасывание в ноль при включении таймера. С её помощью можно считать только время, а установить дату или день недели невозможно. Модули часов реального времени позволяют решить эту задачу.

Электронная схема модуля включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется встроенный кварц и термостабилизация, которые позволяют получить значения высокой точности.

Как правило, все модули работают по протоколу I2C.

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

Модуль 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
  • SDA
  • VCC
  • GND
  • BAT – вход для литиевой батареи

Чтобы подключить модуль к Arduino Uno, используются 4 вывода.

DS1307 | Arduino 
-----------------
   GND | GND 
   VCC | 5V 
   SCL | A5
   SDA | A4
    DS | N/A

Платы Leonardo, MEGA, ADK, DUE используют другие схемы. Ищите в интернете.

Библиотека RTClib

Для работы с модулем реального времени существует множество библиотек. Рассмотрим библиотеку от Adafruit RTClib.

Установите её через менеджер библиотек. После установки запустите один из готовых примеров из библиотеки ds1307. В Serial Monitor установите скорость 57600. Вы увидите дату на сегодняшний день.

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

Получение даты и времени происходит через вызов функции now(), который возвращает объект DateTime. Данный объект позволяет узнать год, месяц, день, час, минуту и секунду.

Реклама

Ардуино | Датчик расстояния Adafruit VL53L4CX

Ардуино

Сохранить Подписаться

Пожалуйста, войдите, чтобы подписаться на это руководство.

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

Использование VL53L4CX с Arduino включает в себя подключение датчика к Arduino-совместимому микроконтроллеру, установку библиотеки STM32duino VL53L4CX и выполнение предоставленного примера кода.

Обратите внимание, что драйвер Arduino для этого чипа не поддерживает платы с «малой памятью», такие как ATmega328 — вам понадобится чип SAMD21, SAMD51, ESP и т. д. с 50 КБ доступной флэш-памяти!

Проводка

Проводите, как показано на рисунке, для платы 5 В . Если вы используете плату 3V , например Adafruit Feather, подключите контакт 3V платы к VL53L4CX VIN .

Вот устройство Adafruit Metro Express, подключенное к VL53L4CX с помощью разъема STEMMA QT:

  • Плата 5В  к датчику VIN (красный провод)
  • Плата GND  к датчику   GND (черный провод)
  • Плата SCL  – датчик   SCL (желтый провод)
  • Плата SDA  к  датчик   SDA (синий провод)

Вот устройство Adafruit Metro Express, подключенное с использованием беспаечной макетной платы:

  • Плата 5В  к датчику VIN (красный провод)
  • Плата GND  к датчику   GND (черный провод)
  • Плата SCL  – датчик   SCL (желтый провод)
  • Плата SDA  к  датчик   SDA (синий провод)

Установка библиотеки

Вы можете установить VL53L4CX  библиотека для Arduino с помощью диспетчера библиотек в Arduino IDE.

Щелкните пункт меню Управление библиотеками … , найдите VL53L4CX и выберите библиотеку STM32duino VL53L4CX :

Загрузите пример

Откройте файл -> Примеры -> STM32duino VL53L4CX -> VL53L4CX_Sat_HelloWorld  и загрузите его в Arduino, подключенную к датчику.

Загрузите скетч на плату и откройте Serial Monitor ( Tools -> Serial Monitor ) на скорости 115200 бод. Вы должны увидеть распечатываемые значения датчика. Значения, прочитанные в примере:

  • Count — количество показаний, отправленных на последовательный монитор
  • Objs — Количество объектов перед датчиком
  • статус — Диапазон статуса датчика
  • D — Измерение расстояния объекта от датчика в миллиметрах
  • Сигнал — Скорость сигнала от датчика
  • Окружающий — Окружающий шум вокруг датчика

 Распиновка Скачано

Это руководство было впервые опубликовано 04 мая 2022 г. Оно было последним обновлено 04 мая 2022 г.

Эта страница (Arduino) последний раз обновлялась 29 апреля 2022 г.

Текстовый редактор на базе tinymce.

24. Операционная система реального времени для Arduino

Руководство по программированию Arduino серии

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

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

Однако по мере того, как приложение становится более сложным, подход с использованием конечного автомата становится более сложным в обращении и более подверженным дефектам.

Когда это произойдет, самое время обратить ваше внимание на что-то более надежное. Одним из таких решений является FreeRTOS или «Бесплатная операционная система реального времени».

FreeRTOS не является решением для Arduino.

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

Признана высококачественной, хорошо протестированной, документированной и поддерживаемой операционной системой реального времени.

Большинство людей привыкли к универсальным операционным системам, таким как Windows и Mac OS. Эти ОС управляют ресурсами хост-компьютера таким образом, что различные процессы, работающие поверх него, получают свою «справедливую» долю. ОС отвечает за распределение ресурсов (таких как память и процессорное время). ОС сделает все возможное, чтобы выделить ресурсы процессу, но не даст никаких гарантий, что это произойдет.

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *