Фоторезистор уличного освещения на ардуино. Ардуино подключение фоторезистора. Датчик освещенности для arduino. Характеристики BH1750FVI цифровой модуль освещенности для Arduino

Автоматизация подачи освещения в квартире, в доме или на улице достигается за счет применения фотореле. При правильной настройке оно будет включать свет при наступлении темноты и отключать в светлое время суток. Современные устройства содержат настройку, за счет которой можно устанавливать срабатывание в зависимости от освещенности. Они являются составной частью системы "умного дома", берущей на себя значительную часть обязанностей хозяев. Схема фотореле, прежде всего, содержит резистор, изменяющий сопротивление под действием света. Ее легко собрать и настроить своими руками.

Принцип действия

Схема подключения фотореле для включает датчик, усилитель и Фотопроводник PR1 под действием света изменяет сопротивление. При этом изменяется величина проходящего через него электрического тока. Сигнал усиливается составным транзистором VT1, VT2 (схема Дарлингтона), а с него поступает на исполнительный механизм, которым является K1.

В темноте сопротивление фотодатчика составляет несколько мОм. Под действием света оно снижается до нескольких кОм. При этом открываются транзисторы VT1, VT2, включающие реле K1, управляющим цепью нагрузки через контакт K1.1. Диод VD1 не пропускает ток самоиндукции при выключении реле.

Несмотря на простоту, схема фотореле обладает высокой чувствительностью. Чтобы ее выставить на необходимый уровень, используется резистор R1.

Напряжение питания подбирается по параметрам реле и составляет 5-15 В. Ток обмотки не превышает 50 мА. Если необходимо его увеличить, можно применить более мощные транзисторы и реле. Чувствительность фотореле повышается с увеличением напряжения питания.

Вместо фоторезистора можно установить фотодиод. Если необходим датчик с повышенной чувствительностью, используются схемы с фототранзисторами. Их применение целесообразно с целью экономии электричества, поскольку минимальный предел срабатывания обычного прибора составляет 5 лк, когда окружающие предметы еще различимы. Порог 2 лк соответствует глубоким сумеркам, после которых через 10 мин наступает темнота.

Фотореле целесообразно применять даже при ручном управлении освещением, поскольку можно забыть выключить свет, а датчик самостоятельно "позаботится" об этом. Установить его несложно, а цена вполне доступна.

Характеристики фотоэлементов

Выбор фотореле определяют следующие факторы:

  • чувствительность фотоэлемента;
  • напряжение питания;
  • коммутируемая мощность;
  • внешняя среда.

Чувствительность характеризуется как отношение образующегося фототока к величине внешнего потока света и измеряется в мкА/лм. Она зависит от частоты (спектральная) и интенсивности света (интегральная). Для управления освещением в быту важна последняя характеристика, зависящая от суммарного светового потока.

Величину номинального напряжения можно найти на корпусе прибора или в сопроводительном документе. Устройства зарубежного производства могут иметь другие стандарты напряжения питания.

От мощности светильников, к которым подключено фотореле, зависит нагрузка на его контакты. Схемы фотореле освещения могут предусматривать прямое включение ламп через контакты датчика или через пускатели, когда нагрузка велика.

На открытом воздухе сумеречный выключатель помещается под герметичной прозрачной крышкой. Она является защитой от влаги и осадков. При работе в холодный период применяется подогрев.

Модели заводского изготовления

Раньше схема фотореле собиралась своими руками. Сейчас в этом нет необходимости, так как устройства стали дешевле, а функциональность расширилась. Их применяют не только для внешнего или внутреннего освещения, но также для управлением поливом растений, системой вентиляции и др.

1. Фотореле ФР-2

Модели заводского изготовления широко используются в устройствах автоматики, например, для управления уличным освещением. Часто можно видеть днем горящие фонари, которые забыли выключить. При наличии фотодатчиков нет необходимости в ручном управлении освещением.

Схема фотореле фр-2 промышленного изготовления применяется для автоматического управления уличным освещением. Здесь также является реле К1. К базе транзистора VT1 подключены фоторезистор ФСК-Г1 с резисторами R4 и R5.

Питание производится от однофазной сети 220 В. Когда освещенность мала, сопротивление ФСК-Г1 имеет большую величину и сигнала на базе VT1 недостаточно для его открывания. Соответственно закрыт и транзистор VT2. Реле K1 включено, и его рабочие контакты замкнуты, поддерживая лампы освещения горящими.

Когда освещенность увеличивается до порога срабатывания, снижается сопротивление фоторезистора и открывается после чего реле K1 отключается, размыкая цепь питания ламп.

2. Виды фотореле

Выбор моделей достаточно велик, чтобы можно было выбрать подходящую:

  • с выносным датчиком, расположенным вне корпуса изделия, к которому подводятся 2 провода;
  • люкс 2 - устройство с высокой надежностью и уровнем качества;
  • фотореле с питанием 12 В и нагрузкой не выше ;
  • модуль с таймером, монтирующийся на ДИН-рейку;
  • устройства ИЭК отечественного производителя с высоким качеством и функциональностью;
  • AZ 112 - автомат с высокой чувствительностью;
  • ABB, LPX - надежные производители устройств европейского качества.

Способы подключения фотореле

Перед приобретением датчика необходимо подсчитать потребляемую светильниками мощность и взять с запасом 20 %. При значительной нагрузке схема уличного фотореле предусматривает дополнительную установку электромагнитного пускателя, обмотка которого должна включаться через контакты фотореле, а силовыми контактами коммутировать нагрузку.

Для дома такой способ применяется редко.

Перед установкой проверяется напряжение сети питания ~220 В. Подключение производится от автоматического выключателя. Фотодатчик устанавливается таким образом, чтобы свет от фонаря не попадал на него.

На приборе применяются клеммы для подключения проводов, что делает монтаж проще. Если они отсутствуют, применяется распределительная коробка.

За счет применения микропроцессоров схема подключения фотореле с другими элементами приобрела новые функции. В алгоритм действий внесли таймер и датчик движения.

Удобно, когда светильники автоматически включаются при прохождении человека по лестничной площадке или по дорожке сада. Причем срабатывание происходит только в темное время суток. За счет применения таймера фотореле не реагирует на свет фар от проезжающих автомобилей.

Простейшая схема подключения таймера с датчиком движения - последовательная. Для дорогих моделей разработаны специальные программируемые схемы, учитывающие различные условия эксплуатации.

Фотореле для уличного освещения

Для подключения фотореле схема наносится на его корпус. Ее можно найти в документации на прибор.

Из прибора выходят три провода.

  1. Нулевой проводник - общий для светильников и фотореле (красный).
  2. Фаза - подключается на вход прибора (коричневый).
  3. Потенциальный проводник для подачи напряжения от фотореле на светильники (синий).

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

В моделях со встроенным датчиком, который находится внутри прозрачного корпуса, работа уличного освещения автономна. К нему нужно только подвести питание.

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

Особенности фотореле для уличного освещения: схема

При установке фотореле на улице надо учитывать некоторые факторы.

  1. Наличие питающего напряжения и соответствие мощностей контактов и нагрузки.
  2. Не допускается установка приборов рядом с легко воспламеняющимися материалами и в агрессивной среде.
  3. Основание прибора размещается внизу.
  4. Перед датчиком не должны находиться качающиеся предметы, например, ветви деревьев.

Подсоединение проводов выполняется через распределительную коробку для улицы. Она закрепляется рядом с фотореле.

Выбор фотореле

  1. Возможность регулирования порога срабатывания позволяет производить подстройку чувствительности датчика в зависимости от времени года или при пасмурной погоде. В результате обеспечивается экономия электричества.
  2. Минимум трудозатрат требуется при монтаже фотореле со встроенным чувствительным элементом. При этом не требуются особые навыки.
  3. Реле с таймером хорошо программируется для своих потребностей и работы в установленном режиме. Можно настроить прибор для отключения в ночное время. Индикация на корпусе прибора и кнопочное управление позволяют легко производить настройку.

Заключение

Применение фотореле позволяет автоматически контролировать период включения ламп. Теперь уже отпала необходимость в профессии фонарщика. Схема фотореле без участия человека по вечерам зажигает свет на улицах и выключает его утром. Устройства могут управлять системой освещения, что повышает ее ресурс и делает эксплуатацию проще.

Рассмотренный в предыдущей части обзора встроенный АЦП микроконтроллера позволяет легко подключать к плате Arduino различные аналоговые датчики, которые преобразуют измеряемые физические параметры в электрическое напряжение.

Примером простейшего аналогового датчика может служить переменный резистор, подключённый к плате, как показано на рис. 1. Он может быть любого типа, например СП3-33-32 (рис. 2). Номинал резистора на схеме указан ориентировочно и может быть как меньше, так и больше. Однако следует помнить, что чем меньше сопротивление переменного резистора, тем больший ток он потребляет от источника питания микроконтроллера. А при сопротивлении источника сигнала (в данном случае переменного резистора) более 10 кОм АЦП микроконтроллера работает с большими ошибками. Учтите, что сопротивление переменного резистора как источника сигнала зависит от положения его движка. Оно равно нулю в его крайних положениях и максимально (равно четверти номинального сопротивления) в среднем положении.

Рис. 1. Схема подключения переменного резистора к плате

Рис. 2. СП3-33-32

Удобно использовать переменный резистор, когда требуется изменять параметр плавно, а не ступенями (дискретно). В качестве примера рассмотрим работу приведённой в табл. 1 программы, которая изменяет яркость свечения светодиода в зависимости от положения движка переменного резистора. Строка U = U/4 необходима в программе для того, чтобы преобразовать возвращаемое АЦП десятиразрядное двоичное число в восьмиразрядное, принимаемое в качестве второго операнда функцией analogWrite(). В рассматриваемом случае это делается делением исходного числа на четыре, что эквивалентно отбрасыванию двух младших двоичных разрядов.

Таблица 1.

Переменный резистор соответствующей конструкции может служить датчиком угла поворота или линейного перемещения. Аналогично ему можно подключать многие радиоэлементы: фоторезисторы, терморезисторы, фотодиоды, фототранзисторы. Одним словом, приборы, электрическое сопротивление которых зависит от тех или иных факторов окружающей среды.

На рис. 3 изображена схема подключения к Arduino фоторезистора. При изменении освещённости меняется его электрическое сопротивление и соответственно напряжение на аналоговом входе платы Arduino. Указанный на схеме фоторезистор ФСК-1 можно заменить любым другим, например СФ2-1.

Рис. 3. Схема подключения к Arduino фоторезистора

В табл. 2 приведена программа, превращающая плату Arduino с подключённым к ней фоторезистором в простейший измеритель освещённости. Работая, она периодически измеряет падение напряжения на резисторе, включённом последовательно с фоторезистором, и передаёт результат в условных единицах через последовательный порт на компьютер. На экране отладочного терминала Arduino они будут отображены, как показано на рис. 4. Как видим, в определённый момент измеренное напряжение резко уменьшилось. Это произошло, когда ярко освещённый фотодиод был затенён непрозрачным экраном.

Таблица 2.

Рис. 4. Изображение на экране отладочного терминала Arduino

Чтобы получать значения освещённости в люксах (стандартных единицах системы СИ), нужно умножать полученные результаты на поправочный коэффициент, но подобрать его придётся экспериментально, причём индивидуально для каждого фоторезистора. Для этого потребуется образцовый люксметр.

Фототранзистор или фотодиод (рис. 5) подключают к Arduino подобным образом. Используя несколько светочувствительных приборов, можно сконструировать простейшую систему зрения для робота . Можно и на новом техническом уровне реализовать многие известные широкому кругу радиолюбителей классические конструкции - кибернетическую модель ночной бабочки или модель танка, который движется на свет .

Рис. 5. Схема подключения фотодиода к Arduino

Аналогично фоторезистору подключают к Arduino терморезистор (рис. 6), который меняет своё электрическое сопротивление в зависимости от температуры. Вместо указанного на схеме терморезистора ММТ-4, основное достоинство которого - герметичный корпус, можно использовать практически любой другой, например, ММТ-1 или импортный.

Рис. 6. Схема подключения терморезистора к Arduino

После соответствующей калибровки подобный прибор можно применять для измерения температуры во всевозможных домашних метеостанциях, термостатах и тому подобных конструкциях .

Известно, что почти все светодиоды могут служить не только источниками света, но и его приёмниками - фотодиодами. Дело в том, что кристалл светодиода находится в прозрачном корпусе и поэтому его p-n переход доступен для света от внешних источников. К тому же корпус светодиода, как правило, имеет форму линзы, которая фокусирует внешнее излучение на этом переходе. Под его влиянием изменяется, например, обратное сопротивление p-n перехода.

Подключив светодиод к плате Arduino по схеме, изображённой на рис. 7, можно использовать один и тот же светодиод и по прямому назначению, и как фотодатчик . Программа, иллюстрирующая такой режим, приведена в табл. 3. Её идея состоит в том, что сначала на p-n переход светодиода подают обратное напряжение, заряжая его ёмкость. Затем катод светодиода изолируют, конфигурируя как вход вывод Arduino, к которому он подключён. После этого программа измеряет зависящую от внешней освещённости продолжительность разрядки ёмкости p-n перехода светодиода его собственным обратным током до уровня логического нуля.

Рис. 7. Схема подключения светодиода к плате Arduino

Таблица 3

В приведённой программе переменная t описана как unsigned int - целое число без знака. Переменная такого типа, в отличие от обычной int, принимающей значения от -32768 до +32767, не использует свой старший двоичный разряд для хранения знака и может принимать значения от 0 до 65535.

Подсчёт времени разрядки программа выполняет в цикле while(digitalRead (K)!=0)t++. Этот цикл выполняется, всякий раз увеличивая значение t на единицу, пока истинно заключённое в скобки условие, т. е. пока напряжение на катоде светодиода не опустилось до низкого логического уровня.

Иногда требуется, чтобы робот не просто получал информацию об освещённости поверхности, по которой движется, но и мог определить её цвет. Реализуют датчик цвета подстилающей поверхности, освещая её поочерёдно светодиодами разного цвета свечения и сравнивая с помощью фотодиода уровни отражённых от неё при разном освещении сигналов . Схема соединения элементов датчика цвета с платой Arduino показана на рис. 8, а обслуживающая его программа - в табл. 4.

Рис. 8. Схема соединения элементов датчика цвета с платой Arduino

Таблица 4

Процедура измерения принимаемых фотодиодом при разном освещении поверхности сигналов повторяется многократно, а получаемые результаты накапливаются, чтобы исключить случайные ошибки. Затем программа выбирает наибольшее из накопленных значений. Это позволяет грубо судить о цвете поверхности. Для более точного определения цвета необходимо усложнить обработку результатов, учитывая не только наибольший из них, но и его соотношение с меньшими. Необходим также учёт реальной яркости светодиодов разного цвета свечения, а также спектральной характеристики применённого фотодиода.

Пример конструкции датчика цвета из четырёх светодиодов и фотодиода показан на рис. 9. Оптические оси светодиодов и фотодиода должны сходиться в одной точке на исследуемой поверхности, а сами приборы расположены максимально близко к ней, чтобы свести к минимуму влияние посторонней засветки.

Рис. 9. Пример конструкции датчика цвета из четырёх светодиодов и фотодиода

Собранный датчик требует тщательной индивидуальной калибровки на поверхностях разного цвета. Она сводится к подборке коэффициентов, на которые следует умножать перед сравнением результаты измерения, полученные при разном освещении. Оснащённый таким датчиком робот можно научить выполнять интересные алгоритмы движения. Например, он сможет передвигаться по рабочему полю одного цвета, не нарушая границ "запретных" зон, выкрашенных в другой цвет.

Пример подключения фоторезистора для управления светодиодом

Данный пример демонстрирует подключение фоторезистора для управления светодиодом, для создания аналога ночника. Сопротивление фоторезистора зависит от интенсивности падающего на него света,поэтому при уменьшении освещенности светодиод будет гореть ярко,а при ярком свете отключаться.

Необходимые компоненты

  • Макетная плата;
  • Резистор на 220 Ом ;
  • Резистор на 10 кОм ;
  • Фоторезистор с номинальным сопротивлением 200кОм ;
  • Один красный светодиод;
  • Провода-перемычки;

Схема

Соедините 9 -ый цифровой вывод Arduino с одним из выводов 220 Ом -ного резистора, другой вывод этого резистора соедините с анодом светодиода(длинная ножка), а катод светодиода с землей(контакт GND на плате Arduino). Контакт 5V платы Arduino соедините с одним из выводов фоторезистора, а другой вывод соедините с 0 -ым аналоговым контактом Arduino и с одним из выводов 10кОм -го резистора, другой вывод резистора соедините с землей(контакт GND на плате Arduino).

Резистивный делитель напряжения состоит из двух резисторов, от соотношения сопротивлений зависит выходное напряжение. В данном примере один из резисторов переменный(фоторезистор, на номинальное сопротивление в 200кОм , т.е при полной темноте сопротивление фоторезистора будет равно номинальному,а при ярком свете падать почти до нуля), поэтому мы можем получить изменение напряжения. Другой резистор определяет чувствительность. Если использовать подстроечный резистор, то можно сделать настраиваемую чувствительность.

От того где расположен фоторезистор и номинал постоянного резистора в схеме делителя напряжения зависит масштаб и точность показаний. Измените схему и посмотрите через монитор порта(для этого можете загрузить код из раздела "Код для корректировки параметров" , расположенный ниже) как меняются показания.

В мониторе порта в первом и во втором случае вы увидите, что не получите весь диапазон значений(от 0 до 1023), потому что сопротивление фоторезистора никогда не будет равно нулю. Но вы сможете определить минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности(значения зависят от условий освещенности, значения постоянного резистора и характеристик фоторезистора), для построения нашего "ночника".

Код

Загрузите скетч, показанный ниже, в плату Arduino .

    #define RLED 9 //Красный светодиод подключаем к 9-му цифровому контакту с поддержкой ШИМ

  1. int val = 0 ; //Переменная для хранения считываемого значения с датчика

  2. void setup()

    pinMode(RLED, OUTPUT) ; //Устанавливаем 9 вывод как выход

  3. void loop()

    val = analogRead(LIGHT) ; //считываем значение с аналогового входа

    val = map(val, MIN_LIGHT, MAX_LIGHT, 255 , 0 ) ; //преобразуем диапазон считываемых значений

    val = constrain(val, 0 , 255 ) ; //"определяем" области допустимых значений

    analogWrite(RLED, val) ; //управляем светодиодом

  • Примечание: В данном примере используется фоторезистор с номинальным сопротивлением в 200кОм . Если у вас фоторезистор на другой номинал, возможно вам придется изменить минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности.

Код для корректировки параметров

Если у вас фоторезистор на другой номинал возможно вам придется подкорректировать минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности. Для этого добавьте две строчки кода(выделены цветом). И определите минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности, перекрывая(и наоборот открывая) рукой доступ к свету для фоторезистора и наблюдая за изменениями значений с помощью монитора последовательного порта. После корректировки вы можете закомментировать добавленные строчки кода.

    #define RLED 9 //Красный светодиод подключаем к 9-му цифровым контактом с поддержкой ШИМ

    #define LIGHT 0 //Фоторезистор подключаем к 0-му аналоговому контакту

    #define MIN_LIGHT 200 //Минимальное значение освещенности

    #define MAX_LIGHT 900 //Максимальное значение освещенности

Сегодня сделаем скетч и прототип схемы на Arduino с пользованием фоторезистора. Вот фоторезистор, находится здесь, я собралась такой макет, он похож на новогоднюю светодиодную гирлянду из предыдущих статей.

У нас 8 светодиодов, они установлены так, что слева короткая ножка это минус, справа длинная ножка это плюс. Так они все установлены, в схеме использован один резистор на 10 килоом, я его брал из набора Arduino Kit , и используется 8 подключенных к плюсовому контакту светодиода сопротивлений на 220ом, так оно подключено.


Использовано 8 чёрных проводов это минусовые, и зелёные 8 штук – пины управления от двенадцатого до пятого. В процессе отладки крайний черный заменил на зеленый, но об этом позже.

Фоторезистор здесь, рядом с ним резистор на 10килоом, синяя перемычка идёт к минусу, оранжевый подключается одним концом в среднюю точку, между резистором и фоторезистором, другим концом в плату Arduino , в А0 (аналоговый пин).

Красный это 5 Вольт, и вот через этот делитель напряжения будет работать схема, будут загораться светодиоды, в зависимости от уровня освещенности. Я поправлю светодиоды, достаточно шаткая получилось конструкция. К модели ещё вернемся, а сейчас займемся написанием скетча.

Создадим новый проект, и приступим к написанию, объявим константы, несколько штук, пусть будет тип int , это будет количество выводов, поскольку светодиодов в схеме 8 штук. Так будет указано, сколько светодиодов использовали в схеме.

const int NbrLEDs = 8;

Сделаем массив с номерами пинов, задействуем 5 6 7 8 9 10 11 12 цифровые разъёмы, укажем номер пина на котором снимается уровень освещённости, объявим переменную для фоторезистора, значение сенсора и также объявим уровень освещённости, чтобы можно было делать разбивку их по пинам.

const int ledPins = { 5, 6, 7, 8, 9, 10, 11, 12}; const int photocellPin = A0; int sensorValue = 0; int ledLevel = 0;

В подпрограмме setup напишем цикл, в котором чтобы не присваивать каждому значению исходящего через pinMode , пройдём в цикле по всем пинам присвоим им значения в pinmode из массива и каждому пину присвоим значение OUTPUT .

void setup() { for (int led = 0; led < NbrLEDs; led++) { pinMode(ledPins, OUTPUT); } }

В принципе можно было этого не делать, можно было указать pinmode и дальше писать пять, потом 6, и так далее, но это очень долго и это дикий варварский метод. Поэтому в цикле за один проход пройдем все пины.

pinMode(5, OUTPUT); pinMode(6, OUTPUT);

В loop получим значение сенсора, считав через analogRead из пина A0 .

Далее, сделаем разбивку значение сенсор, используя функцию map получаем значение сенсора, и исходя из уровня освещенности, при чувствительности от 300 до максимального значения 1023 , будет распределяться по 8 пинам, которая объявлены выше.

Смотрите так же видео Фоторезистор и светодиоды на Arduino - (видео) , ссылка откроется в новой вкладке.

Далее в цикле пройдем все пины, так добавил скобки, начиная с первого светодиода, если счетчик не больше 8 будем прибавлять, и дальше проверим по условию, что если номер светодиода меньше уровня освещения, подадим на этот светодиод и все предыдущие напряжение через константу HIGH .

Если же нет, запишем в него отсутствие напряжения, и светодиод не будет гореть.

void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Выравниваем код через комбинацию клавиш ctrl+T и давайте теперь посмотрим, что получится, запустим на проверку, сохраним скетч.

Так компиляция скетча, теперь его загрузим на Arduino . Вернемся к схеме, на данный момент один светодиод при изменении освещение не горит из-за плохого контакта.


Сейчас исправлю, не будем его трогать, если я выключу освещение, то погаснут все светодиоды. Если же я буду подсвечивать фоторезистор фонариком, плавно добавляя освещения, то будут гореть практически все светодиоды, ну и соответственно убираю, уменьшая уровень освещённости, меняется число горящих светодиодов.


Если же я включу полностью освещение, горят почти все, в чём проблема с этим светодиодом. Достаточно много потратил на него времени, здесь всё правильно собрано, даже минус пробросил заведомо исправным зеленым проводом, но почему-то он капризничает и не горит.


Давайте теперь вернемся к скетчу и посмотрим что не так. Пример был взят с официального источника, на диске к Arduino есть такой же код.

В скетче получается распределение освещенности от 300 до 1023 (максимального значения), попытка изменить начальный порог на 0 - никакого результатов не даёт.

Но если распределяем на 8 частей вот это вот всё значение, то тут пригодится калькулятор, получается, либо сопротивление на 10килоом даёт погрешность какую-то, нужно 1023 разделить на 8, получаем практически 128, если брать правильно, то 1024 разделить на 8, это и есть 128.

Теперь нужно от 1023 вычесть 128, поставить сюда значение 895, тогда по логике вещей должно быть всё нормально. Загрузим и посмотрим, что изменится.

void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 0, 895, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Сейчас горят все светодиоды, попробуем перекрыть освещенность, или давайте отключим…

Стартовое значение всё равно надо вернуть 300, поскольку подается на эти три первых светодиода питания. Давайте изменим в скетче 0 на 300, как было, было это сделано не просто так, перезалью скетч и посмотрим, что изменится на этот раз…

void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 300, 895, 0, NbrLEDs); for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

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


При выключении фоторезистор ловит остаточное освещение в помещении, горит люстра, не полная тьма, и он срабатывает. Но если подсвечивать фонариком, подавая плавно свет на фоторезистор, схема работает правильно.


Если вырубить свет полностью, посмотрим, что получится в полной темноте. Как видите, при полном отсутствии света, фоторезистор реагирует правильно, светодиоды загораются постепенно, по мере увеличения освещенности. При включенном свете горят все. Такой вот получился скетч, с лайфхаком – подгонка чувствительности фоторезистора, под свои нужды.


Фоторезистор
ИМХО вымирающий вид. Последний раз я его видел еще в детстве. Обычно представляет собой такой металический кругляк со стеклянным окошком, в котором видна этакая . При освещении его сопротивление падает, правда незначительно, раза в три четыре.

Фототранзистор
Последнее время я на них натыкаюсь постоянно, неиссякаемый источник фототранзисторов — пятидюймовые дисководы. Последний раз я, по цене грязи, надыбал на радио барахолке штук 5 платок от дисковертов, там светотранзисторы стоят напротив дырок контроля записи и вращения дискеты. Еще сдвоенный фототранзистор (а может и фотодиод, как повезет) стоит в обычной шариковой мышке.
Выглядит как обычный светодиод, только корпус прозрачный. Впрочем, светодиоды тоже такие же бывают так что перепутать кто из них кто раз плюнуть. Но это не беда, партизан легко вычисляется обычным мультиметром. Достаточно включить омметр между его эмитером и коллектором (базы у него нет) и посветить на него, как его сопротивление рухнет просто катастрофически — с десятков килоом до считанных ом. Тот который у меня в детекторе вращения шестерен в роботе меняет свое сопротивление с 100кОм до 30 Ом. Работает фототранзистор подобно обычному — держит ток, но в качестве управляющего воздействия тут не ток базы, а световой поток.

Фотодиод
Внешне ничем не отличается от фототранзистора или обычного светодиода в прозрачном корпусе. Также порой встречаются древние фотодиоды в металлических корпусах. Обычно это совковые девайсы, марки ФД-чето там. Такой металлический цилиндрик с окошком в торце и торчащими из задницы проводками.

В отличии от фототранзистора, может работать в двух разных режимах. В фотогальваническом и фотодиодном.
В первом, фотогальваническом, варианте фотодиод ведет себя как солнечная батарейка, то есть посветил на него — на выводах возникло слабенькое напряжение. Его можно усилить и применить =). Но куда проще работать в фотодиодном режиме. Тут мы подаем на фотодиод обратное напряжение. Поскольку он хоть и фото, но диод, то в обратную сторону напряжение не пойдет, а значит его сопротивление будет близко к обрыву, а вот если его засветить, то диод начнет очень сильно подтравливать и сопротивление его будет резко падать. Причем резко, на пару порядков, как у фототранзистора.

Спектр
Кроме типа прибора у него еще есть рабочий спектр. Например, фотодетектор заточенный на инфракрасный спектр (а их большинство) практически не реагирует на свет зеленого или синего светодиода. Плохо реагирует на лампу дневного света, но хорошо реагирует на лампу накаливания и красный светодиод, а уж про инфракрасный и говорить нечего. Так что не удивляйся если у тебя фотодатчик плохо реагирует на свет, возможно ты со спектром ошибся.

Подключение
Теперь пора показать как это подключить к микроконтроллеру. С фоторезистором все понятно, тут заморочек нет никаких — берешь и подцепляешь как по схеме.
С фотодиодом и фототранзистором сложней. Надо определить где у него анод/катод или эмитер/коллектор. Делается это просто. Берешь мультиметр, ставишь его в режим прозвонки диодов и цепляешься на свой датчик. Мультиметр в этом режиме показывает падение напряжения на диоде/транзисторе, а падение напряжения тут в основном зависит от его сопротивления U=I*R. Берешь и засвечиваешь датчик, следя за показаниями. Если число резко уменьшилось, значит ты угадал и красный провод у тебя на катоде/коллекторе, а черный на аноде/эмитторе. Если не изменилось, поменяй выводы местами. Если не помогло, то либо детектор дохлый, либо ты пытаешься добиться реакции от светодиода (кстати, светодиоды тоже могут служить детекторами света, но там не все так просто. Впрочем, когда будет время я покажу вам это технологическое извращение).


Теперь о работе схемы, тут все элементарно. В затемненном состоянии фотодиод не пропускает ток в обратном направлении, фототранзистор тоже закрыт, а у фоторезистора сопротивление весьма высоко. Сопротивление входа близко к бесконечности, а значит на входе будет полное напряжение питания aka логическая единица. Стоит теперь засветить диод/транзистор/резистор как сопротивление резко падает, а вывод оказывается посажен наглухо на землю, ну или весьма близко к земле. Во всяком случае сопротивление будет куда ниже 10кОмного резистора, а значит напряжение резко пропадет и будет где то на уровне логического нуля. В AVR и PIC можно даже резистор не ставить, вполне хватит внутренней подтяжки. Так что DDRx=0 PORTx=1 и будет вам счастье. Ну а обратывать это как обычную кнопку. Единственная сложность может возникнуть с фоторезистором — у него не настолько резко падает сопротивление, поэтому до нуля может и не дотянуть. Но тут можно поиграть величиной подтягивающего резистора и сделать так, чтобы изменения сопротивления хватало на переход через логический уровень.

Если надо именно измерять освещенность, а не тупо ловить светло/темно, то тогда надо будет подцеплять все на АЦП и подтягивающий резистор делать переменным, для подстройки параметров.

Есть еще продвинутый тип фотодатчиков — TSOP там встроенный детектор частоты и усилитель, но о нем я напишу чуть попозже.

З.Ы.
У меня тут некоторые запарки, поэтому сайт будет сильно тупить с обновлением, думаю это до конца месяца. Дальше надеюсь вернуться в прежний ритм.