Фоторезисторы — это аналоговые датчики, которые могут измерять интенсивность света. Это светочувствительные резисторы, которые изменяют сопротивление в зависимости от количества света, попадающего на датчик.
Фоторезисторы идеально подходят для изготовления переключателей, управляемых светом. Одним из распространенных применений фоторезисторов является управление 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.