• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino + ledy ws2812b
#1
Witam,



Od jakiegoś czasu bawię się Arduino (wersja Nano), zrobiłem kilka prostych projektów teraz przyszedł czas na diody Led ws2812b. Trochę czytałem na ten temat ale chciałbym dowiedzieć się coś więcej.



W przypadku gdy mam np 5 pasków led po 1m w jaki sposób należy je podłączyć aby można było sterować wyświetleniem każdego paska niezależnie ? szeregowo (1 wyjście sterujące z Arduino) czy każdy pasek oddzielnie (klika wyjść z Arduino) ?





Finalnie chciałbym zrobić efekt coś ale spadające sople (np. ok 15 równolegle położonych lasków LED)

Trafiłem również na program o nazwie led editor - czy ktoś z Was z niego korzysta ?

Jeżeli mam np. 15 lasków led - położonych równolegle - taki mały ala multiplexing - to czy jest jakiś soft aby np wyświetlić na mi jakiś efekt ? osobiście nie wyobrażam sobie pisania ręcznie wszystkich efektów (klatka po klatce w jaki sposób się ma wyświetlać)

Dziękuje za wskazówki

Pozdrawiam


Załączone pliki Miniatury
       
 
Odpowiedź
#2
(20-10-2019, 12:29)busyboy napisał(a): W przypadku gdy mam np 5 pasków led po 1m w jaki sposób należy je podłączyć aby można było sterować wyświetleniem każdego paska niezależnie ? szeregowo (1 wyjście sterujące z Arduino) czy każdy pasek oddzielnie (klika wyjść z Arduino) ?
Szeregowo.

(20-10-2019, 12:29)busyboy napisał(a): Finalnie chciałbym zrobić efekt coś ale spadające sople (np. ok 15 równolegle położonych lasków LED)
To już nie na AVR a jeśli nawet wybierzesz mocniejszy uC z DMA to nie z bibliotekami Arduino, ale....
to https://forum.atnel.pl/post222192.html#p222192 może rozwiązać problem nawet na AVR ale....
nie ma tego jeszcze w sprzedaży, chyba, że sam zrobisz PCB. Zrobisz?

(20-10-2019, 12:29)busyboy napisał(a): osobiście nie wyobrażam sobie pisania ręcznie wszystkich efektów (klatka po klatce w jaki sposób się ma wyświetlać)
Najpierw to rozwiąż problem 15 pasków LED co daje (przy 1m na pasek) łącznie do 2160 LED zależnie jak gęsto są ułożone (30, 60, 90 czy 144 na metr). Policz sobie, jak wszystko połączysz szeregowo jakie odświeżanie będziesz miał.
Kicha, co? Wiec równolegle ale AVR nie da rady bo nie używa DMA i czy szeregowo czy równolegle jeden ch....  Szukaj więc uC z DMA ale jak wspomniałem biblioteki Arduino są do du...... (jak całe Arduino) więc musisz sam napisać obsługę WS2812 z wykorzystaniem DMA.
Zapomnij o tym, że użyjesz np 15+1 ArduinoUNO. W czasie transmisji do WS2812 zawieszane są przerwania 9choc nie muszą ale Arduino to Arduino, bardziej Gó..ino) więc nie da się odbierać komend sterujących z innego uC przez np UART (chyba, że 2 bajty wystarczą bo takie jest FIFO w AVR). Pomijając problemy z napisaniem softu pozostaje problem ceny. 16 Arduino, nawet klonów to koszt ok 480zł (klony są po ok 30zł). Za 55zł kupisz ORYGINALNĄ płytkę NOCLEO z STM.

I tym miłym akcentem kończę swoje wywody.
Jak wysterujesz 15 pasków to napiszę jak poradzić sobie z efektami ale jeśli to mają być animacje to możesz potrzebować setek kB FLASH. Karta SD może nie wypalić, zwłaszcza jak użyjesz trybu 1-bit (SPI) zamiast 4-bit (to już nie na AVR, nawet Xmega nie pomoże). Karta jest stosunkowo wolna, więc DMA i/lub RTOS, znasz RTOS? Ratunkiem będzie pamięć DataFlash.
Jeśli zrezygnujesz z animacji o której pisałeś, a wygenerujesz efekty on-line, to wtedy nie potrzeba dużo FLASH.


PS
Według mnie porwałeś się z przysłowiową motyką na księżyc. Od razu full LED zamiast najpierw próby jak to działa, jakie są ograniczenia Arduino.
 
Odpowiedź
#3
Witam,

Dziękuje Tobie za informacje i to tak szczegółowe i rozbudowane. Muszę jeszcze bardzo dużo poczytać i się nauczyć w tym temacie po powiem szczerze nic z tego nie rozumiem Sad Może źle się wyraziłem, może faktycznie porywam się z motyką na księżyc - chodzi mi o taki efekt i widzę że jest to zrobione na Arduino UNO

https://www.youtube.com/watch?v=ETl0VXT75oQ
https://www.youtube.com/watch?v=jbNSa695bVo
https://www.youtube.com/watch?v=d4LSNHRiBDE
https://www.youtube.com/watch?v=VtIWN5SJDYo

(link są przykładami tematyki)

Wiem już że paski led muszę połączyć szeregowo. Ale co z metodą wyświetlania konkretnych efektów typu np. węza, spadających sopli, gniazdy itp w jaki sposób można to zrobić ? są gotowe biblioteki czy kod trzeba ręcznie tworzyć ? przejście po przejściu ?

Pozdrawiam
 
Odpowiedź
#4
(20-10-2019, 15:22)busyboy napisał(a): chodzi mi o taki efekt i widzę że jest to zrobione na Arduino UNO
https://www.youtube.com/watch?v=ETl0VXT75oQ
https://www.youtube.com/watch?v=jbNSa695bVo
https://www.youtube.com/watch?v=d4LSNHRiBDE
https://www.youtube.com/watch?v=VtIWN5SJDYo
W linkach nie masz blisko 3000 LED. Wtedy nie ma problemu, nawet UNO to obsłuży i .... niewiele więcej (zawieszanie przerwań). Jest sposób na to ale obciążenie AVRka osiąga 80..90% (czytaj Elektronike dla wszystkich, tam będzie to dokładnie wyjaśnione i będą kody źródłowe) bo problemem sa IRQ RX z innych UART.

(20-10-2019, 15:22)busyboy napisał(a): Wiem już że paski led muszę połączyć szeregowo. Ale co z metodą wyświetlania konkretnych efektów typu np. węza, spadających sopli, gniazdy itp w jaki sposób można to zrobić ? są gotowe biblioteki czy kod trzeba ręcznie tworzyć ? przejście po przejściu ?
Efekty, która przytoczyłeś w linkach nie są generowane jako animacja tylko "matematycznie". Tu nie ma możliwosci wrzucić filmów, mam gdzies na YT . Jak znajdę link to umieszczę na forum.
Czy są gotowe libs? Wątpię bo jest to dość łatwe a jednocześnie liczba efektów ogromna i ciężko napisać libs, która zadowoli choćby 5% użytkowników. Szukaj w przykładach dla WS281x.


PS
Co do ewentualnego multipleksowania pasków. Można to zrobić ale ma to sens, na beznadziejnym ArduinoUNO i podobnych. Zysk może być taki, że LED łączy się w gwiazdę (sterownik na środku). Innych korzyści nie widzę.
 
Odpowiedź
#5
Witam,

Odgrzewam temat bo już próbowałem na wszystkie możliwe sposoby i nic Sad (wszystkie możliwe biblioteki oraz przykłady które znalazłem w necie)

Mam Arduino Nano oraz lasek ledowy WS2812 - i w żaden ale to w żaden sposób ten pasek ledowy nie świeci tak jak powinien - jednym słowem jak mu pasuje. Pasek działa poprawnie, jest podłączony pod mocny zasilacz (jeżeli chodzi o napięcie listy to jest ok). Np poniższy kod :

Kod:
#include <FastLED.h>

// How many leds in your strip?
#define NUM_LEDS 30

#define DATA_PIN 11
#define CLOCK_PIN 13

// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
      FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
}

void loop() {
  // Turn the LED on, then pause
  leds[0] = CRGB::Red;
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[0] = CRGB::Black;
  FastLED.show();
  delay(500);
}

Pasek Led świeci ale nie tak jak w kodzie Sad

[Obrazek: 20191208-005032.jpg]

Proszę o pomoc - co robię nie tak bo już nie mam zielonego pojęcia Sad
 
Odpowiedź
#6
Piszesz o WS2812 a w kodzie masz
Kod:
#define DATA_PIN 11
#define CLOCK_PIN 13
W końcu sterujesz WS2812 czy WS2801?

Podłącz oscyloskop lub analizator logiczny do linii data WS2812 i pokaż co tam masz.
 
Odpowiedź
#7
@busyboy, bardzo dobrze że zaczynasz od sterowania jedną diodą - to bardzo dobre podejście Smile
W każdym razie proponowałbym zmienić bibliotekę na coś sprawdzonego, np. od Adafruit. Kiedyś używałem tej biblioteki z shieldem dla Arduino i wszystko działało jak należy.
Warto też sprawdzić czy na pewno masz wybrany odpowiedni moduł arduino przy kompilacji szkicu.
 
Odpowiedź
#8
Witam ponownie,

Użyłem najłatwiejszego kodu jaki mogłem znaleźć, pasek led WS2812B 30 led, pin sterujący 11

Kod:
    #include <Adafruit_NeoPixel.h>
    
    #define PIN    11
    #define N_LEDS 30
    
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_RGB + NEO_KHZ400);
    
    void setup() {
      strip.begin();
    }
    
    void loop() {
      chase(strip.Color(255, 0, 0)); // Red
      chase(strip.Color(0, 255, 0)); // Green
      chase(strip.Color(0, 0, 255)); // Blue
    }
    
    static void chase(uint32_t c) {
      for(uint16_t i=0; i<strip.numPixels()+4; i++) {
          strip.setPixelColor(i  , c); // Draw new pixel
          strip.setPixelColor(i-4, 0); // Erase pixel a few steps back
          strip.show();
          delay(25);
      }
    }

Niestety efekt jest takim sam Sad

 
Odpowiedź
#9
Skoro kod od Adafruit nie działa to coś jest nie tak z ledami, albo samym Arduino. Z tej biblioteki korzysta tak dużo osób ze raczej błędu trzeba szukać gdzie indziej. Proponuję sprawdzić jakie masz Arduino, jak taktowany jest zegar i czy na pewno odpowiada to wybranym opcjom. Jeśli masz inną płytkę Arduino, najlepiej inny model, też warto sprawdzić czy działa. Kolejna sprawa to - czy to na pewno masz
ws2812? Masz może jakies inne programowalne diody, np shield do Arduino, albo tani moduł LED np. https://botland.com.pl/pl/lancuchy-i-mat...results=38 ?

Sent from my Pixel 2 XL using Tapatalk
 
Odpowiedź
#10
Arduino nano kupiłem na Aliexpress (https://pl.aliexpress.com/item/323418328...5c0fpSdW2U) i to nie pierwszy raz, zawsze wszystko było ok z arduino przy innych projektach. Paski led tak samo, na Aliexpress (https://pl.aliexpress.com/item/203681916...5c0f3dRnMz) i to nie jeden a kilka - każdy zachowuje się tak samo.

Może coś nie tak jest z ustawianiem modelu arduino z mojej strony ? może trzeba zmienić taktowanie ? nie mam bladego pojęcia

[Obrazek: arduino.png]
Mam jeszcze diody led ws2811 - https://pl.aliexpress.com/item/326250118...5c0fHaH8S5 - w tym przypadku jest taka sama sytuacja Sad
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości