In this article, you will learn how to create an RGB controller for two LED strips based on Arduino NANO. The article explains step-by-step the process of assembly, connecting components, and configuring the software.
For those who plan to create an RGB controller with two RGB channels, which allows you to connect up to 110 meters of LED RGB strip to each channel with the ability to configure individual operating algorithms.
Arduino NANO board.
Two twelve-volt RGB strips.
Button and 1-10 kilohm resistor.
6 T40N03G mosfet transistors or any other N-channel transistors that are suitable in power.
To assemble the device, I also use a breadboard and connecting wires, you can solder everything immediately if you wish.
#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();
}
}
You can customize this sketch however you like. Or just take it as is, upload it to the board, and assemble everything as shown in this diagram.
After assembling the device, 12 volts are supplied. When starting, the zero program with the “offRGB” function is automatically activated, and the strip will not glow. A short press of the button transfers the cycle to the next program: the first press to “program1”, the second to “program2”, and so on. After the eighth press, which activates “program8”, the cycle returns to “offRGB”.
This circuit uses T40N03G MOSFET transistors, which can withstand up to 24 volts and a current of up to 45 amperes. These characteristics allow you to connect up to 220 meters of RGB tape, similar to the one used in the circuit. If the transistors are replaced with other N-channel MOSFETs, it is important to take into account their power and carefully observe the pinout, which may differ from the T40N03G pinout.