Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 15 дек 2018, 17:13

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 29 июн 2015, 22:03 
Не в сети
Аватара пользователя

Зарегистрирован: 12 фев 2012, 22:25
Сообщения: 74
По просьбе пользователей сайта выкладываю Мод для 12-ти канального метеора с функцией автоматического изменения цвета.
Для этого необходимо дополнительно соединить контакт А2 в Ардуино через выключатель на землю. При разомкнутом контакте устройство будет работать так, как описано в статье на сайте. При замкнутом - плавно автоматически менять цвета всех метеоров. При этом девиация цветов в наборе сохранится.

В качестве пояснения хотел бы описать несколько слов про алгоритм плавного изменения цвета. Он построен на принципе цветового круга, который программа проходит целиком за 256 шагов. На каждом пролете "метеора" его цвет меняется на +1. И так 255 раз пока цвет "метеора" не пройдет полный круг. После чего все повторяется по бесконечному циклу.

Переключатель режимов (на ноге А2) меняет режим работы всех лент "на лету" без артефактов.

Текст модифицированной программы для Ардуино и новая прошивка в архиве.


Вложения:
Mod#117-1.rar [16.84 КБ]
Скачиваний: 995
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Мод #117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 01 сен 2015, 22:56 
Спасибо большое. Отличная штука получилась.
Мод прошился, а оригинал не захотел. Пробовал на IDE версии 1.6.4 и 1.0.6
Насколько я понял - ругается на кучу файлов и строк в них из библиотеки FastLed. А потом ругается на код скетча.
Я не решился вставлять все ошибки сюда из-за их непомерного количества.
 "вот лишь малая часть:"
Код:
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:67: error: expected nested-name-specifier before 'FastPin'
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:67: error: expected ';' before '<' token
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:68: error: expected nested-name-specifier before 'FastPin'
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:68: error: expected ';' before '<' token
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h: In member function 'virtual void ClocklessController<DATA_PIN, T1, T2, T3, RGB_ORDER, XTRA0, FLIP, WAIT_TIME>::init()':
...
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:308: error: '::port' has not been declared
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:308: error: a function call cannot appear in a constant-expression
F:\Program Files\Arduino\libraries\FastLED-master/clockless_trinket.h:308: error: no matching function for call to '_dc(uint8_t&)'
...
Sosulka_WS2812_multi_new_Var:156: error: 'void NOPSPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER>::METEOR(int)' cannot be overloaded
Sosulka_WS2812_multi_new_Var:64: error: with 'void NOPSPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER>::METEOR(int)'
Sosulka_WS2812_multi_new_Var:169: error: 'void NOPSPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER>::SHIFT(int, int)' cannot be overloaded
Sosulka_WS2812_multi_new_Var:65: error: with 'void NOPSPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER>::SHIFT(int, int)'
Sosulka_WS2812_multi_new_Var:204: error: expected `}' at end of input
Sosulka_WS2812_multi_new_Var:204: error: expected unqualified-id at end of input

Библиотека из архива статьи. С этой же библиотекой модифицированная прошивка шьется на ура.

У меня система тупит невероятно, подозреваю что проблема может быть из-за этого.

Но я не про то.
Так как осталось место, может быть можно реализовать такой функционал: россыпь огоньков. Как бы имитация такого салюта, который после вспышки красиво мелькает тысячами блесток.
Например, после хлопка в ладоши (или датчик\рандом) - все ленты имитируют кратковременно вот тот салют. Очень короткие вспышки в случайном порядке с ниспадающей интенсивностью (в нашем случае - количеством засвечиваемых одновременно светодиодов)
Издалека это точно должно выглядеть красиво :) Да и с близкого расстояния вполне может оказаться симпатичным.
Спасибо!


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 21 ноя 2015, 00:20 
Не в сети

Зарегистрирован: 20 ноя 2015, 23:50
Сообщения: 7
Доброй ночи. Понравился метеорит. И хоть в статье указано, что устройство будет работать с любым отрезком ленты, мне все же интересно, если уменьшить длину сосулек и применить ленту со 144 светодиодами на метр. Интересно, будет ли так же эффектно смотреться метеор, ведь там монтаж светодиодов плотней. Например, 1 метр ленты выдаст 12 отрезков по 12 светодиодов, но 12 светодиодов - это 8,3см, возможно, не будет смотреться. Разумеется, можно увеличить до 12см и 15см и купить просто 2 метра ленты.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 07 дек 2015, 15:36 
Здравствуйте, Kolini!
Можете доработать прошивку, чтобы увеличить количество каналов до максимального(по моим подсчетам 21).
Заранее спасибо.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 13 дек 2015, 19:56 
Не в сети

Зарегистрирован: 13 дек 2015, 15:19
Сообщения: 1
Каналы вроде увеличил:
 Код
Код:
#include "FastLED.h"

#define NUM_STRIP 18                 // количество лент
#define NUM_LEDS 24                  // количество светодиодов в каждой ленте
#define NUM_METEORS 15               // длина МЕТЕОРА
#define INCREASE_BRIGHTNESS (256/NUM_METEORS)
#define TIME_MIN 5                   // максимальная скорость метеора
#define TIME_MAX 95                  // минимальная скорость метеора

#define DATA_PIN1 2                  // ноги по АРДУИНО ПРО МИНИ для каждой ленты
#define DATA_PIN2 3                  // подключать через резистор 470 Ом
#define DATA_PIN3 4                  // питание лент от отдельного стабилизированного
#define DATA_PIN4 5                  // источника постоянного напряжения 5V
#define DATA_PIN5 6                  // Земля общая с блоком питания Ардуино
#define DATA_PIN6 7                  //
#define DATA_PIN7 8                  // ВНИМАНИЕ: потребление каждого кусочка ленты
#define DATA_PIN8 9                  // из 20 светтодиодов = 6 Ватт (ток 1,2А на канал)
#define DATA_PIN9 10                 // из 12 лент = 72 Ватт, что равно току почти 15А
#define DATA_PIN10 11                // если предполагается одновременное включение всех
#define DATA_PIN11 12                // практика показала что максимальное потребление
#define DATA_PIN12 13                // одного отрезка ленты в режиме сосульки не более 200мА
#define DATA_PIN13 A2                //
#define DATA_PIN14 A3                //
#define DATA_PIN15 A4                //
#define DATA_PIN16 A5                //
#define DATA_PIN17 0                 //
#define DATA_PIN18 1                 //

CRGB leds1[NUM_LEDS];                // первая лента
CRGB leds2[NUM_LEDS];                // вторая лента
CRGB leds3[NUM_LEDS];                // третья лента
CRGB leds4[NUM_LEDS];                // четвертая лента
CRGB leds5[NUM_LEDS];                // пятая лента
CRGB leds6[NUM_LEDS];                // шестая лента
CRGB leds7[NUM_LEDS];                // седьмая лента
CRGB leds8[NUM_LEDS];                // восьмая лента
CRGB leds9[NUM_LEDS];                // девятая лента
CRGB leds10[NUM_LEDS];               // десятая лента
CRGB leds11[NUM_LEDS];               // одиннадцатая лента
CRGB leds12[NUM_LEDS];               // двенадцатая лента
CRGB leds13[NUM_LEDS];               // тринадцатая лента
CRGB leds14[NUM_LEDS];               // четырнадцатая лента
CRGB leds15[NUM_LEDS];               // пятнадцатая лента
CRGB leds16[NUM_LEDS];               // шестнадцатая лента
CRGB leds17[NUM_LEDS];               // семнадцатая лента
CRGB leds18[NUM_LEDS];               // восемнадцатая лента
 
CRGB meteors[NUM_METEORS];           // метеор
CRGB etalone[NUM_METEORS+NUM_LEDS];  // эталонный массив метеор+лента
CRGB rabochiy[NUM_METEORS+NUM_LEDS]; // рабочий массив для расчета лент
byte LENTA[NUM_STRIP];               // массив признаков работы лент (1-выполняется метеор, 0-выкл)
byte PHASE[NUM_STRIP];               // массив значений состояния сдвига для каждой ленты 0 - NUM_METEORS+NUM_LEDS
byte PAUSE[NUM_STRIP];               // массив значений циклов задержки между метеорами для каждой ленты
byte COLOR[NUM_STRIP];               // массив значений цвета лент

int i,j,n = 0;
int HSV, STAY_TIME;                  // цвет и скорость метеора если число + то скорость -

void setup() {
   
   // В случае управление питанием чрез клю нужен этот кусок кода, чтобы включить ленту
   // и дождаться окончания переходных процессов
   //  pinMode( POWER_PIN, OUTPUT );
   //  digitalWrite( A0, HIGH );
   //  delay(2000); 
   
   // инициализируем ленты
   FastLED.addLeds<WS2812B, DATA_PIN1>(leds1, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN2>(leds2, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN3>(leds3, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN4>(leds4, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN5>(leds5, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN6>(leds6, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN7>(leds7, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN8>(leds8, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN9>(leds9, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN10>(leds10, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN11>(leds11, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN12>(leds12, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN13>(leds13, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN14>(leds14, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN15>(leds15, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN16>(leds16, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN17>(leds17, NUM_LEDS);
   FastLED.addLeds<WS2812B, DATA_PIN18>(leds18, NUM_LEDS);
   
   // включение аналогового входа настройка диапазона цветов метеора
   pinMode( A0, INPUT);
   pinMode( A1, INPUT);
//   pinMode( A2, INPUT_PULLUP);
   HSV = GETCOLOR();
   STAY_TIME = map(analogRead(A1), 0, 1023, TIME_MIN, TIME_MAX);
   
   // стартовая инициализация всех массивов
   for ( i = 0; i < NUM_STRIP; i++) {
   LENTA[i] = 1;
   PHASE[i] = 0;
   PAUSE[i] = 0;
   COLOR[i] = HSV;}
   
}


void loop() {
   for ( n = 0; n < NUM_STRIP; n++) {               // поочередно перебираем все ленты

   if ( LENTA[n] == 1) {                            // если на ленте есть МЕТЕОР то обрабатываем
   
     if ( PHASE[n] == (NUM_LEDS+NUM_METEORS)){      // если МЕТЕОР "вылетел" то
      PHASE[n] = 0;                                 // сброс ленты на НОЛЬ
      LENTA[n] = 0;                                 // выключение ленты 
//        if (digitalRead(A2)==HIGH) {                // если тумблер выключен, то работаем с резистором цвета
//          HSV = GETCOLOR();                         // подготовка нового цвета к следующему включению
//          COLOR[n] = random(HSV-5,HSV+5);}          // и установка коридора флюктуации цвета
//        else {COLOR[n]++;}                          // если тумблер включен, то плавно меняем цвет       
             {COLOR[n]++;}                          // если тумблер включен, то плавно меняем цвет 
      PAUSE[n] = random(10,50); }                   // и задание паузы до следующего включения (в циклах)
     
   SHIFT(n,PHASE[n]);                               // если нормальный цикл обработки, то засвечиваем Метеор на ленте
   PHASE[n]++;}                                     // и сдвигаем фазу
   
   if (LENTA[n]==0) {                               // Если лента выключена
      if (PAUSE[n]>0) PAUSE[n]--;                   // то считаем длительность паузы
        if (PAUSE[n]==0) LENTA[n]=1;}               // и по окончании включаем ленту снова
  }

   FastLED.show();                                  // засветка лвсех лент
   STAY_TIME = map(analogRead(A1), 0, 1023, TIME_MIN, TIME_MAX); // снятие показателя задержки
   delay(STAY_TIME);                                // задержка по уровню скорости МЕТЕОРА
}



// Подпрограмма настройки диапазона цвета метеора по регулятору, подключенному к A0
int GETCOLOR()
   {
   int val = map(analogRead(A0), 0, 1023, 5, 250);  // цветовой ряд HSV описывается в диапазоне от 0 до 255
   return val;                                      // поскольку корридор +-45 то масштабирование аналогового входа
   }                                                // делается в диапазоне от 45 до 315


// подпрограмма формирование метеора заданной длины и цвета и заливка его в эталонный массив
void METEOR(int color)
   {
   i,j = 0;
   for( i = INCREASE_BRIGHTNESS - 1; i < 256; i += INCREASE_BRIGHTNESS )     // создание МЕТЕОРА
   meteors[j++].setHSV( color, 255, i );                                     // заданного цвета
   for( i = 0; i < NUM_METEORS; i++)                                         // и сброс его в эталонный массив
   etalone[i] = meteors[i];
   for( i = NUM_METEORS; i < (NUM_LEDS + NUM_METEORS); i ++ )                // остальное заполняем "черным"
   etalone[i] = CRGB::Black;
   }
   

// подпрограмма копирования эталонного массива со сдвигом в рабочую область   
void SHIFT(int LED, int shift)
   {
   // подготовка своего цвета для каждой ленты
   if (LED==0) METEOR(COLOR[0]);       
   if (LED==1) METEOR(COLOR[1]);
   if (LED==2) METEOR(COLOR[2]);
   if (LED==3) METEOR(COLOR[3]);
   if (LED==4) METEOR(COLOR[4]);
   if (LED==5) METEOR(COLOR[5]);
   if (LED==6) METEOR(COLOR[6]);
   if (LED==7) METEOR(COLOR[7]);
   if (LED==8) METEOR(COLOR[8]);
   if (LED==9) METEOR(COLOR[9]);
   if (LED==10) METEOR(COLOR[10]);
   if (LED==11) METEOR(COLOR[11]);
   if (LED==12) METEOR(COLOR[12]);
   if (LED==13) METEOR(COLOR[13]);
   if (LED==14) METEOR(COLOR[14]);
   if (LED==15) METEOR(COLOR[15]);
   if (LED==16) METEOR(COLOR[16]);
   if (LED==17) METEOR(COLOR[17]);
   
   // переписываем эталон с указанным сдвигом в рабочий массив     
   for( i = (NUM_LEDS+NUM_METEORS-1); i > shift; i-- )
   rabochiy[i] = etalone[i-shift];
   for ( i = shift; i > 0; i--)
   rabochiy[i] = CRGB::Black;
   
   // и заливаем его на соответствующую ленту
   if (LED==0)   for( i = 0; i < NUM_LEDS; i++ ) leds1[i] = rabochiy[i+NUM_METEORS]; 
   if (LED==1)   for( i = 0; i < NUM_LEDS; i++ ) leds2[i] = rabochiy[i+NUM_METEORS];
   if (LED==2)   for( i = 0; i < NUM_LEDS; i++ ) leds3[i] = rabochiy[i+NUM_METEORS];
   if (LED==3)   for( i = 0; i < NUM_LEDS; i++ ) leds4[i] = rabochiy[i+NUM_METEORS];
   if (LED==4)   for( i = 0; i < NUM_LEDS; i++ ) leds5[i] = rabochiy[i+NUM_METEORS];
   if (LED==5)   for( i = 0; i < NUM_LEDS; i++ ) leds6[i] = rabochiy[i+NUM_METEORS];
   if (LED==6)   for( i = 0; i < NUM_LEDS; i++ ) leds7[i] = rabochiy[i+NUM_METEORS];
   if (LED==7)   for( i = 0; i < NUM_LEDS; i++ ) leds8[i] = rabochiy[i+NUM_METEORS];
   if (LED==8)   for( i = 0; i < NUM_LEDS; i++ ) leds9[i] = rabochiy[i+NUM_METEORS];
   if (LED==9)   for( i = 0; i < NUM_LEDS; i++ ) leds10[i] = rabochiy[i+NUM_METEORS];
   if (LED==10)  for( i = 0; i < NUM_LEDS; i++ ) leds11[i] = rabochiy[i+NUM_METEORS];
   if (LED==11)  for( i = 0; i < NUM_LEDS; i++ ) leds12[i] = rabochiy[i+NUM_METEORS];
   if (LED==12)  for( i = 0; i < NUM_LEDS; i++ ) leds13[i] = rabochiy[i+NUM_METEORS];
   if (LED==13)  for( i = 0; i < NUM_LEDS; i++ ) leds14[i] = rabochiy[i+NUM_METEORS];
   if (LED==14)  for( i = 0; i < NUM_LEDS; i++ ) leds15[i] = rabochiy[i+NUM_METEORS];
   if (LED==15)  for( i = 0; i < NUM_LEDS; i++ ) leds16[i] = rabochiy[i+NUM_METEORS];
   if (LED==16)  for( i = 0; i < NUM_LEDS; i++ ) leds17[i] = rabochiy[i+NUM_METEORS];
   if (LED==17)  for( i = 0; i < NUM_LEDS; i++ ) leds18[i] = rabochiy[i+NUM_METEORS];
   }

Прошил, а в ответ тишина.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 17 дек 2015, 23:16 
Доброго вечера, собираюсь делать данное устройство, уже запускал в тестовом режиме один канал. Лента у меня 144 светодиода на метр. Подключал пока целый метр. Работает, вроде). Прошил модом, для использования с кнопкой.

В статье сказано: Ленту можно разрезать на любые по длине кусочки (вплоть до 1 светодиода). В программе никаких изменений делать не понадобится – ленты любой длинны будут правильно работать в устройстве.

Но у меня, при подключении, загораются 20 светодиодов, то есть , если я разрежу на кусочки по 14 светодиодов, подключу, допустим, всего 10 каналов, то в программе - в строке #define NUM_LEDS 20 // количество светодиодов в каждой ленте мне нужно написать 14, а в строке #define NUM_STRIP 12 // количество лент - число 10, правильно?
Или, все же, когда разрежу, то они как бы будут складываться и работать корректно?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 19 дек 2015, 13:53 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1909
Ленте все равно какое количество данных для пикселей в нее засылают - просто последние данные уйдут в никуда.
Но для того чтобы эффект выглядел правильно, лучше количество установить равное количеству пикселей


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 20 дек 2015, 02:48 
Не в сети

Зарегистрирован: 20 ноя 2015, 23:50
Сообщения: 7
Спасибо) Так и сделаю, подправлю перед окончательным решением какой длины делать сосульки и сколько)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 04 янв 2016, 01:29 
Всё сделал и прошил. Спасибо за устройство, очень нравится, спаял без плат, вкрутил разъемы, резисторы на ардуинке и проводками. С кнопкой плавной смены цветов сделал.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Mod#117 двенадцатиканальный "Метеор"
СообщениеДобавлено: 04 янв 2016, 01:30 
Не в сети

Зарегистрирован: 20 ноя 2015, 23:50
Сообщения: 7
Упс, забыл залогиниться)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB