Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Фоторезистор и Arduino
Фоторезисторы дают вам возможность определять интенсивность освещения. Они маленькие, недорогие, требуют мало энергии, легки в использовании, практически не подвержены износу. Именно из-за этого они часто используются в игрушках, гаджетах и приспособлениях. Конечно же, DIY-проекты на базе Arduino не могли обойти своим вниманием эти замечательные датчики.
Фоторезисторы по своей сути являются резисторами, которые изменяют свое сопротивление (измеряется в Ом) в зависимости от того, какое количество света попадает на их чувствительные элементы. Как уже говорилось выше, они очень дешевые, имеют различные размеры и технические характеристики, но в большинстве своем не очень точные. Каждый фоторезистор ведет себя несколько иначе по сравнению с другим, даже если они из одной партии от производителя. Различия в показаниях могут достигать 50% и даже больше! Так что рассчитывать на прецизионные измерения не стоит. В основном их используют для определения общего уровня освещенности в конкретных, "локальных", а не "абсолютных" условиях.

Фоторезисторы являются отличным выбором для решения задач вроде "вокруг темно или светло", "есть ли что-то перед датчиком (что ограничивает поступление света)", "какой из участков имеет максимальный уровень освещенности".
Среднестатистические технические характеристики фоторезисторов
Приведенные ниже технические характеристики относятся к фоторезисторам из магазина Adafruit. Эти фоторезисторы обладают характеристиками, схожими с PDV-P8001. Практически все фоторезисторы имеют различные технические характеристики, хотя работают они очень схоже. Если продавец дает вам ссылку на даташит вашего фоторезистора, ознакомьтесь именно с ними, а не с тем, что изложено ниже.
Размер: круглый, 5 мм (0.2") в диаметре (другие фоторезисторы могут достигать до 12 мм / 0.4" в диаметре!).
Цена: около $1.00 в магазине Adafruit.
Диапазон сопротивления: от 200 кОм (темно) до 10 кОм (светло).
Диапазон чувствительности: чувствительные элементы фиксируют длины волн в диапазоне от 400 нм (фиолетовый) до 600 нм (оранжевый).
Питание: любой с напряжением до 100 В, используют силу тока в среднем около 1 мА (зависит от напряжения питания).
Проблемы при использовании нескольких сенсоров
Если при добавлении дополнительных сенсоров оказывается, что температура inconsistant, это значит, что сенсоры перекрывают друг друга при считывании информации с различных аналоговых пинов. Исправить это можно, добавив два считывания с задержками и отображением первого.
Измерение уровня освещенности
Как мы уже говорили, сопротивление фоторезистора изменяется в зависимости от уровня освещения. Когда темно, сопротивление резистора увеличивается до 10 МОм. С увеличением уровня освещенности сопротивление падает. Приведенный ниже график отображает приблизительное сопротивление сенсора при разных условиях освещения. Не забывайте, что характеристика каждого отдельного фоторезистора будет несколько отличаться, эти характеристики отображают только общую тенденцию.

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

То есть индикация диапазона световых волн, который соответствует голубому, не будет таким же эффективным как индикация зеленого/желтого диапазона!
Что такое единица измерения «люкс»?
В большинстве даташитов используется люкс (лк) для обозначения сопротивления при определенном уровне освещенности. Но что это такое - лк? Это не метод, который мы используем для описания яркости, так что он привязан непосредственно к датчику. Ниже приведена таблица соответствий, которая была взята с Wikipedia.

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

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

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

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


В этом примере подключается источник питания 5 В, но не забывайте, что вы с таким же успехом можете использовать питание 3.3 В. В этом случае аналоговые значения напряжения будут в диапазоне от 0 до 5 В, то есть приблизительно равны напряжению питания.
Это работает следующим образом: при понижении сопротивления фоторезистора суммарное сопротивление фоторезистора и понижающего резистора уменьшается от 600 кОм до 10 кОм. Это значит, что ток, проходящий через оба резистора, увеличивается, что приводит к повышению напряжения на резистора с постоянным сопротивлением 10 кОм. Вот и все! 
В этой таблице приведены приблизительные значения аналогового напряжения на основании уровня освещенности/сопротивления при подключении напряжения питания 5 В и 10 кОм понижающего резистора.
Если вы хотите использовать сенсор на ярко освещенной территории и использовать резистор 10 кОм, он быстро 'сдуется'. То есть он практически моментально достигнет допустимого уровня напряжения 5 В и не сможет различать более интенсивное освещение. В этом случае вам стоит заменить резистор на 10 кОм на резистор 1кОм. При такой схеме резистор не сможет определять уровень темноты, но лучше определи оттенки высокого уровня освещенности. В общем, вам стоит с этим поиграться в зависимости от ваших условий!
Кроме того, вы также сможете использовать формулу "Axel Benz" для базовых измерений минимального и максимального значения сопротивления с помощью мультиметра и дальнейшего нахождения значения сопротивления резистора с помощью: Понижающий резистор = квадратный корень(Rmin * Rmax), что в результате даст вам гораздо лучший результат в виде:

В таблице выше приведены приблизительные значения аналогового напряжения при использовании сенсора с питанием от 5 В и понижающим резистором 1 кОм.
Не забывайте, что наш метод не дает нам линейную зависимость напряжения от освещенности! Кроме того, каждый датчик отличается по своим характеристикам. С увеличением уровня освещенности аналоговое напряжение будет расти, а сопротивление падать:
Vo = Vcc ( R / (R + Photocell) )
То есть напряжение обратно пропорционально сопротивлению фоторезистора, которое, в свою очередь, обратно пропорционально уровню освещения.
Простой пример использования фоторезистора

В этом скетче берутся считываемые аналоговые значения для определения яркости светодиода. Чем темнее будет, тем ярче будет светить светодиод! Не забудьте, что светодиод должен быть подключен к ШИМ контакту для работы данного примера. В данном случае используется контакт 11.
/* простой проверочный скетч для фоторезистора.
Подключите одну ногу фоторезистора к 5 В, вторую к аналоговому пину Analog 0.
После этого подключите резистор на 10 кОм между Analog 0 и землей.
Через резистор подключите светодиод между 11 пином и землей. */
int photocellPin = 0; // сенсор и понижающий резистор 10 кОм подключены к a0
int photocellReading; // считываем аналоговые значения с делителя сенсора
int LEDpin = 11; // подключаем красный светодиод к пину 11 (ШИМ пин)
int LEDbrightness; //
void setup(void) {
// информацию для дебагинга мы будем отправлять на серийный монитор
Serial. begin(9600);
}
void loop(void) {
photocellReading = analogRead(photocellPin);
Serial. print("Analog reading = ");
Serial. println(photocellReading); // аналоговые значения с сенсора
// светодиод горит ярче, если уровень освещенности на датчике уменьшается
// это значит, что мы должны инвертировать считываемые значения от 0-1023 к 1023-0
photocellReading = 1023 - photocellReading;
//теперь мы должны преобразовать диапазон 0-1023 в 0-255, так как именно такой диапазон использует analogWrite
LEDbrightness = map(photocellReading, 0, 1023, 0, 255);
analogWrite(LEDpin, LEDbrightness);
delay(100);
}
Можете попробовать другие резисторы в зависимости от уровня освещенности, который вы хотите измерять!


