Arduino:Примеры/Пример подключения фоторезистора для управления светодиодом

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.



Пример подключения фоторезистора для управления светодиодом

Данный пример демонстрирует подключение фоторезистора для управления светодиодом, для создания аналога ночника. Сопротивление фоторезистора зависит от интенсивности падающего на него света,поэтому при уменьшении освещенности светодиод будет гореть ярко,а при ярком свете отключаться.

Необходимые компоненты

  • Плата Arduino;
  • Макетная плата;
  • Резистор на 220 Ом;
  • Резистор на 10 кОм;
  • Фоторезистор с номинальным сопротивлением 200кОм;
  • Один красный светодиод;
  • Провода-перемычки;

Схема

Соедините 9-ый цифровой вывод Arduino с одним из выводов 220 Ом-ного резистора, другой вывод этого резистора соедините с анодом светодиода(длинная ножка), а катод светодиода с землей(контакт GND на плате Arduino). Контакт 5V платы Arduino соедините с одним из выводов фоторезистора, а другой вывод соедините с 0-ым аналоговым контактом Arduino и с одним из выводов 10кОм-го резистора, другой вывод резистора соедините с землей(контакт GND на плате Arduino).

Резистивный делитель напряжения состоит из двух резисторов, от соотношения сопротивлений зависит выходное напряжение. В данном примере один из резисторов переменный(фоторезистор, на номинальное сопротивление в 200кОм, т.е при полной темноте сопротивление фоторезистора будет равно номинальному,а при ярком свете падать почти до нуля), поэтому мы можем получить изменение напряжения. Другой резистор определяет чувствительность. Если использовать подстроечный резистор, то можно сделать настраиваемую чувствительность.

От того где расположен фоторезистор и номинал постоянного резистора в схеме делителя напряжения зависит масштаб и точность показаний. Измените схему и посмотрите через монитор порта(для этого можете загрузить код из раздела "Код для корректировки параметров", расположенный ниже) как меняются показания.

В мониторе порта в первом и во втором случае вы увидите, что не получите весь диапазон значений(от 0 до 1023), потому что сопротивление фоторезистора никогда не будет равно нулю. Но вы сможете определить минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности(значения зависят от условий освещенности, значения постоянного резистора и характеристик фоторезистора), для построения нашего "ночника".

Код

Загрузите скетч, показанный ниже, в плату Arduino.

#define RLED      9                                         //Красный светодиод подключаем к 9-му цифровому контакту с поддержкой ШИМ
#define LIGHT     0                                         //Фоторезистор подключаем к 0-му аналоговому контакту
#define MIN_LIGHT 200                                       //Минимальное значение освещенности
#define MAX_LIGHT 900                                       //Максимальное значение освещенности

int val = 0;                                                //Переменная для хранения считываемого значения с датчика

void setup()
{
  pinMode(RLED, OUTPUT);                                    //Устанавливаем 9 вывод как выход
}

void loop()
{
  val = analogRead(LIGHT);                                  //считываем значение с аналогового входа
  val = map(val, MIN_LIGHT, MAX_LIGHT, 255, 0);             //преобразуем диапазон считываемых значений 
  val = constrain(val, 0, 255);                             //"определяем" области допустимых значений
  analogWrite(RLED, val);                                   //управляем светодиодом
}
  • Примечание: В данном примере используется фоторезистор с номинальным сопротивлением в 200кОм. Если у вас фоторезистор на другой номинал, возможно вам придется изменить минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности.

Код для корректировки параметров

Если у вас фоторезистор на другой номинал возможно вам придется подкорректировать минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности. Для этого добавьте две строчки кода(выделены цветом). И определите минимальное(MIN_LIGHT) и максимальное(MAX_LIGHT) значение освещенности, перекрывая(и наоборот открывая) рукой доступ к свету для фоторезистора и наблюдая за изменениями значений с помощью монитора последовательного порта. После корректировки вы можете закомментировать добавленные строчки кода.

#define RLED      9                                         //Красный светодиод подключаем к 9-му цифровым контактом с поддержкой ШИМ
#define LIGHT     0                                         //Фоторезистор подключаем к 0-му аналоговому контакту
#define MIN_LIGHT 200                                       //Минимальное значение освещенности
#define MAX_LIGHT 900                                       //Максимальное значение освещенности

int val = 0;                                                //Переменная для хранения считываемого значения с датчика

void setup()
{
  pinMode(RLED, OUTPUT);                                    //Устанавливаем 9 вывод как выход
  Serial.begin(9600);                                       //Конфигурируем последовательное соединение на скорости в 9600 бод
}

void loop()
{
  val = analogRead(LIGHT);                                  //считываем значение с аналогового входа
  Serial.println(val);                                      //Выводим считанное значение с датчика по последовательному соединению
  val = map(val, MIN_LIGHT, MAX_LIGHT, 255, 0);             //преобразуем диапазон считываемых значений 
  val = constrain(val, 0, 255);                             //"определяем" области допустимых значений
  analogWrite(RLED, val);                                   //управляем светодиодом
}

См.также

Внешние ссылки