Veronika Portfoolio

Öölamp+ Katse Photoresistor

Опыт с фоторезистором

Схема на Tinkercad

Компоненты:

  • Arduino Uno
  • Фоторезистор (LDR)
  • Резистор (10 кОм для LDR, ~220 Ом для светодиода)
  • Светодиод (LED)
  • Макетная плата и соединительные провода

Схема подключения:

  1. Фоторезистор (LDR):
    • Один вывод к 5V.
    • Второй вывод — к аналоговому входу A0 и через резистор на землю (GND).
  2. Светодиод:
    • Анод (длинная ножка) — к пину 9 Arduino через резистор.
    • Катод — на землю (GND).

Принцип работы:

  1. Считываем уровень освещенности с фоторезистора через analogRead().
  2. Преобразуем считанное значение из диапазона 0–1023 в 0–255 при помощи map() и constrain().
  3. Передаём полученное значение в analogWrite() для регулировки яркости светодиода.
  4. Чем темнее — тем ярче горит светодиод (или наоборот — в зависимости от кода).

Код

const int sensorPin = 0;

const int ledPin = 9;

int lightLevel, high = 0, low = 1023; 

void setup()

{

  pinMode(ledPin, OUTPUT);

  Serial.begin(9600); // //Serial monitori seadistamine

}

void loop()

{

  // AnalogRead() kasutab väärtused vahemikus 0 (0 вольт) и 1023 (5 вольт).

  // AnalogWrite(),  kasutatakse, et LEDi sujuvalt sisselülitada 0(ei põle) kuni 255(põleb maksimalselt).

  lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
  // Map() teisendab sisendi väärtused ühest vahemikust teisse. Näiteks, "from" 0-1023 "to" 0-255.

  // Constrain() saed muutujale kindlad piirväärtused.

  // Näiteks:  kui constrain() kohtub arvudega 1024, 1025, 1026.., siis ta teisendab need 1023, 1023, 1023..). Kui arvud vähem kui 0, siis teisendab need 0:. 

  // lightLevel = constrain(lightLevel, 0, 255);

  manualTune();  //

  //autoTune();  //

  analogWrite(ledPin, lightLevel);

  // Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) "lightLevel" на "255-lightLevel". Теперь у нас получился ночник!

  Serial.print(lightLevel);     // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023))

  Serial.println("");          

  delay(1000);                

}

void manualTune()

{

  lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)). 

  lightLevel = constrain(lightLevel, 0, 255);

} 

void autoTune()

{

   if (lightLevel < low)  

  {                      

    low = lightLevel;   

  }

  if (lightLevel > high)

  {

    high = lightLevel;

  }

  lightLevel = map(lightLevel, low+10, high-30, 0, 255);

  lightLevel = constrain(lightLevel, 0, 255);


}

Öölamp

Цель:

Создать ночник, который:

  • реагирует на уровень освещённости,
  • позволяет выбирать цвет с помощью потенциометра,
  • автоматически регулирует яркость в зависимости от окружающего света

Изученные функции:

Название функцииОписание
analogRead(PIN)Считывает аналоговое значение (0–1023) с пина
analogWrite(PIN, val)Устанавливает ШИМ-сигнал (яркость/цвет от 0 до 255)
map(x, in_min, in_max, out_min, out_max)Переводит значение из одного диапазона в другой
constrain(x, a, b)Ограничивает значение в пределах a и b
Serial.begin(9600)Включает монитор порта для отладки
Serial.print/printlnПечать значений для отладки

Описание работы:
RGB-светодиод меняет цвет в зависимости от положения потенциометра.

Фоторезистор измеряет уровень освещённости.

Яркость цвета автоматически адаптируется — чем темнее, тем ярче светит лампа.

Работает 5 режимов цвета, которые переключаются с помощью потенциометра.

Используемые компоненты:

  • Arduino Uno
  • RGB светодиод (общий катод)
  • 3 резистора по 220 Ом (для RGB)
  • Фоторезистор (LDR)
  • Резистор 10 кОм (для LDR)
  • Потенциометр (10 кОм)
  • Соединительные провода, макетная плата

Схема подключения:

Создана в Tinkercad (см. изображение / файл .png)

Основные подключения:

  • RGB LED: пины 11 (R), 10 (G), 9 (B) через резисторы.
  • Потенциометр: средний пин → A0, боковые пины → 5V и GND.
  • Фоторезистор: один конец → 5V, другой → A1 и через резистор на GND.

Схема на Tinkercad

https://www.tinkercad.com/things/7h7zrPASb5m-32-oolamp?sharecode=NgYX4C7-mslXyaub0TKUdnMcX2pI6p7ONZ2ZkagxU5I

Код:

int RED = 11;
int GREEN = 10;
int BLUE = 9;

int potentsiomeeterPIN = A0;
int photoresistorPIN = A1;

int lightLevel, high = 0, low = 1023;

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  int photoresistorVALUE = analogRead(photoresistorPIN);  
  int potentsiomeeterVALUE = analogRead(potentsiomeeterPIN);  

  // Выбираем режим по значению с потенциометра
  int mode = map(potentsiomeeterVALUE, 0, 1023, 1, 5);  
 
  lightLevel = photoresistorVALUE;  
  autoTune();  // Настроим яркость по данным с фоторезистора

  // Отправляем данные в серийный монитор
  Serial.print("photoresistorVALUE: ");
  Serial.print(photoresistorVALUE);
  Serial.print(", lightLevel: ");
  Serial.println(lightLevel);

  // В зависимости от режима, задаем цвет
  if (mode == 1) {
    // Режим 1 — все выключено
    setColor(0, 0, 0);
  } else if (mode == 2) {
    // Режим 2 — голубой (смешиваем синий и зелёный)
    setColor(0, lightLevel, lightLevel);
  } else if (mode == 3) {
    // Режим 3 — красный
    setColor(lightLevel, 0, 0);
  } else if (mode == 4) {
    // Режим 4 — зелёный
    setColor(0, lightLevel, 0);
  } else if (mode == 5) {
    // Режим 5 — синий
    setColor(0, 0, lightLevel);
  }

  delay(100);  // Пауза для стабильности
}

void setColor(int r, int g, int b) {
  analogWrite(RED, r);
  analogWrite(GREEN, g);
  analogWrite(BLUE, b);
}

void autoTune() {
  // Настроим диапазон значений для фоторезистора
  if (lightLevel < low) low = lightLevel;
  if (lightLevel > high) high = lightLevel;

  lightLevel = map(lightLevel, low + 10, high - 30, 0, 255);
  lightLevel = constrain(lightLevel, 0, 255);
}

Видео

https://drive.google.com/file/d/1tpTnjhvr06XcRWQL9laVF1Nk5cXzoR44/view?usp=sharing

Применение в жизни:

  • Умный ночник в детской комнате.
  • Атмосферная подсветка с автоматическим включением при наступлении темноты.
  • Декоративное освещение в интерьере с ручным управлением.