Ночник

Näidis 1

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 (выключаем светодиод)

}

}

Näidis 2

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);

}

RBG lamp

// C++ code
//
const int sensorPin = 5;
const int ledPinR = 7;
const int ledPinB = 5;
const int ledPinG = 3;
const int BUTTON = 0;
int Value_new;

int lightLevel, high = 0, low = 1023;

void setup(){
pinMode(ledPinR, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinG, OUTPUT);

}

void loop()
{
lightLevel = analogRead(sensorPin);
manualTune();
Value_new = analogRead(BUTTON);
Value_new=map(Value_new, 0, 1023, 1, 5);

if (Value_new==2)
{
red();
}
if (Value_new==3)
{
green();
}
if (Value_new==4)
{
blue();
}
else
{
analogWrite(ledPinR, LOW);
}

}

void red()
{

analogWrite(ledPinR, lightLevel);

}

void green()
{

analogWrite(ledPinG, lightLevel);

}

void blue()
{

analogWrite(ledPinB, lightLevel);

}

void manualTune()

{
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}

Öölamp

Töötab sisse/välja režiimis. Kui see on sisse lülitatud ja valgust on palju, siis see ei paista. Ja kui see on sisse lülitatud ja valgust pole, siis see põleb.

Komponeendid:
Arduino Uno
Arendusplaat
RGB_LED
Potentiometer
Photoresistor
Resistor

Ühendamise skeem:

Programm:

const int sensorPin = 5;
const int ledPinR = 7;
const int ledPinB = 5;
const int ledPinG = 3;
const int BUTTON = 0;
int Value_new;

int lightLevel, high = 0, low = 1023;

void setup(){
pinMode(ledPinR, OUTPUT);
pinMode(ledPinB, OUTPUT);
pinMode(ledPinG, OUTPUT);

}

void loop()
{
lightLevel = analogRead(sensorPin);
manualTune();
Value_new = analogRead(BUTTON);
Value_new=map(Value_new, 0, 1023, 1, 2);
//seadke muutuja 2 režiimi

if (Value_new==2)
{
on();
}
else
{
analogWrite(ledPinR, LOW);
}

}

void on()
{

analogWrite(ledPinR, lightLevel);

}

void manualTune()

{
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}

https://www.tinkercad.com/things/dooFIdNjFeE

Video:

Kasutamisvõimalused tavaelus:

Возможности для этой схемы довольно банальны. Например: промышленность, лампы-ночники, освещение улиц, игрушки и т.д.