Датчик освещённости для Arduino: фоторезистор, фотодиод или BH1750
Измерить освещённость можно грубо и точно, и разница в цене между этими вариантами — раз в пять. Для ночника, автополива или уличного фонаря хватает грубого замера; для теплицы или фотометрии нужны настоящие единицы измерения.
Начнём с самого простого варианта, который лежит в каждом стартовом наборе.
Разборы конкретных моделей
Чем измерять свет
Резистор, сопротивление которого падает на свету. В темноте сотни килоом, на ярком свету сотни ом. Стоит копейки, но требует второго резистора в паре — делителя напряжения, иначе плата не увидит ничего осмысленного. Отдаёт условные единицы, а не люксы, и заметно врёт при смене температуры.
Тот же фоторезистор, но на плате, где уже стоят делитель и подстроечник порога. Есть два выхода: аналоговый с плавным значением и цифровой, который переключается при пересечении порога. Удобно, когда достаточно ответа «темно или светло».
Меряет освещённость в настоящих люксах, диапазон от одного до шестидесяти пяти тысяч, подключение по I2C. Спектральная чувствительность близка к человеческому глазу, поэтому показания сопоставимы с бытовым люксметром. Берут для теплиц, метеостанций и автоматической яркости экрана.
Реагируют в тысячи раз быстрее фоторезистора, поэтому годятся там, где свет мигает: счётчики оборотов, датчики препятствий, приём инфракрасных команд. Для медленного измерения освещённости избыточны.
Почему фоторезистор не работает сам по себе
Плата не умеет измерять сопротивление — она умеет измерять напряжение. Поэтому фоторезистор всегда включают в пару с обычным резистором: получается делитель, средняя точка которого и даёт напряжение, зависящее от света.
Типовой номинал второго резистора — десять килоом. Если поменять фоторезистор и резистор местами, направление изменится на противоположное: свет станет давать меньшие числа. Оба варианта рабочие, важно лишь знать, какой у вас, и не удивляться, что ночник включается днём.