Использование фоторезистора вместе с Ардуино, аналоговое значение отображаем на последовательном мониторе.
О фоторезисторах
Фоторезисторы, также известные как светозависимые резисторы (LDR) или фотоэлементы, представляют собой недорогие переменные резисторы, сопротивление которых изменяется в зависимости от количества света, попадающего на его поверхность. В темных условиях сопротивление высокое; в светлых условиях сопротивление ниже.
Из-за неточной природы фоторезисторов, они не подходят для измерения точных уровней света, но способны обнаруживать изменения. Они могут использоваться для реагирования на такие события, как переход от дневного к ночному (и наоборот) режиму для домашней автоматизации и садоводства, и часто используются для управления уличным освещением. Фоторезисторы, размещенные внутри корпуса, могут обнаруживать, когда он открывается, или обнаруживать присутствие объектов, которые блокируют датчик.
Код и схемы ниже описывают использование фоторезистора с Arduino. Наш урок не является подробным руководством, и новичкам, которые не знакомы с Ардуино, мы рекомендуем взглянуть на другие уроки на нашем сайте по изучению основ Arduino. Люди с опытом в области электронной инженерии могут предпочесть более продвинутый курс, который охватывает проводку, установку и программирование Arduino и взаимодействие с LabView. Но надеемся, что наш урок будет полезен всем.
Комплектующие
Для создания проекта нам понадобятся:
- Arduino Uno или Arduino-совместимая плата с аналоговыми входами.
- Arduino IDE (интегрированная среда разработки).
- Фоторезистор (фотоэлемент / резистор, зависящий от света), например, от Adafruit (США) или Maplin (Великобритания).
- Один резистор 10 кОм.
- Один потенциометр 10Ko (переменный резистор).
- Макет и соединительные провода (или подходящие платы и паяльное оборудование).
Работа с электричеством даже при низком напряжении может быть опасной - внимательно следуйте схемам подключения и инструкциям и всегда обращайтесь за советом к квалифицированному и опытному специалисту, если вы в чем-то не уверены.
Фоторезистор представляет собой электронный компонент, удельное сопротивление которого изменяется в зависимости от количества получаемого света (сопротивление уменьшается при воздействии света). Фоторезистор выполнен из сульфида кадмия, полупроводник.
Когда фотоны попадают на ленты, электроны могут проходить через полупроводник. Основное использование фоторезистора - измерение силы света (камера, системы обнаружения и т.д.).
Схемы соединения
Вариантов соединений фоторезистора с Ардуино может быть несколько, но мы разберем пару вариантов.
Вариант 1
- Первый вывод -> 5 В
- Второй вывод -> A0 (сопротивление подключено к заземлению и ко второму выводу фоторезистора).
Вариант 2
Выше показана вторая схема, которую вы можете использовать, чтобы начать любые эксперименты. Фоторезистор и резистор 10 кОм питаются от источника питания 5 В Arduino и образуют делитель потенциала, который защищает Arduino от коротких замыканий и гарантирует, что по крайней мере какое-то сопротивление всегда присутствует на линии.
Провод от этой схемы соединен с аналоговым входом 0 на Arduino. Резисторы понижают напряжение, проходящее через них, и поэтому для считывания изменений в освещении этой цепи вы можете использовать аналого-цифровые преобразователи (АЦП) Arduino для измерения уровня напряжения на входе. АЦП преобразуют аналоговое значение в целое число в диапазоне от 0 до 1023.
Когда фоторезистор подвергается воздействию света, его сопротивление уменьшается, и поэтому показания напряжения будут выше. Когда свет блокируется, сопротивление фоторезистора увеличивается, и поэтому показания напряжения будут ниже.
Фоторезистор представляет собой простой пассивный компонент с двумя клеммами и не имеет полярности - не имеет значения, в каком направлении вы поместите его в цепь.
Коды проекта
Согласно нашим схемам мы приведем примеры различных вариантов для работы фоторезистора с Ардуино с некоторыми разъяснениями.
Вариант 1
void setup() { Serial.begin(9600); } void loop() { int value = analogRead(A0); Serial.println("Analog value : "); Serial.println(value); delay(250); }
В «void setup» мы инициализируем последовательный монитор:
void setup() { Serial.begin(9600); }
Затем мы читаем аналоговое значение, поступающее от фоторезистора, и определяем его как value («значение»):
void loop(){ int value = analogRead(A0);
И мы записываем значение на последовательном мониторе:
Serial.println("Analog Value :"); Serial.println(value); delay(250); }
Вариант 2
Чтобы убедиться, что все работает правильно, вы можете создать базовый эскиз, который считывает уровень напряжения и выводит значение в последовательный порт. Закрывая фоторезистор, вы увидите изменение показаний.
Чтобы создать эскиз вольтметра:
- Откройте Arduino IDE.
- Вставьте код ниже.
- Сохраните эскиз. В меню "Файл" выберите "Сохранить как" (англ. - Save as).
// pin assignments int LDR = 0; // initialize the serial port // and declare inputs and outputs void setup() { pinMode(LDR, INPUT); Serial.begin(9600); } // read from the analog input connected to the LDR // and print the value to the serial port. // the delay is only to avoid sending so much data // as to make it unreadable. void loop() { int v = analogRead(LDR); Serial.println(v); delay(1000); }
Чтобы загрузить эскиз на свой Arduino и посмотреть результат нужно:
- Подключитеь Arduino к компьютеру с помощью USB-кабеля.
- В IDE на панели инструментов нажмите кнопку «Загрузить» (Upload).
- На панели инструментов нажмите кнопку «Последовательный монитор» (Serial Monitor).
Обнаружение изменений
Точные значения, выводимые на последовательном мониторе в скетче выше, будут различаться в зависимости от нескольких факторов:
- Блок питания от Arduino. В частности, при питании от USB-кабеля обычно 5 В блока питания Arduino немного меньше этого идеала;
- Минимальное и максимальное значения сопротивления используемого фоторезистора;
- Точность резистора 10К;
- Конструкция макета и используемых проводов - они имеют небольшие уровни сопротивления, которые могут повлиять на АЦП;
- И количество окружающего света в комнате.
Гораздо важнее обнаруживать изменения уровня освещенности, чем иметь дело с реальными цифрами.
Эскиз ниже считывает уровень освещенности в процедуре настройки для использования в качестве базового измерения, а затем определяет, когда фоторезистор закрыт. Когда это происходит, при вызове digitalWrite() загорается встроенный светодиод Arduino на цифровом выводе 13.
// pin assignments int LED = 13; int LDR = 0; // variables int base; int threshold = 100; // declare inputs and outputs // and take a baseline reading void setup() { pinMode(LED, OUTPUT); pinMode(LDR, INPUT); base = analogRead(LDR); } // read from the analog input connected to the LDR // and print the value to the serial port. // the delay is only to avoid sending so much data // as to make it unreadable. void loop() { int v = analogRead(LDR); if ((base - v) > threshold) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }
Установка порогов
Приведенный выше эскиз устанавливает порог - значение, которое определяет, сколько изменений ожидается, прежде чем что-то произойдет - в коде. В зависимости от вашей среды и приложения может потребоваться отрегулировать этот порог. Чтобы избежать необходимости подключать Arduino обратно к компьютеру и перепрограммировать его, вы можете использовать потенциометр для регулировки величины сопротивления в цепи.
Вы можете подключить потенциометр разными способами, пример которого показан ниже:
Потенциометры - это другой тип переменного резистора - они обычно присоединяются к регулятору, а их сопротивление устанавливается поворотом ручки влево и вправо. На этой схеме триммер используется для изменения напряжения, подаваемого на фоторезистор. Это влияет на его способность обнаруживать свет и изменяет баланс потенциального делителя, так что количество изменений, зарегистрированных эскизом (base - v, в приведенном выше коде), может быть увеличено или уменьшено.
Для более цифрового подхода вы можете подключить потенциометр так же, как фоторезистор, и прочитать его, используя второй аналоговый вход. Затем вы можете использовать это измерение в эскизе, чтобы определить новое значение для переменного порога.
Два примера схем в уроке демонстрируют основные шаги, связанные с обнаружением изменений в уровнях освещенности с помощью фоторезистора и Arduino. Более интересные проекты, такие как системы домашней автоматизации и сигнализации, могут быть построены с использованием дополнительных компонентов, таких как реле, двигатели и устройства беспроводной связи.