
Интернет-магазин «Неглупый Дом»
Большинство световых проектов на сайте включают что-то, когда становится ТЕМНО. Этот — наоборот: пороговый датчик света подаёт сигнал на зуммер, когда в комнате становится СВЕТЛО после ночи — простой будильник, который реагирует на естественный рассвет, а не на заданное время.
Пороговый модуль датчика света содержит фоторезистор и компаратор на одной плате: компаратор сравнивает уровень освещённости с порогом, который настраивается подстроечным резистором, и переключает цифровой выход при пересечении этого порога. В отличие от аналоговых проектов с фоторезистором или цифровых с BH1750/VEML7700 (которые дают число — конкретный уровень освещённости в условных единицах или люксах), здесь получается только простой факт "светлее порога" или "темнее порога", без промежуточных значений.
Логика будильника основана именно на переходе через порог, а не на самом факте "сейчас светло": если реагировать просто на состояние "светло", зуммер будет пищать не переставая всё утро, пока светло. Поэтому код запоминает предыдущее состояние и подаёт сигнал только один раз в момент, когда темнота только что сменилась светом — это и есть момент рассвета (или включения света в комнате кем-то другим, тут датчик не различает источник).
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Полярность сигнала
// (светло = HIGH или LOW) проверьте на своём экземпляре платы.
const int SENSOR_PIN = 2;
const int BUZZER_PIN = 8;
bool wasDark = true; // считаем, что начинаем ночью
void setup() {
Serial.begin(9600);
pinMode(SENSOR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
bool isDark = (digitalRead(SENSOR_PIN) == LOW); // проверьте полярность на своей плате
if (wasDark && !isDark) { // именно момент перехода темнота -> свет
Serial.println("Рассвет! Будим.");
for (int i = 0; i < 5; i++) {
tone(BUZZER_PIN, 1800, 200);
delay(400);
}
}
wasDark = isDark;
delay(1000);
}
Дополнительных библиотек не требуется — только встроенная `tone()`. Перед использованием проверьте в мониторе порта, какое значение (HIGH или LOW) соответствует "светло" именно на вашем экземпляре платы, и поправьте сравнение `== LOW` при необходимости.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 132 ₽ 119 ₽ (экономия 13 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.