Сопровождение шара для боулинга по дорожке

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

ДОБРЫЙ ДЕНЬ!!!

Возникла ситуация сопровождения шара движущегося по дорожке к кеглям. 

По всей видимости в качестве исполнителя применю LED ленту WS2812....

А в качестве сенсора ДАЛЬНОМЕР (по всей видимости для точной реализации проекта нужен достаточно точный а значит дорогой)......но вот какой (длина дорожки боулинга 18 метров)......и какое ПО (имел опыт по редактированию чужих программ на wiring )....и какой контроллер (ардуино ли ....)....

Готовые системы подобного рода не нашел...

В общем выслушу любые соображения)

 

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Поставить в начале дорожки две фотопары, шар катясь будет прерывать их связь (расстояние между фотопарами известно), засекая время между перекрытием фотопар можно вычеслить скорость перемищения шара, и с этой скоростью запускать запускать сопробождающие огоньки. (время между перекрытиями)/расстояние.

Вот пример, только тут скорость пули мерят.

MacSim
Offline
Зарегистрирован: 28.11.2012

разбить на участки. на каждый участок датчик наличия шара (датчик любой может быть: лазерный, световой, ультразвуковой ...) зажигать тот участок где сработал датчик.

Другой вариант и думаю будет получше: использовать PC (комп)+ видеокамера(хоть веб). Обрабатывать изображение, получать координаты мяча, давать команды на включение.

Logik
Offline
Зарегистрирован: 05.08.2014

Подход  yul-i-an, т.е. измерить скорость в начале дорожки и остальное расчитывать, существенно проще. . Как измерить скорость - тут варианты. Две оптопары, просто програмно, но сложно конструктивно, нужно 4 девайса в бока дороги врезать.  Один дальномер в торце - проще, 1 установить проще чем 4, но не факт что надежность обеспечит (а с другой стороны- нафига надежность в боулинге).  Вебкамера над дорожкой наверно повесить проще всего, но програмно и в реалтайм определить скорость  довольно сложно, и у игроков новая развлекуха будет - хакни систему: все одновременно кидают шары чтоб сервак протупил ))

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

С веб камерой заморачиваться экономически не выгодно. А фото приемников нужно только два, а для их засветки один источник на противоположной стороне (при условии не очень большого расстояния между приемниками). Чтобы одним источником два приемника засветить.

Logik
Offline
Зарегистрирован: 05.08.2014

И чё? Получим линии соединяющие излучатель и приемники под углом. Соответственно двигаясь возле одного борта шар будет пересекать их преодолевая большее растояние чем возле другого. Соответственно измереная скорость будет зависить от того ближе к какому борту проходит шар 8D. Сильно близко располагать линии  - плохо. Точность упадет.

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

С Вашим замечанием согласен. Но установить еще один излучатель в паралель первому не должно составить проблемм.
Еще можно измеренную скорость выводить как в теннисе 8). Только вот всю дорожку с шарами ушатают в погоне за рекордом )))

Logik
Offline
Зарегистрирован: 05.08.2014

//Но установить еще один излучатель в паралель первому не должно составить проблемм.

Так оно пока провода под полом не тягать и дырки не сверлить - все не проблема. Я не знаю как там под дорожкой все устроено, как шары подаются и на что дорожки опираются, но вот так - чисто на основе человеческого и инженерного опыта я б туда не лез ни в переносном ни в прямом смыслах)) Копеечная экономия (в масштабе заведения она выйдет реально копеечной) не будет стоить тех проблем с монтажем и эксплуатацией которые живописно представляю с оптопарами. Вот даже просверлить. А не попадет ли сверло с обратной стороны во что важное? А попробуйте определить в большой сложной конструкции точку выхода сверла. Та ну его нафиг. И так там будет на каждом шагу. Продумайте процесс до самых мелочей и варниант оптопар не станет таким привлекательным.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

//Но установить еще один излучатель в паралель первому не должно составить проблемм.

А смысл? Чем не устраивает одна оптопара? Диаметр шара - 21.8 см, стало быть датчик установленный на высоте 10.9 см будет перекрываться диаметром шара. Замеряем время, расстояние известно, вычисляем скорость.

Logik
Offline
Зарегистрирован: 05.08.2014

Дак шары бросают. В начале дорожки он может еще лететь или подскакивать, а не катится, а значит и оптопара перекроется не на диаметре шара.

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Так пора уже стенд собрать и код писать, а то так воздух гонять до бесконечности можно.

Logik
Offline
Зарегистрирован: 05.08.2014

Нет. Нада сразу НИОКР провести, сходить на боулинг ))

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016
Спасибо за комментарии!!!

Этап сборки макета с использованием подручных средств:

-arduino uno

-ws2811s 5050 30led (30см, 3микрухи, 9светиков)

-пока что ультрасоник hc-sr04

С подсчетом расстояния до макетного шарика справился, а вот с тем, чтобы лента включалась в зависимости от этого расстояния нет...

Причем так как возможность управлять минимум 3 светодиодами ограничивает красоту визуализации решил сделать эффект мерцания, т.е. не просто включение кусков ленты за шаром а включение мерцающих кусков....

Из библиотеки FastLed.h (FastLED-master) нашёл пример DemoReel100 в котором обнаружил нужный эффект "Sinelon" (бегущий переливающийся огонь) - как раз подходит.... В виду слабых навыков в программировании задался вопросом сопровождения шара этим эффектом, а значит редактированием скетча....прошу помощи.

Заранее благодарен!!!

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016
#include "FastLED.h"
FASTLED_USING_NAMESPACE

#define DATA_PIN    3
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS    3
CRGB leds[NUM_LEDS];

#define BRIGHTNESS          96
#define FRAMES_PER_SECOND  120

void setup() {
  delay(3000); // 3 second delay for recovery
  FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);  // tell FastLED about the LED strip configuration
  FastLED.setBrightness(BRIGHTNESS);   // set master brightness control
}

typedef void (*SimplePatternList[])();

SimplePatternList gPatterns = {sinelon};


uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
  
void loop()
{
  
  gPatterns[gCurrentPatternNumber]();  // Call the current pattern function once, updating the 'leds' array
  FastLED.show();   // send the 'leds' array out to the actual LED strip
  FastLED.delay(1000/FRAMES_PER_SECOND); // insert a delay to keep the framerate modest

  // do some periodic updates
  EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
  EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
}

#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))

void nextPattern()
{
    gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns); // add one to the current pattern number, and wrap around at the end
}

void sinelon() // a colored dot sweeping back and forth, with fading trails
{
  
  fadeToBlackBy( leds, NUM_LEDS, 20);
  int pos = beatsin16(13,0,NUM_LEDS);
  leds[pos] += CHSV( gHue, 255, 192);
}

 

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Всем добрый день!!! Вопрос с макетом решил!!!

https://www.instagram.com/p/BOxRRcCjdAt/

Кому интересно могу выложить скетч.

Дальнейший процесс выбора рефлекторных датчиков и написания скетча под них.....

Из вышеизложенного, также из примеров по хронометрам / замерам скорости пули, задался вопросом - что делать если шар попал в боковой паз вне зоны замера скорости - лента включится не обращая внимания на этот нюанс (а шар потеряет процентов 50-60 своей нулевой т.е. вычисленной скорости)....городить большее количество датчиков - финансого не выгодно, т.к. бюджет ограничен... использование же вэб камеры с сервером в виду 4 дорожек и отсутствия как такового освещения кажется весьма проблематичным и дорогостоящим вариантом.... 

 

valera678
Offline
Зарегистрирован: 04.11.2016

CARLOS.конечно интересно.. скетч в студию

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

valera678 пишет:

CARLOS.конечно интересно.. скетч в студию

 

#include "FastLED.h"
FASTLED_USING_NAMESPACE

#define DATA_PIN    3
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS    3
CRGB leds[NUM_LEDS];

#define BRIGHTNESS          96
#define FRAMES_PER_SECOND  120
int echoPin = 2; 
int trigPin = 4; 
unsigned int Distance=0;                   // Дистанция с ультрасоника;

//*******************************************************************************************************************
void setup() {
  //Serial.begin (9600); 
pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
  delay(3000);                             // 3 second delay for recovery
  FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);  // tell FastLED about the LED strip configuration
  FastLED.setBrightness(BRIGHTNESS);       // set master brightness control
             }

typedef void (*SimplePatternList[])();
SimplePatternList gPatterns = {sinelon};

uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
 
//************************* ОСНОВНАЯ ПРОГРАММА  *********************************************************************
void loop()
{

  gPatterns[gCurrentPatternNumber]();           // Call the current pattern function once, updating the 'leds' array
  FastLED.show();                               // send the 'leds' array out to the actual LED strip
  FastLED.delay(1000/FRAMES_PER_SECOND);        // insert a delay to keep the framerate modest

  // ---------------- do some periodic updates-------------------------------------------------------------------------
  
  EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
  EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically


 getDistance(trigPin, echoPin);     
 if (Distance>20 && Distance<31)           // первый отрезок в см
      {
        leds[2] += CHSV( gHue, 255, 192);
      }
 if (Distance>8  && Distance<22  )         // второй отрезок в см
        {
          leds[1] += CHSV( gHue, 255, 192);
          leds[2] += CHSV( gHue, 255, 192);
        }
   if (Distance>1 && Distance<10  )        // третий отрезок в см
          {
            leds[2] += CHSV( gHue, 255, 192);
            leds[1] += CHSV( gHue, 255, 192);
            leds[0] += CHSV( gHue, 255, 192);
          }

//erial.print(Distance); 
//Serial.println(" Distance"); 
//delay(800);
  
}
//************************* КОНЕЦ ОСНОВНАЯ ПРОГРАММА  *********************************************************************

unsigned int getDistance(byte trig, byte ping)                         // Чтение ультрасоника - получение дистанции;
{
    unsigned int duration = 0;
    digitalWrite(trig, LOW);
    delayMicroseconds(2);
    digitalWrite(trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig, LOW);
    duration = pulseIn(ping,HIGH);
    Distance = duration/29/2;
  
    return Distance;
}

//-------------------------------------------------------------------------------------------------------------------
#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))

void nextPattern()
{
    gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns); // add one to the current pattern number, and wrap around at the end
}

void sinelon() // a colored dot sweeping back and forth, with fading trails
{
  
  fadeToBlackBy( leds, NUM_LEDS, 20);
  //int pos = 0;//beatsin16(13,0,NUM_LEDS);                 
           
}

 

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Народ, необходимо спроектировать систему из двух 20-ти метровых отрезков лент ws2812 30led 7,2 W/m  по следующему рисунку:

1) по расчетам думаю применить блок питания 500 Вт на 5 В, нужная схема подключения (ввиду того, что в одном куске будет 8 бобин ленты);

2) оба куска работают от одного цифрового выхода ардуины.....хватит ли мощности выхода на управление 2*20 метров*30 микросхем ws2812= 1200 микросхем ws2812..... быть может имеет место применение силового ключа типо этого  (или надо применить другой?)?

3) вопрос по подключению управления (в паралель) к лентам.

Заранее благодарю.

Logik
Offline
Зарегистрирован: 05.08.2014

Ключ не нужен. Выход ардуины всеравно нагружен на один вход, т.к. все работает по цепочке. Хватит ли одного выхода ардуины на все - расчет чисто по времени, т.е будет ли успевать передать на всю ленту плюс пауза между обменами за допустимое время. Вторая потенциальная проблема - падение напряжения на проводах питания (в т.ч. на самой ленте, запитать её только с одного конца не выйдет 7*20=140Вт. 150/5=28А Облегчить задачу можна приняв ограничение что одновременно не может гореть более допустим 10% светодиодов. Или хороше думать и считать как ленту питать 

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Logik пишет:

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

Несовсем понятно выражение "успевать".

Насколько я понял, исходя из документации на ленту WS812 следует:

1)  Data transfer time( TH+TL=1.25μs±600ns), RES low voltage time = Above 50μs

Так как применяю кусок в 20 метров по 3 диода на метр = 600 светодиодов, тогда суммарное время передачи =

600 led * (24 bit * 1.25μs±600ns ) + 600 * 50μs = 26640 + 30000 = 56640 μs или 0,05664 сек или 56,64 милисек

2) тогда "скорость передачи" на 20 метров =  20/0,05664 = 353,1 м/с - что намного выше скорости шара боулинга

Если не прав прошу меня поправить, так как я новичок

 

Logik пишет:

Вторая потенциальная проблема - падение напряжения на проводах питания (в т.ч. на самой ленте, запитать её только с одного конца не выйдет 7*20=140Вт. 150/5=28А Облегчить задачу можна приняв ограничение что одновременно не может гореть более допустим 10% светодиодов. Или хороше думать и считать как ленту питать 

Нужно запитать по 4 бобины, думаю одним БП кидая провода к каждой бобине отдельно... итого 16 силовых проводов....если можно меньше то, подскажите как........ 

Logik
Offline
Зарегистрирован: 05.08.2014

"успевает" как раз и означает что "56,64 милисек" - т.е. 17 раз в секунду Вас устраивает. В правильность расчета не вникал. А при 1200 светодиодах будет в 2 раза дольше. Устроит? 

Про питание. Там не только в бобинах дело. Токи в проводах большие, и падения напряжения заметные. Значить провода надо толстые, и хороше думать как питать. 10А даже на 0,1Ом упадет на 1В. А это видно очень даже по свечению ленты. Плюс если эти 10А пропустить через саму ленту, то она еще и подогреется на 10Вт. Комплекс проблем в общем. Просто я Вам обозначил проблему, а решать её уже "по месту", подводя питание толстыми проводами достаточно часто.

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Logik пишет:

"успевает" как раз и означает что "56,64 милисек" - т.е. 17 раз в секунду Вас устраивает. В правильность расчета не вникал. А при 1200 светодиодах будет в 2 раза дольше. Устроит? 

Ну так загуглив (153 км/ч рекорд скорости шара в боулинге) что соответствует 42,5 м/с или на 18 м =

0,43 сек = 430 милисек - даже при 1200 светодиодах 56,64*2 = 113 милисек , т е есть запас в 3 раза

- или я чего то не пойму

Logik пишет:

 Просто я Вам обозначил проблему, а решать её уже "по месту", подводя питание толстыми проводами достаточно часто.

А как понять "достаточно часто " - как это посчитать?

Logik
Offline
Зарегистрирован: 05.08.2014

CARLOS пишет:

- или я чего то не пойму

ага. 17Гц - это типа частоты кадров в видео. 17раз в сек можно задать "свечение" всей ленте. Хватит ли для плавного, не дерганого восприятия. Думаю да. А 8.5 раз - сомниваюсь. м/с не причем.

 

CARLOS пишет:

А как понять "достаточно часто " - как это посчитать?

А ХЗ.  Надо сопротивление цепей питания ленты знать. Я не знаю. Но суть надеюсь понимаете, при больших токах на проводах падение напряжения оказывается настолько существенным, что это видно на глаз в яркости свечения.

SLKH
Offline
Зарегистрирован: 17.08.2015

CARLOS пишет:

Спасибо за комментарии!!!

Этап сборки макета с использованием подручных средств:

-arduino uno

-ws2811s 5050 30led (30см, 3микрухи, 9светиков)

-пока что ультрасоник hc-sr04

С подсчетом расстояния до макетного шарика справился,

А теперь представь себе реальную длину дорожки и реальную скорость шара. И что в этой системе будет делать hc-sr04 ?

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

[/quote]

А теперь представь себе реальную длину дорожки и реальную скорость шара. И что в этой системе будет делать hc-sr04 ?

[/quote]

Ну так в реалии я использую рефлекторные фотодатчики  через оптрон на дуину..... по принципу изложенному ранее.... ултрасоник это так...для визуализации принципа больше...

Logik
Offline
Зарегистрирован: 05.08.2014

SLKH пишет:

А теперь представь себе реальную длину дорожки и реальную скорость шара. И что в этой системе будет делать hc-sr04 ?

Вы наверно тему не читали. Речь идет о измерении скорости только в начале дорожки. Далее все расчетно по начальной скорости.

nik182
Offline
Зарегистрирован: 04.05.2015

А разве сама дорожка не измеряет скорость шара во время броска? Обычно в статистике броска эта информация есть. Может проще из компа её вытащить?

SLKH
Offline
Зарегистрирован: 17.08.2015

Logik пишет:

SLKH пишет:

А теперь представь себе реальную длину дорожки и реальную скорость шара. И что в этой системе будет делать hc-sr04 ?

Вы наверно тему не читали. Речь идет о измерении скорости только в начале дорожки. Далее все расчетно по начальной скорости.

Читал.

Вот только никаких указаний на способ/аппаратуру измерения скорости в сообщениях 1 - 22 не увидел, за исключением hc-sr04.

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

nik182 пишет:
А разве сама дорожка не измеряет скорость шара во время броска? Обычно в статистике броска эта информация есть. Может проще из компа её вытащить?

Тут возникает череда вопросов:

1) когла ПК системы узнаёт об скорости? Если после соударения с кеглями то не катит, ведь ленту надо зажигать он лайн (хоть и с погрешностью);

2) полагаю для извлечения этих данных с пк системы нужны соответствующие знания, коими я пока не владею..Да и вообще может (под вопросом) система защищена от этого ....

3) не могу нарыть в инете как система это делает....я видел только камеру, направленную на кегли, а если так, то смысла в данной подсветки не будет...

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

SLKH пишет:

Logik пишет:

SLKH пишет:

А теперь представь себе реальную длину дорожки и реальную скорость шара. И что в этой системе будет делать hc-sr04 ?

Вы наверно тему не читали. Речь идет о измерении скорости только в начале дорожки. Далее все расчетно по начальной скорости.

Читал.

Вот только никаких указаний на способ/аппаратуру измерения скорости в сообщениях 1 - 22 не увидел, за исключением hc-sr04.

Думаю пойти по этому направлению......пока скетч замера скорости в проекте

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Всем добрый день!!!

В процессе работы возникла задача включать данную подсветку (Ws2811) в режиме ожидания по внешнему аудиосигналу .mp3. Иными словами соорудить универсальный automatic music led controller. 

Быть может существуют платы расширения с данным функционалом....Или есть готовые проекты музыкального сопровождения... 

Буду рад любой инфе..

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Добрый день!!!

Народ, подскажите как рассчитать резисторы на входе / выходе оптоптрона HCPL-2601.

Дело в том, что данные о страйке/вкл дорожке берутся с ПЛК системы через данный оптрон (соответственно на входе 0-24 В, на выходе должно быть 3,3 В).

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

CARLOS, 

1. Есть шилд к Ардуино с микросхемой VS1053B - универсальный звуковой проигрыватель: mp3, ogg vorbis, wma, midi...

2. Напряжение Вы уже знаете, теперь нужно узнать ток (из дэйташита на оптрон). Остальное - по закону Ома.

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Народ, вопрос про конденсатор 0.1мкФ в схеме оптопары...без него (????)почему-то при соединии более чем 3 оптопар на общий минус повышается выходное напряжение от 0.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

CARLOS, наверное это потому, что Вы неправильно соединяете оптопары.

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Вопрос снят...при соединении этих конденсаторов между контактами питания схема заработала как часы

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Всем добрый день
Возник вопрос про концепцию построения метеора на ленте ws2811...проблема в дискретном характере переключения драйверов светодиодов при малых скоростях шара..метеор больше похож на червяк...смысл данной затеи таков - 7 участков по 3 светодиода с небольшими разницами по яркости между смежными участками.... т е если голова метеора это 255 бит ШИМа то 2 сегмент это 85 и т д до хвоста - бит 10... при переходе на одну позицию вперед соо ветственно с 0 до 255 зажигаем голову, 2 сегмент он же бывший первый тушим со 100 до 85 и т.д. В итоге метеор все равно дискретен... быть может кто нибудь знает алгоритм построения данного эффекта по "правильному"

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Так уж сложилось...использую ws2811...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а это при чем? лазерные модули для изначального измерения скорости, скорость шара врядли меняется в пока катится, но измерять все равно в начале надо, так как все бросают по разному

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

Вы о контроле скорости.... со скоростью проблем нет..замеряю фотодатчиками с отражателями....вопрос в формировании эффекта таким образом, чтобы игрок не видел дискретности работы ... решил делать метеор .. конечно же на ленте типа 2812 где в качестве пикселя выступает один светодиод все выглядело бы красивее но эта лента питается 5 В, чт8о не есть хорошо... 2811 12В, пиксель у нее это 3 светодиода отсюда и проблемы с плавностью протекания эффектов

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

то есть ты программно хочешь переделать чтобы не было видно что по 3 объеденено?

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

jeka_tm пишет:

то есть ты программно хочешь переделать чтобы не было видно что по 3 объеденено?


Так точно .. нужен сам алгоритм зажигания метеора по его кускам . Причем такой , чтобы эффект дискретности снизить до минимума

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

))) как ты это представляешь?

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

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

jeka_tm пишет:

))) как ты это представляешь?

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

Я думаю, что это всё возможно, так как в библиотечный примерах FastLed что-то типо этого для данной ленты реализовано....но данная библиотека не написана под Due...а скетч достаточно сложен для понимания...так что делаю сам....

Также думаю, что засчёт  правильного алгоритма и правильной настройки ШИМ всё должно получится...пока методом тыка получается дискретность

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

рука- змея должна гнуться минимум в 7 местах. жду видео

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

jeka_tm пишет:

рука- змея должна гнуться минимум в 7 местах. жду видео

http://cloud.mail.ru/public/7Db7/gToiV7xtk

https://cloud.mail.ru/public/J87v/fie9zYYkG

 

Тогда необходимо понять код DEMOREEL100 (FASTLED) и, базируясь на нём, написать эффекты вручную

#include "FastLED.h"

FASTLED_USING_NAMESPACE

// FastLED "100-lines-of-code" demo reel, showing just a few 
// of the kinds of animation patterns you can quickly and easily 
// compose using FastLED.  
//
// This example also shows one easy way to define multiple 
// animations patterns and have them automatically rotate.
//
// -Mark Kriegsman, December 2014

#if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
#warning "Requires FastLED 3.1 or later; check github for latest code."
#endif

#define DATA_PIN    3
//#define CLK_PIN   4
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS    64
CRGB leds[NUM_LEDS];

#define BRIGHTNESS          96
#define FRAMES_PER_SECOND  120

void setup() {
  delay(3000); // 3 second delay for recovery
  
  // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  //FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);

  // set master brightness control
  FastLED.setBrightness(BRIGHTNESS);
}


// List of patterns to cycle through.  Each is defined as a separate function below.
typedef void (*SimplePatternList[])();
SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm };

uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
  
void loop()
{
  // Call the current pattern function once, updating the 'leds' array
  gPatterns[gCurrentPatternNumber]();

  // send the 'leds' array out to the actual LED strip
  FastLED.show();  
  // insert a delay to keep the framerate modest
  FastLED.delay(1000/FRAMES_PER_SECOND); 

  // do some periodic updates
  EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
  EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
}

#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))

void nextPattern()
{
  // add one to the current pattern number, and wrap around at the end
  gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
}

void rainbow() 
{
  // FastLED's built-in rainbow generator
  fill_rainbow( leds, NUM_LEDS, gHue, 7);
}

void rainbowWithGlitter() 
{
  // built-in FastLED rainbow, plus some random sparkly glitter
  rainbow();
  addGlitter(80);
}

void addGlitter( fract8 chanceOfGlitter) 
{
  if( random8() < chanceOfGlitter) {
    leds[ random16(NUM_LEDS) ] += CRGB::White;
  }
}

void confetti() 
{
  // random colored speckles that blink in and fade smoothly
  fadeToBlackBy( leds, NUM_LEDS, 10);
  int pos = random16(NUM_LEDS);
  leds[pos] += CHSV( gHue + random8(64), 200, 255);
}

void sinelon()
{
  // a colored dot sweeping back and forth, with fading trails
  fadeToBlackBy( leds, NUM_LEDS, 20);
  int pos = beatsin16(13,0,NUM_LEDS);
  leds[pos] += CHSV( gHue, 255, 192);
}

void bpm()
{
  // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
  uint8_t BeatsPerMinute = 62;
  CRGBPalette16 palette = PartyColors_p;
  uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  for( int i = 0; i < NUM_LEDS; i++) { //9948
    leds[i] = ColorFromPalette(palette, gHue+(i*2), beat-gHue+(i*10));
  }
}

void juggle() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds, NUM_LEDS, 20);
  byte dothue = 0;
  for( int i = 0; i < 8; i++) {
    leds[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}

Как я понимаю, в данном скетче идёт переключение эффеков каждые 10 сек...

void sinelon()
{
  // a colored dot sweeping back and forth, with fading trails
  fadeToBlackBy( leds, NUM_LEDS, 20);
  int pos = beatsin16(13,0,NUM_LEDS);
  leds[pos] += CHSV( gHue, 255, 192);
}

Непонятны данные функции (на уровне прошраммирования),  быть может их код можно посмотреть где-то в отдельном библиотечном файле

Logik
Offline
Зарегистрирован: 05.08.2014

Вобще сместить отображаемую картинку на полпикселя очень даже можна, и зря jeka_tm руки ломать собрался.

покадрово это гдето так будет (уровни сигнала последовательно расположеных светодиодов)

кадр 1:    2,4,8,4,2,0

кадр 2:    1,3,6,6,3,1

кадр 3:    0,2,4,8,4,2

Получается смещается центр интенсивности свечения. Можна и на меньшие доли пикселя смещать.

Но чтоб это визуально смотрелось без мерцаний картинка должна быть большой, на десятки пикселей достаточно плотно расположеных.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

увеличили размер волны чтобы не было так заметно

а насчет рук это была метафора,  чтобы человек понял. если светодиоды объедены по три, или в руке например три сустава ты не сможешь зажечь отдельный светодиод, как не сможешь согнуть руку между суставами

Logik
Offline
Зарегистрирован: 05.08.2014

jeka_tm пишет:

а насчет рук это была метафора, 

Дак понятное дело! На счет - ломать тоже )))

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

jeka_tm пишет:

увеличили размер волны чтобы не было так заметно

а насчет рук это была метафора,  чтобы человек понял. если светодиоды объедены по три, или в руке например три сустава ты не сможешь зажечь отдельный светодиод, как не сможешь согнуть руку между суставами


УВ. jeka, на видео видно что вне зависимости от единицы управления в 3х светодиода метеор идет плавно...сам библиотечный скетч приведен выше.... НО выбранный контроллер эту библиотеку не поддерживает..а значит его надо программировать в ручную посылая массивы из 24 бит с учетом преобразований в hsv и т д ..
Может кому доводилось с этим столкнуться...везде в инете люди не парясь берут уно и вперед....а если нужен 32 битный контроллер то, как я понимаю нужно делать самому и тут для красивой визуализации нужно знать beat16sin, atan() и т д..т е удел опытных програмистов, коим я не являюсь