Проект 10: Фотоэлемент

Описание

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

В этом проекте будет использована плата разработки UNO R3 (ch340) и фотоэлемент для реализации простой схемы управления светодиодом с помощью света. Когда окружающий свет становится темным, светодиод автоматически загорается; когда свет становится ярче, светодиод автоматически выключается.

Аппаратное обеспечение

1. Плата разработки UNO R3 (ch340) x 1

2. Фотоэлемент x 1

3. Светодиод x 1

4. Резистор 220Ω x 1

5. Резистор 10kΩ x 1

6. Макетная плата x 1

7. Соединительные провода

Принцип работы

Чтобы понять принцип работы фотоэлемента, давайте немного вспомним о валентных и свободных электронах.

Как известно, валентные электроны находятся на внешней оболочке атома. Следовательно, они слабо связаны с ядром атома. Это означает, что для их вырывания из внешней орбиты требуется лишь небольшое количество энергии.

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

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

Ниже показано схематическое изображение этого процесса:

Принцип работы фотоэлемента

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

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

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

Технические характеристики

Сопротивление: 10kΩ

Рабочее напряжение: 3.3-5V

Рабочий ток: 20mA

Максимальная мощность: 0.1W

Рабочая температура: от -10 до +50 градусов Цельсия

Распиновка

Схема подключения

1. Подключите один конец фотоэлемента к пину 5V платы разработки, а другой конец — к резистору 10kΩ,

2. подключите этот резистор 10kΩ к GND платы.

3. Соедините точку соединения фотоэлемента и резистора 10kΩ с аналоговым входом A0 платы разработки.

4. Подключите анод светодиода (длинный вывод) к цифровому пину 13 через резистор 220Ω, а катод (короткий вывод) к GND.

Img

Пример кода

/*

Electronics Learning Starter Kit for Arduino

Project 10

Photoresistor

Edit By Keyes

*/

const int lightSensorPin = A0; // Photoresistor connected to analog pin A0

const int ledPin = 11; // LED connected to digital pin 11

const int threshold = 500; // Light intensity threshold, it can be adjusted according to actual situation

void setup() {

pinMode(ledPin, OUTPUT); // Set the LED pin to output mode

Serial.begin(9600); // initialize serial port

}

void loop() {

int lightValue = analogRead(lightSensorPin); // Read the analog value of the photoresistor

Serial.println(lightValue); // print the light sensor value on the serial monitor

if (lightValue < threshold) {

digitalWrite(ledPin, HIGH); // If the light intensity is less than the threshold, the LED will light up

} else {

digitalWrite(ledPin, LOW); // If the light intensity is greater than the threshold, the LED will light off

}

delay(100); // delay 100ms

}

Объяснение кода

1. Определение констант и переменных

const int lightSensorPin = A0; // Датчик света подключен к аналоговому пину A0

const int ledPin = 11; // Светодиод подключен к цифровому пину 11

const int threshold = 500; // Порог интенсивности света, может быть отрегулирован в зависимости от условий

lightSensorPin определяет пин, к которому подключен датчик света — аналоговый пин A0.

ledPin определяет пин, к которому подключен светодиод — цифровой пин 11.

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

2. Инициализация

void setup() {

pinMode(ledPin, OUTPUT); // Устанавливаем пин светодиода как выход

Serial.begin(9600); // Инициализация последовательной связи с скоростью 9600 бод

}

pinMode(ledPin, OUTPUT) устанавливает пин светодиода в режим выхода, чтобы можно было управлять включением и выключением светодиода.

Serial.begin(9600) инициализирует последовательную связь для отладки и просмотра показаний датчика света. Скорость передачи установлена на 9600 бод.

3. Основной цикл чтения и управления

void loop() {

int lightValue = analogRead(lightSensorPin); // Считываем аналоговое значение с датчика света

Serial.println(lightValue); // Выводим значение датчика света в последовательный монитор

if (lightValue < threshold) {

digitalWrite(ledPin, HIGH); // Если интенсивность света меньше порога, включаем светодиод

} else {

digitalWrite(ledPin, LOW); // Если интенсивность света больше или равна порогу, выключаем светодиод

}

delay(100); // Задержка 100 миллисекунд

}

analogRead(lightSensorPin) считывает аналоговое значение с датчика света. Возвращает целое число от 0 до 1023, отражающее интенсивность света, обнаруженную датчиком.

Serial.println(lightValue) выводит показания датчика в последовательный монитор для отладки и наблюдения за изменениями интенсивности света в реальном времени.

if (lightValue < threshold) проверяет, меньше ли значение порога:

Если меньше, выполняется digitalWrite(ledPin, HIGH), чтобы включить светодиод.

Если не меньше, выполняется digitalWrite(ledPin, LOW), чтобы выключить светодиод.

delay(100) задаёт задержку в 100 миллисекунд, чтобы программа не работала слишком быстро и светодиод не мигал.

Результат проекта

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

P10