3.1.1 Katse Nuppude ja Slideswitch’i kasutamise võimalus
Töö kirjeldus:
Looma situatsiooni kui LED põleb nuppu vajutamisel
Komponendid:
Arduino Uno
Arendusplaat
LED valgusdiood
Takisti 3 tk 220 Om
Juhtmed 7 tk
Ühendamise skeem:

Programm:
const int button1Pin = 2; //viik kunu on ühebdatud nupp1
const int button2Pin = 3; //viik kuhu on ühendatud nupp2
const int ledPin = 13;
void setup()
{
pinMode(button1Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(button2Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(ledPin, OUTPUT); //algväärtuse LED viigu väljundiks
}
void loop()
{
int button1State, button2State; //nupu oleku muutujad ( переменные для сохранения состояния кнопок)
// Поскольку кнопки имеют только два состояния (нажаты и не нажаты) мы будем
// работать с ними используя цифровые порты ввода. Для того чтобы считывать
// digitalRead() функция позволяет получить один параметр с цифрового порта и возвратить либо HIGH (+5V), либо LOW ("0").
button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse
button2State = digitalRead(button2Pin);
if (((button1State == LOW) || (button2State == LOW)) // kui nupu on alla vajutatud (сравниваем, нажата ли одна из кнопок)
&& ! // и если нет
((button1State == LOW) && (button2State == LOW))) // kui nupude on alla vajutatud (сравниваем, нажаты ли обе кнопки тогда...)
{
digitalWrite(ledPin, HIGH); // süütame LEDi (включаем светодиод)
}
else
{
digitalWrite(ledPin, LOW); // kustutame LEDi (выключаем светодиод)
}
}
Foto:
Nuppu vajutamisel LED põleb
3.1.2 Slideswitch’i kasutamine
Töö kirjeldus:
Looma
Komponenid:
Arduino Uno
Arendusplaat
Patarei 9V
SlideSwitch 1tk
LED valgusdiood
Takisti 1 tk 220 Om
Juhtmed 7 tk
Ühendamise skeem:

Programm:
// 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);
}
}
Foto:
Switch ON — LED põleb, Switch OFF — LED ei põle
3.2 Katse Photoresistor
Töö kirjeldus:
Imiteerima pime ja valgust, et LED põleks pime ajal ja valguse ajal ei põleks
Komponendid:
Arduino Uno
Arendusplaat
Fototakisti 1tk
LED valgusdiood
Takisti 1 tk 220 Om, 1 tk 10 kOm
Juhtmed 6 tk
Ühendamise skeem:

Programm:
const int sensorPin = 0;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023; // создадим глобальные переменные для уровней яркости high (высокий), low (низкий):
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // //Serial monitori seadistamine (для отладки, чтобы увидеть показания датчиков)
}
void loop()
{
// Диапазон чисел с которыми работает функция analogRead() находится в пределах от 0 (0 вольт) и 1023 (5 вольт).
// Но! Управлением яркостью светодиода занимается функция analogWrite(), она использует диапазон от от 0 до 255.
lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
// Эту проблему можно решить с помощью двух полезных функций под названием map() и constrain():
// Функция map() может преобразовывать один диапазон значений в другой. К примеру - мы указываем map() в параметрах, диапазон "из" 0-1023 "в" 0-255, она преобразует первый больший диапазон во второй, более мелкий.
// Поскольку map() может столкнуться с числами за пределами диапазона, скажем или больше, или меньше, или даже с отрицательными.
// Поэтому нужно за ранее подготовиться к такому повороту событий, для этого можно, и даже нужно использовать еще одну функцию - constrain().
// Функция constrain() проверит содержится ли число в заданном диапазоне.
// Если число выше диапазона, он будет уменьшено до самого большого, а если число ниже диапазона, он будет увеличенно до самого низкого
// Пример: если constrain() столкнулось с числами 1024, 1025, 1026.., она их преобразует в 1023, 1023, 1023..). С отрицательными числами она сделает тоже самое, т.е все отрицательные станут 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) // если уровень "lightLevel" меньше 1023, то присвоим
{
low = lightLevel; // теперь самым "низким" ~ 800
}
if (lightLevel > high)
{
high = lightLevel;
}
lightLevel = map(lightLevel, low+0, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}
Foto:
Valguse vahetamisel LED põleb kui on pime, kui on valgus siis LED ei põle
Ülesanne 3.1 Öölamp
Töö kirjeldus:
Luua öölamp
Komponenid:
Arduino Uno
Arendusplaat
RGB LED valgusdiood 1tk
Potentsioometr 1tk
Fototakisti 1 tk
Takisti 1 tk 10 K Om
Takisti 1 tk 220 Om
Juhtmed 12 tk
Ühendamise skeem:

Seletamine:
Öölamp ei põle kui potentsiomeetri väärtus on väiksem või võrdleb 10 ning kui fototakisti väärtus on <100 siis ei põle.
Juhul kui eespool nimetatud kriteriiumid on suurem siis random funktsioonil valib põlemise intensiivsus 0-255.
Programm:
//defineerime pinne RGB LED, potentsiometer ja fototakisti
int redPin = 4;
int greenPin = 2;
int bluePin = 3;
int potentiometerPin = A0;
int photoresistorPin = A1;
void setup() {
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
int photoresistorValue = analogRead(photoresistorPin); //loeme fototakisti andmed
int potentiometerValue = analogRead(potentiometerPin); //loeme potentsiometri andmed
Serial.println(photoresistorValue);
if (photoresistorValue < 100) { //juhul kui fototakisti väärtus on <100 siis ei põle
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
else {
if (potentiometerValue <= 10) { //juhul kui potenstiomeetri väärtus on <= 10 siis ei põle
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
else {
analogWrite(redPin, random(255)); //kui potentsioometri väärtus on suurem > 10 siis põleb random 0-255 tugevusel
analogWrite(greenPin, random(255));
analogWrite(bluePin, random(255));
delay(300);
}
}
}
Video:
https://drive.google.com/drive/folders/1QIIOFeZJeWjZsU1fwYtt2furDs4VmduP
Kus võib seda kasutada:
Öölampid, öösel põleb, päeval ei põle
Päikesepaneelid, mis võtavad vastu elektri valgusest
Trükimasinasse esitatavate paberilehtede arvu kontrollimine
infrapunakiirguse
infrapuna soojus- ja spektromeetria sensorite
keskkonnasaaste kontrolli aparatuuri
kosmoseuuringute
termodiagnostika meditsiinis
Ülesanne 3.1 Öölamp (Teine variant)

Programm:
const int slideSwitchPin = 12;
const int rgbRedPin = 7;
const int rgbGreenPin = 6;
const int rgbBluePin = 5;
const int buttonPin = 4;
const int photoresistorPin = A0;
int brightnessMode = 0; // 0 = madal heledus, 1 = keskmine heledus, 2 = kõrg heledus
int photoresistorValue = 0;
bool isDark = false;
void setup() {
pinMode(slideSwitchPin, INPUT_PULLUP);
pinMode(rgbRedPin, OUTPUT);
pinMode(rgbGreenPin, OUTPUT);
pinMode(rgbBluePin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// Loe fototakisti väärtust
photoresistorValue = analogRead(photoresistorPin);
// Kontrollige, kas slaidilüliti on sisse lülitatud
if (digitalRead(slideSwitchPin) == HIGH)
{
// Kontrollige, kas on pime
if (photoresistorValue > 500)
{
isDark = true;
}
else
{
isDark = false;
}
// Kui on pime, lülitage sisse RGB LED
if (isDark) {
// Kontrollige, kas nuppu vajutatakse heledusrežiimi muutmiseks
if (digitalRead(buttonPin) == LOW) {
brightnessMode = (brightnessMode + 1) % 3;
delay(100); // Wait for button debounce
}
// RGB LED-i heleduse määramine heleduse režiimi alusel
switch (brightnessMode)
{
case 0:
setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 20);
break;
case 1:
setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 127);
break;
case 2:
setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 255);
break;
}
// RGB LED-i värvi määramine valgeks
setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 255, 255, 255);
}
else
{
// Kui see pole pime, lülitage RGB LED välja ja lähtestage heledusrežiim
setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 0, 0, 0);
brightnessMode = 0;
}
}
else
{
// Kui slaidilüliti on välja lülitatud, lülitage RGB LED välja ja lähtestage heledusrežiim
setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 0, 0, 0);
brightnessMode = 0;
}
// Prindi fototakisti ja isDark (0 on hele, 1 on tume) väärtus Serial Monitor
Serial.print("Photoresistor value: ");
Serial.print(photoresistorValue);
Serial.print(", isDark: ");
Serial.println(isDark);
}
// Helper function to set the color of the RGB LED
void setRgbColor(int redPin, int greenPin, int bluePin, int redValue, int greenValue, int blueValue) {
analogWrite(redPin, redValue);
analogWrite(greenPin, greenValue);
analogWrite(bluePin, blueValue);
}
// Helper function to set the brightness of the RGB LED
void setRgbBrightness(int redPin, int greenPin, int bluePin, int brightness) {
analogWrite(redPin, brightness);
analogWrite(greenPin, brightness);
analogWrite(bluePin, brightness);
}