Your cart is currently empty!
Valguskett
Projektiülesanne: Valguskett
Eesmärk:
Luua valguskett, mis koosneb mitmest LED-ist (tavalised või RGB), ning töötab mitmes erinevas valgusrežiimis.
Režiimi saab valida potentsiomeetri abil. Iga režiim annab valguskettale erineva käitumise või visuaalse efekti.
Projekt arendab teadmisi Arduino programmeerimisest, LED-ide juhtimisest, massiivide kasutamisest ja andurite lugemisest.
Töö kirjeldus:
Koostage diagramm 5 LED-i töörežiimiga, mida lülitatakse potentsiomeetrit pöörates
Kasutatud komponendid:
Arduino UNO plaat (1tk)
Juhtmed (14tk)
Takisti (9tk, 220 Ω)
LED (9tk: 3 punane, 3 roheline, 3 kollane)
Potentsiomeeter (1tk, 250 kΩ)
Töö protsess:
Ühendage dioodid, takisti, juhtmed ja potentsiomeeter plaadiga.
Režiim muutub, keerates potentsiomeetril olevat nuppu.
Loodud režiimid:
1. Kõik LED-id vilguvad korraga. (void all_on)
2. LED-id vilguvad järjest ükshaaval. (void consecutive)
3. LED-id vilguvad värvi kaupa (RGB korral – punased, rohelised, sinised). (void rgb)
4. LED-id vilguvad juhuslikus järjekorras (küünlaefekt). (void candleEffect)
5. “Jooksva tule” efekt – valgus liigub järjest läbi LED-ide. (void running_light)
Uued funktsioonid, mis oli kasutatud
Massiiv LED-ide jaoks:
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);
LED-ide seadistamine:
void setup() {
for (int i = 0; i < arrayLength; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
Režiimi valimine potentsiomeetri abil:
int potValue = analogRead(A0);
int mode = map(potValue, 0, 1023, 0, 4); // 0–4 = viis režiimi
mode = constrain(mode, 0, 4);
random() funktsioon candleEffect režiimis:
void candleEffect() {
for (int i = 0; i < arrayLength; i++) {
int flickerChance = random(0, 10); // 0–9
if (flickerChance < 3) { // Umbes 30% tõenäosus, et LED vilgub
digitalWrite(ledPins[i], HIGH);
delay(random(10, 100)); // juhuslik vilkumise kestus
digitalWrite(ledPins[i], LOW);
delay(random(10, 50)); // juhuslik paus
}
}
}
Käivitav kood:
// объявление используемых пинов
int ledPins[] = {13, 12, 11, 10, 9, 8, 7, 6, 5};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);
// разделение на массивы по цвету для функции candleEffect()
const uint8_t redPins[] = {5, 8, 11};
const uint8_t greenPins[] = {6, 9, 12};
const uint8_t bluePins[] = {7, 10, 13};
void setPins(const uint8_t pins[], size_t n, uint8_t state)
{
for (size_t i = 0; i < n; ++i) {
digitalWrite(pins[i], state);
}
}
void setup() {
for (int i = 0; i < arrayLength; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
//горят все леды
void all_on()
{
for (int i = 0; i < arrayLength; i++) {
digitalWrite(ledPins[i], HIGH);}
delay(1000);
for (int i = 0; i < arrayLength; i++) {
digitalWrite(ledPins[i], LOW);}
delay(1000);
}
//все леды горят по порядку
void consecutive()
{
for (int i = 0; i < arrayLength; i++) {
digitalWrite(ledPins[i], HIGH);
delay(1000);
digitalWrite(ledPins[i], LOW);
delay(1000);
}
}
//горят только леды своего цвета
void rgb()
{
// горит только массив из красных ледов
setPins(redPins, sizeof(redPins), HIGH);
delay(1000);
setPins(redPins, sizeof(redPins), LOW);
delay(1000);
// горит только массив из зеленых ледов
setPins(greenPins, sizeof(greenPins), HIGH);
delay(1000);
setPins(greenPins, sizeof(greenPins), LOW);
delay(1000);
// горит только массив из синих ледов
setPins(bluePins, sizeof(bluePins), HIGH);
delay(1000);
setPins(bluePins, sizeof(bluePins), LOW);
delay(1000);
}
//эффект свечи - загораются случайные леды быстро
void candleEffect() {
for (int i = 0; i < arrayLength; i++) {
int flickerChance = random(0, 10); // 0–9
if (flickerChance < 3) { // Umbes 30% tõenäosus, et LED vilgub
digitalWrite(ledPins[i], HIGH);
delay(random(10, 100)); // juhuslik vilkumise kestus
digitalWrite(ledPins[i], LOW);
delay(random(10, 50)); // juhuslik paus
}
}
}
//бегущий свет - быстро загораются и тухнут леды по порядку
void running_light()
{
for (int i = 0; i < arrayLength; i++) {
digitalWrite(ledPins[i], HIGH);
delay(50);
digitalWrite(ledPins[i], LOW);
delay(50);
}
}
void loop() {
int potValue = analogRead(A0);
int mode = map(potValue, 0, 1023, 0, 4); // 0–4 = viis režiimi
// передача значений режимов потенциометру
mode = constrain(mode, 0, 4);
if (mode==0)
{
all_on();
}
else if (mode==1)
{
consecutive();
}
else if (mode==2)
{
rgb();
}
else if (mode==3)
{
running_light();
}
else if (mode==4)
{
candleEffect();
}
}
Skeem Tinkercad'is