🛒
0 товаров
0 руб.

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


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

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

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

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

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

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

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

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

Скетч

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

#include <Wire.h>
#include <RTClib.h>   // библиотека Adafruit RTClib — поддерживает DS1307/DS3231

RTC_DS1307 rtc;
const int RELAY_PIN = 2;

const int ON_HOUR = 18;   // включаем в 18:00
const int OFF_HOUR = 23;  // выключаем в 23:00

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

  if (!rtc.begin()) {
    Serial.println("DS1307 не найден на шине I2C!");
    while (1) delay(1000);
  }

  if (!rtc.isrunning()) {
    Serial.println("Часы не были запущены — выставляю время компиляции скетча.");
    // ВНИМАНИЕ: это запишет в часы дату/время компиляции только один раз,
    // после первой успешной загрузки можно закомментировать эту строку.
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now();
  int h = now.hour();

  Serial.print("Сейчас: ");
  Serial.print(h);
  Serial.print(":");
  Serial.println(now.minute());

  bool shouldBeOn = (h >= ON_HOUR && h < OFF_HOUR);
  digitalWrite(RELAY_PIN, shouldBeOn ? HIGH : LOW);

  delay(30000); // проверяем время раз в 30 секунд — для реле этого достаточно
}

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

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

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

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

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

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

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

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

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

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

Корзина


Поиск



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