Sisukord:
Katse 2.1

Kirjeldus:
See programm kasutab potentsiomeetrit, et määrata LED-i vilkumise kiirus. Potentsiomeetri väärtus loetakse analoogsisendist A0 ning see määrab, kui kaua LED põleb ja kustunud on. Samal ajal kuvatakse potentsiomeetri pingetase Serial Monitoris.
Programm:
int sensorPin = 0;
int ledPin = 13;
int sensorValue = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
//loeb analoog sisendi väärtust ja saadab tagasi täisarvu
//vahemikus 0 kuni 1023. See tähendab 10 bitilist täpsust (2^10 = 1024).
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
delay(sensorValue);
float voltage = sensorValue * (5.0 / 1023.0); // konverteerime väärtuse (0 - 1023) ja tagastab (0 - 5V):
Serial.println(voltage); // Saadud tulemused kirjutame Serial Monitori.
}
Kuidas programm töötab:
Setup-funktsioonis määratakse LED-i pin väljundiks ja alustatakse Serial Monitori.
Loop-funktsioonis loetakse potentsiomeetri väärtus ning LED vilgub vastavalt sellele (mida suurem väärtus, seda aeglasem vilkumine).
Samuti kuvatakse arvutatud pinge Serial Monitoris.
Katse 2.2 (Ülesanne 2 Гирлянда-Valguskett)
Töö kirjeldus:
RGB LED-ide vanik, millel on 5 režiimi. Režiime saab muuta potentsiomeetri abil.
Töö protsess:
Projekt kasutab RGB LED-i juhtimiseks potentsiomeetrit, kus potentsiomeetri asendiga saab valida ühe viiest erinevast valgusefektist. Efektide hulka kuuluvad mitmesugused värvimuutused, virvendus ja sujuvad üleminekud värvide vahel. Kõik valgustusrežiimid põhinevad potentsiomeetri väärtusel, mis muudab RGB LED-ide käitumist.
Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (22tk)
Takisti (12tk, 220 Om)
LED RGB (4tk)
Potentsiomeeter (1tk)
Potentsiomeeter rakendamine:
Helitugevuse reguleerimiseks (raadiod, kõlarid); Valgustugevuse muutmiseks (lampides, LED-valgustites); Mootori kiiruse reguleerimiseks; Elektroonikaseadmete täpseks häälestamiseks.
Skeem:

Programm:
const int LED_PINS[4][3] =
{
{4, 3, 2},
{7, 6, 5},
{10, 9, 8},
{13, 12, 11},
};
const int SENSOR_PIN = 0;
const int LED_COUNT = 4;
const int MODES_COUNT = 5;
int currentMode = 0;
int sensorValue = 0;
void setup()
{
for (int i = 0; i < LED_COUNT; i++)
{
for (int j = 0; j < 3; j++)
pinMode(LED_PINS[i][j], OUTPUT);
}
Serial.begin(9600);
}
void setColor(int ledIndex, int r, int g, int b)
{
if (ledIndex < 0 || ledIndex >= LED_COUNT) return;
analogWrite(LED_PINS[ledIndex][0], r);
analogWrite(LED_PINS[ledIndex][1], g);
analogWrite(LED_PINS[ledIndex][2], b);
}
void setRandomColor(int ledIndex)
{
int rand = random(0, 3);
if (rand == 0)
setColor(ledIndex, 255, 0, 0);
else if (rand == 1)
setColor(ledIndex, 0, 255, 0);
else if (rand == 2)
setColor(ledIndex, 0, 0, 255);
}
void readPotentiometer()
{
sensorValue = analogRead(SENSOR_PIN);
currentMode = map(sensorValue, 0, 1023, 0, MODES_COUNT);
currentMode = constrain(currentMode, 0, MODES_COUNT - 1);
Serial.println(currentMode);
}
void loop()
{
readPotentiometer();
if (currentMode == 0)
mode0();
else if (currentMode == 1)
mode1();
else if (currentMode == 2)
mode2();
else if (currentMode == 3)
mode3();
else if (currentMode == 4)
mode4();
else
disable();
}
void disable()
{
for (int i = 0; i < LED_COUNT; i++)
setColor(i, 0, 0, 0);
}
void mode0()
{
for (int i = 0; i < LED_COUNT; i++)
{
setColor(i, 255, 0, 0);
delay(100);
disable();
delay(100);
}
for (int i = LED_COUNT - 1; i >= 0; i--)
{
setColor(i, 0, 255, 0);
delay(100);
disable();
delay(100);
}
for (int i = 0; i < LED_COUNT; i++)
{
setColor(i, 0, 0, 255);
delay(100);
disable();
delay(100);
}
for (int i = LED_COUNT - 1; i >= 0; i--)
{
setColor(i, 255, 0, 0);
delay(100);
disable();
delay(100);
}
}
void mode1()
{
for (int i = 0; i < 3; i++)
{
if (i == 0)
{
for (int j = 0; j < LED_COUNT; j++)
setRandomColor(j);
}
else if (i == 1)
{
for (int j = 0; j < LED_COUNT; j++)
setRandomColor(j);
}
else if (i == 2)
{
for (int j = 0; j < LED_COUNT; j++)
setRandomColor(j);
}
delay(100);
disable();
delay(50);
}
}
void mode2()
{
for (int i = 0; i < 10; i++)
{
int randLed = random(0, LED_COUNT);
setColor(randLed, 255, 255, 255);
delay(100);
disable();
delay(50);
}
}
void mode3()
{
for (int i = 0; i < LED_COUNT; i++)
{
setColor(i, 255, 255, 255);
delay(30);
setColor(i, 255, 0, 0);
delay(30);
setColor(i, 0, 255, 0);
delay(30);
setColor(i, 0, 0, 255);
delay(30);
setColor(i, 255, 255, 0);
delay(30);
}
}
void mode4()
{
for (int i = 0; i < LED_COUNT; i++)
{
setColor(i, 255, 0, 0);
}
delay(100);
for (int i = 0; i < LED_COUNT; i++)
{
setColor(i, 0, 255, 0);
}
delay(100);
for (int i = 0; i < LED_COUNT; i++)
{
setColor(i, 0, 0, 255);
}
delay(100);
}
Video:
Uued funktsioonid:
random(min, max) – tagastab juhusliku täisarvu vahemikus min kuni max.
analogRead(pin) – loeb analoogpordi (nt A0) väärtuse vahemikus 0–1023.
map(value, fromLow, fromHigh, toLow, toHigh) – teisendab väärtuse ühest vahemikust teise.
constrain(x, a, b) – piirab väärtuse x vahemikku a kuni b.
Serial.begin(speed) – alustab Serial Monitori suhtlust määratud kiirusel.
Serial.println(value) – saadab value Serial Monitori ja lisab reavahetuse.
setColor(ledIndex, r, g, b) – määrab LED-ile RGB värvid (0–255).
setRandomColor(ledIndex) – määrab LED-ile juhusliku põhivärvi (punane, roheline või sinine).