🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🕰️ Проект: программируемый таймер включения по времени на DS1307 с управлением реле

Часы реального времени DS1307 хранят точное время независимо от скетча, а реле включает нагрузку строго по расписанию — например, с 18:00 до 23:00 каждый день, без привязки к тому, когда Arduino включили.

Как это работает

DS1307 — часы реального времени на I2C с собственным генератором: счётчик времени продолжает идти даже при выключенном Arduino. Для этого нужна батарейка CR2032 в держателе на плате — модуль продаётся без неё, без батарейки время сбрасывается на 2000 год при каждом отключении питания.

Время один раз записывается в модуль, после чего DS1307 сам продолжает отсчёт. В `loop()` Arduino просто спрашивает текущий час и сравнивает с границами интервала — внутри интервала реле включено, иначе выключено.

Пошаговая сборка

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

  1. Установите батарейку CR2032 в держатель на плате DS1307 (батарейка не входит в комплект).
  2. DS1307: SDA → A4, SCL → A5, VCC → 5V, GND → GND.
  3. Реле: сигнальный вход → D2, VCC → 5V, GND → GND.
  4. Силовую нагрузку подключайте к COM и NO реле строго по инструкции модуля — эта часть может работать с сетевым напряжением и должна быть собрана аккуратно и изолированно.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 rtc;
const int RELAY_PIN = 2;
const int ON_HOUR = 18;
const int OFF_HOUR = 23;

void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);

  if (!rtc.begin()) {
    Serial.println("DS1307 не найден!");
    while (1) delay(1000);
  }
  if (!rtc.isrunning()) {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now();
  int h = now.hour();
  bool shouldBeOn = (h >= ON_HOUR && h < OFF_HOUR);
  digitalWrite(RELAY_PIN, shouldBeOn ? HIGH : LOW);
  delay(30000);
}
                

Библиотека RTClib (Adafruit) ставится через Менеджер библиотек. После первой прошивки строку `rtc.adjust(...)` рекомендуется закомментировать, чтобы перезагрузки Arduino не сбивали время на момент компиляции.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🌡️ термостат на LM75 с управление…🔌 расширение количества входов ч… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 177 ₽ 159 ₽ (экономия 18 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA