Датчик темряви що керує світлодіодом і вмикається в темноті

Сенсори освітленості та наявності світла аналогові та з цифровим виходом, фотоелектричні елементи. Інфрачервоні давачі та світлодіоди
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Датчик темряви що керує світлодіодом і вмикається в темноті

Повідомлення Arduino » 25 травня 2017 15:06

Продовження заняття з використання світлочутливих елементів. Датчик темряви вмикає освітлення в темноті і вимикає світло коли фотоелектричний елемент отримає достатньо світла. В програмі використовується змінний резистор для налаштування порогу спрацьовування, фоторезистор в якості чутливого елементу
l5-nochnoj-svetilnik1.jpg
Пояснення до коду
  • Ми використовуємо новий тип змінних - boolean, які зберігають тільки значення true (істина, 1) або false (брехня, 0). Ці значення є результатом обчислення логічних виразів. В даному прикладі логічне вираз - це lightness <threshold. Людською мовою це звучить як: «освітленість нижче порогового рівня». Такий вислів буде істинним, коли освітленість нижче порогового рівня. Мікроконтролер може порівняти значення змінних lightness і threshold, які, в свою чергу, є результатами вимірювань, і обчислити істинність логічного виразу.
  • Ми взяли цей логічний вираз в дужки тільки для наочності. Завжди краще писати читабельний код. В інших випадках дужки можуть впливати на порядок дій, як у звичайній арифметиці.
  • У нашому експерименті логічне вираз буде істинним, коли значення lightness менше значення threshold, тому що ми використовували оператор <. Ми можемо використовувати оператори>, <=,> =, ==,! =, Які означають «більше», «менше або дорівнює», «більше або дорівнює», «дорівнює», «не дорівнює» відповідно.
  • Будьте особливо уважні з логічним оператором == і не плутайте його з оператором присвоювання =. У першому випадку ми порівнюємо значення виразів і отримуємо логічне значення (істина або брехня), а в другому випадку присвоюємо лівому операнду значення правого. Компілятор не знає наших намірів і помилку не видасть, а ми можемо ненавмисно змінити значення будь-якої змінної і потім довго розшукувати помилку.
  • Умовний оператор if ( «якщо») - один з ключових в більшості мов програмування. З його допомогою ми можемо виконувати не тільки жорстко задану послідовність дій, але приймати рішення, по якій гілці алгоритму йти, в залежності від деяких умов.
  • У логічного виразу lightness <threshold є значення: true або false. Ми вирахували його і помістили в булеву змінну tooDark ( «занадто темно»). Таким чином ми як би говоримо «якщо занадто темно, то включити світлодіод»
  • З таким же успіхом ми могли б сказати «якщо освітленість менше порогового рівня, то включити світлодіод», тобто передати в if все логічний вираз:
    if (lightness <threshold) {// ...}

    За умовним оператором if обов'язково слід блок коду, який виконується в разі істинності логічного виразу. Не забувайте про обидві фігурні дужки {}!
  • Якщо в разі істинності виразу нам потрібно виконати тільки одну інструкцію, її можна написати відразу після if (...) без фігурних дужок:
    if (lightness <threshold) digitalWrite (LED_PIN, HIGH)
    ;
    Оператор if може бути розширений конструкцією else ( «інакше»). Блок коду або єдина інструкція, наступний за нею, буде виконано тільки якщо логічний вираз в if має значення false, «брехня». Правила, що стосуються фігурних дужок, такі ж. У нашому експерименті ми написали «якщо занадто темно, включити світлодіод, інакше вимкнути світлодіод».
#define LED_PIN 13
#define LDR_PIN A0
#define POT_PIN A1

void setup ( )
{
pinMode ( LED_PIN, OUTPUT ) ;
}

Void loop ( )
{
// зчитуємо рівень освітленості. До речі, оголошувати
// змінну і привласнювати їй значення можна разом
int lightness = analogRead ( LDR_PIN ) ;

// зчитуємо значення з потенціометра, яким ми регулюємо
// порогове значення між умовними темрявою і світлом
int threshold = analogRead ( POT_PIN ) ;

// оголошуємо логічну змінну і призначаємо їй значення
// «темно зараз». Логічні змінні, на відміну від
// цілочисельних, можуть містити лише одне з двох значень:
// істину (англ. True) або брехня (англ. False). Такі значення
// ще називають булевими (англ. Boolean).
boolean tooDark = ( lightness < threshold ) ;

// використовуємо розгалуження програми: процесор виконає один з
// двох блоків коду в залежності від виконання умови.
// Якщо (англ. «If») надто темно ...
if ( tooDark ) {
// ... включаємо освітлення
digitalWrite ( LED_PIN, HIGH ) ;
} Else {
// ... інакше світло не потрібне - вимикаємо його
digitalWrite ( LED_PIN, LOW ) ;
}
}

Відповісти

Повернутись до “Датчики світла та освітленості”