4.03.5. Лабораторная работа №4.3.5.md


Датчик света

Тема работы

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

Цель

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

Оборудование и материалы

  • Отладочная плата Рудирон.
  • Макетная плата.
  • 1 фоторезистор.
  • 1 светодиод (любого цвета).
  • 1 резистор номиналом 220 Ом (для светодиода).
  • 1 резистор номиналом 10 кОм (для делителя напряжения).
  • Соединительные провода.
  • USB-кабель для подключения Рудирона.
  • Компьютер с Arduino IDE.
  • Фонарик (например, от телефона).

Ход работы

  1. Делитель напряжения

    Фоторезистор — это компонент, который меняет своё сопротивление в зависимости от освещённости. Но микроконтроллер не умеет измерять сопротивление напрямую, он умеет измерять только напряжение. Как же нам получить нужные данные?

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

  2. Сборка схемы

    • Подключите светодиод: Длинную ножку (анод) — к ШИМ-пину 5, а короткую (катод) — через резистор 220 Ом к GND.
    • Соберите делитель напряжения:
      • Один вывод фоторезистора подключите к 3.3V.
      • Второй вывод фоторезистора соедините с одним из выводов резистора 10 кОм.
      • Второй вывод резистора 10 кОм подключите к GND.
      • Точку соединения фоторезистора и резистора подключите к аналоговому входу A0.
  3. Калибровка датчика

    Прежде чем писать основные программы, нам нужно понять, какие значения analogRead() соответствуют темноте и свету в наших условиях.

    • Загрузите на Рудирон простую программу для вывода данных с датчика:

      void setup() {
        Serial.begin(9600);
      }
      void loop() {
        int sensorValue = analogRead(A0);
        Serial.println(sensorValue);
        delay(200);
      }
      
    • Откройте монитор порта (скорость 9600).
    • Шаг 1: Измеряем «темноту». Полностью закройте фоторезистор пальцем или тёмным предметом. Запишите максимальное значение, которое вы видите в мониторе. Например, 3600.
    • Шаг 2: Измеряем «свет». Посветите на фоторезистор фонариком. Запишите минимальное значение. Например, 1200.
    • Теперь мы знаем наш рабочий диапазон: от 1200 (очень светло) до 3600 (очень темно).
  4. Программа №1. Автояркость

    Напишем программу, которая будет делать светодиод ярче, когда вокруг темно, и тусклее, когда светло.

    • В Arduino IDE введите следующий код, подставив ваши значения калибровки:

      const int ledPin = 5;
      const int sensorPin = A0;
      
      // Вставьте сюда ваши значения, полученные на шаге 3!
      const int lightValue = 1200; // Значение для яркого света
      const int darkValue = 3600;  // Значение для темноты
      
      void setup() {
        pinMode(ledPin, OUTPUT);
      }
      
      void loop() {
        int sensorValue = analogRead(sensorPin);
      
        // Масштабируем диапазон датчика (1200-3600) в диапазон яркости (0-255)
        int brightness = map(sensorValue, lightValue, darkValue, 0, 255);
      
        // Ограничиваем значение, чтобы оно не вышло за пределы 0-255
        brightness = constrain(brightness, 0, 255);
      
        analogWrite(ledPin, brightness);
        delay(50);
      }
      
    • Загрузите код. Теперь, закрывая и открывая фоторезистор, вы будете плавно менять яркость светодиода.
  5. Программа №2. Умный ночник

    Теперь напишем программу, которая будет включать светодиод на полную яркость, как только освещённость упадёт ниже определённого порога.

    • Измените loop() в вашем коде на следующий:

      void loop() {
        int sensorValue = analogRead(sensorPin);
      
        // Выбираем порог срабатывания. Он должен быть где-то между
        // вашими значениями света и темноты. Например, 2500.
        int threshold = 2500;
      
        if (sensorValue > threshold) {
        // Стало темно, включаем свет
        digitalWrite(ledPin, HIGH);
        } else {
        // Достаточно светло, выключаем
        digitalWrite(ledPin, LOW);
        }
        delay(100);
      }
      
    • Загрузите код. Теперь светодиод будет резко включаться, когда вы закрываете фоторезистор, и выключаться, когда открываете.

Результаты

Вы создали две работающие «умные» системы: 1. Систему автоматической регулировки яркости, которая плавно адаптирует свет к окружающим условиям. 2. Пороговый выключатель («ночник»), который включает свет только тогда, когда это необходимо.

Анализ результатов

  • Делитель напряжения позволил нам преобразовать изменение сопротивления фоторезистора в изменение напряжения, которое мы смогли измерить.
  • Калибровка — ключевой этап при работе с аналоговыми датчиками. Она позволяет адаптировать программу к уникальным условиям освещения и компонентам.
  • Функция map() идеально подошла для программы автояркости, позволив плавно сопоставить диапазон датчика с диапазоном яркости.
  • Оператор if стал основой для «ночника», реализуя простое пороговое срабатывание.

Выводы

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

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

  1. Как работает фоторезистор?
  2. Зачем нужна схема делителя напряжения при его подключении?
  3. Что такое калибровка датчика и почему она важна?
  4. Как работает функция map() в первой программе?
  5. Как изменить вторую программу, чтобы «ночник» включался при более ярком освещении?

Вы научились создавать устройства, которые видят свет! Теперь вы знаете, как «слышать» аналоговый мир и преобразовывать его сигналы в полезные действия. В следующем параграфе мы познакомимся с ЦАП — инструментом, который позволяет Рудирону не имитировать, а по-настоящему генерировать аналоговые сигналы.