Фоторезисторы — это аналоговые датчики, которые могут измерять интенсивность света. Это светочувствительные резисторы, которые изменяют сопротивление в зависимости от количества света, попадающего на датчик.
Фоторезисторы идеально подходят для изготовления переключателей, управляемых светом. Одним из распространенных применений фоторезисторов является управление 5-вольтовыми реле для включения лампочки с наступлением темноты. Они также используются для отслеживания дневного света на метеостанциях и в системах мониторинга окружающей среды.
Как работает фоторезистор
Фоторезисторы имеют два отдельных электрода на чувствительном элементе. Волнистая красная линия — это слой полупроводящего материала между двумя электродами:
Проводимость полупроводникового материала увеличивается, когда на него попадает больше света. Когда проводимость увеличивается, сопротивление уменьшается. Поэтому сопротивление фоторезистора уменьшается с увеличением интенсивности света. И наоборот, сопротивление фоторезистора увеличивается с уменьшением интенсивности света.
Как подключить фоторезистор к Arduino
Arduino не может напрямую измерять сопротивление, он может измерять только напряжение. Таким образом, мы должны использовать делитель напряжения для подключения фоторезистора к Arduino. Вот схема фоторезисторного делителя напряжения, который нужно собрать:
Выходное напряжение Uвых делителя напряжения изменяется при изменении сопротивления фоторезистора. Когда свет не попадает на фоторезистор, сопротивление фоторезистора велико, поэтому выходное напряжение низкое. Когда свет попадает на фоторезистор, сопротивление уменьшается, а выходное напряжение увеличивается.
Подключить фоторезистор к Arduino можно следующим образом:
Код для Ардуино и фоторезистора
Теперь давайте посмотрим на скетч, который будет выводить необработанные показания освещенности с фоторезистора на монитор порта. После подключения схемы необходимо загрузить этот код в Arduino:
int photoresistor = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int light = analogRead(photoresistor);
Serial.println(light);
delay(1000);
}
Сперва мы объявляем переменную типа int с именем photoresistor и устанавливаем ее равной аналоговому выводу A0. Это контакт, подключенный к центру делителя напряжения.
В функции setup() мы инициализируем последовательную связь. В функции loop() мы объявляем локальную переменную с именем light и сохраняем в нее значение, которое считали с аналогового контакта A0. Затем выводим переменную light в монитор порта и вызываем задержку на 1000 миллисекунд перед следующим чтением данных.
Таким образом, скетч будет использовать функцию analogRead() для измерения выходного напряжения с делителя, преобразовывать его в целое число из диапазона от 0 до 1023 и выводить это число на последовательный монитор.
Если поместить фоторезистор в темноту, то значение, считанное функцией analogRead(), в терминале должно уменьшиться. Если поместить фоторезистор на свет, тогда значения должно увеличиться:
Видео симуляции схемы в программе Proteus можно посмотреть ниже:
Как использовать фоторезистор для управления
Фоторезисторы отлично подходят для изготовления переключателей, управляемых светом. Давайте создадим переключатель, который включает светодиод, когда темно, и выключает его при попадании света. Собрать на макетке схему можно так:
Как только схема соединена, загрузим следующий код в плату Arduino:
int photoresistor = A0;
int led = 9;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
int value = analogRead(photoresistor);
Serial.print("Value: ");
Serial.println(value);
int light = map(value, 1023, 0, 10, 0);
Serial.print("Light: ");
Serial.println(light);
if (light < 5) {
digitalWrite(led, HIGH);
Serial.println("LED - ON");
}
else {
digitalWrite(led, LOW);
Serial.println("LED - OFF");
}
delay(1000);
}
Мы начинаем с объявления переменной photoresistor и устанавливаем ее равной аналоговому выводу A0. Затем мы объявляем переменную led и устанавливаем ее равной цифровому выводу 9.
В функции setup() настраиваем вывод led как выход OUTPUT и инициализируем последовательную связь.
В функции loop() мы считываем аналоговое значение photoresistor и сохраняем его в локальной переменной с именем value. Чтобы упростить полученные значения с АЦП фоторезистора, мы используем функцию map() для преобразования значений в числа из диапазона от 0 до 10. Новое значение сохраняется в новой локальной переменной с именем light.
Оператор if else устанавливает пороговое значение, которое определяет, когда светодиод будет включаться и выключаться. Когда значение, сохраненное в переменной light, меньше 5, то будет выполнен код в инструкции if. Поскольку нам нужно, чтобы светодиод включался, когда уровень освещенности опускается ниже порогового значения, мы устанавливаем значение для контакта led в HIGH.
Оператор else выполняется, когда значение light больше или равно 5. В операторе else мы устанавливаем контакт led в низкий уровень LOW, чтобы выключить его.
После того, как вы построите схему и загрузите скетч, вы должны увидеть, как светодиод включается в темноте и выключается при свете.

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









