Як працює фоторезистор LDR
Фоторезистор (Датчик освітленості)
Фоторезистор (LDR, Light Depender Resistor) - компонент, що змінює опір залежно від кількості світла, що падає на нього. У повній темряві він має максимальний опір у сотні кілоОм, а зі зростанням освітленості опір зменшується до десятків кілоОм.
Позначення та малюнок на схемах.
Розрізняються фоторезистори за діапазоном опору. Наприклад:
Найпростіший спосіб подивитися на роботу фоторезистора – підключити до нього мультиметр та стежити за зміною опору (1MΩ..1KΩ), закриваючи фоторезистор рукою.
Так як це підвид резисторів, він не має полярності. Можна підключати у будь-якому напрямку.
На уроці, присвяченому потенціометру, я згадав, що приклад читання аналогових висновків (File | Examples | 01.Basics | AnalogReadSerial) є універсальним. Перевіримо приклад на фоторезисторі.
Зберемо конструкцію за схемою.
Схема макетної плати.
Опишемо конструкцію словами. З порту 5V йде харчування першу ніжку фоторезистора. До другої ніжки приєднуються резистор, який з'єднується з GND та окремий провід, що йде на порт A0. Виходить класичний дільник напруги.
Якщо запустити скетч та відкрити вікно Serial Monitor, ми можемо спостерігати зміни значень залежно від ступеня освітленості. Показання залежатимуть від другого резистора. Можете спробувати замінити резистор з іншим маркуванням та перевірити результат. У моєму випадку використовувався резистор на 1 ком. При цьому показання змінювалися від 4 до 158 зимового дня, коли вже починало темніти, а світло в кімнаті ще не включало. Якщо світити на фоторезистор ліхтариком, то значення збільшувалося до 918 одиниць.
Використовуємо світлодіод
Переконавшись, що фоторезистор працює та видає результат, можемо написати якусь програму.Припустимо, ми хочемо, щоб із настанням темряви на дачі вмикався ліхтарик, який висвітлить дорогу в лазню. Як ліхтар буде використовувати вбудований світлодіод. Перепишемо код.
int ledPin = 13; // використовуємо вбудований світлодіод на виводі 13 void setup() <pinMode(ledPin, OUTPUT); >void loop() < // зчитуємо показання з аналогового виведення A0 int sensorValue = analogRead(A0); if(sensorValue < 50)< // Якщо потемніло, то включаємо світлодіод digitalWrite(ledPin, HIGH); >else < // Якщо світло, то вимикаємо світлодіод digitalWrite(ledPin, LOW); >>
Ми визначаємо певну величину, яка буде відповідати сутінкам і включаємо світлодіод при досягненні цієї величини. Тепер ліхтар на дачі вмикатиметься без нашої участі.
Плавне регулювання світлодіоду
Якщо ми хочемо змінювати яскравість світлодіоду плавно, то вбудований світлодіод не підійде. Нам знадобиться висновок із символом ~. Ми вже проходили подібний урок 01.Basics: Fade (загасання світлодіода), тому додамо свій світлодіод із резистором на макетну плату.
Ми можемо явно вказати діапазон, що відстежується, наприклад, від 4 до 200. Але показання можуть бути меншими або більшими від цих значень і нам потрібно написати умови, які враховували б цю ситуацію. На щастя, є готова функція constrain()яка робить цю роботу за нас. Далі ці значення потрібно розподілити між діапазоном від 0 до 255 за допомогою функції map(), оскільки світлодіод працює лише у цьому діапазоні. Але якщо ми залишимо як є, то 4 буде відповідати 0, а 200 буде відповідати 255. При такому рішенні світлодіод горітиме яскравіше при хорошому освітленні і тьмяніше при поганому освітленні. А нам потрібна зворотна ситуація. Тому функції ми застосовуємо зворотний порядок від 255 до 0. Таким чином, код вийде наступним.
int ledPin = 10; // використовуємо світлодіод з тильдою void setup() <pinMode(ledPin, OUTPUT); >void loop() < // зчитуємо показання з аналогового виведення A0 int sensorValue = analogRead(A0); // Тільки цьому діапазоні sensorValue = constrain(sensorValue, 4, 200); // Відобразимо значення від 4 до 200 як від 255 до 0 int ledLevel = map(sensorValue, 4, 200, 255, 0); analogWrite(ledPin, ledLevel); >
Перевіряємо. У мене працює, а у вас?
03.Analog: Calibration (Калібрування)
Якщо датчик може працювати в широких межах, є сенс визначити його реальні можливості в реальній обстановці. Наприклад, при роботі з датчиком освітленості в коридорі ми можемо оцінити, скільки світла зазвичай буває при включеній лампі і в темряві і відштовхуватися від отриманих результатів, відсікаючи зайві показання.
Запустимо скетч File | Examples | 03.Analog | Calibration.
Протягом перших п'яти секунд записуємо дані з датчика. Найбільше та найменше значення потрапляють у змінні. Потім працюємо з отриманими даними.
const int sensorPin = A0; //Аналоговий висновок A0 const int ledPin = 9; // Висновок 9 для світлодіода int sensorValue = 0; // значення датчика int sensorMin = 1023; //Мінімальне значення int sensorMax = 0; // максимальне значення void setup() < // включаємо світлодіод під час калібрування pinMode(13, OUTPUT); digitalWrite(13, HIGH); // калібрування протягом 5 секунд while (millis() < 5000) < sensorValue = analogRead(sensorPin); // записуємо максимально отриманий результат if (sensorValue > sensorMax) < sensorMax = sensorValue; >// записуємо мінімально отриманий результат if (sensorValue < sensorMin) < sensorMin = sensorValue; >> // вимикаємо світлодіод digitalWrite(13, LOW); > void loop() < // знімаємо показання датчика sensorValue = analogRead(sensorPin); // застосовуємо показання з урахуванням мінімального та максимального значень sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255); // Якщо показання виходять межі калібрування, то зрізаємо зайве sensorValue = constrain(sensorValue, 0, 255); //Змінюємо інтенсивність світлодіода в залежності від каліброваних показань analogWrite(ledPin, sensorValue); >
05.Control: switchCase
Тепер ви легко зрозумієте код з прикладу File | Examples | 05.Control | switchCase. Досвідченим шляхом з'ясовується, що показання фоторезистора коливаються від 0 до 600 (у вас можуть бути інші значення тоді змініть). Ділимо інтервал на чотири частини за допомогою map()Осі: темно, серпанок, середньо, яскраво. За допомогою оператора вибору switch вибираємо потрібне значення та виводимо повідомлення. Схема залишається незмінною.
const int sensorMin = 0; //Мінімальне значення датчика const int sensorMax = 600; // максимальне значення датчика void setup() < Serial.begin(9600); >void loop() < // отримуємо дані від датчика int sensorReading = analogRead(A0); // ділимо дані на чотири інтервали int range = map (sensorReading, sensorMin, sensorMax, 0, 3); // порівнюємо значення та виводимо потрібне повідомлення switch (range) <case 0: // рукою закриваємо датчик Serial.println("dark"); break; case 1: // подаємо трохи світла Serial.println("dim"); break; case 2: // ще більше світла Serial.println("medium"); break; case 3: // датчик під лампою Serial.println("bright"); break; >delay(1); // Пауза для стабільності >
Модуль KY-018
Може випускатися як готового модуля. На малюнку приклад від магазину "Амперка".
Є також популярний китайський модуль KY-018.
У модуля між висновками «S» та виведенням живлення +5 В (середній висновок) впаяний резистор 10 кОм, що разом із самим фоторезистором утворює дільник напруги, який зручно підключити до аналогового входу Arduino.
KY-018 | Arduino ------------- - | GND+ | 5V S | D
Arduino для початківців. Урок 7. Підключення фоторезистора
Продовжуємо серію уроків Arduino для початківців. Сьогодні підключаємо фоторезистор (фотоелемент) до плати Arduino. Фоторезистори використовуються у роботах як датчики освітленості. У статті відео-інструкція, лістинг програми, схема підключення та необхідні компоненти.
Фоторезистор - Резистор, опір якого залежить від яскравості світла, що падає на нього. У нашій моделі світлодіод горить, тільки якщо яскравість світла над фоторезистором менша за певну, цю яскравість можна регулювати програмно.
Фоторезистори використовуються у робототехніці як датчики освітленості.Вбудований в робота фоторезистор дозволяє визначати ступінь освітленості, визначати білі або чорні ділянки на поверхні і відповідно рухатися по лінії або здійснювати інші дії.
Відео-інструкція складання моделі Arduino з фоторезистором:
Для складання моделі із сервоприводом нам знадобиться:
- плата Arduino
- 6 проводів "тато-тато"
- фоторезистор
- світлодіод
- резистор на 220 Ом
- резистор на 10 ком
- програма Arduino IDE, яку можна завантажити із сайту Arduino.
Необхідні компоненти для підключення фоторезистора на Arduino
Схема підключення моделі Arduino з фоторезистором:
Схема підключення фоторезистора на Arduino
Для роботи цієї моделі підійде наступна програма (програму ви можете просто скопіювати в Arduino IDE):
int led = 13; //Змінна з номером піна світлодіода
int ldr = 0; //і фоторезистора
void setup () // Процедура setup
pinMode(led, OUTPUT); //Вказуємо, що світлодіод - вихід
>
void loop () // Процедура loop
if (analogRead(ldr) < 800) digitalWrite(led, HIGH);
//якщо показник освітленості менше 800, включаємо світлодіод
else digitalWrite(led, LOW); //інакше вимикаємо
>
Так виглядає зібрана модель Arduino з фоторезистором:
Готова модель підключення фоторезистора на Arduino
Якщо світлодіод не реагує на зміну освітленості, спробуйте змінити число 800 у програмі, якщо вона весь час горить - зменшіть, якщо не горить - збільште.
Дивіться також:
Пости з уроків:
- Перший урок: Світлодіод
- Другий урок: Кнопка
- Третій урок: Потенціометр
- Четвертий урок: Сервопривід
- П'ятий урок: Триколірний світлодіод
- Шостий урок: П'єзоелемент
- Сьомий урок: Фоторезистор
- Восьмий урок: Датчика руху (PIR) та E-mail
- Дев'ятий урок: Підключення датчика температури та вологості DHT11 або DHT22
Усі пости сайту «Цікава робототехніка» за теґом Arduino.
Наш канал YouTube, де публікуються відео-уроки.
Не знаєте, де купити Arduino? Усі комплектуючі, що використовуються в уроці, входять до більшості готових комплектів Arduino, їх також можна придбати окремо. Детальна інструкція щодо вибору тут. Низькі ціни, спецпропозиції та безкоштовна доставка на сайтах AliExpress та DealExtreme. Якщо немає часу чекати на посилку з Китаю — рекомендуємо інтернет-магазини Амперка і DESSY. Найнижчі ціни та швидку доставку пропонує інтернет-магазин ROBstore. Дивись також перелік магазинів.
Автор: Олександр Гагарін.