Через пару дней новый год, и возможно кто то захочет сделать собственный RGB контроллер на 2 RGB канала, на которые можно вешать аж по 110 метров светодиодной RGB ленты, со своими индивидуальными алгоритмами.
Плата Arduino NANO.
Две двенадцати вольтовые RGB ленты.
Кнопка и сопротивление 1-10 килоом.
6 мосфет транзисторов T40N03G или любые другие N-канальные подходящие по мощности.
Для сборки устройства я еще использую макетную плату и соединительные провода, вы при желании можете сразу все спаять.
//Начало скетча
- #define Red1 3
- #define Green1 5
- #define Blue1 6
- #define Red2 9
- #define Green2 10
- #define Blue2 11
- int r=0, g=0, b=0, sensorVal, x=8, i=0, j=0, SpeedR;
- int Speed1=5, Speed2=5, Speed3=5, Speed4=5, Speed5=5, Speed6=5, Speed7=5;
- int Random1, Random2, Random3, Random4, Random5, Random6;
- void setup(){
- pinMode(Red1, OUTPUT);pinMode(Green1, OUTPUT);
- pinMode(Blue1, OUTPUT);pinMode(Red2, OUTPUT);
- pinMode(Green2, OUTPUT);pinMode(Blue2, OUTPUT);
- pinMode(2, INPUT_PULLUP); //подключение кнопки к pin 2
- }
- void button2(){
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; if (i>x){i=0;}}
- }
- void offRGB(){
- digitalWrite(Red1, LOW);digitalWrite(Green2, LOW);
- digitalWrite(Blue1, LOW);digitalWrite(Red2, LOW);
- digitalWrite(Green1, LOW);digitalWrite(Blue2, LOW);
- r=0, g=0, b=0;
- }
- void program1(){
- if (i==1){
- while (r < 256) {
- analogWrite(Red1, r);analogWrite(Red2, r);delay(Speed1);
- sensorVal = digitalRead(2); r++;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==1){while (b > 0) {
- analogWrite(Blue1, b);analogWrite(Blue2, 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(Green1, g);analogWrite(Green2, 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(Red1, r);analogWrite(Red2, 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(Blue1, b);analogWrite(Blue2, 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(Green1, g);analogWrite(Green2, 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(Red1, r);analogWrite(Red2, 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(Red1, r);analogWrite(Red2, 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(Red1, r);analogWrite(Red2, r);
- analogWrite(Blue1, r);analogWrite(Blue2, 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(Red1, r);analogWrite(Red2, r);
- analogWrite(Blue1, r);analogWrite(Blue2, 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(Blue1, b);analogWrite(Blue2, 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(Blue1, b);analogWrite(Blue2, 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(Blue1, b);analogWrite(Blue2, b);
- analogWrite(Green1, b);analogWrite(Green2, 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(Blue1, b);analogWrite(Blue2, b);
- analogWrite(Green1, b);analogWrite(Green2, 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(Green1, g);analogWrite(Green2, 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(Green1, g);analogWrite(Green2, 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(Green1, g);analogWrite(Green2, g);
- analogWrite(Red1, g);analogWrite(Red2, 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(Green1, g);analogWrite(Green2, g);
- analogWrite(Red1, g);analogWrite(Red2, 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(Green1, g);analogWrite(Red2, g);
- analogWrite(Blue1, g);analogWrite(Green2, g);
- analogWrite(Red1, g);analogWrite(Blue2, g);delay(Speed3);
- sensorVal = digitalRead(2);g++;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==3){while (g > 0){
- analogWrite(Green1, g);analogWrite(Red2, g);
- analogWrite(Blue1, g);analogWrite(Green2, g);
- analogWrite(Red1, g);analogWrite(Blue2, g);delay(Speed3);
- sensorVal = digitalRead(2); g--;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}}
- void program4(){b=255; analogWrite(Blue1, b);analogWrite(Red2, b);
- while (j < 1) {if (i==4&&j < 1){while (r < 256) {
- analogWrite(Red1, r);analogWrite(Green2, r);delay(Speed4);
- sensorVal = digitalRead(2); r++;if (sensorVal == HIGH) {
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==4&&j < 1){while (b > 0) {
- analogWrite(Blue1, b);analogWrite(Red2, b);delay(Speed4);
- sensorVal = digitalRead(2); b--;if (sensorVal == HIGH) {
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==4&&j < 1){while (g < 255){
- analogWrite(Green1, g);analogWrite(Blue2, g);delay(Speed4);
- sensorVal = digitalRead(2); g++;if (sensorVal == HIGH) {
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==4&&j < 1){while (r > 0){
- analogWrite(Red1, r);analogWrite(Green2, r);delay(Speed4);
- sensorVal = digitalRead(2); r--;if (sensorVal == HIGH) {
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==4&&j < 1){while (b < 256){
- analogWrite(Blue1, b);analogWrite(Red2, b);delay(Speed4);
- sensorVal = digitalRead(2); b++;if (sensorVal == HIGH) {
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==4&&j < 1){while (g > 0){
- analogWrite(Green1, g);analogWrite(Blue2, g);delay(Speed4);
- sensorVal = digitalRead(2); g--;if (sensorVal == HIGH) {
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}}
- }}}j=0;
- }
- void program5(){
- if (i==5){while (r < 255){
- analogWrite(Red1, r);analogWrite(Green2, r);delay(Speed5);
- sensorVal = digitalRead(2); r++;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){i=0;}}
- }}
- if (i==5){while (r > 0) {
- analogWrite(Red1, r);analogWrite(Green2, r);delay(Speed5);
- sensorVal = digitalRead(2); r--;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (r < 255){
- analogWrite(Red1, r);analogWrite(Green2, r);
- analogWrite(Green1, r);analogWrite(Blue2, r);delay(Speed5);
- sensorVal = digitalRead(2); r++;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (r > 0){
- analogWrite(Red1, r);analogWrite(Green2, r);
- analogWrite(Green1, r);analogWrite(Blue2, r);delay(Speed5);
- sensorVal = digitalRead(2); r--;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (b < 256){
- analogWrite(Green1, b);analogWrite(Blue2, b);delay(Speed5);
- sensorVal = digitalRead(2); b++;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (b > 0){
- analogWrite(Green1, b);analogWrite(Blue2, b);delay(Speed5);
- sensorVal = digitalRead(2); b--;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (b < 256){
- analogWrite(Green1, b);analogWrite(Blue2, b);
- analogWrite(Blue1, b);analogWrite(Red2, b);delay(Speed5);
- sensorVal = digitalRead(2); b++;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (b > 0){
- analogWrite(Green1, b);analogWrite(Blue2, b);
- analogWrite(Blue1, b);analogWrite(Red2, b);delay(Speed5);
- sensorVal = digitalRead(2); b--;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (g < 255){
- analogWrite(Blue1, g);analogWrite(Red2, g);delay(Speed5);
- sensorVal = digitalRead(2); g++;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (g > 0){
- analogWrite(Blue1, g);analogWrite(Red2, g);delay(Speed5);
- sensorVal = digitalRead(2); g--;if (sensorVal == HIGH) {
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (g < 255){
- analogWrite(Blue1, g);analogWrite(Red2, g);
- analogWrite(Red1, g);analogWrite(Green2, g);delay(Speed5);
- sensorVal = digitalRead(2); g++;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}
- if (i==5){while (g > 0){
- analogWrite(Blue1, g);analogWrite(Red2, g);
- analogWrite(Red1, g);analogWrite(Green2, g);delay(Speed5);
- sensorVal = digitalRead(2); g--;if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}}
- }}}
- void program6(){if (i==6){while (g < 255){
- analogWrite(Green1, g);analogWrite(Red2, g);
- analogWrite(Blue1, g);analogWrite(Green2, g);;delay(Speed6);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){i=0;}} g++;
- }}
- if (i==6){while (g > 0){
- analogWrite(Green1, g);analogWrite(Red2, g);
- analogWrite(Blue1, g);analogWrite(Green2, g);delay(Speed6);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}} g--;
- }}
- if (i==6){while (g < 255){
- analogWrite(Green1, g);analogWrite(Red2, g);
- analogWrite(Red1, g);analogWrite(Blue2, g);delay(Speed6);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){i=0;}} g++;
- }}
- if (i==6){while (g > 0){
- analogWrite(Green1, g);analogWrite(Red2, g);
- analogWrite(Red1, g);analogWrite(Blue2, g);delay(Speed6);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}} g--;
- }}
- if (i==6){while (g < 255){
- analogWrite(Blue1, g);analogWrite(Green2, g);
- analogWrite(Red1, g);analogWrite(Blue2, g);delay(Speed6);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){i=0;}} g++;
- }}
- if (i==6){while (g > 0){
- analogWrite(Blue1, g);analogWrite(Green2, g);
- analogWrite(Red1, g);analogWrite(Blue2, g);delay(Speed6);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; offRGB(); if (i>x){ i=0;}} g--;
- }}}
- void program7(){while (j<1){
- Random1 = random (3, 7);Random4 = random (8, 12);
- Random2 = random (3, 7);Random5 = random (8, 12);
- Random3 = random (3, 7);Random6 = random (8, 12);
- if (i==7){ while (g < 255&&j < 1){
- analogWrite(Random1, g);analogWrite(Random4, g);
- analogWrite(Random2, g);analogWrite(Random5, g);
- analogWrite(Random3, g);analogWrite(Random6, g);delay(Speed7);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}} g++;
- }}
- if (i==7&&j < 1){while (g > 0){
- analogWrite(Random1, g);analogWrite(Random4, g);
- analogWrite(Random2, g);analogWrite(Random5, g);
- analogWrite(Random3, g);analogWrite(Random6, g);delay(Speed7);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; j++; offRGB(); if (i>x){ i=0;}} g--;
- }}}j=0;
- }
- void program8(){while (j<1){
- Random1 = random (3, 7);Random4 = random (8, 12);
- Random2 = random (3, 7);Random5 = random (8, 12);
- Random3 = random (3, 7);Random6 = random (8, 12);
- SpeedR = random (2, 10);
- if (i==8&&j < 1){ while (g < 255){
- analogWrite(Random1, g);analogWrite(Random4, g);
- analogWrite(Random2, g);analogWrite(Random5, g);
- analogWrite(Random3, g);analogWrite(Random6, g);delay(SpeedR);
- sensorVal = digitalRead(2);if (sensorVal == HIGH){
- delay(500); i++; j++; offRGB(); if (i>x){i=0;}} g++;
- }}
- if (i==8&&j < 1){while (g > 0){
- analogWrite(Random1, g);analogWrite(Random4, g);
- analogWrite(Random2, g);analogWrite(Random5, g);
- analogWrite(Random3, g);analogWrite(Random6, g);delay(SpeedR);
- sensorVal = digitalRead(2);
- if (sensorVal == HIGH){
- delay(500); i++; j++; offRGB(); if (i>x){ i=0;}} g--;
- }}}j=0;}
- void loop() {button2();if (i == 0){offRGB();}
- if (i == 1){program1();}if (i == 2){program2();}
- if (i == 3){program3();}if (i == 4){program4();}
- if (i == 5){program5();}if (i == 6){program6();}
- if (i == 7){program7();}if (i == 8){program8();}
- }
//Конец скетча
В скетче имеется функции:
“button2” - для опроса кнопки, и если кнопка нажата то перейти к следующей функции.
“offRGB” - служит для отключения каналов RGB и обнуления переменных “r, g, b”.
“program1, program2, program3, program4, program5, program6, program7 и program8” - содержат алгоритмы для RGB
Переменные “Speed1, Speed2, Speed3 Speed4=5, Speed5=5, Speed6=5 и Speed7=5” имеют значение “5”. Оно является задержкой, и влияет на скорость выполнения алгоритмов, чем больше это значение тем медленнее скорость выполнения, и наоборот.
Переменная SpeedR = random (2, 10); которая находится в 302 строке, является рандомной задержкой для функции “program8” где значение “2” является минимальным а значение “10” максимальным.
Переменная “x” служит для хранения количества режимов для RGB. Значение “8” означает 9 программы (0, 1, 2, 3, 4, 5, 6, 7, 8) = (offRGB, program1, program2, program3, program4, program5, program6, program7, program8). Если вы измените количество программ, то для корректной работы также необходимо изменить значение переменной “x”.
После сборки можно подать питание 12 вольт. При запуске будет выполняться нулевая программа с функцией “offRGB” и лента светиться не будет! Нажмите кратковременно на кнопку и цикл перейдет к программе с функцией “program1”, после второго нажатия “program2”, и так далее. После восьмого нажатия “program8” цикл опять перейдет к “offRGB”.
В этой схеме я применил мосфет транзисторы T40N03G. Они выдерживают напряжение до 24 вольт и ток 45 ампер. Этого хватит для подключения 220 метров такой RGB ленты как у меня. Вы можете применить любые другие N-канальные мосфеты которые подойдут вам по мощности, главное соблюдайте распиновку при их подключении, ОНА МОЖЕТ ОТЛИЧАТЬСЯ от распиновки T40N03G!