Возможно кто то захочет сделать собственную RGB гирлянду, со своими индивидуальными алгоритмами.
Плата Digispark на базе микроконтроллера Attiny85.
3 двенадцати вольтовые 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(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();}
- }
//Конец скетча
В скетче имеется 5 функции:
“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”.
Обратите внимание что все 3 ленты подключены по разному!
После сборки можно можно подавать питание 12 вольт. При запуске будет выполняться нулевая программа с функцией “offRGB” и ленты светиться не будут! Нажмите кратковременно на кнопку и цикл перейдет к программе с функцией “program1”, после второго нажатия “program2”, после третьего “program3” и после четвертого нажатия опять “offRGB”.
В этой схеме я применил мосфет транзисторы 50N06. Они выдерживают напряжение до 60 вольт и ток до 50 ампер. Этого хватит для подключения 140 метров таких RGB лент как у меня. Вы можете применить любые другие N-канальные мофеты которые подойдут вам по мощности, главное соблюдайте распиновку при их подключении, ОНА МОЖЕТ ОТЛИЧАТЬСЯ от распиновки 50N06!