Skocz do zawartości

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


Pomocna odpowiedź

(edytowany)

Witam,

kolejny świetny odcinek kursu. Zaprogramowałem sekwencję jak z "Nieustraszonego" - to pierwszy element mojego KITT-a 😉. Chciałem po kursie elektroniki zrobić wersję analogową, ale jakoś nie udało mi się kupić jeszcze układu zliczającego. Tutaj w pętli oprócz zaświecania kolejnej diody zaświecam słabiej 2 sąsiednie. Poniżej program i film jak to działa.

#include <Adafruit_NeoPixel.h>

#define pixelsNumber 8
#define ledPin A5

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(pixelsNumber, ledPin, NEO_GRB + NEO_KHZ800);

const uint32_t darkRed = pixels.Color(2, 0, 0);
const uint32_t red = pixels.Color(16, 0, 0);
const uint32_t lightRed = pixels.Color(64, 0, 0);

void setup() {
  pixels.begin();
  for (int i = 0; i < pixelsNumber; i++) {
    pixels.setPixelColor(i, darkRed);
  }
  pixels.show();
}

void loop() {
  for (int i = 0; i < pixelsNumber; i++) {
    turnOn(i);
    delay(100);
    turnOff(i);
  }

  for (int i = pixelsNumber-2; i > 1; i--) {
    turnOn(i);
    delay(100);
    turnOff(i);
  }
}

void turnOn(int position) {
  pixels.setPixelColor(position, lightRed);
  if (position  > 0) {
    pixels.setPixelColor(position - 1, red);
  }
  if (position  < pixelsNumber) {
    pixels.setPixelColor(position + 1, red);
  }
  pixels.show();
}

void turnOff(int position) {
  pixels.setPixelColor(position, darkRed);
  if (position  > 0) {
    pixels.setPixelColor(position - 1, darkRed);
  }
  if (position  < pixelsNumber) {
    pixels.setPixelColor(position + 1, darkRed);
  }
  pixels.show();
}

 

kitt.gif

Edytowano przez Raccoon
  • Lubię! 2

Mam pytanie odnośnie wielkości kondensatora jaki należy podłączyć równolegle z listwą diod do zasilania. W tekście jest napisane

Cytat

 Równolegle z pinami zasilającymi podłączamy kondensator elektrolityczny. Przy tej ilości diod 100uF będzie wystarczające.

Od czego ona zależy i jak? W kursach elektroniki i techniki cyfrowej zwykle do zasilania były wpinane równolegle 2 kondensatory 100nF i 220uF.

(edytowany)

@Raccoon To o czym piszesz nazywa się kondensatorem filtrującym zasilanie albo kondensatorem odsprzęgającym (decoupling capacitor) lub kondensatorem obejściowym (bypass). Stosuje się je aby filtrować zasilanie - czyli odrzucić składową zmienną w sygnale. Co to oznacza?

W sytuacji, gdy na linii zasilania pojawia się spadek napięcia trzeba temu przeciwdziałać. Spadki mogą pochodzić z różnych powodów. Pierwszy to na pewno rezystancja i długość przewodów zasilających (stąd indukcyjność). Dodając większe pojemności np. 100-220uF przeciwdziałasz zmianom napięcia zasilania pochodzącym z zewnątrz od zasilacza i kabli - to jest ten decoupling.

Obok tych większych (elektrolitycznych i tantalowych) kondensatorów pojawiają się często ceramiczne 100nF. Dzieje się tak ponieważ duży kondensator jest za wolny dla niektórych sygnałów. Jeżeli mamy do czynienia z układem cyfrowym, w którym może dojść do szybkiego przełączeń wielu tranzystorów, to mogą pojawić się minimalne ale znaczące spadki napięcia wynikające z przekroczenia wydajności prądowej zasilania (plus rezystancja kabli, indukcyjność itp.). W takiej sytuacji szybki kondensator 100nF (o niskiej szeregowej rezystancji i zastępczej szeregowej indukcyjności) jest w stanie dostarczyć energię lepiej niż główne źródło zasilania - to jest bypass.

Całość tego tematu można związać teorią filtrów cyfrowych i częstotliwości (harmonicznych) w sygnale. Ogólny wzór na tzw. reaktancję czyli opór dla wartości przemiennych (sinusoidalnych) w sygnale to X = 1 / (2πfC) wyrażane w Ω. Sygnał składa się z 2 części - stałem czyli powiedzmy 6 V i zmiennej składającej się z wielu częstotliwości (harmonicznych). Aby odfiltrować (sprowadzić do masy) składowe zmienne trzeba sprawić żeby dla nich reaktancja była możliwie niska - niski opór szybko odprowadzi napięcie do masy. Widać tu że częstotliwość i pojemność są ze sobą powiązane, aby mieć stałą wartość to jedno zwiększamy a drugie zmniejszamy.

Już nie brnąc dalej w temat, pomijając zastępczą szeregową indukcyjność, to 2 zasady:

  • większa pojemność redukuje (filtruje) niskie częstotliwości i umieścić ją możesz raczej dowolnie w obwodzie,
  • niska pojemność redukuje wysokie częstotliwości i umieszcza się możliwie blisko układu scalonego, wymagającego stabilnego napięcia zasilania i generującego krótkie spadki napięcia.

image.thumb.png.4640d5c386a0ed9e463db5a214a7df69.png

Link

Edytowano przez Gieneq
  • Lubię! 1
  • Pomogłeś! 1
(edytowany)

@Gieneq Dzięki za wyczerpujące wyjaśnienia. Rozjaśniłeś mi temat. Ciekawy artykuł podlinkowałeś.

Edytowano przez Raccoon
  • 5 miesiące później...

" Następnie podłączamy sygnał sterujący. W przypadku naszych ćwiczeń będzie to pin A0. Zgodnie z zaleceniami producenta nie robimy tego bezpośrednio. Między wyprowadzenie Arduina, a linijkę diod powinniśmy wpiąć rezystor z zakresu 300-500R "

Na zdjeciu nie widać jak te rezystory są podłączone.  Można prosić o schemat.

hmmm ...ten opis średnio przemawia mi do wyobraźni. Sorry ale nie chciałbym uszkodzić Uno i mimo wszystko poczekam aż ktoś wklei schemat - wtedy będę miał pewność jak to ma być podłączone. dzięki za pomoc
PS: to kurs dla początkujących więc takie pytania jak moje pewnie sie zdarzają  🙂

:) dzięki. teraz rozumiem. Sygnał z A0 przez oporniki do WS2812 . Bo miałem wątpliwość czy może to jakieś podłączenie w stylu  pull-up lub pull-down. 

Dziękuję

12 godzin temu, adam_m napisał:

Bo miałem wątpliwość czy może to jakieś podłączenie w stylu  pull-up lub pull-down.

Niee, to jest zwykłe ograniczenie prądu 🙂 

  • 4 tygodnie później...

Czy można zamiast podłączać każdy kawałek klasycznej diody rgb przez oddzielny rezystor, włożyć tylko jeden rezystor, między wspólną katodę i masę?

21 minut temu, StefanekP napisał:

A czy dołoby się zrobić coś, żeby te programowalne diody świeciły ciemniej

Hm... pytanie dość dziwne, bo jeśli diody są programowalne to trzeba je po prostu odpowiednio zaprogramować (tak jak pokazano w odcinku kursu który komentujesz). O jakie diody konkretnie Ci chodzi?

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...