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

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

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

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

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

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

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

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

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

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

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

  1. GUVA-S12SD: AO → A0, VCC → 3.3-5V, GND → GND; направьте датчик на лампу.
  2. Модуль реле KY-019: сигнал → D7, лампу подключите в разрыв цепи 220V с соблюдением техники безопасности.
  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;
const unsigned long offDuration = 43200000UL;
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: Электронные модули.

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

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

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

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

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

Корзина

Поиск


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