Возможно кто то захочет сделать собственную RGB гирлянду, со своими индивидуальными алгоритмами.
Плата Digispark на базе микроконтроллера Attiny85.
Двенадцати вольтовая RGB лента, кнопка и сопротивление 1-10 килоом.
3 мосфет транзистора 50N06 или любые другие N-канальные подходящие по мощности.
Я для сборки устройства использую макетную плату и соединительные провода, вы при желании можете сразу все спаять.
Как прошить плату Digispark на базе микроконтроллера ATtiny 85 смотрите по этой ссылке www.kolotushkin.com/Как прошить плату Digispark на базе микроконтроллера ATtiny 85
или по этой www.youtube.com/Как прошить плату Digispark на базе микроконтроллера ATtiny 85
//Начало скетча
#define Red 4
#define Green 1
#define Blue 0
int r = 0, g = 0, b = 0, sensorVal, x = 3, i = 0, j = 1;
int Speed1 = 5, Speed2 = 5, Speed3 = 5;
void setup() {
pinMode(Red, OUTPUT); pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT); pinMode(2, INPUT_PULLUP);
}
void button2() {
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; if (i > x) {
i = 0;
}
}
}
void offRGB() {
digitalWrite(Red, LOW); digitalWrite(Green, LOW);
digitalWrite(Blue, LOW); r = 0; g = 0; b = 0;
}
void program1() {
b = 255; analogWrite(Blue, b);
if (i == 1) {
while (r < 256) {
analogWrite(Red, r); delay(Speed1);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} r++;
}
}
if (i == 1) {
while (b > 0) {
analogWrite(Blue, b); delay(Speed1);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} b--;
}
}
if (i == 1) {
while (g < 255) {
analogWrite(Green, g); delay(Speed1);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g++;
}
}
if (i == 1) {
while (r > 0) {
analogWrite(Red, r); delay(Speed1);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} r--;
}
}
if (i == 1) {
while (b < 256) {
analogWrite(Blue, b); delay(Speed1);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} b++;
}
}
if (i == 1) {
while (g > 0) {
analogWrite(Green, g); delay(Speed1);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g--;
}
}
}
void program2() {
if (i == 2) {
while (r < 255) {
analogWrite(Red, r); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} r++;
}
}
if (i == 2) {
while (r > 0) {
analogWrite(Red, r); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} r--;
}
}
if (i == 2) {
while (r < 255) {
analogWrite(Red, r);
analogWrite(Blue, r); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} r++;
}
}
if (i == 2) {
while (r > 0) {
analogWrite(Red, r);
analogWrite(Blue, r); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} r--;
}
}
if (i == 2) {
while (b < 256) {
analogWrite(Blue, b); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} b++;
}
}
if (i == 2) {
while (b > 0) {
analogWrite(Blue, b); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} b--;
}
}
if (i == 2) {
while (b < 256) {
analogWrite(Blue, b);
analogWrite(Green, b); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} b++;
}
}
if (i == 2) {
while (b > 0) {
analogWrite(Blue, b);
analogWrite(Green, b); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} b--;
}
}
if (i == 2) {
while (g < 255) {
analogWrite(Green, g); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g++;
}
}
if (i == 2) {
while (g > 0) {
analogWrite(Green, g); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g--;
}
}
if (i == 2) {
while (g < 255) {
analogWrite(Green, g);
analogWrite(Red, g); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g++;
}
}
if (i == 2) {
while (g > 0) {
analogWrite(Green, g);
analogWrite(Red, g); delay(Speed2);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g--;
}
}
}
void program3() {
if (i == 3) {
while (g < 255) {
analogWrite(Green, g); analogWrite(Red, g);
analogWrite(Blue, g); delay(Speed3);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g++;
}
}
if (i == 3) {
while (g > 0) {
analogWrite(Green, g); analogWrite(Red, g);
analogWrite(Blue, g); delay(Speed3);
sensorVal = digitalRead(2); if (sensorVal == HIGH) {
delay(500); i++; offRGB(); if (i > x) {
i = 0;
}
} g--;
}
}
}
void loop() {
button2();
if (i == 0) {
offRGB();
} if (i == 1) {
program1();
}
if (i == 2) {
program2();
} if (i == 3) {
program3();
}
}
//Конец скетча
“button2” - для опроса кнопки, и если кнопка нажата то перейти к следующей функции
“offRGB” - служит для отключения каналов RGB и обнуления переменных “r, g, b”
“program1, program2 и program3” - содержат алгоритмы для RGB ленты
Переменные “Speed1, Speed2 и Speed3” имеют значение “5”. Оно является задержкой, и влияет на скорость выполнения алгоритмов, чем больше это значение тем медленнее скорость выполнения, и наоборот.
Переменная “х” служит для хранения количества режимов для RGB. Значение “3” означает 4 программы (0, 1, 2, 3) = (offRGB, program1, program2, program3). Если вы измените количество программ, то для корректной работы также необходимо изменить значение переменной “x”.
После сборки можно можно подавать питание 12 вольт. При запуске будет выполняться нулевая программа с функцией “offRGB” и лента светиться не будет! Нажмите кратковременно на кнопку и цикл перейдет к программе с функцией “program1”, после второго нажатия “program2”, после третьего “program3” и после четвертого нажатия опять “offRGB”.
В этой схеме я применил мосфет транзисторы 50N06. Они выдерживают напряжение до 60 вольт и ток до 50 ампер. Этого хватит для подключения 140 метров такой RGB ленты как у меня. Вы можете применить любые другие N-канальные мофеты которые подойдут вам по мощности, главное соблюдайте распиновку при их подключении, ОНА МОЖЕТ ОТЛИЧАТЬСЯ от распиновки 50N06!