Nupp ja photoresistor

Katse Nuppude ja Slideswitch’i kasutamise võimalus

Кнопка

В этом Arduino-проекте используется две кнопки, которые управляют светодиодом.
💡 Логика простая: если нажата только одна кнопка (любая), светодиод загорается.
Если нажаты ни одной — светодиод выключен.

Компоненты:

  • 2 кнопки
  • светодиод
  • 1 резистора 220 om
  • 2 резисторока 10 к om

Схема:

Код:

// Nuppud.

// -----Kood-----

const int button1Pin = 2;   // Пин, к которому подключена кнопка 1
const int button2Pin = 3;   // Пин, к которому подключена кнопка 2
const int ledPin = 13;      // Пин, к которому подключен светодиод

void setup() {
  pinMode(button1Pin, INPUT);  // Устанавливаем пин кнопки 1 как вход
  pinMode(button2Pin, INPUT);  // Устанавливаем пин кнопки 2 как вход
  pinMode(ledPin, OUTPUT);     // Устанавливаем пин светодиода как выход
}

void loop() {
  int button1State, button2State;  // Переменные для хранения состояния кнопок

  button1State = digitalRead(button1Pin);  // Считываем состояние кнопки 1 (HIGH или LOW)
  button2State = digitalRead(button2Pin);  // Считываем состояние кнопки 2

  // Если нажата только одна из кнопок (любая одна, но не обе сразу)
  if (((button1State == LOW) || (button2State == LOW)) &&
      !((button1State == LOW) && (button2State == LOW))) {

    digitalWrite(ledPin, HIGH);  // Включаем светодиод

  } else {
    digitalWrite(ledPin, LOW);   // Выключаем светодиод
  }
}

Использование ползункового переключателя

📌 Этот проект демонстрирует, как можно управлять светодиодом с помощью простого ползункового переключателя. При переключении — лампочка включается или выключается.

Компоненты:

  • резистор
  • ползунок переключателя
  • светодиод
  • батарейка на 9V

Схема:

Код:

// C++ code
//
int swPin = 4;           // Пин кнопки
int ledPin = 10;         // Пин светодиода
int switchState = 0;     // Переменная для хранения состояния кнопки

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

void loop() {
  switchState = digitalRead(swPin);  // Считываем состояние кнопки

  if (switchState == HIGH) {
    digitalWrite(ledPin, HIGH);      // Включаем светодиод, если кнопка нажата
  } else {
    digitalWrite(ledPin, LOW);       // Выключаем светодиод, если кнопка не нажата
  }
}

🧠 Как работает

  1. Arduino постоянно проверяет состояние переключателя.
  2. Если он включён (HIGH) — загорается светодиод.
  3. Если выключен (LOW) — светодиод не горит.
  4. Это очень простой пример работы с цифровыми входами

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

Этот проект демонстрирует, как фоторезистор может управлять яркостью светодиода.
💡 Чем темнее — тем ярче светит лампа. Чем светлее — тем тусклее.

Компоненты:

  • 1 резистор на 220 ом
  • 1 резистор на 10 к ом
  • 1 светодиод
  • 1 фоторезистор

Схема:

Код:

const int sensorPin = 0;    // Пин, к которому подключён фоторезистор (аналоговый вход A0)
const int ledPin = 9;       // Пин, к которому подключён светодиод (ШИМ выход)

int lightLevel, high = 0, low = 1023;  // переменные для измерения освещённости, max и min значений

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

void loop() {
  // analogRead() возвращает значение от 0 (0 В) до 1023 (5 В)
  // analogWrite() управляет ШИМ (яркостью светодиода) от 0 (выключен) до 255 (максимально яркий)

  lightLevel = analogRead(sensorPin);   // Считываем аналоговое значение освещённости

  // Вариант ручной настройки диапазона освещения
  manualTune();

  // Вариант автоматической калибровки (если хочешь — раскомментируй строку ниже)
  // autoTune();

  analogWrite(ledPin, lightLevel);  // Устанавливаем яркость светодиода в зависимости от уровня света

  // Если хочешь, чтобы светодиод загорался при темноте, замени на:
  // analogWrite(ledPin, 255 - lightLevel);

  Serial.print(lightLevel);   // Выводим уровень освещённости в монитор порта
  Serial.println("");         // Переход на новую строку

  delay(1000);                // Задержка 1 секунда
}

// ----- Ручная настройка границ яркости -----
void manualTune() {
  // Преобразуем значение света из диапазона 300–800 в 0–255
  // 300 — темно (будет 0), 800 — светло (будет 255)
  lightLevel = map(lightLevel, 300, 800, 0, 255);

  // Ограничиваем результат диапазоном от 0 до 255
  lightLevel = constrain(lightLevel, 0, 255);
}

// ----- Автоматическая калибровка границ -----
void autoTune() {
  // Если текущий уровень света меньше минимального — обновляем low
  if (lightLevel < low) {
    low = lightLevel;
  }

  // Если текущий уровень света больше максимального — обновляем high
  if (lightLevel > high) {
    high = lightLevel;
  }

  // Преобразуем текущее значение в диапазон 0–255,
  // исключая крайние значения для устойчивости (low+10 и high-30)
  lightLevel = map(lightLevel, low + 10, high - 30, 0, 255);

  // Ограничиваем результат диапазоном от 0 до 255
  lightLevel = constrain(lightLevel, 0, 255);
}

🧠 Как работает

  1. 📥 Фоторезистор измеряет уровень освещения (0–1023).
  2. 🔄 Значение преобразуется в яркость для светодиода (0–255).
  3. 🌓 Чем меньше света — тем выше значение, тем ярче светодиод.
  4. 🔧 Есть два режима:
    • Ручной — фиксированный диапазон от 300 до 800
    • Автоматический — границы настраиваются во время работы

🌙 Умный ночник на Arduino

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

  • Arduino Uno
  • Макетная плата (breadboard)
  • Светодиод (LED, RGB)
  • Фоторезистор
  • Потенциометр
  • 3 pезистора 220 ом
  • 1 резистор 10 к ом

Схема соединения:

Описание схемы Arduino-проекта

  • Фоторезистора (A1) — измеряет уровень освещённости.
  • Потенциометра (A0) — позволяет пользователю выбрать один из четырёх цветов.
  • RGB-светодиода (пины 9, 10, 11) — отображает выбранный цвет.
  • Три резистора — ограничивают ток на ножках RGB.
  • Питание через Arduino Uno, подключённое по USB.

Как работает код:

  1. Фоторезистор определяет, светло или темно.
  2. Если темно (освещённость < 800):
    • RGB-светодиод включается.
    • Цвет выбирается с помощью поворота потенциометра.
  3. Если светло (освещённость ≥ 800):
    • RGB-светодиод отключается.
  4. Все значения выводятся в Serial Monitor для отладки.

Ниже расмотрим код:

const int potPin = A0;           // Потенциометр
const int lightSensorPin = A1;   // Фоторезистор

const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;

int lightLevel;
int potValue;
int colorMode;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  Serial.begin(9600);
}

void loop() {
  // Считываем значения
  potValue = analogRead(potPin);
  lightLevel = analogRead(lightSensorPin);

  // Определяем цвет по потенциометру
  colorMode = map(potValue, 0, 1023, 0, 4);  // 0–3

  if (lightLevel < 800) {
    // Темно → включаем выбранный цвет
    if (colorMode == 0) {
      setColor(255, 0, 0);     
    } else if (colorMode == 1) {
      setColor(0, 255, 0);     
    } else if (colorMode == 2) {
      setColor(0, 0, 255);     
    } else if (colorMode == 3) {
      setColor(255, 255, 0);   
    }
  } else {
    // Светло → выключаем лампу
    setColor(0, 0, 0);
  }

  // Отладка
  Serial.print(" Mode: ");
  Serial.println(colorMode);

  delay(100);
}

void setColor(int r, int g, int b) {
  analogWrite(redPin, r);
  analogWrite(greenPin, g);
  analogWrite(bluePin, b);
}

Объявление переменных:

const int potPin = A0;           // Пин потенциометра
const int lightSensorPin = A1;   // Пин фоторезистора

const int redPin = 9;            // Пин красного канала RGB
const int greenPin = 10;         // Пин зелёного канала RGB
const int bluePin = 11;          // Пин синего канала RGB

int lightLevel;                  // Текущее значение освещённости
int potValue;                    // Значение с потенциометра
int colorMode;                   // Режим (0–3), выбранный цвет

Код делиться на несколько блоков

void setup() {
  pinMode(redPin, OUTPUT);   // Этот пин управляет красным каналом RGB-светодиода.
  pinMode(greenPin, OUTPUT);   // Этот пин управляет зеленым каналом RGB-светодиода.
  pinMode(bluePin, OUTPUT);   // Этот пин управляет синим каналом RGB-светодиода.
  
  Serial.begin(9600);  // Включает последовательную связь (Serial Monitor) со скоростью 9600 бит/сек.
}

Это функция, которая выполняется один раз при старте Arduino. В ней задаются начальные настройки: направления пинов, скорость обмена с компьютером и другие параметры.

void loop() {
  // Считываем значения
  potValue = analogRead(potPin);
  lightLevel = analogRead(lightSensorPin);

  // Определяем цвет по потенциометру
  colorMode = map(potValue, 0, 1023, 0, 4);  // 0–3

  if (lightLevel < 800) {
    // Темно → включаем выбранный цвет
    if (colorMode == 0) {   // Красный
      setColor(255, 0, 0);     
    } else if (colorMode == 1) { // Зелёный
      setColor(0, 255, 0);     
    } else if (colorMode == 2) { // Синий
      setColor(0, 0, 255);     
    } else if (colorMode == 3) { // Жёлтый
      setColor(255, 255, 0);   
    }
  } else {
    // Светло → выключаем лампу
    setColor(0, 0, 0);
  }

analogRead(potPin) — получает значение от потенциометра (0–1023).

analogRead(lightSensorPin) — получает значение от фоторезистора (0–1023).

map(...) переводит диапазон 0–1023 в значения 0, 1, 2 или 3.

if (lightLevel < 800) – Если значение с фоторезистора меньше 800 (темно)

setColor(0, 0, 0); – Если значение освещённости 800 или выше, то все цвета отключаются (RGB = 0,0,0).

// Отладка
  Serial.print("Mode: ");
  Serial.println(colorMode);

  delay(100);
}

Для себя чтобы видить значения Mode: в Serial Monitor

Serial.print() не делает перехода на новую строку

void setColor(int r, int g, int b) {
  analogWrite(redPin, r);
  analogWrite(greenPin, g);
  analogWrite(bluePin, b);
}

void — означает, что функция ничего не возвращает.

setColor — имя функции.

(int r, int g, int b) — она принимает три параметра:

analogWrite(...) — отправляет ШИМ-сигнал (PWM) на каждый пин

0 — полностью выключен

255 — максимально яркий

Как пользователь видит работу:

  • При темноте светодиод загорается.
  • В зависимости от положения потенциометра загорается:
    • 🔴 Красный
    • 🟢 Зелёный
    • 🔵 Синий
    • 🟡 Жёлтый
  • При свете — лампа автоматически выключается.

Видео

Видео схемы, как работает код на www.tinkercad.com

Так же видео как работает в реальности наш проект ночник

Применение проекта:

  • Умный ночник для спальни или детской.
  • Проект по основам Arduino в школе/колледже.
  • Интерактивный светильник с управлением яркостью и цветом.
  • Простой пример использования аналоговых датчиков и RGB-светодиода.