3.1 Nupp (Опыт с кнопкой):

// Nuppud (КНОПКИ).
// У кнопок есть два контакта, если кнопка нажата - контакт замкнут, если не нажата - разомкнут.
-----Код для Кнопки и светодиода-----
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 (выключаем светодиод)
}
}
3.2 Опыт с фоторезистором/Fototakisti abil valguse mõõtmine, valgustundlik LED:

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);
}
Uued Funktisonid:
pinMode(ledPin, OUTPUT) – устанавливает режим вывода для пина ledPin как выходной (OUTPUT), что означает, что мы можем контролировать напряжение на этом пине.
int lightLevel, high = 0, low = 1023 – это объявление переменных с типом данных integer (целочисленный тип) – lightLevel, low, high Переменные hgh и low инициализируются соответственно значениями 0 и 1023.
Ülesanne 3 Öölamp:

https://www.tinkercad.com/things/bsuGPxRHtpQ-nochnik
Ma kasutasin:
Üks LED
2 takisti
Arendusplaat
Arduino Uno
Juhtmed
1 Potentsiomeeter
1 Photoresistor
Töö kirjeldus:
На уроке мы разобрали принцип работы фоторезистора и принцип работы кнопки, но кнопку я не использовал в коде из-за сложности реализации. Самостоятельно я собрал схему с использованием фоторезистора, потонциометра и LED лампы
Tunnis oleme selgitanud fotoresistori ja nupu põhimõtet, kuid ma ei kasutanud koodis nuppu, kuna rakendamine on keerukas. Olen ehitanud vooluahela, kasutades fotoresistori, potentsiomeetrit ja LED-lampi
Tööpõhimõte:
Фоторезистор пока в комнате есть свет не запускает LED Когда свет пропадает, то LED начинает гореть. В классе это было реализовать сложно, из-за того что минимальное значение у фоторезистора было не 0, а 165. Получилось этл исправить благодаря функцииmap(). Потонциометр отвечает за выключение ночника когда его значения в диапазоне от 124 до 255
Niikaua kui ruumis on valgus, ei käivita fotoresistor LED-i. Kui valgus kustub, hakkab LED süttima. Seda oli klassis raske rakendada, sest fototakisti minimaalne väärtus ei olnud 0, vaid 165. Meil õnnestus see tänu funktsioonile functionmap() ära parandada. Potentsiomeeter vastutab öövalgustuse väljalülitamise eest, kui selle väärtus on vahemikus 124 kuni 255.
Kood:
const int ledPin = 11;
const int PhotoPin= 0;
const int buttonPin = 1;
int sensorValue = 0;
int lightLevel, high = 0, low = 1023;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop()
{
int buttonState;
sensorValue = analogRead(buttonPin);
sensorValue=map(sensorValue,0,1023,0,255);
Serial.print(sensorValue);
if (sensorValue <=123) // kui nupu on alla vajutatud
{
autoTune();
lightLevel = analogRead(PhotoPin);
lightLevel=map(lightLevel,165,255,0,255);
lightLevel = constrain(lightLevel, 0, 255);
analogWrite(ledPin, lightLevel);
Serial.print(lightLevel);
Serial.println("");
delay(100);
}
else
{
autoTune();
analogWrite(ledPin, 0);
}
}
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);
}
https://drive.google.com/file/d/1OtGdB6LyD8rOSRMC2Pme1PURyfm3Kphv/view?usp=share_link
Фоторезисторы, также известные как фоточувствительные резисторы или LDR (light-dependent resistors), используются в различных областях:
1.Освещение и автоматические системы: Фоторезисторы часто используются в системах автоматического освещения, где они реагируют на уровень освещенности окружающей среды. Они могут регулировать яркость светильников в зависимости от условий освещения.
2.Фотографическая техника: Фоторезисторы применяются в фотоаппаратах для измерения уровня света и автоматической настройки экспозиции. Они помогают определить оптимальные параметры съемки в различных условиях освещения.
3.Безопасность и охрана: Фоторезисторы используются в системах безопасности и охраны для обнаружения движения или присутствия объектов. Они могут активировать систему сигнализации или освещение при обнаружении изменения уровня освещенности.
4.Электроника и робототехника: Фоторезисторы могут использоваться в электронных схемах и робототехнике для обнаружения препятствий или линий на основе изменения освещенности. Например, они могут использоваться в роботах-пылесосах для определения границ комнаты или препятствий на пути движения.
5.Энергосбережение: Фоторезисторы могут быть частью систем энергосбережения, например, в уличных светильниках, которые автоматически включаются при наступлении сумерек и выключаются при достаточном дневном свете.