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

Рисунок 1. Фоторезистор
Фоторезистор имеет два вывода: один подключается к питанию, второй через резистор к земле. В месте соединения вывода фоторезистора с резистором устанавливается провод для считывания его показаний. Номинал резистора от 1 до 10 кОм. В зависимости от величины резистора будет меняться диапазон показаний датчика.
На платформе tinkercad изменить освещенность резистора можно перемещая ползунок слева направо.
Рисунок 2. Изменение освещенности резистора
Считываем показания фоторезистора в монитор порта
Собираем схему с фоторезистором

Рисунок 3. Схема с фоторезистором
Программа для считывания показаний фоторезистора в монитор порта
#define photores A0 //создаем переменную для фоторезистора
int light; //создаем переменную для хранения показаний фоторезистора
void setup(){
pinMode(photores, INPUT); //настраиваем пин, к которому подключен фоторезистор, как вход
Serial.begin(9600); //настраиваем работу с монитором порта
}
void loop(){
light = analogRead(photores); //считываем показания фоторезистора и сохраняем в переменную light
Serial.print("Light = "); //выводим в монитор порта слово "Light: "
Serial.println(light); //выводим в монитор порта значение переменной light и ждем полсекунды
delay(500);
}
Автоматическое освещение
Собираем схему

Рисунок 4. Схема для автоматического освещения
Программа для автоматического включения освещения
#define photores A0 //создаем переменную для фоторезистора
#define led 3 //создаем переменную для светодиода
int light; //создаем переменную для хранения показаний фоторезистора
int day = 400; //создаем переменную для условия день-ночь(светло-темно)
void setup(){
pinMode(photores, INPUT); //настраиваем пин, к которому подключен фоторезистор, как вход
pinMode(led, OUTPUT); //настраиваем пин, к которому подключен светодиод, как выход
Serial.begin(9600); //настраиваем работу с монитором порта
}
void loop(){
light = analogRead(photores); //считываем показания фоторезистора и сохраняем в переменную light
Serial.print("Light = ");
Serial.println(light); //выводим показания фоторезистора в монитор порта
if(light<day){ //если если текущая освещенность меньше 400, то включаем светодиод
digitalWrite(led, HIGH);
}
else{ //иначе светодиод выключен
digitalWrite(led, LOW);
}
delay(100); //задержка 100 миллисекунд
}
Управляем скоростью сервомотора в зависимости от освещенности
Собираем схему

Рисунок 5. Схема для автоматического освещения
Программа для управления скоростью сервомотора в зависимости от освещенности
#include <Servo.h> //подключаем библиотеку для работы с сервомотором
#define photores A0 //создаем переменную для фоторезистора
Servo myservo; //объявляем сервомотор
int light; //создаем переменную для хранения показаний фоторезистора
int msec; //создаем переменную, отвечающую за скорость движений сервомотора
//эта переменная определяет время задержки сервомотора в каждой позиции во время его движения
//чем больше значение переменной, тем медленнее вращается сервомотор
void setup(){
pinMode(photores, INPUT); //настраиваем пин, к которому подключен фоторезистор, как вход
myservo.attach(2); //настраиваем пин 2 как управляющий пин сервомотора
}
void loop(){
for(int i=0; i<=180; i++){ //цикл для вращения сервомотора из 0 в 180
myservo.write(i);
delay(msec);
checkLight(); //функция, проверяющая уровень освещенности
}
for(int i=180; i>=0; i--){ //цикл для вращения сервомотора из 180 в 0
myservo.write(i);
delay(msec);
checkLight(); //функция, проверяющая уровень освещенности
}
}
//функция считывает показания фоторезистора
//затем преобразует их во время задержки сервомотора в каждой позиции
void checkLight(){
light = analogRead(photores);
msec = map(light, 6, 679, 100, 5);
}
Задания
Соберите схему с двумя фоторезисторами, установленными под углом 90 градусов друг относительно друга. Напишите программу, которая после калибровки будет определять направление на источник света в диапазоне +-90 градусов с точностью 10 градусов.
Соберите схему с четырьмя фоторезисторами, установленными под углом 90 градусов друг относительно друга. Напишите программу, которая после калибровки будет определять направление на источник света в диапазоне +-180 градусов с точностью 15 градусов.