Katse Nuppude ja Slideswitch’i kasutamise võimalus
Komponendid:

Õpitud funktsioonid:
int button1State, button2State; — переменные для хранения состояния кнопок
if (((button1State == LOW) || (button2State == LOW)) && — если нажата одна из кнопок
!((button1State == LOW) && (button2State == LOW))) — но не обе сразу
Skeem:

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
button2State = digitalRead(button2Pin); // считываем состояние кнопки 2
// если нажата ОДНА из кнопок (т.е. одна LOW, другая HIGH), то включаем светодиод
if (((button1State == LOW) || (button2State == LOW)) &&
!((button1State == LOW) && (button2State == LOW))) {
digitalWrite(ledPin, HIGH); // включаем светодиод
} else {
digitalWrite(ledPin, LOW); // выключаем светодиод
}
}
Kasutamisvõimalused igapäevaelus:
Lihtsaim loogiline kaitse-/juurdepääsusüsteem
(nt luku sisselülitamine, ukse avamine, millegi olulise sisselülitamine) peaks käivituma ainult siis, kui vajutatakse ühte neist, kuid mitte mõlemat korraga.
Опыт с фоторезистором/Fototakisti abil valguse mõõtmine, valgustundlik LED
Projekti koostamiseks läheb vaja:

Õpitud funktsioonid:
Serial.begin(9600);
Serial — это «порт», через который Arduino может отправлять и получать данные. Это как виртуальный кабель, через который Arduino общается с компьютером.
begin(9600) — настраивает скорость передачи данных через этот порт. В данном случае скорость установлена на 9600 бит в секунду. Это значит, что данные будут передаваться со скоростью 9600 бит в секунду
manualTune(); — вызываем функцию для ручной настройки диапазона
Skeem:

Kood:
const int LDR_PIN = A1; // Пин для фоторезистора (LDR)
const int BUTTON_PIN = 3; // Пин для кнопки
const int RED_PIN = 12; // Красный канал RGB-светодиода
const int GREEN_PIN = 10; // Зелёный канал RGB-светодиода
const int BLUE_PIN = 9; // Синий канал RGB-светодиода
// Переменные
int buttonState = 0;
int lastButtonState = 0;
int LDRValue = 0;
bool lampOn = false;
unsigned long lastDebounceTime = 0; // время последнего изменения состояния кнопки
unsigned long debounceDelay = 50; // время для антидребезга
// Порог освещенности: чем меньше, тем темнее (т.е. ночь)
const int LIGHT_THRESHOLD = 400; // чем ниже, тем темнее
void setup() {
pinMode(BUTTON_PIN, INPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Чтение кнопки
int reading = digitalRead(BUTTON_PIN);
// Если кнопка изменила своё состояние
if (reading != lastButtonState) {
lastDebounceTime = millis(); // сбрасываем таймер
}
// Если прошел достаточный интервал (антидребезг)
if ((millis() - lastDebounceTime) > debounceDelay) {
// если кнопка была нажата
if (reading != buttonState) {
buttonState = reading;
// При нажатии кнопки переключаем состояние лампы
if (buttonState == HIGH) {
lampOn = !lampOn;
}
}
}
lastButtonState = reading; // сохраняем текущее состояние кнопки
// Считываем значение LDR
LDRValue = analogRead(LDR_PIN);
// Отладка - выводим значение LDR в монитор
Serial.print("LDR Value: ");
Serial.println(LDRValue);
// Если лампа включена и темно (освещенность ниже порога)
if (lampOn && LDRValue < LIGHT_THRESHOLD) {
// В темноте — включаем с яркостью, зависящей от LDR
// Чем темнее — тем выше яркость
int brightness = map(LDRValue, 0, LIGHT_THRESHOLD, 255, 0);
brightness = constrain(brightness, 0, 255);
// Смешиваем все каналы RGB для белого света
analogWrite(RED_PIN, brightness); // Красный
analogWrite(GREEN_PIN, brightness); // Зеленый
analogWrite(BLUE_PIN, brightness); // Синий
// Отладка - выводим яркость лампы
Serial.print("Lamp is ON, Brightness: ");
Serial.println(brightness);
} else {
// Светло или выключено — лампа не горит
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 0);
// Отладка - выводим, что лампа выключена
Serial.println("Lamp is OFF");
}
// Задержка для стабильности работы программы
delay(100);
}
Kasutamisvõimalused igapäevaelus:
Automaatne öövalgustus
Nutikas rõdu-/verandavalgustus
Tänavavalgustuse fotorelaiendid
Ülesanne 3.1 Öölamp
Eesmärk:
Looma öövalgusti, mis reageerib ümbritsevale valgustusele ja mida saab juhtida nupu või potentsiomeetriga. Projekti eesmärk on rakendada teadmisi Arduino platvormist, elektroonilistest komponentidest ja programmeerimisest, et luua praktiline ja visuaalselt atraktiivne valgustuslahendus.
Nõutud komponendid:
Valgustakisti (LDR – Light Dependent Resistor)
Nupp või potentsiomeeter (valgustuse sisse/välja lülitamiseks või värvi muutmiseks)
LED või RGB LED
Õpitud funktsioonid:
pinMode(pin, mode);
Устанавливает режим работы пина:
INPUT — пин используется для считывания сигнала (например, с кнопки).
OUTPUT — пин используется для вывода сигнала (например, на светодиод).
digitalRead(pin);
Считывает цифровое значение с пина:
Возвращает HIGH (1), если сигнал высокий (например, кнопка нажата).
Возвращает LOW (0), если сигнал низкий (кнопка не нажата).
analogRead(pin);
Считывает аналоговое значение с пина (обычно 0-1023):
Используется для работы с аналоговыми сенсорами, например, с фоторезистором (LDR).
analogWrite(pin, value);
Записывает значение ШИМ (широтно-импульсной модуляции) на пин:
Позволяет регулировать яркость светодиода, где value от 0 (выключено) до 255 (максимальная яркость).
constrain(value, min, max);
Ограничивает число значениями min и max:
Serial.print() и Serial.println();
Отправляют текст или данные в последовательный монитор для отладки.
Skeem:

Kood:
// Пины подключения компонентов
const int LDR_PIN = A1; // Пин для фоторезистора (LDR) — аналоговый вход A1
const int BUTTON_PIN = 3; // Пин для кнопки — цифровой вход 3
const int RED_PIN = 12; // Пин для красного канала RGB-светодиода — цифровой выход 12
const int GREEN_PIN = 10; // Пин для зелёного канала RGB-светодиода — цифровой выход 10
const int BLUE_PIN = 9; // Пин для синего канала RGB-светодиода — цифровой выход 9
// Переменные для состояния
int buttonState = 0; // Текущее состояние кнопки (нажата или нет)
int lastButtonState = 0; // Предыдущее состояние кнопки (для отслеживания изменения)
int LDRValue = 0; // Значение с фоторезистора (яркость окружающего света)
bool lampOn = false; // Флаг включения лампы (true — включена, false — выключена)
// Порог освещённости — ниже этого значения считаем, что темно
const int LIGHT_THRESHOLD = 400; // Если значение LDR меньше этого — темно
void setup() {
pinMode(BUTTON_PIN, INPUT); // Устанавливаем пин кнопки как вход
pinMode(RED_PIN, OUTPUT); // Устанавливаем пин красного канала как выход
pinMode(GREEN_PIN, OUTPUT); // Устанавливаем пин зелёного канала как выход
pinMode(BLUE_PIN, OUTPUT); // Устанавливаем пин синего канала как выход
Serial.begin(9600); // Запускаем последовательный порт для отладки со скоростью 9600 бод
}
void loop() {
// Считываем состояние кнопки (HIGH — нажата, LOW — не нажата)
buttonState = digitalRead(BUTTON_PIN);
// Проверяем изменение состояния кнопки: если сейчас нажата, а была не нажата
if (buttonState == HIGH && lastButtonState == LOW) {
lampOn = !lampOn; // Переключаем состояние лампы (включить/выключить)
delay(200); // Задержка 200 мс для устранения дребезга контактов
}
lastButtonState = buttonState; // Запоминаем текущее состояние кнопки для следующей итерации
// Считываем аналоговое значение с фоторезистора (0-1023)
LDRValue = analogRead(LDR_PIN);
// Если лампа включена и уровень освещения ниже порога (т.е. темно)
if (lampOn && LDRValue < LIGHT_THRESHOLD) {
// Вычисляем яркость светодиода: чем темнее (меньше LDRValue), тем ярче лампа
int brightness = map(LDRValue, 0, LIGHT_THRESHOLD, 255, 0); // Переводим из диапазона 0..400 в 255..0
brightness = constrain(brightness, 0, 255); // Ограничиваем значение яркости в допустимых пределах
// Устанавливаем цвет лампы — фиолетовый (красный + синий)
analogWrite(RED_PIN, brightness); // Красный канал с яркостью brightness
analogWrite(GREEN_PIN, 0); // Зелёный канал выключен
analogWrite(BLUE_PIN, brightness); // Синий канал с яркостью brightness
} else {
// Если светло или лампа выключена — выключаем все каналы RGB
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 0);
}
// Отладочная информация в последовательный порт
Serial.print("LDR: "); // Вывод текста "LDR: "
Serial.print(LDRValue); // Вывод значения с фоторезистора
Serial.print(" | LampOn: "); // Вывод текста " | LampOn: "
Serial.println(lampOn ? "ON" : "OFF"); // Вывод состояния лампы: "ON" или "OFF"
delay(100); // Задержка 100 мс перед следующим циклом
}
Võimalikud rakendused:
- Nutikas öölamp või dekoratiivne valgustus
2. Atmosfääriline ruumivalgustus
3) Automaatne valgustus akvaariumidele või terraariumidel
