Контроллер для 3 RGB лент на 150 Ампер на базе Digispark Attiny85, своими руками.

Здравствуйте!

Возможно кто то захочет сделать собственную RGB гирлянду, со своими индивидуальными алгоритмами.

Контроллер для 3 RGB лент на 150 Ампер на базе Digispark Attiny85, своими руками.

Для этого понадобятся:

Плата Digispark на базе микроконтроллера Attiny85.

3 двенадцати вольтовые RGB ленты, кнопка и сопротивление 1-10 килоом.

3 мосфет транзистора 50N06 или любые другие N-канальные подходящие по мощности.

Я для сборки устройства использую макетную плату и соединительные провода, вы при желании можете сразу все спаять.

Контроллер для 3 RGB лент на 150 Ампер на базе Digispark Attiny85, своими руками.

Сначала рассмотрим скетч.

Как прошить плату Digispark на базе микроконтроллера ATtiny 85 смотрите по этой ссылке www.kolotushkin.com/Как прошить плату Digispark на базе микроконтроллера ATtiny 85

или по этой www.youtube.com/Как прошить плату Digispark на базе микроконтроллера ATtiny 85


//Начало скетча


  1. #define Red 4
  2. #define Green 1
  3. #define Blue 0
  4. int r=0, g=0, b=0, sensorVal, x=3, i=0, j=1;
  5. int Speed1=5, Speed2=5, Speed3=5;
  6. void setup(){
  7. pinMode(Red, OUTPUT);pinMode(Green, OUTPUT);
  8. pinMode(Blue, OUTPUT);pinMode(2, INPUT_PULLUP);
  9. }
  10. void button2(){
  11. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  12. delay(500); i++; if (i>x){i=0;}}
  13. }
  14. void offRGB(){
  15. digitalWrite(Red, LOW);digitalWrite(Green, LOW);
  16. digitalWrite(Blue, LOW);r=0; g=0; b=0;
  17. }
  18. void program1(){ b=255; analogWrite(Blue, b);
  19. if (i==1){while (r < 256) {
  20. analogWrite(Red, r);delay(Speed1);
  21. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  22. delay(500); i++; offRGB(); if (i>x){i=0;}} r++;
  23. }}
  24. if (i==1){while (b > 0) {
  25. analogWrite(Blue, b);delay(Speed1);
  26. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  27. delay(500); i++; offRGB(); if (i>x){i=0;}} b--;
  28. }}
  29. if (i==1){while (g < 255){
  30. analogWrite(Green, g);delay(Speed1);
  31. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  32. delay(500); i++; offRGB(); if (i>x){i=0;}} g++;
  33. }}
  34. if (i==1){while (r > 0){
  35. analogWrite(Red, r);delay(Speed1);
  36. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  37. delay(500); i++; offRGB(); if (i>x){i=0;}} r--;
  38. }}
  39. if (i==1){while (b < 256){
  40. analogWrite(Blue, b);delay(Speed1);
  41. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  42. delay(500); i++; offRGB(); if (i>x){i=0;}} b++;
  43. }}
  44. if (i==1){while (g > 0){
  45. analogWrite(Green, g);delay(Speed1);
  46. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  47. delay(500); i++; offRGB(); if (i>x){i=0;}} g--;
  48. }}}
  49. void program2(){if (i==2){while (r < 255){
  50. analogWrite(Red, r);delay(Speed2);
  51. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  52. delay(500); i++; offRGB(); if (i>x){i=0;}} r++;
  53. }}
  54. if (i==2){while (r > 0) {
  55. analogWrite(Red, r);delay(Speed2);
  56. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  57. delay(500); i++; offRGB(); if (i>x){ i=0;}} r--;
  58. }}
  59. if (i==2){while (r < 255){analogWrite(Red, r);
  60. analogWrite(Blue, r);delay(Speed2);
  61. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  62. delay(500); i++; offRGB(); if (i>x){ i=0;}} r++;
  63. }}
  64. if (i==2){while (r > 0){
  65. analogWrite(Red, r);
  66. analogWrite(Blue, r);delay(Speed2);
  67. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  68. delay(500); i++; offRGB(); if (i>x){ i=0;}} r--;
  69. }}
  70. if (i==2){while (b < 256){
  71. analogWrite(Blue, b);delay(Speed2);
  72. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  73. delay(500); i++; offRGB(); if (i>x){ i=0;}} b++;
  74. }}
  75. if (i==2){while (b > 0){
  76. analogWrite(Blue, b);delay(Speed2);
  77. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  78. delay(500); i++; offRGB(); if (i>x){ i=0;}} b--;
  79. }}
  80. if (i==2){while (b < 256){analogWrite(Blue, b);
  81. analogWrite(Green, b);delay(Speed2);
  82. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  83. delay(500); i++; offRGB(); if (i>x){ i=0;}} b++;
  84. }}
  85. if (i==2){while (b > 0){analogWrite(Blue, b);
  86. analogWrite(Green, b);delay(Speed2);
  87. sensorVal = digitalRead(2);if (sensorVal == HIGH) {
  88. delay(500); i++; offRGB(); if (i>x){ i=0;}} b--;
  89. }}
  90. if (i==2){while (g < 255){
  91. analogWrite(Green, g);delay(Speed2);
  92. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  93. delay(500); i++; offRGB(); if (i>x){ i=0;}} g++;
  94. }}
  95. if (i==2){while (g > 0){
  96. analogWrite(Green, g);delay(Speed2);
  97. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  98. delay(500); i++; offRGB(); if (i>x){ i=0;}} g--;
  99. }}
  100. if (i==2){while (g < 255){
  101. analogWrite(Green, g);
  102. analogWrite(Red, g);delay(Speed2);
  103. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  104. delay(500); i++; offRGB(); if (i>x){ i=0;}} g++;
  105. }}
  106. if (i==2){while (g > 0){
  107. analogWrite(Red, g);delay(Speed2);
  108. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  109. delay(500); i++; offRGB(); if (i>x){ i=0;}} g--;
  110. }}}
  111. void program3(){
  112. if (i==3){while (g < 255){
  113. analogWrite(Green, g);analogWrite(Red, g);
  114. analogWrite(Blue, g);delay(Speed3);
  115. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  116. delay(500); i++; offRGB(); if (i>x){i=0;}} g++;
  117. }}
  118. if (i==3){while (g > 0){
  119. analogWrite(Green, g);analogWrite(Red, g);
  120. analogWrite(Blue, g);delay(Speed3);
  121. sensorVal = digitalRead(2);if (sensorVal == HIGH){
  122. delay(500); i++; offRGB(); if (i>x){ i=0;}} g--;
  123. }}}
  124. void loop() {button2();
  125. if (i == 0){offRGB();} if (i == 1){program1();}
  126. if (i == 2){program2();} if (i == 3){program3();}
  127. }

//Конец скетча


В скетче имеется 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 ленты подключены по разному!

Контроллер для 3 RGB лент на 150 Ампер на базе Digispark Attiny85, своими руками.

После сборки можно можно подавать питание 12 вольт. При запуске будет выполняться нулевая программа с функцией “offRGB” и ленты светиться не будут! Нажмите кратковременно на кнопку и цикл перейдет к программе с функцией “program1”, после второго нажатия “program2”, после третьего “program3” и после четвертого нажатия опять “offRGB”.

В этой схеме я применил мосфет транзисторы 50N06. Они выдерживают напряжение до 60 вольт и ток до 50 ампер. Этого хватит для подключения 140 метров таких RGB лент как у меня. Вы можете применить любые другие N-канальные мофеты которые подойдут вам по мощности, главное соблюдайте распиновку при их подключении, ОНА МОЖЕТ ОТЛИЧАТЬСЯ от распиновки 50N06!

Удачных вам экспериментов!


Видео версия проекта "Контроллер для 3 RGB лент на 150 Ампер на базе Digispark Attiny85, своими руками."


Контроллер RGB