Skocz do zawartości

Kurs Arduino II - #2 - diody RGB (tradycyjne oraz WS2812)


Pomocna odpowiedź

@marek1707 Bardzo dziękuję za odpowiedź. Wstępny pomysł, to przy pomocy trzech przewodów sterować wieloma lampami 230V.  W tej chwili usiłuję zbudować drewniany plafon zawierający siedem okrągłych płytek z diodami 12W /230V  i chcę mieć możliwość zaświecenia i zgaszenia każdej z osobna, aby zaświecić dowolną ich liczbę. Jeśli to się sprawdzi, następnym etapem będzie możliwość połączenia kilku takich (lub podobnych) lamp. Najistotniejsze jest ograniczenie liczby przewodów sterujących. Na drugim końcu ma być przełącznik obrotowy wielopozycyjny i jakiś sterownik . Jeśli to się sprawdzi, to może przełącznik zostanie zastąpiony klawiaturą numeryczną, pozwalającą na wybór wariantu świecenia.

Link to post
Share on other sites

Chyba nie do końca to ogarniam. Scalak o który pytałeś ma z jednej storny interfejs jak "inteligentna" dioda RGB, czyli po jednym drucie przesyłasz zakodowaną informację o poziomach 3 kolorów. To de facto sprowadza się do modulacji PWM trzech wyjść tego scalaka, każde z częstotliwościa ok 400Hz i rozdzielczością 8 bitów. Jak chcesz z tego przejść na wysokonapięciowe zestawy diod zasilanych z sieci AC? Oryginalny pomysł był taki, że po jednym kabelku mogłeś sterować wiele punktów RGB np w taśmie z dużą prędkością (np. do jakichś animacji), ale nie jest to (bez użycia dodatkowych układów) interfejs przystosowany do przesyłania danych na wiele metrów no i od strony procesora jest dość wymagający, bo te nie mają do użytego tu kodowania odpowiednich bloków sprzętowych. Jeżeli potrzebujesz zwyczajnie załączać kilka odległych punktów w trybie on-off, to są do tego inne rozwiązania. A nawet jeśli chcesz zwyczajnie ustawić kolor (jasność?) tego swojego plafonu to radziłbym zrobić regulację prądu poszczególnych składowych lokalnie - co nie wymaga tego scalaka a tylko zwykłych wyjść PWM małego procesorka, a samą obecność inteligencji na pokładzie wykorzystać do obsługi interfejsu komunikacyjnego zrobionego zgodnie z jakimś standardem. Począwszy od radiowego BT czy nawet WiFi, poprzez hobbystyczny UART(RS485?) na DMX skończywszy. Szkoda czasu na próbowanie wyważania dawno otwartych drzwi. Dzisiaj płyteczki w rodzaju ESP32 sa tanie, bezprzewodowe i umieją w PWM. A zasilanie i tak musisz pociągnąć.

Link to post
Share on other sites

We wszystkim co piszesz masz rację, ale ja chcę się pobawić niskonapięciowym  sterowaniem  większą ilością odbiorników 230V przy pomocy minimalnej ilości pinów. Tak jak to opisałem, to rzeczywiście może wyglądać jak polowanie z armatą na wróbla, ale zabawa - mam nadzieję - będzie przy tym przednia.

Tak "przy okazji" i "po drodze" mam zamiar zobaczyć jak będzie wyglądało sterowanie trzema białymi diodami (3x3W) ze szklanymi filtrami RGB.

Jeszcze raz dziękuję za pouczającą i miłą odpowiedź.

Link to post
Share on other sites

To zadam pytanie raz jeszcze. Jeśli nie wiesz, to zwyczajnie powiedz bo mam wrażenie, że nie rozumiesz. Chyba bardziej konkretnie się nie da: jak chcesz przejść z sygnału PWM na sterowanie odbiornikami zasilanymi z 230VAC? Jaki będzie podstawowy sens tej operacji, tj. jak chcesz zmieniać jasność?

24 minuty temu, bjrk napisał:

jak będzie wyglądało sterowanie trzema białymi diodami (3x3W) ze szklanymi filtrami RGB.

Ano tak, że w każdym z kanałów będziesz tracił co najmniej 2/3 mocy diody na filtrze. A jeśli źle trafisz z dopasowaniem prążków emisyjnych do ch-ki filtra (zależy jakie diody kupisz) to może się okazać, że przez Twój filtr przechodzi jedynie np. 1/10 mocy promieniowania. Diody to nie żarówki z ciągłym widmem a własnie po to wymyślono konkretne kolory LED by nie tracić cennej mocy na generację i filtrowanie tylko na produkcję dokładnie jednego koloru (lub mieszanki, vide diody "grow up") jaka jest potrzebna. Bezmyślny pomysł z gatunku "kupię prześcieradło i skoczę z balkonu - ciekawe co się stanie?". Nie wiem, może poczytaj najpierw trochę albo popytaj wśród co bardziej technicznych kolegów, bo radosna twórczość dziecka w ustach dorosłego wygląda infantylnie.  W każdym razie daj znać jak poszła ta "przednia zabawa".

Link to post
Share on other sites
2 godziny temu, bjrk napisał:

ja chcę się pobawić niskonapięciowym  sterowaniem  większą ilością odbiorników 230V przy pomocy minimalnej ilości pinów

Do tego wymyślono DMX - standard stosowany z powodzeniem od wielu lat właśnie do sterowania światłami. Tutaj możesz trochę poczytać na ten temat. Typowy 512-kanałowy sterownik potrzebuje jednego pinu...

  • Lubię! 1
Link to post
Share on other sites

Dziękuję! Uroczyście zobowiązuję się do przeczytania (i przemyślenia) wszystkich wskazanych materiałów i sugestii. Dopóki jednak nie zrozumiem dlaczego mam to zrobić inaczej,  zamierzam trzymać się pierwotnego pomysłu. Jeśli się wywali - co jak rozumiem jest bardzo prawdopodobne - i z czym się liczę - nie odpuszczę dopóki nie zrozumiem dlaczego się wywalił (dla osób bardziej oświeconych jest to prawdopodobnie oczywiste, ale dla minie jeszcze nie). To też pozwoli mi się czegoś nauczyć. Przy okazji muszę zauważyć, ze "wkładając ten kij w mrowisko" otrzymałem wiele bardzo interesujących informacji za które dziękuję.

Przy okazji, jeśli moje zrozumienie problemu jest na poziomie dziecka (od czegoś w końcu trzeba zacząć), to w z oczywistych powodów sposób pytania i próby rozwiązań są infantylne. Mam nadzieję, że ta przypadłość jest do wyleczenia. Jeśli terapia okaże się nieskuteczna. to też przestanę zawracać głowę.

Edytowano przez bjrk
Link to post
Share on other sites

@Stas_W niestety nie posiadam takich informacji. Nie wiem czy i( pod jakimi indeksami) występują w Botlandzie poszczególne elementy z zestawów. W tej sprawie najlepiej pytać bezpośrednio w Botlandzie 🙂

  • Lubię! 2
Link to post
Share on other sites

Cześć, 

podłączyłem kursową listewkę i działa. 

Czując pewien niedosyt zrobiłem poszukiwania na temat Adafruit_NeoPixel, jakie mianowicie funkcje ta klasa posiada.

strona www.arduino.cc/reference/en/libraries/adafruit-neopixel/ odsyła do 

GitHub - adafruit/Adafruit_NeoPixel

gdzie znajduje się: Arduino library for controlling single-wire LED pixels (NeoPixel, WS2812, etc.)

i spis funkcji, bez argumentów czy opisu:

begin()

updateLength()

updateType()

show()

delay_ns()

setPin()

setPixelColor()

fill()

ColorHSV()

getPixelColor()

setBrightness()

getBrightness()

clear()

gamma32()

Brakujące szczegóły można wykopać w pliku nagłówkowym Adafruit_NeoPixel.h, ale to trochę zajmuje.

No i pytanie:

Czy macie jakieś sprawniejsze metody (źródła) z informacjami o bibliotekach? 

dzięks 

Paweł

 

 

Link to post
Share on other sites

Nie rozumiem w czym mam ten program pisać? Czy jest jakieś CD razem z oprogramowaniem w zestawie z edytorem do pisania programu?

czy tanie takich opisów jak " a teraz czas na pierwszy program" Sam program jest opisany ale gdzie go wpisać?

Proponuje aby autor poprosił Logoś kto nigdy o arduino nie słyszał aby zrobił np. diody programowalne. Jeśli osoba choć raz nie będzie wiedziała co zrobić to tekst jest do poprawy. Ja nie wiem bo z tekstu nie wynika gdzie mam pisać program l skąd ściąć program do pisania programów.

Link to post
Share on other sites

@Matex witam na forum 🙂 Zwróć proszę uwagę, że jest to drugi odcinek drugiego kursu Arduino. Zakładamy więc tutaj, że czytelnicy znają już podstawy, które były opisane wcześniej. Jeśli dopiero zaczynasz swoją przygodę z elektroniką to zerknij prozę do kursu Arduino (poziom I) - wtedy wszystko będzie jasne, bo tam opisane są wszystkie podstawy.

  • Lubię! 2
Link to post
Share on other sites

Witam,

Od wczoraj próbuje zaprogramować pewien efekt świetlny. Mianowicie chodzi mi o poruszającą się tęcze. Udało mi się napisać kod, który dokładnie realizuje założenia mojego programu jednak zdaję sobie sprawę, że kod jest napisany w bardzo nieelegancki sposób.  Czuje, że można to zrobić o wiele prościej ale rozwiązanie cały czas gdzieś mi umyka. Czy ktoś mógłby w wolnej chwili spojrzeć na mój kod i go możliwie uprościć?

 

Próbowałem zastosować pętle for. Numery diody w metodzie "tecza" numerowałem "n",n+1" itd. ale cały czas program mi się wykrzyczał bo numery diod wyskakiwały poza zakres 0-7.

 

Proszę o pomoc. Nie jem, nie śpię...  tylko myślę, jak to rozwiązać 😄

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel diody=Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800);

void setup() {
  
  diody.begin();
  diody.show();
         
}

void loop() {
  
  int pauza=100;//przerwa pomiedzy wyswietleniami


    tecza(0,1,2,3,4,5,6,7);
    delay(pauza);

    tecza(7,0,1,2,3,4,5,6);
    delay(pauza);

    tecza(6,7,0,1,2,3,4,5);
    delay(pauza);

    tecza(5,6,7,0,1,2,3,4);
    delay(pauza);

    tecza(4,5,6,7,0,1,2,3);
    delay(pauza);

    tecza(3,4,5,6,7,0,1,2);
    delay(pauza);

    tecza(2,3,4,5,6,7,0,1);
    delay(pauza);

    tecza(1,2,3,4,5,6,7,0);
    delay(pauza);


        }
        
void tecza(int a, int b, int c, int d, int e, int f, int g, int h){ //tworzy metode z wszystkimi kolorami i numerem diody 

    diody.setPixelColor(a,diody.Color(255,0,0));//czerwony
    diody.setPixelColor(b,diody.Color(252,49,2));//pomaranczowy
    diody.setPixelColor(c,diody.Color(252,117,2));//zolty
    diody.setPixelColor(d,diody.Color(0,255,0));//zielony
    diody.setPixelColor(e,diody.Color(0,255,160)); //blekitny
    diody.setPixelColor(f,diody.Color(0,100,252));//niebieski
    diody.setPixelColor(g,diody.Color(0,0,252));//granatowy
    diody.setPixelColor(h,diody.Color(252,0,252));//fioletowy
    diody.show();
      }


 

Link to post
Share on other sites

n%8 , (n+1)%8 itd może pomóc. 

% to reszta z dzielenia całkowitego.

pozdro

PKO

  • Pomogłeś! 1
Link to post
Share on other sites

Witam,

Moglibyście jeszcze rzucić okiem na ten kod? Wydaje mi się, że wszystko jest jak należy. Tęcza przesuwa się po listwie. Dodatkowo starałem się napisać kod tak, aby łatwo można go było dopasować gdyby listwa posiadała powiedzmy 100 diod. Czy mógłby ktoś mi potwierdzić, że niezależnie od liczby diod program będzie działał prawidłowo ?


#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel diody=Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800);

int liczbaDiod=8; // Liczba diod na pasku
int pauza=1000; //pauza pomiedzy sekwencjami


void setup() {
  
  diody.begin();
  diody.show();
        
}

void loop() {


  for(int i=0;i<8;i++){
  
    tecza(i);
    diody.show();
    delay(pauza);
    }
    }



void tecza(int c){ //ustawienine odpowiedniego koloru na n-tej diodzie

  int x;//numer diody programowanej w danym cyklu
  int n; //numer na jaki kolor ma byc zaprogramowana dioda
  for(int i=0;i<liczbaDiod;i++){
     x=i;
  
  //n=(x+1)%8; to dziala. wrocic do tego jezeli sie wykrzaczy
  
     n=(((x+1)%8)+c)%8;
 
  
  switch (n){ 
   case 1:
      diody.setPixelColor(x,diody.Color(255,0,0));//czerwony
       break;
    case 2:
      diody.setPixelColor(x,diody.Color(252,49,2));//pomaranczowy
      break;
    case 3:
      diody.setPixelColor(x,diody.Color(252,117,2));//zolty
      break;
    case 4:
      diody.setPixelColor(x,diody.Color(0,255,0));//zielony
      break;
    case 5:
      diody.setPixelColor(x,diody.Color(0,255,160)); //blekitny
      break;
    case 6:
      diody.setPixelColor(x,diody.Color(0,100,252));//niebieski
      break;
    case 7:
      diody.setPixelColor(x,diody.Color(0,0,252));//granatowy
      break;
    case 0:
      diody.setPixelColor(x,diody.Color(252,0,252));//fioletowy
      break;
}
}  

      }

 

  • Lubię! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.