Интернет-магазин «Неглупый Дом»
GUVA-S12SD проверяет, действительно ли горит УФ-лампа, пока реле включает и выключает её по внутреннему таймеру Arduino.
Логика строится на двух задачах: таймер светового дня (реле включает/выключает лампу по интервалам 12/12 часов) и контроль исправности (датчик проверяет, что лампа действительно излучает УФ). Разделение важно — визуально лампа может выглядеть "горящей" даже после выхода из строя УФ-части.
Таймер основан на `millis()`, а не на `delay()` для всего цикла — чтобы Arduino могла одновременно проверять датчик. `elapsed = millis() - cycleStart` корректен даже при переполнении счётчика (раз в ~49.7 дня) благодаря беззнаковой арифметике.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.
// При работе с сетевым напряжением 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 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.