Содержание

Эксперимент 5. Ночной светильник

← Терменвокс | Оглавление | Пульсар →

В этом эксперименте светодиод должен включаться при падении уровня освещенности ниже порога, заданного потенциометром.

Список деталей для эксперимента

Для дополнительного задания

Принципиальная схема

Схема на макетке

Обратите внимание

Скетч

p050_night_light.ino
#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);
  }
}

Пояснения к коду

if (lightness < threshold) {
  // ...
}
if (lightness < threshold)
  digitalWrite(LED_PIN, HIGH);

Вопросы для проверки себя

  1. Если мы установим фоторезистор между аналоговым входом и землей, наше устройство будет работать наоборот: светодиод будет включаться при увеличении количества света. Почему?
  2. Какой результат работы устройства мы получим, если свет от светодиода будет падать на фоторезистор?
  3. Если мы все же установили фоторезистор так, как сказано в предыдущем вопросе, как нам нужно изменить программу, чтобы устройство работало верно?
  4. Допустим, у нас есть код if (условие) {действие;}. В каких случаях будет выполнено действие?
  5. При каких значениях y выражение x + y > 0 будет истинным, если x > 0?
  6. Обязательно ли указывать, какие инструкции выполнять, если условие в операторе if ложно?
  7. Чем отличается оператор == от оператора =?
  8. Если мы используем конструкцию if (условие) действие1; else действие2;, может ли быть ситуация, когда ни одно из действий не выполнится? Почему?

Задания для самостоятельного решения

  1. Перепишите программу без использования переменной tooDark с сохранением функционала устройства.
  2. Добавьте в схему еще один светодиод. Дополните программу так, чтобы при падении освещенности ниже порогового значения включался один светодиод, а при падении освещенности ниже половины от порогового значения включались оба светодиода.
  3. Измените схему и программу так, чтобы светодиоды включались по прежнему принципу, но светились тем сильнее, чем меньше света падает на фоторезистор.

← Терменвокс | Оглавление | Пульсар →