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

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


🦎 Проект: таймер УФ-лампы для террариума на GUVA-S12SD

Датчик GUVA-S12SD и реле УФ-лампы

Рептилиям нужен строгий световой день с УФ-лампой. GUVA-S12SD проверяет, действительно ли лампа физически горит (а не перегорела незаметно), пока реле включает и выключает её по внутреннему таймеру Arduino.

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

Логика проекта строится на двух независимых задачах: таймер светового дня (реле включает/выключает лампу по заданным интервалам 12/12 часов) и контроль исправности (датчик УФ проверяет, что лампа, которая, по мнению реле, должна гореть, действительно излучает ультрафиолет). Это разделение важно, потому что обычная лампа накаливания или светящийся нагревательный элемент могут визуально выглядеть "горящими" даже после выхода из строя УФ-излучающей части — глазом это не всегда заметно.

Таймер основан на `millis()`, а не на `delay()` для всего цикла — это специально сделано так, чтобы Arduino могла одновременно проверять датчик и реагировать на события, а не "спать" половину суток в одном `delay()`. Вычисление `elapsed = millis() - cycleStart` корректно работает даже при переполнении счётчика `millis()` (это происходит раз в ~49.7 дня) благодаря особенностям беззнаковой арифметики — разность всё равно получается правильной.

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

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

  1. GUVA-S12SD: AO → A0, VCC → 3.3-5V, GND → GND; датчик направьте на лампу, а не в сторону от неё.
  2. Модуль реле KY-019: сигнал → D7, через реле подключите УФ-лампу (саму лампу — в разрыв цепи питания 220V с соблюдением техники безопасности, а не напрямую к Arduino).
  3. Активный зуммер: сигнал → D8, GND → GND.
  4. Откалибруйте порог `uvValue < 50` по реальным показаниям вашей лампы через Serial-монитор, пока она горит штатно.

Скетч

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

const int uvSensorPin = A0;
const int relayPin = 7;
const int buzzerPin = 8;
const unsigned long onDuration = 43200000UL;  // 12 часов светового дня
const unsigned long offDuration = 43200000UL; // 12 часов темноты
unsigned long cycleStart = 0;
bool lampOn = true;

void setup() {
  Serial.begin(9600);
  pinMode(relayPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(relayPin, HIGH);
}

void loop() {
  unsigned long elapsed = millis() - cycleStart;
  unsigned long duration = lampOn ? onDuration : offDuration;

  if (elapsed > duration) {
    lampOn = !lampOn;
    digitalWrite(relayPin, lampOn ? HIGH : LOW);
    cycleStart = millis();
  }

  if (lampOn) {
    int uvValue = analogRead(uvSensorPin);
    Serial.print("УФ-показание: ");
    Serial.println(uvValue);
    digitalWrite(buzzerPin, (uvValue < 50) ? HIGH : LOW); // лампа должна гореть, но УФ не фиксируется
  } else {
    digitalWrite(buzzerPin, LOW);
  }
  delay(60000);
}

Пока реле держит лампу включённой, датчик должен фиксировать УФ-излучение — если этого не происходит, значит лампа перегорела, и зуммер предупредит владельца раньше, чем это заметит рептилия.

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

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

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

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

← 🌡️ сравнение температуры внутри и снаружи на …📊 индикатор уровня воды в баке на LCD1602 →

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

Все 2 товара сразу в корзину: 301 ₽ 271 ₽ (экономия 30 ₽)

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

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

Корзина


Поиск



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