Подключение фоторезистора к arduino uno. Оптические датчики

09.03.2024

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

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

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

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

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

Какие фоторезисторы можно купить в интернет-магазинах

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

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

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

Российскому радиолюбителю можно посоветовать обратить на российский датчик ФР. Встречающиеся в продаже ФР1-3, ФР1-4 и т.п. - выпускались ещё в союзовские времена. Но, несмотря на это, ФР1-3 - более точная деталь. Из этого следует и разница в цене За ФР просят не более 400 рублей. ФР1-3 будет стоить больше тысячи рублей за штуку.

Современная маркировка моделей, выпускаемых в России, довольно простая. Первые две буквы - ФотоРезистор, цифры после чёрточки обозначают номер разработки. ФР -765 - фоторезистор, разработка 765. Обычно маркируется прямо на корпусе детали

У датчика VT в схеме маркировке указаны диапазон сопротивлений. Например:

  • VT83N1 - 12-100кОм (12K - освещенный, 100K - в темноте)
  • VT93N2 - 48-500кОм (48K - освещенный, 100K - в темноте).

Иногда для уточнения информации о моделях продавец предоставляет специальный документ от производителя. Кроме параметров работы там же указывается точность детали. У всех моделей диапазон чувствительности расположен в видимой части спектра. Собирая датчик света нужно понимать, что точность срабатывания - понятие условное. Даже у моделей одного производителя, одной партии, одной закупки отличаться она может на 50% и более.

На заводе детали настраиваются на длину волны от красного до зелёного света. Большинство при этом «видит» и инфракрасное излучение. Особо точные детали могут улавливать даже ультрафиолет.

Достоинства и недостатки датчика

Основным недостатком фоторезисторов является чувствительность к спектру. В зависимости от типа падающего света сопротивление может меняется на несколько порядков. К минусам также относится низкая скорость реакции на изменение освещённости. Если свет мигает - датчик не успевает отреагировать. Если же частота изменения довольно велика - резистор вообще перестанет «видеть», что освещённость меняется.

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

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

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

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

Сам монтаж платы не должен вызывать трудностей. Так как фоторезистор не имеет полярности, подключить можно любой стороной, к плате его можно припаять, подсоединить проводами с помощью монтажной платы или использовать обычные клипсы (крокодилы) для соединения. Источником питания в схеме является сам ардуино. Фоторезистор подсоединяется одной ногой к земле, другая подключается к АЦП платы (в нашем примере - АО). К этой же ноге подключаем резистор 10 кОм. Естественно, подключать фоторезистор можно не только на аналоговый пин A0, но и на любой другой.

Несколько слов относительно дополнительного резистора на 10 К. У него в нашей схеме две функции: ограничивать ток в цепи и формировать нужное напряжение в схеме с делителем. Ограничение тока нужно в ситуации, когда полностью освещенный фоторезистор резко уменьшает свое сопротивление. А формирование напряжения - для предсказуемых значений на аналоговом порту. На самом деле для нормальной работы с нашими фоторезисторами хватит и сопротивления 1К.

Меняя значение резистора мы можем «сдвигать» уровень чувствительности в «темную» и «светлую» сторону. Так, 10 К даст быстрое переключение наступления света. В случае 1К датчик света будет более точно определять высокий уровень освещенности.

Если вы используете готовый модуль датчика света, то подключение будет еще более простым. Соединяем выход модуля VCC с разъемом 5В на плате, GND – c землей. Оставшиеся выводы соединяем с разъемами ардуино.

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

Мы подключили схему с фоторезистором к ардуино, убедились, что все сделали правильно. Теперь осталось запрограммировать контроллер.

Написать скетч для датчика освещенности довольно просто. Нам нужно только снять текущее значение напряжения с того аналогового пина, к которому подключен датчик. Делается это с помощью известной нам всем функции analogRead(). Затем мы можем выполнять какие-то действия, в зависимости от уровня освещенности.

Давайте напишем скетч для датчика освещенности, включающего или выключающего светодиод, подключенный по следующей схеме.

Алгоритм работы следующий:

  • Определяем уровень сигнала с аналогового пина.
  • Сравниваем уровень с пороговым значением. Максимально значение будет соответствовать темноте, минимальное – максимальной освещенности. Пороговое значение выберем равное 300.
  • Если уровень меньше порогового – темно, нужно включать светодиод.
  • Иначе – выключаем светодиод.

#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() { Serial.begin(9600); pinMode(PIN_LED, OUTPUT); } void loop() { int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); if (val < 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

#define PIN_LED 13

#define PIN_PHOTO_SENSOR A0

void setup () {

Serial . begin (9600 ) ;

void loop () {

Serial . println (val ) ;

if (val < 300 ) {

digitalWrite (PIN_LED , LOW ) ;

} else {

digitalWrite (PIN_LED , HIGH ) ;

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

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

Датчик освещенности и плавное изменение яркости подсветки

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

  • Яркость лампочки будем менять через ШИМ, посылая с помощью analogWrite() на пин со светодиодом значения от 0 до 255.
  • Для преобразования цифрового значения уровня освещения от датчика освещенности (от 0 до 1023) в диапазон ШИМ яркости светодиода (от 0 до 255) будем использовать функцию map().

Пример скетча:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() { Serial.begin(9600); pinMode(PIN_LED, OUTPUT); } void loop() { int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); int ledPower = map(val, 0, 1023, 0, 255); // Преобразуем полученное значение в уровень PWM-сигнала. Чем меньше значение освещенности, тем меньше мощности мы должны подавать на светодиод через ШИМ. analogWrite(PIN_LED, ledPower); // Меняем яркость }

#define PIN_LED 10

#define PIN_PHOTO_SENSOR A0

void setup () {

Serial . begin (9600 ) ;

pinMode (PIN_LED , OUTPUT ) ;

void loop () {

int val = analogRead (PIN_PHOTO_SENSOR ) ;

Serial . println (val ) ;

int ledPower = map (val , 0 , 1023 , 0 , 255 ) ; // Преобразуем полученное значение в уровень PWM-сигнала. Чем меньше значение освещенности, тем меньше мощности мы должны подавать на светодиод через ШИМ.

analogWrite (PIN_LED , ledPower ) ; // Меняем яркость

В случае другого способа подключения, при котором сигнал с аналогового порта пропорционален степени освещенности, надо будет дополнительно «обратить» значение, вычитая его из максимального:

int val = 1023 – analogRead(PIN_PHOTO_RESISTOR);

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

Фоторезисторы чаще всего используются для определения наличия или отсутствия света или для измерения интенсивности света. В темноте, их сопротивление очень высокое, иногда доходит до 1 МОм, но когда датчик LDR подвергается воздействию света, его сопротивление резко падает, вплоть до нескольких десятков ом в зависимости от интенсивности света.

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

Определение: Фоторезистор — светочувствительный элемент, чье сопротивление уменьшается при интенсивном освещении и увеличивается при его отсутствии.

Характеристики фоторезистора

Виды фоторезисторов и принцип работы

На основании материалов, используемых при производстве, фоторезисторы могут быть разделены на две группы: с внутренним и внешним фотоэффектом. В производстве фоторезисторов с внутренним фотоэффектом используют нелегированные материалы, такие как кремний или германий.

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

Фоторезисторы с внешним фотоэффектом производятся из материалов, с добавлением примеси, называемой легирующая добавка. Легирующая добавка создает новую энергетическую зону поверх существующей валентной зоной, заселенную электронами. Этим электронам требуется меньше энергии, чтобы совершить переход в зону проводимости благодаря меньшей энергетической щели. Результат этого – фоторезистор чувствителен к различным длинам волн света.

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

Фоторезистор на схемах обозначается следующим образом:

Чувствительность фоторезистора от длины волны

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

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

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

Чувствительность фоторезистора

Фотрезисторы имеют более низкую чувствительность, чем фотодиоды и фототранзисторы. Фотодиоды и фототранзисторы — полупроводниковые устройства, в которых используется свет для управления потоком электронов и дырок через PN-переход, а фоторезисторы лишеные этого PN-перехода.

Если интенсивность светового потока находиться на стабильном уровне, то сопротивление по-прежнему может существенно изменяться вследствие изменения температуры, поскольку LDR также чувствительны и к изменениям температуры. Это качество фоторезистора делает его непригодным для точного измерения интенсивности света.

Инертность фоторезистора

Еще одно интересное свойство фоторезистора заключается в том, что существует инертность (время задержки) между изменениями в освещении и изменением сопротивления.

Для того чтобы сопротивление упало до минимума при полном освещении необходимо около 10 мс времени, и около 1 секунды для того, чтобы сопротивление фоторезистора возросло до максимума после его затемнения.

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

Конструкция и свойства фоторезистора

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

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

Спектральная кривая отклика сульфида кадмия совпадает с человеческим глазом. Длина волны пиковой чувствительности составляет около 560-600 нм, что соответствует видимой части спектра. Следует отметить, что устройства, содержащие свинец или кадмий не соответствуют RoHS и запрещены для использования в странах, которые придерживаются законов RoHS.

Примеры применения фоторезисторов

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

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

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

При освещении фоторезистора (R1), его сопротивление уменьшается, падение напряжения на переменном резисторе R2 будет высоким, вследствие чего транзистор VT1 открывается. Коллектор VT1 (BC107) соединен с базой транзистора VT2 (SL100). Транзистор VT2 закрыт и реле обесточено. Когда наступает ночь, сопротивление LDR увеличивается, напряжение на переменном резисторе R2, падает, транзистор VT1 закрывается. В свою очередь, транзистор VT2 открывается и подает напряжение на реле, которое включает лампу.

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

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

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

  • Макетная плата;
  • Резистор на 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 //Максимальное значение освещенности

  1. Фототорезистор: http://ali.ski/5GDvP7
  2. Диоды и резисторы: http://fas.st/KK7DwjyF
  3. Макетная плата: http://ali.ski/rq8wz8
  4. Arduino uno: http://ali.ski/gC_mOa

В этом уроке мы подключим к Arduino фоторезистор. который будет управлять встроенным светодиодом.

Фоторезистор: Сопротивление фоторезисторов уменьшается под воздействием света и увеличивается в темноте. Фоторезисторы просты в использовании, но достаточно медленно реагируют на изменение уровня освещенности и имеют весьма низку. точность. Как правило, сопротивление фоторезисторов может варьироваться от 50 Ом при дневном освещении до более чем 10 МОм в темноте.

Сам фоторезистор мы будем подключать к земле через резистор в 10 кОМ и эту же ножку будем подключать к аналоговому пину Ардуино A0, вторую ножку фоторезистора будем подключать к 5 вольтам ардуино. Все это наглядно в приведено в схеме вначале статьи.

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

Int PhotosensorPin = A0; //Указываем пин к которому подклюен Фоторезистор unsigned int sensorValue = 0; //Объявляем переменную для хранения значений. void setup() { pinMode(13, OUTPUT); Serial.begin(9600); } void loop() { sensorValue = analogRead(PhotosensorPin); //Считываем значения с фоторезистора if(sensorValue<700) digitalWrite(13, HIGH); //Включаем else digitalWrite(13, LOW); // Выключаем Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024) Serial.println(""); delay(500); }

После загрузки программного кода в ардуино, необходимо открыть монитор порта.

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

Демонстрацию работы фоторезистора можно посмотреть в видео ниже.

Видео: